介绍
OSSEC 是一个开源的、基于主机的入侵检测系统 (HIDS),它执行日志分析、完整性检查、Windows 注册表监控、rootkit 检测、基于时间的警报和主动响应。
它是您可以安装在服务器上的最重要的安全应用程序之一,它可以用于以客户端/服务器或代理/服务器方式监控一台或数千台机器。 如果配置正确,OSSEC 可以通过向任意数量的已配置电子邮件地址发送电子邮件警报,让您了解服务器上发生的情况。
本教程将向您展示如何安装和配置 OSSEC 以监控运行 FreeBSD 10.1 的 DigitalOcean Droplet。 除了 OSSEC 用于用户访问和完整性检查的默认规则集外,我们还将配置其他规则,以便如果文件被修改或添加到系统中,OSSEC 将通过电子邮件通知您。
以下是 OSSEC 发送的警报类型示例:
OSSEC HIDS Notification. 2015 Jan 25 11:42:49 Received From: liniverse->syscheck Rule: 551 fired (level 7) -> "Integrity checksum changed again (2nd time)." Portion of the log(s): Integrity checksum changed for: '/usr/local/etc/ssmtp/ssmtp.conf' Size changed from '1367' to '1384' What changed: 36c36,37 < UseTLS=YES --- #UseTLS=YES UseSTARTTLS=YES Old md5sum was: '39f219a7db9987c3623d5a2f7511dfc1' New md5sum is : '9971ecc1b0c744ee3f744255248e7c11' Old sha1sum was: 'fc945ffc84b243cd36f8dd276f99c57f912f902b' New sha1sum is : '1289fe0008a3d8bf74db8f73c09bf18db09572cc' --END OF NOTIFICATION
注意: OSSEC 目前只能在 Linux 和 Windows 上实时报警。 FreeBSD 上的实时警报仍在进行中,因此,文件删除警报在 FreeBSD 上不起作用。
先决条件
OSSEC 需要在系统上启用防火墙以实现其主动响应功能。 服务器保持准确的时间也很重要,这需要启用 NTP。 最后,需要设置服务器的时区——默认为 UTC。
因此,对于本教程,您将需要:
- 运行 FreeBSD 10.1 的新 Droplet。
- 启用防火墙、启用 NTP 并配置时区。 您可以按照 新 FreeBSD 10.1 服务器的推荐步骤 中的说明进行操作。 忽略设置额外交换空间的部分。
注意: UDP 防火墙权限不是 OSSEC 运行所必需的,但根据您在服务器上运行的服务,您可能需要允许它们的 UDP 流量。
完成启用 NTP 后,您可以通过键入以下内容来确认它正在运行:
sudo service ntpd onestatus
输出将类似于下面的内容,但具有不同的进程 ID (pid)。
ntpd is running as pid 581.
您还可以通过键入 date
来确认时区设置是否正确。 您选择的时区将在输出中。
选修的
接下来的两个更改都不是必需的,但通常建议它们使 FreeBSD 对新手更友好。
- 安装并启用 Bash。
tsch
是 FreeBSD 10.1 中的默认 shell。 如果您更喜欢使用 Bash,您可以按照 如何开始使用 FreeBSD 10.1 中的 更改默认 Shell 下的说明进行安装。 这会将您的默认 shell 永久设置为 Bash,包括所有未来的登录会话。
- 安装
nano
。
FreeBSD 中的默认终端编辑器是 Vi
,虽然功能强大,但对于新用户来说可能不直观。 nano
是无模式的,与 Vi
相比,它为新用户消除了一些复杂性。
您可以使用您选择的编辑器,但本教程将使用 nano
。 可以在终端输入安装:
sudo pkg install nano
第 1 步 - 更新系统
登录并将可用的安全和软件包更新应用到系统。 如果您尚未登录,请键入:
ssh freebsd@111.111.111.111
将上述命令中的 IP 地址替换为您服务器的真实 IP 地址。 FreeBSD 的默认用户是 freebsd,它拥有 sudo
权限。 登录后,通过键入以下内容查询并安装可用的安全更新:
sudo freebsd-update fetch install
完成后,安装可用的包更新。
sudo pkg upgrade
如果这些命令有任何内核更新,请重新启动服务器,然后重新登录。
第 2 步 - 安装和启用 OSSEC
在 FreeBSD 上,您可以使用三种方法来安装 OSSEC:从项目的 网站 下载最新的二进制文件,从端口树下载,或者从 FreeBSD 存储库安装预制的二进制文件。 最后一种方法是迄今为止最简单的方法,也是我们将在本教程中使用的方法。 它还使更新 OSSEC 变得轻松。
要查看 FreeBSD 10.1 中可用的 OSSEC 二进制包,请输入:
sudo pkg search ossec
输出应如下所示:
ossec-hids-client-2.8.1_1 ossec-hids-local-2.8.1_1 ossec-hids-server-2.8.1_1
因为目标是使用 OSSEC 仅监视正在安装它的服务器(本地安装),所以要安装的二进制包是 ossec-hids-local-2.8.1_1
或本地包的任何版本。 如果服务器二进制文件安装在不同的 Droplet 上,客户端二进制文件将允许您安装 OSSEC 代理,该代理向 OSSEC 服务器报告。
要安装本地二进制文件,请键入:
sudo pkg install ossec-hids-local-2.8.1_1
根据安装输出,OSSEC 会将 chroot
转换为 /usr/local/ossec-hids
,因此可以在该目录下找到其配置文件和目录。
现在您已经安装了 OSSEC,必须启用它才能在启动时启动。 启用它。 再次打开 /etc/rc.conf
。
sudo nano /etc/rc.conf
附加以下行:
# For OSSEC HIDS ossechids_enable="YES"
最后,保存并关闭文件。
第 3 步 - 为 OSSEC 通知设置电子邮件凭据
由于我们从存储库安装了 OSSEC,因此其配置文件中的电子邮件设置是虚拟设置。 它必须提供真实的电子邮件凭据,您才能接收通知。 要解决这个问题,您需要修改位于 /usr/local/ossec-hids/etc
中的 ossec.conf
文件。
ossec.conf
是 OSSEC 的一个非常重要的配置文件,所以在开始编辑它之前,请进行备份。
sudo cp /usr/local/ossec-hids/etc/ossec.conf /usr/local/ossec-hids/etc/ossec.conf.00
现在打开原始文件。
sudo nano /usr/local/ossec-hids/etc/ossec.conf
需要修改的第一部分位于文件的最顶部,如下所示。 这些设置告诉 OSSEC 在哪里发送警报以及它应该使用什么 SMTP 服务器。
<global> <email_notification>yes</email_notification> <email_to>daniel.cid@xxx.com</email_to> <smtp_server>smtp.xxx.com.</smtp_server> <email_from>ossecm@ossec.xxx.com.</email_from> </global>
###发送邮件
FreeBSD 10.1 默认附带 Sendmail,如果您希望将其用于 OSSEC 的电子邮件通知,则 smtp_server 应设置为 localhost,如下所示。
<global> <email_notification>yes</email_notification> <email_to>sammy@example.com</email_to> <smtp_server>localhost</smtp_server> <email_from>sammy@example.com</email_from> </global>
注意: Sendmail 可以处理入站和出站邮件。 如果您不需要 Sendmail 的入站服务,请将下面的行附加到 /etc/rc.conf
中。
# For Sendmail sendmail_enable="NO"
- 第三方 SMTP 服务器
但是,如果您希望指定第三方 SMTP 服务器而不使用本地 Sendmail 实例,则 ossec.conf
的电子邮件通知区域应如下所示:
<global> <email_notification>yes</email_notification> <email_to>sammy@example.com</email_to> <smtp_server>mail.example.com.</smtp_server> <email_from>sammy@example.com</email_from> </global>
指定所有必要的电子邮件设置后,保存并关闭文件。 要验证 OSSEC 现在可以发送警报,请键入以下命令启动它:
sudo /usr/local/ossec-hids/bin/ossec-control start
如果一切顺利,您应该会在配置的此类地址收到一封电子邮件:
OSSEC HIDS Notification. 2015 Jan 23 23:08:32 Received From: liniverse->ossec-monitord Rule: 502 fired (level 3) -> "Ossec server started." Portion of the log(s): ossec: Ossec started. --END OF NOTIFICATION
如果您没有收到电子邮件,请检查您的垃圾邮件文件夹。
第 4 步 - 配置系统检查
从这里开始,我们将继续在 ossec.conf
中工作。 配置编辑将按照它们在文件中出现的顺序显示。
sudo nano /usr/local/ossec-hids/etc/ossec.conf
调整系统检查间隔
syscheck
是 OSSEC 的完整性检查过程,我们可以告诉 syscheck 多久扫描一次文件系统并进行校验和,以寻找未经授权的更改的证据。
向下滚动到 syscheck 部分。 前两行应为:
<syscheck> <!-- Frequency that syscheck is executed -- default every 20 hours --> <frequency>17200</frequency>
该设置告诉 OSSEC 每 17200 秒执行一次系统检查。 对于生产系统来说,这是一个很好的频率间隔。 但是,由于在 FreeBSD 上二进制安装 OSSEC 不支持实时通知,建议您将该值减小到 900 秒之类的值。 然后,您可以在测试 OSSEC 时在更短的时间内收到通知。 测试后,您可以将其更改回默认值。
指定要监控的目录
OSSEC 的默认安装是 Linux 倾向的,因此默认的受监控文件和目录反映了通常在 Linux 系统上找到的文件和目录。 因此,必须修改它们以适应 FreeBSD 安装。 这些目录列在您修改的先前设置的正下方,默认值为:
<!-- Directories to check (perform all possible verifications) --> <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories> <directories check_all="yes">/bin,/sbin</directories>
如前所述,这些设置适用于 Linux 服务器,但需要对 FreeBSD 服务器进行修改。 这是 FreeBSD 10.1 服务器的建议设置。
<!-- Directories to check (perform all possible verifications) --> <directories report_changes="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories> <directories report_changes="yes" check_all="yes">/bin,/sbin</directories> <directories report_changes="yes" check_all="yes">/usr/local/etc,/usr/local/bin,/usr/local/sbin</directories> <directories report_changes="yes" check_all="yes">/home/freebsd,/usr/local/www</directories>
添加了两条额外的红色行。 第一个添加特定于 FreeBSD 服务器,第二个通知 OSSEC 我们希望监视 freebsd 的 主目录。 如果您使用不同的用户名进行操作,请更改 /home/freebsd
以匹配该用户名。
注意: /usr/local/www
目录是 Web 服务器数据在 FreeBSD 中存储的地方。 如果您打算托管一个网站,则该网站的数据都将在该目录中。 这使它成为一个需要密切关注的重要目录。
指定要忽略的文件或目录
ossec.conf
的下一部分是 OSSEC 应该忽略的文件列表,因为它们往往会经常更改并且会产生太多误报。 默认文件列表如下所示。
<!-- Files/directories to ignore --> <ignore>/etc/mtab</ignore> <ignore>/etc/hosts.deny</ignore> <ignore>/etc/mail/statistics</ignore> <ignore>/etc/random-seed</ignore> <ignore>/etc/adjtime</ignore> <ignore>/etc/httpd/logs</ignore>
同样,默认列表特定于 Linux 系统。 例如,FreeBSD 10.1 默认不使用 mtab
文件或 hosts.deny
文件。
那么您应该在 FreeBSD 10.1 服务器上配置 OSSEC 忽略哪些文件? 在大多数情况下,这是您必须在进行时弄清楚的事情,因为这取决于您在服务器上安装的内容。
例如,hosts.deny
文件已与 hosts.allow
文件合并。 所以它可能是你想忽略的东西。 但是,密切关注 hosts.allow
文件可以让您了解谁在向您的服务器扔石头,因为所有连接尝试被拒绝的 IP 地址都保存在那里。
如果您安装了 Bash,则 .bash_profile
是一个可以忽略的好选择,尽管在该文件上发出警报可以让您深入了解服务器上正在执行的命令。 如果您安装了 sSMTP,一个只发送电子邮件服务器,它的 dead.letter
文件是另一个可以忽略的文件。 另外,安装lsof
后,可以忽略其.lsof_HOSTNAME
文件。
大意是这样的:安装应用程序后,检查它是否在你的/home
中创建了一个隐藏目录。 该隐藏文件可能是一个很好的忽略选择。 如果有疑问,您可以保留 文件/目录以忽略 部分不变。 只需留意 OSSEC 发送的警报即可。 它们的内容会让您了解应该配置 OSSEC 忽略哪些文件。
为了帮助您进一步了解本节,以下是本教程使用的测试服务器上的外观,默认用户为 freebsd。
<!-- Files/directories to ignore --> <ignore>/home/freebsd/dead.letter</ignore> <ignore>/home/freebsd/.bash_profile</ignore> <ignore>/home/freebsd/.lsof_liniverse</ignore> <ignore>/etc/dumpdates</ignore> <ignore>/usr/local/ossec-hids/logs</ignore> <ignore>/usr/local/ossec-hids/queue</ignore> <ignore>/usr/local/ossec-hids/var</ignore> <ignore>/usr/local/ossec-hids/tmp</ignore> <ignore>/usr/local/ossec-hids/stats</ignore>
如您所见,该列表忽略了 OSSEC 安装树下的几个目录。 不忽略这些目录可能会导致系统在很短的时间内耗尽磁盘空间。
第 5 步 - 配置 Rootcheck
ossec.conf
的下一站是 rootcheck 部分。 Rootcheck 是 OSSEC 的一个组件,用于扫描系统中的 rootkit。 默认情况下,它显示为:
<rootcheck> <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files> <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans> </rootcheck>
FreeBSD 10.1 上的 OSSEC 未安装在 /var/ossec
中,但在 /usr/local/ossec-hids
中,因此修改这些行以反映这一点。 之后,该部分应为:
<rootcheck> <rootkit_files>/usr/local/ossec-hids/etc/shared/rootkit_files.txt</rootkit_files> <rootkit_trojans>/usr/local/ossec-hids/etc/shared/rootkit_trojans.txt</rootkit_trojans> </rootcheck>
这就是您需要在 ossec.conf
中更改的所有内容 - 现在。 保存并关闭它; 我们稍后再谈。 为确保一切设置正确,请尝试重新启动 OSSEC。
sudo /usr/local/ossec-hids/bin/ossec-control restart
重启应该会成功。 如果它返回配置错误,请仔细检查步骤 4 和 5 的条目。
步骤 6 - 指定要监控的日志文件
OSSEC 的默认安装配置为监视位置特定于 Linux 系统的日志文件。 在 FreeBSD 10.1 上,其中一些文件的名称略有不同,尽管它们仍然位于相同的 /var/log
目录中。
如果您查看 OSSEC 的日志文件 (/var/log/ossec-hids/logs/ossec.log
),您会看到如下条目:
ossec-logcollector(1950): INFO: Analyzing file: '/var/log/messages' ossec-logcollector(1103): ERROR: Unable to open file '/var/log/authlog' ossec-logcollector(1103): ERROR: Unable to open file '/var/log/secure' ossec-logcollector(1950): INFO: Analyzing file: '/var/log/xferlog'
包含 ERROR: Unable to open file 的条目表示 OSSEC 无法找到的文件,因为它不存在,或者可能是权限错误。 在得出结论之前验证您的系统是哪种情况。
以下是您如何确定 OSSEC 应在 FreeBSD 10.1 上监控的日志文件的位置。 我们将使用 lsof
列出系统在运行时使用的打开文件。 lsof
默认不安装,所以先安装:
sudo pkg install lsof
然后要运行日志文件检查,请使用以下命令:
lsof | grep log | grep -v ".so" | egrep -v "ossec|proc|dev|run"
该命令所做的只是寻找所有打开的文件,保留我们感兴趣的日志文件并丢弃其余文件。 我们绝对不想监视 OSSEC 安装目录中的文件,或者 /proc
、/dev
或 /var/run
中的文件。 您应该得到一个包含日志文件列表的输出。 以下代码块显示了用于本教程的测试系统的部分输出:
syslogd ... root ... /var/log/messages syslogd ... root ... /var/log/security syslogd ... root ... /var/log/auth.log syslogd ... root ... /var/log/maillog syslogd ... root ... /var/log/lpd-errs
如果将该输出中的名称与 OSSEC 日志文件中的名称进行比较,很容易看出 /var/log/auth.log
与 /var/log/authlog
相同,并且 /var/log/security
相当于 FreeBSD /var/log/secure
。
现在再次打开 ossec.conf
并修改日志文件的名称以匹配 FreeBSD 10.1 中使用的名称。
sudo nano /usr/local/ossec-hids/etc/ossec.conf
下面的代码块显示了修改后的行的示例。 您需要为已安装并在服务器上运行的特定服务添加日志位置; Nginx、Apache 等服务。
<!-- Files to monitor (localfiles) --> <localfile> <log_format>syslog</log_format> <location>/var/log/auth.log</location> </localfile> <localfile> <log_format>syslog</log_format> <location>/var/log/security</location> </localfile>
使用 util.sh 添加日志文件条目
如果在您安装 OSSEC 很久之后,您在自定义目录中有一个想要监控的日志文件,您可以使用 OSSEC 的 util.sh
命令添加它或使用 nano 打开 ossec.conf
并添加它手动。
例如,如果您安装了 Nginx,并且其访问和错误日志文件位于 /var/log/nginx
目录中,您可以使用 util.sh
将它们添加到 ossec.conf
,如下所示:
/usr/local/ossec-hids/bin/util.sh addfile /var/log/nginx/access.log /usr/local/ossec-hids/bin/util.sh addfile /var/log/nginx/error.log
注意: 如果你运行这两个命令并且你没有安装 Nginx,你会得到一个错误,说日志文件不存在。
此时,我们要在 ossec.conf
中进行最后一项更改,因此在进行下一步时保持文件打开。
第 7 步 - 新文件提醒
默认情况下,OSSEC 在系统中创建新文件时不会发出警报,因此我们将更改该行为。 这种变化有两个组成部分。
设置系统检查
向上滚动到 ossec.conf
的 syscheck
区域 os 并在频率检查间隔下方添加一个 alert_new_files 行。
结果应为:
<syscheck> <!-- Frequency that syscheck is executed -- default every 20 hours --> <frequency>17200</frequency> <alert_new_files>yes</alert_new_files>
现在您可以保存并关闭ossec.conf
。 我们已经完成了。
修改规则的分类级别
尽管我们已经告诉 syscheck
监视新创建的文件,但 OSSEC 实际上还不会通知我们这些文件。 为此,我们需要修改默认的 OSSEC 规则。
在nano
中打开ossec_rules.xml
。
sudo nano /usr/local/ossec-hids/rules/ossec_rules.xml
将文件添加到受监视目录时触发的规则是规则 554。 这是它的样子:
<rule id="554" level="0"> <category>ossec</category> <decoded_as>syscheck_new_entry</decoded_as> <description>File added to the system.</description> <group>syscheck,</group> </rule>
如果规则将 级别 设置为 0,OSSEC 不会发送警报,因此您必须将该规则复制到 local_rules.xml
并对其进行修改以便触发一个警报。 您可以使用鼠标或触摸板突出显示 nano
中的规则,将其复制并临时粘贴到主机上的文本编辑器中。
现在打开 local_rules.xml
这是所有用户修改的 OSSEC 规则应该去的地方; 您应该 而不是 对 ossec_rules.xml
进行更改。
sudo nano /usr/local/ossec-hids/rules/local_rules.xml
使用 CONTROL+SHIFT+V
将规则从主机的文本编辑器粘贴到 nano
。 确保将其粘贴到 组 标记中。 我们将通知级别更改为 7
并告诉 OSSEC 该规则将覆盖 ossec_rules.xml
中的规则 554。
完成后,您的 local_rules.xml
文件的结尾应如下所示。 第一行是从原始规则更改的所有内容。
<rule id="554" level="7" overwrite="yes"> <category>ossec</category> <decoded_as>syscheck_new_entry</decoded_as> <description>File added to the system.</description> <group>syscheck,</group> </rule> </group> <!-- SYSLOG,LOCAL --> <!-- EOF -->
完成后,保存并关闭文件,然后键入以下命令重新启动 OSSEC:
sudo /usr/local/ossec-hids/bin/ossec-control restart
结论
重新启动 OSSEC 后不久,您应该会收到一条指示 OSSEC 已启动的警报,就像您在第 3 步中配置 SMTP 服务器时所做的一样。 熟悉不同的规则级别和它们所暗示的严重性是一个好主意。 您可以在 OSSEC 文档 中了解它们。
在 OSSEC 执行下一次系统检查后,您还应该收到可以从新系统中获得的标准警报。 以下是您在服务器上配置后不久可能会看到(或看到的变体)的一些通知。
用户 freebsd 第一次运行 sudo 命令。
OSSEC HIDS Notification. 2015 Jan 24 07:10:56 Received From: liniverse->/var/log/auth.log Rule: 5403 fired (level 4) -> "First time user executed sudo." Portion of the log(s): Jan 24 02:10:56 liniverse sudo: freebsd : TTY=pts/1 ; PWD=/usr/home/freebsd ; USER=root ; COMMAND=/usr/sbin/pkg install namp --END OF NOTIFICATION
OSSEC 已在 hosts.allow 中阻止了 IP 地址 93.50.186.75。
OSSEC HIDS Notification. 2015 Jan 25 02:06:47 Received From: Freebsd->syscheck Rule: 552 fired (level 7) -> "Integrity checksum changed again (3rd time)." Portion of the log(s): Integrity checksum changed for: '/etc/hosts.allow' Size changed from '3408' to '3434' What changed: 93a94 ALL : 93.50.186.75 : deny Old md5sum was: 'f8ba903734ee1bd6afae641974a51522' New md5sum is : '56dfbd3922cf7586b81b6575f6564196' Old sha1sum was: 'a7a9886aa90f2f6aaa7660490809d6a0717b8d76' New sha1sum is : '6a0bf14c4614976d2c2e1157f157ae513f3f9cfc' --END OF NOTIFICATION
文件 ngx.txt
是在 /home/freebsd
中创建的。
OSSEC HIDS Notification. 2015 Jan 24 20:08:38 Received From: liniverse->syscheck Rule: 554 fired (level 7) -> "File added to the system." Portion of the log(s): New file '/home/freebsd/ngx.txt' added to the file system. --END OF NOTIFICATION
希望这让您了解了 OSSEC 所提供的内容。 如前所述,FreeBSD 还不支持实时警报和文件删除警报。 但是,已经在项目的 GitHub 页面上提出了与这些相关的功能请求。 有关 OSSEC 的更多信息,请访问项目网站 http://www.ossec.net/。