怎样使用 Tripwire 来检测 Ubuntu VPS 服务器的入侵

介绍

当管理联网服务器时,服务器的安全是一个非常复杂的问题。尽管可以配置防火墙、设置日志策略、购买安全服务或者锁定应用,如果你想确保阻止每次入侵这远远不够。

一个 HIDS 可以收集你电脑的文件系统和配置,存储这些信息用来参考和判断系统当前的运行状态。如果在已知安全的状态和当前状态之间发生了改动,就表明可能已经并不安全了。

Linux 下一个流行的 HIDS 是 Tripwire。这个软件可以跟踪许多不同的文件系统数据,以检测是否发生未经授权的更改。

在本文中,我们将讨论如何在 Ubuntu 12.04 上安装和配置 Tripwire。由于 IDS 的特性,最好在创建服务器不久后就运行 IDS,以便可以确定文件系统是没有问题的。

安装 Tripwire

幸运的是,Tripwire 已经在 Ubuntu 的默认存储库中。我们可以使用apt-get来安装 Tripwire:

sudo apt-get update
sudo apt-get install tripwire

在经过需要的相当多的包依赖的配置后就可以运行了。

首先,你要配置推送依赖的邮件应用程序。如果你想配置电子邮件通知,请选择 Internet Site

它会询问你是否想在安装过程中配置密码,对这些提示都选择yes。它会询问你是否想要重新生成配置文件,选yes。对于策略文件一样选yes。

接下来你将要被要求输入site key。Tripwire使用两个密钥来确保配置文件的安全:

Site key这个密钥被用来确保配置文件的安全,我们需要确认配置文件没有被修改过,这直接导致了整个监测系统的结果是否可信。相同的配置文件可以在不同的服务器上使用,site key也可以在不同的服务器上使用。

Local key这个密钥用来确认是用户授权运行。

你会先输入 site key 然后是 local key,推荐使用强密码。

初始化数据库

安装完成之后,你必须初始化数据库。就像大多数安全程序一样,tripwire自带默认配置。也许你需要定制自己的规则,这就要修改默认设置了。

首先,如果你没有选择在安装时创建一个策略,你可以通过以下命令来创建一个:

Sudo twadmin –create-polfile /etc/tripwire/twpol/txt

你必须提供在配置时输入的site key才能执行。

这将会在我们指定的目录(/etc/tripwire)中,根据一个纯文本文件创建一个加密的策略文件。在 Tripwire 运行时会检查这个文件。

现在我们可以初始化 Tripwire 的数据库来确认我们的系统。这次将只会检查策略文件中我们特别指定的那些关键点。

因为该策略文件并不是为我们的系统定制的,所以我们会看到很多警告和错误。我们把这些错误当作调整我们配置文件时的参考。

初始化数据库的基本方法是:

Sudo tripwire –init

这将会创建我们的数据库文件,还有那些我们必须在调整配置时参考的错误。

我们想要保存配置后的结果,可以把他们保存到 tripwire 配置目录下的一个文件中。我们可以执行check,并且把文件列表存入在 tripwire 配置目录中的 test_results 文件中。

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中的文件,注释掉所有你找到的匹配中的那些行。

在“Boot Script”部分,你应该注释掉/etc/rc.boot这一行,因为这在Ubuntu系统中并不存在。

(
  rulename = "Boot Scripts",
  severity = $(SIG_HI)
)
{
        /etc/init.d             -> $(SEC_BIN) ;
        #/etc/rc.boot            -> $(SEC_BIN) ;
        /etc/rcS.d              -> $(SEC_BIN) ;

有许多文件在/root目录下,这在我的系统中应该被注释掉,只要在你的系统中没有的东西都应该被注释掉。

(
  rulename = "Root config files",
  severity = 100
)
{
        /root                           -> $(SEC_CRIT) ; # Catch all additions to /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 ; # Changes Inode number on login
        #/root/.ICEauthority            -> $(SEC_CONFIG) ;
}

应该检查的最后一部分是在/proc文件系统中出错的文件描述符。这些文件时刻更改,如果我们不在配置文件中删除,将会定期触发误报。

在“Devices & Kernel information”中,你可以看到要检查的/proc文件系统检查的列表。

(
  rulename = "Devices & Kernel information",
  severity = $(SIG_HI),
)
{
        /dev            -> $(Device) ;
        /proc           -> $(Device) ;
}

然而,我们并不希望它检查目录下的每一个文件,我们要为/proc下的所有目录配置不需要检查。

{
        /dev                    -> $(Device) ;
        #/proc                  -> $(Device) ;
        /proc/devices           -> $(Device) ;
        /proc/net               -> $(Device) ;
        /proc/tty               -> $(Device) ;
        /proc/sys               -> $(Device) ;
        /proc/cpuinfo           -> $(Device) ;
        /proc/modules           -> $(Device) ;
        /proc/mounts            -> $(Device) ;
        /proc/dma               -> $(Device) ;
        /proc/filesystems       -> $(Device) ;
        /proc/interrupts        -> $(Device) ;
        /proc/ioports           -> $(Device) ;
        /proc/scsi              -> $(Device) ;
        /proc/kcore             -> $(Device) ;
        /proc/self              -> $(Device) ;
        /proc/kmsg              -> $(Device) ;
        /proc/stat              -> $(Device) ;
        /proc/loadavg           -> $(Device) ;
        /proc/uptime            -> $(Device) ;
        /proc/locks             -> $(Device) ;
        /proc/meminfo           -> $(Device) ;
        /proc/misc              -> $(Device) ;
}

当我们在文件这个部分时,我们也想要对/dev/pts文件系统做些事情。Tripwire默认不会检查这个目录,为了让tripwire也检查这个目录,我们可以显式的指定:

{
        /dev                    -> $(Device) ;
        /dev/pts                -> $(Device) ;
        #/proc                  -> $(Device) ;
        /proc/devices           -> $(Device) ;
        /proc/net               -> $(Device) ;
        /proc/tty               -> $(Device) ;
        . . .

最后一件事儿是要注释掉/var/run和/var/lock的所在行,使我们的系统不会因为系统的正常服务更改而产生标记。

(
  rulename = "System boot changes",
  severity = $(SIG_HI)
)
{
        #/var/lock              -> $(SEC_CONFIG) ;
        #/var/run               -> $(SEC_CONFIG) ; # daemon PIDs
        /var/log                -> $(SEC_CONFIG) ;
}

当你完成这些编辑之后保存并关闭文件。

现在我们的配置文件就修改好了,我们需要重新创建一个加密的策略文件来让tripwire能够读取使用:

sudo twadmin -m P /etc/tripwire/twpol.txt

创建之后,我们必须重新初始化数据库以执行我们的策略:

sudo tripwire –init

之前得到的警告现在应该都没有了。如果还有警告,你就要编辑/etc/tripwire/twpol.txt文件直到警告完全消失。

检验配置

如果你的数据库初始化没有报错,配置文件就和你的系统相匹配了。但是我们应该运行一下Check来看看是否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:

Sudo tripwire --check | mail –s “Tripwire report for ‘uname –n’” [email protected]

很快你的邮箱将会收到一封报告,关于刚刚安装软件的详细信息。这表明,Tripwire可以把文件系统的更改通过邮件发送给我们了。

我们现在应该进行更新数据库进行交互检查,通过以下命令:

sudo tripwire --check --interactive

这是和平时相同的运行测试,但是最后不会输出到屏幕,而是生成文本文件在默认编辑器中打开。

这份报告会包含每一个文件更改的全部细节。事实上,在我的机器上,报告通常有2275行那么长。其中大量的信息对于解决安全问题相当有帮助,但是对于我们来说,我们对其大部分都不感兴趣。

最重要的部分都在顶部,在一些介绍信息后,你应该能看到表明新增或修改的复选框。

这些复选框表明你需要更新数据库,以完成这些更改。你应该搜索每一个带有×的复选框,然后确认这些更改是否经过你的同意。

如果你不认可这些更改,就把×删除。数据库的文件将不会更新,这将导致下次报告时tripwire还会报告这次标记。

在你决定好哪些文件需要更改后,保存并关闭这个文件。

这它会要求你输入local key以便tripwire可以更新数据库文件。

如果我们在接受这些更改之后再次运行命令,报告肯定会更短。

用Cron使Tripwire自动化

现在我们已经可以手动让这些功能运行,我们也可以设置定时任务让tripwire可以每天早上都执行检查。

我们要使用root的定时任务,因为编辑系统定时任务可以不包括系统更新。

可以提供过以下命令来确认root是否已经存在定时任务:

sudo crontab -l

如果定时任务已经存在,你应该把这个任务通过管道备份一下:

sudo sh -c ‘crontab -l > crontab.bad‘

之后我们可以编辑这个定时任务:

sudo crontab -e

如果这是你第一次运行定时任务,它会问你希望用哪个编辑器打开。如果你没有习惯的编辑器,nano也是个不错的选择。

打开文件后,我们就可以定制自动化的Tripwire了。因为我们只需要tripwire每天运行,我们只需要设置启动时间就够了。

通常服务会在非繁忙时段运行以免干扰繁忙时段。

我们需要使用的命令格式是 min hour * * * command。这个命令和我们之前配置邮件发送报告使用的是一个命令。此时运行的就是root所以我们不需要使用sudo。

为了让tripwire在每天上午3:30运行,我们可以这么写:

30 3 * * * /usr/sbin/tripwire --check | mail -s "Tripwire report for `uname -n`" [email protected]

你可以根据你的需要进行调整。

结语

你现在拥有了一个自动的入侵检测系统,它会向您发送您文件系统上的更改报告。你应该定期检查通过电子邮件发送的报告监控出现的更改。无论是发现可疑的活动还是正常的更改,都应该升级Tripwire的数据库。

原文地址https://www.digitalocean.com/community/tutorials/how-to-use-tripwire-to-detect-server-intrusions-on-an-ubuntu-

时间: 2024-11-15 22:07:06

怎样使用 Tripwire 来检测 Ubuntu VPS 服务器的入侵的相关文章

Tripwire强大的服务器文件完整性监测系统-检测并报告服务器入侵

Tripwire是一个开源的功能强大的服务器文件完整性监测系统,利用各个文件的数字签名前后之间的对比 ,从而得出系统中的文件是否被人篡改过.Tripwire强大之处在于利用MD5和SNCFRN加密手段来生成文件的数字签名,任何文件改动的痕迹都能察觉. 如果你怀疑服务器遭到黑客攻击过,在多数情况下,黑客可能对系统文件等等一些重要的文件进行修改,这时Tripwire就可以生成文件变动的详细报告了.同时,为了防止Tripwire自身的文件也被人动手脚,我们可以将Tripwire的数字签名数据库.Tri

购买 Linux VPS 服务器后简单的安全设置

一.关闭 SSH 密码登陆 首先,你需要有自己的 SSH Key,如果你使用 Windows 系统,可以用 Putty 下的 PUTTYGEN.EXE 生成私匙和公匙. 第一步,运行 PUTTYGEN.EXE 一般,我们选择默认的 RSA 加密即可,默认的 1024 位加密足够用,如果要保险点,可以选择 2048 或 4096 位加密,如图红圈处: 第二步,点击 Generate ,然后鼠标随意在空白处移动 等进度条满了,就生成好你的 SSH Key 了: 如果要更安全一点,可以设置Key Pa

VPS服务器购买和搭建SSR详细教程

自建ss服务器教程 教程很简单,整个教程分三步: 第一步:购买VPS服务器 第二步:一键部署VPS服务器 第三步:一键加速VPS服务器 (谷歌BBR加速或锐速加速:对速度要求不高的话,此步骤可省略) ------------------------------------------------------------------------------------------------------------------------------------------------------

如何测试美国VPS服务器的速度和稳定性

很多用户在选择美国VPS服务器的时候,会考虑很多方面的因素,比如价格,商家的稳定性,服务器配置等,其中对于服务器的速度也是蛮重要的,如果在建站后,选择的服务器速度很差,再便宜,我们也不要去选择,那么我们在选择服务器的时候,如果测试它的速度和稳定性呢? 第一,自己和用户的体验一般在购买美国VPS服务器后,打开网站用自己的使用体验一下感觉,我们自己打开网站的速度如何,让各地的网友打开反馈一下给予一些建议.一般来说,客户的使用才是真实的反馈,各种工具的测试仅仅用作参考. 第二,Ping速度测试我们会通

Firefox 检测到该服务器正在将此地址的请求循环重定向。     此问题可能是因为禁用或拒绝 Cookie 导致。

今天在做phpcookie的实验,按照例子在做,一切都没有问题,就是账户退出上出现了问题. 问题:点击退出后,从logout.php 回到 login.php 这个页面. 在logout.php这个页面中,主要是删除cookie:代码如下 <?php /** * * logout.php */ //删除userName和userId两个cookie:使cookie的有效期早于现在 setcookie("userName",time()-1); setcookie("us

搭建本地Ubuntu 镜像服务器

一.需求分析能不能在局域网搭建一个Ubuntu 镜像服务器,这样作的好处是可以节省Ubuntu某些常用工具的安装时间. 二.部署过程 2.1 测试环境目前在公司内有一台能连接到外网的Ubuntu机器, IP : 192.168.8.173 ,Ubuntu版本为Ubuntu 9.04 i686. 2.2 搭建步骤为了创建Ubuntu mirror 服务器,最少需要60G硬盘空间,Ubuntu每个版本都有32 bit和64 bit两个版本,有两组deb包.当然可以创建Ubuntu一个版本的32 bi

Ubuntu ssh服务器和客户端的安装和使用

1. 安装服务器端 sudo apt-get install openssh-server 确认是否开启ssh ps -e| grep ssh 如果有sshd进程表示启动了. 配置文件 /etc/ssh/sshd_config 2. 启动.停止.重启 启动 sudo /etc/init.d/ssh start 停止 sudo /etc/init.d/ssh stop 重启 sudo /etc/init.d/ssh restart 退出ssh exit 3. 客户端登录 SecureCRT 5.1

Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化

Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化  大 | 中 | 小  [ 2008-10-28 16:55 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2008.10.28 转载请注明原文链接:http://blog.zyan.cc/post/375/] VPS(全称Virtual Private Server)是利用最新虚拟化技术在一台物理服务器上创建多个相互隔离的虚拟私有主机.它们以最

ubuntu samba服务器

一. samba的安装: sudo apt-get undate sudo apt-get insall sambasudo apt-get install smbfs 二. 创建共享目录: mkdir /home/phinecos/sharesodu chmod 777 /home/phinecos/share 三. 创建Samba配置文件: 1. 保存现有的配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 2. 修改现配置文件