状态: 已弃用
本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.
请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。
介绍
管理在线服务器时,安全性是一个非常复杂的问题。 虽然可以配置防火墙、fail2ban 策略、安全服务和锁定应用程序,但很难确定您是否有效阻止了每一次攻击。
基于主机的入侵检测系统 (HIDS) 通过收集有关计算机文件系统和配置的详细信息来工作。 然后它存储此信息以引用和验证系统的当前状态。 如果在已知良好状态和当前状态之间发现更改,则可能表明您的安全性已受到威胁。
Linux 上流行的基于主机的入侵检测系统是 tripwire。 该软件可以跟踪许多不同的文件系统数据点,以检测是否发生了未经授权的更改。
在本文中,我们将讨论如何在 Ubuntu 12.04 安装中安装和配置tripwire。 由于入侵检测系统的性质,最好在创建服务器后立即运行本指南,以便验证文件系统是否干净。
安装绊线
幸运的是,可以在 Ubuntu 的默认存储库中找到tripwire。 我们可以通过输入 apt-get
来安装它:
sudo apt-get update sudo apt-get install tripwire
此安装将运行大量所需的软件包配置。
首先,它会将被拉入的邮件应用程序配置为依赖项。 如果要配置电子邮件通知,请选择“互联网站点”。
它会询问您是否要在安装过程中选择密码。 对这两个提示选择“是”。 它会询问是否可以重建配置文件。 选择“是”。 它将询问有关策略文件的类似问题。 再次,回答“是”。
接下来,您将被要求选择并确认站点密钥密码。 Tripwire 使用两个密钥来保护其配置文件。
- 站点密钥:此密钥用于保护配置文件。 我们需要确保配置文件没有被修改,否则我们的整个检测系统就不能被信任。 由于相同的配置文件可以用于多个服务器,因此该密钥可以跨服务器使用。
- 本地密钥:此密钥在每台机器上用于运行二进制文件。 这是必要的,以确保我们的二进制文件在未经我们同意的情况下不会运行。
您将首先选择并确认站点密钥的密码,然后是本地密钥。 确保选择强密码。
初始化数据库
安装后,您必须初始化和配置您的安装。 与大多数安全程序一样,tripwire 附带通用但严格的默认设置,可能需要针对您的特定安装进行微调。
首先,如果您在安装过程中没有选择“是”来创建策略文件,您现在可以通过发出以下命令来创建:
sudo twadmin --create-polfile /etc/tripwire/twpol.txt
系统将提示您输入之前配置的站点密码。
这会根据我们在 /etc/tripwire/
目录中指定的纯文本文件创建一个加密的策略文件。 此加密文件是tripwire 在运行检查时实际读取的内容。
我们现在可以初始化tripwire 将用来验证我们的系统的数据库。 这使用我们刚刚启动的策略文件并检查其中指定的点。
因为这个文件还没有为我们的系统量身定做,所以我们会有很多警告、误报和错误。 稍后我们将使用这些作为参考来微调我们的配置文件。
初始化数据库的基本方法是运行:
sudo tripwire --init
这将创建我们的数据库文件并抱怨我们必须在配置中调整的内容。
因为我们想保存结果以通知我们的配置决策,所以我们可以抓取任何提到文件的实例,并将其放在tripwire 配置目录中的文件中。 我们可以运行检查并将列出的文件放入tripwire配置目录中名为test_results
的文件中:
sudo sh -c 'tripwire --check | grep Filename > test_results'
如果我们查看这个文件,我们应该会看到如下所示的条目:
less /etc/tripwire/test_results
Filename: /etc/rc.boot Filename: /root/mail Filename: /root/Mail Filename: /root/.xsession-errors . . .
配置策略文件以匹配您的系统
现在我们有了一个触发tripwire的文件列表,我们可以查看我们的策略文件并对其进行编辑以消除这些误报。
使用 root 权限在编辑器中打开纯文本策略:
sudo nano /etc/tripwire/twpol.txt
搜索 test_results
文件中返回的每个文件。 注释掉您找到匹配的所有行。
在“引导脚本”部分,您应该注释掉 /etc/rc.boot
行,因为这在 Ubuntu 系统中不存在:
(规则名=“启动脚本”,严重性=$(SIG_HI)){/etc/init.d->$(SEC_BIN); # /etc/rc.boot -> $(SEC_BIN) ; /etc/rcS.d -> $(SEC_BIN) ;
/root
主目录中有很多文件需要在我的系统上注释掉。 应将系统上不存在的任何内容注释掉:
(规则名=“根配置文件”,严重性=100){/root->$(SEC_CRIT); # 捕获所有添加到 /root #/root/mail -> $(SEC_CONFIG) ; #/root/Mail -> $(SEC_CONFIG) ; #/root/.xsession-errors -> $(SEC_CONFIG) ; #/root/.xauth -> $(SEC_CONFIG) ; #/root/.tcshrc -> $(SEC_CONFIG) ; #/root/.sawfish -> $(SEC_CONFIG) ; #/root/.pinerc -> $(SEC_CONFIG) ; #/root/.mc -> $(SEC_CONFIG) ; #/root/.gnome_private -> $(SEC_CONFIG) ; #/root/.gnome-desktop -> $(SEC_CONFIG) ; #/root/.gnome -> $(SEC_CONFIG) ; #/root/.esd_auth -> $(SEC_CONFIG) ; #/root/.elm -> $(SEC_CONFIG) ; #/root/.cshrc -> $(SEC_CONFIG) ; /root/.bashrc -> $(SEC_CONFIG) ; #/root/.bash_profile -> $(SEC_CONFIG) ; #/root/.bash_logout -> $(SEC_CONFIG) ; /root/.bash_history -> $(SEC_CONFIG) ; #/root/.amandahosts -> $(SEC_CONFIG) ; #/root/.addressbook.lu -> $(SEC_CONFIG) ; #/root/.addressbook -> $(SEC_CONFIG) ; #/root/.Xresources -> $(SEC_CONFIG) ; #/root/.Xauthority -> $(SEC_CONFIG) -i ; # 登录时更改 Inode 编号#/root/.ICEauthority -> $(SEC_CONFIG) ; }
我检查的最后一部分是抱怨 /proc
文件系统中的文件描述符。 这些文件一直在变化,因此如果我们保持配置不变,就会定期触发误报。
在“设备和内核信息”部分,您可以看到/proc
列出要检查的文件系统。
( rulename = "Devices & Kernel information", severity = $(SIG_HI), ) { /dev -> $(Device) ; /proc -> $(Device) ; }
但是,这将检查它下面的每个文件。 我们并不特别想要那样。 相反,我们将删除此规范,并为我们 do 想要检查的 /proc
下的所有目录添加配置选项:
{ /dev -> $(设备) ; #/proc -> $(设备) ; /proc/devices -> $(设备) ; /proc/net -> $(设备) ; /proc/tty -> $(设备) ; /proc/sys -> $(设备) ; /proc/cpuinfo -> $(设备) ; /proc/modules -> $(设备) ; /proc/mounts -> $(设备) ; /proc/dma -> $(设备) ; /proc/filesystems -> $(设备) ; /proc/interrupts -> $(Device) ; /proc/ioports -> $(设备) ; /proc/scsi -> $(设备) ; /proc/kcore -> $(设备) ; /proc/self -> $(设备) ; /proc/kmsg -> $(设备) ; /proc/stat -> $(设备) ; /proc/loadavg -> $(设备) ; /proc/uptime -> $(设备) ; /proc/locks -> $(设备) ; /proc/meminfo -> $(设备) ; /proc/misc -> $(设备) ; }
当我们在文件的这一部分中时,我们还想对 /dev/pts
文件系统做一些事情。 默认情况下,Tripwire 不会检查该位置,因为它被告知检查 /dev
,并且 /dev/pts
位于单独的文件系统上,除非指定,否则它不会进入。 为了让tripwire也能检查它,我们可以在这里明确命名它:
{ /dev -> $(设备) ; /dev/pts -> $(设备) ; #/proc -> $(设备) ; /proc/devices -> $(设备) ; /proc/net -> $(设备) ; /proc/tty -> $(设备) ; . . .
我们将注释掉的最后一件事是 /var/run
和 /var/lock
行,这样我们的系统就不会标记服务对文件系统的正常更改:
( rulename = “系统启动更改”, severity = $(SIG_HI) ) { #/var/lock -> $(SEC_CONFIG) ; #/var/run -> $(SEC_CONFIG) ; # 守护进程 PIDs /var/log -> $(SEC_CONFIG) ; }
完成编辑后保存并关闭文件。
现在我们的文件已经配置好了,我们需要通过重新创建tripwire实际读取的加密策略文件来实现它:
sudo twadmin -m P /etc/tripwire/twpol.txt
创建后,我们必须重新初始化数据库以实现我们的策略:
sudo tripwire --init
Please enter your local passphrase: Parsing policy file: /etc/tripwire/tw.pol Generating the database... *** Processing Unix File System *** Wrote database file: /var/lib/tripwire/tripit.twd The database was successfully generated.
您之前收到的所有警告现在都应该消失了。 如果仍然有警告,您应该继续编辑您的 /etc/tripwire/twpol.txt
文件,直到它们消失。
验证配置
如果您的数据库初始化没有抱怨任何文件,那么您的配置此时应该与您的系统匹配。 但是我们应该检查一下tripwire报告的样子,以及是否真的没有警告:
检查的基本语法是:
sudo tripwire --check
您应该会在屏幕上看到一个报告输出,指出您的系统上没有发现错误或更改。
一旦完成,您就可以确信您的配置是正确的。 我们应该稍微清理一下我们的文件,以从我们的系统中删除敏感信息。
我们可以删除我们创建的 test_results
文件:
sudo rm /etc/tripwire/test_results
我们可以做的另一件事是删除实际的纯文本配置文件。 我们可以安全地执行此操作,因为它们可以使用我们的密码从加密文件中随意生成。
重新生成纯文本文件所需要做的就是将加密文件传递给 twadmin,这与我们生成加密版本的方式非常相似。 我们只是再次将其通过管道传输到纯文本文件中:
sudo sh -c 'twadmin --print-polfile > /etc/tripwire/twpol.txt'
现在通过将文本版本移动到备份位置然后重新创建它来测试它:
sudo mv /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak sudo sh -c 'twadmin --print-polfile > /etc/tripwire/twpol.txt'
如果它工作正常,您现在可以安全地删除纯文本文件:
sudo rm /etc/tripwire/twpol.txt sudo rm /etc/tripwire/twpol.txt.bak
设置电子邮件通知
我们会将tripwire 配置为每天运行,并实现自动通知。 在此过程中,我们可以测试当我们对系统进行更改时如何更新数据库。
我们将使用 mail
命令将通知邮寄到我们的电子邮件地址。 目前我们的系统上没有安装它,所以我们必须从存储库中下载它。
这为我们提供了一个很好的机会来了解tripwire 如何对系统中的变化做出反应。
像这样安装文件:
sudo apt-get install mailutils
现在我们已经安装了该命令,让我们测试一下我们的系统是否能够邮寄一份tripwire 报告。 该报告也会有警告和更改,因为我们只是安装了新软件而没有告诉tripwire:
须藤绊线--检查 | mail -s “Tripwire 报告uname -n ”你的电子邮件 @领域 .com
您应该很快会在您的电子邮件中收到一份报告,其中包含您刚刚安装的用于发送邮件的新邮件软件的详细信息! 这很好。 这意味着tripwire 正在接收文件系统中的更改,并且我们的邮件软件也在正常工作。
我们现在应该通过交互式检查更新数据库来“确定”我们所做的软件更改。
我们可以通过键入:
sudo tripwire --check --interactive
这将像平常一样运行相同的测试,但最后不是将报告输出到屏幕上,而是将其复制到文本文件中并使用默认编辑器打开。
该报告详细介绍了每个更改的文件。 事实上,在我的机器上,生成的报告有 2,275 行长。 在发生真正的安全问题时,这些信息量非常有用,但在我们的案例中,大部分情况下它通常可能不太有趣。
重要的部分靠近顶部。 在一些介绍性信息之后,您应该会看到一些带有复选框的行,其中包含每个添加或修改的文件:
Rule Name: Other binaries (/usr/sbin) Severity Level: 66 ------------------------------------------------------------------------------- Remove the "x" from the adjacent box to prevent updating the database with the new values for this object. Added: [x] "/usr/sbin/maidag" Modified: [x] "/usr/sbin" . . .
这些复选框表明您要更新数据库以允许这些更改。 您应该搜索其中包含“x”的每个框,并验证这些是您所做的更改或可以接受的更改。
如果您对更改不满意,可以从框中删除“x”,该文件将不会在数据库中更新。 这将导致该文件在下次运行时仍标记tripwire。
在您确定哪些文件更改是可以的后,您可以保存并关闭文件。
此时,它将询问您的本地密码,以便tripwire 可以更新其数据库文件。
如果我们接受了所有的更改,如果我们重新运行这个命令,那么现在报告应该会更短,并且不会列出任何更改。
使用 Cron 自动化 Tripwire
现在我们已经验证了所有这些功能都是手动工作的,我们可以设置一个 cron 作业来每天早上执行一次tripwire 检查。
我们将使用 root 的 crontab,因为对系统 cronjob 的编辑可能会因系统更新而消失。
通过发出以下命令检查 root 是否已经有一个 crontab:
sudo crontab -l
如果存在 crontab,则应将其通过管道传输到文件中以进行备份:
sudo sh -c 'crontab -l > crontab.bad'
之后,我们可以通过键入以下内容来编辑 crontab:
sudo crontab -e
如果这是您第一次运行 crontab,它会询问您希望使用哪个编辑器。 如果您不喜欢其他编辑器,nano 通常是一个安全的选择。
之后,您将被带到一个文件,我们可以在其中自动化tripwire。 由于我们将每天运行tripwire,我们只需要决定我们希望它运行的时间。 通常,服务在非高峰时间运行,以免干扰繁忙时间。
我们需要使用的格式是min hour * * * command
。 我们要使用的命令与我们之前用于邮寄报告的命令相同。 我们不需要使用 sudo,因为它将以 root 身份运行。
要让tripwire 每天凌晨3:30 运行,我们可以在文件中放置这样的一行:
30 3 * * * /usr/sbin/tripwire --check | mail -s “Tripwire 报告uname -n ”你的电子邮件 @领域 .com
您可以根据自己的喜好进行调整。
结论
您现在应该有一个自动入侵检测系统,可以向您发送有关文件系统更改的报告。 您应该定期查看通过电子邮件发送的报告,并在检测到更改时采取措施,更新tripwire 数据库以确认更改,或调查可疑活动。