如何在 FreeBSD 10.1 上安装和配置 OSSEC

介绍

<$>[注] 注: 截至 2022 年 7 月 1 日,DigitalOcean 将不再通过控制面板或 API 支持 FreeBSD Droplets. 但是,您仍然可以使用自定义图像将 FreeBSD Droplets 旋转。

OSSEC 是一个开源的基于主机的入侵检测系统(HIDS),可执行日志分析、完整性检查、Windows注册表监控、 rootkit 检测、基于时间的警报和积极响应。

它是您可以在您的服务器上安装的最重要的安全应用程序之一,可以用来监控一台机器或数以千计的客户端/服务器或代理/服务器模式。

本教程将向您展示如何安装和配置 OSSEC 以监控运行 FreeBSD 10.1 的服务器。除了 OSSEC 用于用户访问和完整性检查的默认规则集外,我们还将配置额外的规则,以便如果文件被修改或添加到系统中,OSSEC 将通过电子邮件通知您。

以下是 OSSEC 发送的警报类型的示例:

 1OSSEC HIDS Notification.
 22015 Jan 25 11:42:49
 3
 4Received From: liniverse->syscheck
 5Rule: 551 fired (level 7) -> "Integrity checksum changed again (2nd time)."
 6Portion of the log(s):
 7
 8Integrity checksum changed for: '/usr/local/etc/ssmtp/ssmtp.conf'
 9Size changed from '1367' to '1384'
10What changed:
1136c36,37
12< UseTLS=YES
13---
14
15  #UseTLS=YES
16  UseSTARTTLS=YES
17
18Old md5sum was: '39f219a7db9987c3623d5a2f7511dfc1'
19New md5sum is : '9971ecc1b0c744ee3f744255248e7c11'
20Old sha1sum was: 'fc945ffc84b243cd36f8dd276f99c57f912f902b'
21New sha1sum is : '1289fe0008a3d8bf74db8f73c09bf18db09572cc'
22
23 --END OF NOTIFICATION

** 注意:** OSSEC 目前只能在 Linux 和 Windows 上实时发出警告,在 FreeBSD 上实时发出警告仍在进行中,因此在 FreeBSD 上无法发出文件删除警告。

前提条件

OSSEC需要一个在系统上活跃的防火墙,以便其积极响应功能。服务器保持准确的时间也很重要,这要求启用NTP。

因此,对于这个教程,你将需要:

** 注意:** UDP 防火墙权限不必要为 OSSEC 工作,但取决于您在服务器上运行的服务,您可能需要允许 UDP 流量。

当您完成启用 NTP 后,您可以通过键入确认它正在运行:

1sudo service ntpd onestatus

输出将类似于下面,但具有不同的进程ID(pid)。

1ntpd is running as pid 581.

您也可以通过键入日期来确认时区是否正确设置,您选择的时区将出现在输出中。

可选

这两项更改都不需要,但它们通常被建议使FreeBSD对新用户更加友好。

  • 安装并启用 Bash.

「tsch」是 FreeBSD 10.1 中的默认壳。如果您更喜欢使用 Bash,您可以按照在 How To Get Started with FreeBSD 10.1中的 Changing the Default Shell 下的说明来安装它。

  • 安装nano

FreeBSD的默认终端编辑器是Vi,虽然强大,但对于新用户来说可能并不直观。

您可以使用您选择的编辑器,但在本教程中将使用nano

1sudo pkg install nano

步骤1 - 更新系统

登录并将可用的安全和包更新应用到系统中. 如果您尚未登录,请通过键入:

在上面的命令中,用您的服务器的真实IP地址替换IP地址。FreeBSD的默认用户是 freebsd ,并且具有sudo特权。

1sudo freebsd-update fetch install

完成后,安装可用的包更新。

1sudo pkg upgrade

如果从这些命令中出现任何内核更新,请重新启动服务器,然后重新登录。

步骤 2 - 安装并启用 OSSEC

在 FreeBSD 上,你可以使用三种方法来安装 OSSEC:从项目的 网站下载最新的二进制,从端口树上下载,或者从 FreeBSD 存储库中安装预制的二进制。

若要查看 FreeBSD 10.1 中可用的 OSSEC 二进制包,请键入:

1sudo pkg search ossec

输出应该读到类似的东西:

1ossec-hids-client-2.8.1_1
2ossec-hids-local-2.8.1_1
3ossec-hids-server-2.8.1_1

由于目标是使用OSEC来监控它正在安装的服务器(本地安装),所以要安装的二进制包是ossec-hids-local-2.8.1_1或任何本地软件包的版本。

要安装本地二进制,键入:

1sudo pkg install ossec-hids-local-2.8.1_1

根据安装输出,OSEC将chroot/usr/local/ossec-hids,因此其配置文件和目录将在该目录下找到。

现在你已经安装了 OSSEC,它必须启用,以便它可以启动。

1sudo nano /etc/rc.conf

附上以下几行:

1# For OSSEC HIDS
2
3ossechids_enable="YES"

最后,保存并关闭文件。

步骤 3 - 为 OSSEC 通知设置电子邮件凭证

由于我们从存储库中安装了 OSSEC,其配置文件中的电子邮件设置是模糊的设置. 它必须提供真实的电子邮件凭证,以便您收到通知。 为了纠正这一点,您需要修改位于 /usr/local/ossec-hids/etc 中的 ossec.conf 文件。

ossec.conf 是 OSSEC 非常重要的配置文件,所以在您开始编辑之前,请备份。

1sudo cp /usr/local/ossec-hids/etc/ossec.conf /usr/local/ossec-hids/etc/ossec.conf.00

现在打开原始文件。

1sudo nano /usr/local/ossec-hids/etc/ossec.conf

需要修改的第一个部分是在文件的顶部,并显示在下面. 这些设置告诉OSSEEC发送警报的地方以及它应该使用哪个SMTP服务器。

1<global>
2    <email_notification>yes</email_notification>
3    <email_to>[email protected]</email_to>
4    <smtp_server>smtp.xxx.com.</smtp_server>
5    <email_from>[email protected].</email_from>
6</global>

名称:Sendmail

FreeBSD 10.1 默认情况下与 Sendmail 交付,如果您想使用它用于 OSSEC 的电子邮件通知,则 smtp_server 应设置为 ** localhost** 如下所示。

1<global>
2    <email_notification>yes</email_notification>
3    <email_to>[email protected]</email_to>
4    <smtp_server>localhost</smtp_server>
5    <email_from>[email protected]</email_from>
6</global>

** 注意:** Sendmail 可以处理入口和出发邮件. 如果您不需要 Sendmail 的入口服务,请将下面的行附加到 /etc/rc.conf

1# For Sendmail
2
3sendmail_enable="NO"

第三方 SMTP 服务器

但是,如果您想指定第三方 SMTP 服务器而不是使用 Sendmail 的本地实例,则ossec.conf的电子邮件通知区域应该像这样:

1<global>
2    <email_notification>yes</email_notification>
3    <email_to>[email protected]</email_to>
4    <smtp_server>mail.example.com.</smtp_server>
5    <email_from>[email protected]</email_from>
6</global>

指定所有必要的电子邮件设置后,保存并关闭文件. 若要验证 OSSEC 现在可以发送警报,请通过键入开始:

1sudo /usr/local/ossec-hids/bin/ossec-control start

如果一切顺利,你应该收到这样的配置地址的电子邮件:

 1OSSEC HIDS Notification.
 22015 Jan 23 23:08:32
 3
 4Received From: liniverse->ossec-monitord
 5Rule: 502 fired (level 3) -> "Ossec server started."
 6Portion of the log(s):
 7
 8ossec: Ossec started.
 9
10 --END OF NOTIFICATION

如果您没有收到电子邮件,请检查您的垃圾邮件文件夹。

步骤 4 - 配置 syscheck

从这里开始,我们将继续在ossec.conf中工作,配置编辑将以文件中出现的顺序呈现。

1sudo nano /usr/local/ossec-hids/etc/ossec.conf

调整 syscheck 间隔

syscheck是OSCE的完整性检查过程,我们可以告诉syscheck如何频繁地扫描和检查文件系统,以检索未经授权的更改的证据。

滚到 syscheck 部分,前两行应该读到:

1<syscheck>
2    <!-- Frequency that syscheck is executed -- default every 20 hours -->
3    <frequency>17200</frequency>

这个设置告诉OSEC每17200秒进行一次系统检查,这对生产系统来说是一个很好的频率间隔,但是,由于在FreeBSD上的OSEC的二进制安装中不支持实时通知,所以建议您将该值降低到900秒,然后您可以通过测试OSEC在更短的时间框架内收到通知。

指定地址为监视器

OSSEC的默认安装是基于Linux的,因此默认的监控文件和目录反映了通常在Linux系统上发现的文件和目录,因此,它们必须被修改以适应FreeBSD的安装。

1<!-- Directories to check  (perform all possible verifications) -->
2    <directories check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
3    <directories check_all="yes">/bin,/sbin</directories>

如前所述,这些设置适用于 Linux 服务器,但需要对 FreeBSD 服务器进行修改。

1<!-- Directories to check  (perform all possible verifications) -->
2    <directories report_changes="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
3    <directories report_changes="yes" check_all="yes">/bin,/sbin</directories>
4    <directories report_changes="yes" check_all="yes">/usr/local/etc,/usr/local/bin,/usr/local/sbin</directories>
5    <directories report_changes="yes" check_all="yes">/home/freebsd,/usr/local/www</directories>

添加了两条红色的额外行. 第一条添加是针对 FreeBSD 服务器的,第二条则告知 OSSEC,我们希望 freebsd 的 主目录被监控。

注: /usr/local/www 目录是 Web 服务器数据存储在 FreeBSD 中的地方. 如果您打算托管网站,网站的数据将全部位于该目录中。

指定要忽略的文件或目录

ossec.conf的下一个部分是OSEC应该忽略的文件列表,因为它们往往会更改,并且会产生太多的假阳性。

1<!-- Files/directories to ignore -->
2    <ignore>/etc/mtab</ignore>
3    <ignore>/etc/hosts.deny</ignore>
4    <ignore>/etc/mail/statistics</ignore>
5    <ignore>/etc/random-seed</ignore>
6    <ignore>/etc/adjtime</ignore>
7    <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 文件是另一个可以忽略的文件。

一般情况是这样的:安装一个应用程序后,检查它是否在你的 /home 中创建了一个隐藏的目录. 隐藏的文件可能是一个很好的候选人去忽略. 如果你有疑问,你可以把 ** 文件/目录去忽略** 部分保持不变。 只需留意OSEC发送的警报。 他们的内容会给你一个想法,你应该配置OSEC忽略的文件。

为了进一步帮助您在本节中,这里是用于本教程的测试服务器上使用的默认用户 freebsd 的样子。

 1<!-- Files/directories to ignore -->
 2    <ignore>/home/freebsd/dead.letter</ignore>
 3    <ignore>/home/freebsd/.bash_profile</ignore>
 4    <ignore>/home/freebsd/.lsof_liniverse</ignore>
 5    <ignore>/etc/dumpdates</ignore>
 6    <ignore>/usr/local/ossec-hids/logs</ignore>
 7    <ignore>/usr/local/ossec-hids/queue</ignore>
 8    <ignore>/usr/local/ossec-hids/var</ignore>
 9    <ignore>/usr/local/ossec-hids/tmp</ignore>
10    <ignore>/usr/local/ossec-hids/stats</ignore>

正如您所看到的,该列表忽略了 OSSEC 安装树下的多个目录,而不忽略这些目录可能会导致系统在很短的时间内耗尽磁盘空间。

步骤 5 - 设置Rootcheck

ossec.conf的下一个站点是 rootcheck 部分. Rootcheck 是 OSSEC 的组件,该组件会扫描系统以查找 rootkits。

1<rootcheck>
2    <rootkit_files>/var/ossec/etc/shared/rootkit_files.txt</rootkit_files>
3    <rootkit_trojans>/var/ossec/etc/shared/rootkit_trojans.txt</rootkit_trojans>
4</rootcheck>

OSSEC 在 FreeBSD 10.1 上不是在 /var/ossec 中安装的,而是在 /usr/local/ossec-hids 中安装的,所以修改这些行以反映这一点。

1<rootcheck>
2    <rootkit_files>/usr/local/ossec-hids/etc/shared/rootkit_files.txt</rootkit_files>
3    <rootkit_trojans>/usr/local/ossec-hids/etc/shared/rootkit_trojans.txt</rootkit_trojans>
4</rootcheck>

这就是你现在需要在ossec.conf中更改的全部 - 保存并关闭它;我们稍后会回来,以确保一切都正确设置,试着重新启动OSEC。

1sudo /usr/local/ossec-hids/bin/ossec-control restart

如果返回配置错误,请对步骤 4 和 5 进行双重检查。

步骤 6 - 指定要监控的日志文件

在 FreeBSD 10.1 上,有些文件有稍微不同的名称,尽管它们仍然位于相同的 /var/log 目录中。

如果您查看 OSSEC 日志文件 (/var/log/ossec-hids/logs/ossec.log),您将看到这样的条目:

1ossec-logcollector(1950): INFO: Analyzing file: '/var/log/messages'
2ossec-logcollector(1103): ERROR: Unable to open file '/var/log/authlog'
3ossec-logcollector(1103): ERROR: Unable to open file '/var/log/secure'
4ossec-logcollector(1950): INFO: Analyzing file: '/var/log/xferlog'

包含 ERROR:无法打开文件 的条目指示一个文件,因为它不存在,或可能权限是错误的 OSSEC 无法找到。

以下是如何确定日志文件的位置 OSSEC 应该在 FreeBSD 10.1 上监控。我们将使用lsof列出系统在运行时使用的开放文件。

1sudo pkg install lsof

然后运行日志文件检查,使用以下命令:

1lsof | grep log | grep -v ".so" | egrep -v "ossec|proc|dev|run"

我们绝对不希望监控OSSEC的安装目录中的文件,或在/proc,/dev/var/run中。你应该得到一个输出,其中包含了日志文件的列表。

1syslogd  ... root  ...  /var/log/messages
2syslogd  ... root  ...  /var/log/security
3syslogd  ... root  ...  /var/log/auth.log
4syslogd  ... root  ...  /var/log/maillog
5syslogd  ... 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中使用的名称。

1sudo nano /usr/local/ossec-hids/etc/ossec.conf

下面的代码块显示了修改的行应该是什么样子的例子,您将想要为您安装并在服务器上运行的特定服务添加日志位置;如 Nginx、Apache 等服务。

 1<!-- Files to monitor (localfiles) -->
 2
 3<localfile>
 4
 5  <log_format>syslog</log_format>
 6    <location>/var/log/auth.log</location>
 7  </localfile>
 8
 9  <localfile>
10    <log_format>syslog</log_format>
11    <location>/var/log/security</location>
12  </localfile>

使用 util.sh 添加日志文件条目

如果在安装 OSSEC 后很长一段时间,您在自定义目录中有日志文件,您想要监控,您可以使用 OSSEC 的 util.sh 命令添加它,或者用 nano 打开 `ossec.conf' 并手动添加它。

例如,如果您安装了 Nginx,并且其访问日志和错误日志文件位于/var/log/nginx目录中,则可以通过使用util.sh来添加到ossec.conf中:

1/usr/local/ossec-hids/bin/util.sh addfile /var/log/nginx/access.log
2/usr/local/ossec-hids/bin/util.sh addfile /var/log/nginx/error.log

** 注意:** 如果您按照所示执行这两个命令,而您没有安装 Nginx,则会收到一个错误消息,即日志文件不存在。

在此时刻,我们有一个最后的更改要做在 ossec.conf,所以当你移动到下一步时,留下文件打开。

步骤 7 - 新文件警告

默认情况下,OSSEEC不会在系统中创建新文件时发出警告,所以我们会改变这种行为。

点击Syscheck

回滚到ossec.confsyscheck区域OS,并在频率检查间隔下面添加一个 alert_new_files 行。

结果应该读:

1<syscheck>
2    <!-- Frequency that syscheck is executed -- default every 20 hours -->
3    <frequency>17200</frequency>
4
5    <alert_new_files>yes</alert_new_files>

现在你可以保存并关闭 ossec.conf. 我们已经完成了。

修改规则的分类级别

虽然我们已经告诉syscheck观察新创建的文件,但OSSEC实际上还不会通知我们。

nano中打开ossec_rules.xml

1sudo nano /usr/local/ossec-hids/rules/ossec_rules.xml

当一个文件被添加到监控目录时出现的规则是规则 554

1<rule id="554" level="0">
2<category>ossec</category>
3<decoded_as>syscheck_new_entry</decoded_as>
4<description>File added to the system.</description>
5<group>syscheck,</group>
6</rule>

OSSEC 不会发送警报,如果一个规则的 级别 设置为 0 ,所以你必须将该规则复制到local_rules.xml并修改它以引发警报。

现在打开local_rules.xml 这是所有用户修改的 OSSEC 规则应该去的地方;你应该 notossec_rules.xml进行更改。

1sudo nano /usr/local/ossec-hids/rules/local_rules.xml

使用CONTROL+SHIFT+V将您的主机文本编辑器的规则粘贴到nano。 请确保您将其粘贴到 group 标签中。 我们将通知级别更改为7,并告诉OSSEEC,该规则将规则 554ossec_rules.xml翻译。

完成后,你的local_rules.xml文件的尽头应该像下面一样。

 1<rule id="554" level="7" overwrite="yes">
 2    <category>ossec</category>
 3    <decoded_as>syscheck_new_entry</decoded_as>
 4    <description>File added to the system.</description>
 5    <group>syscheck,</group>
 6</rule>
 7
 8</group> <!-- SYSLOG,LOCAL -->
 9
10<!-- EOF -->

完成后,保存并关闭文件,然后通过键入重新启动 OSSEC:

1sudo /usr/local/ossec-hids/bin/ossec-control restart

结论

在重新启动 OSSEC 后不久,您应该收到一个警告,说明 OSSEC 已经启动,就像您在步骤 3 中在配置 SMTP 服务器时所做的一样。

在 OSSEC 执行下一个系统检查后,您还应该收到您可以从新系统中期望的标准警报。

第一次用户 **freebsd ** 运行 sudo 命令。

 1OSSEC HIDS Notification.
 22015 Jan 24 07:10:56
 3
 4Received From: liniverse->/var/log/auth.log
 5Rule: 5403 fired (level 4) -> "First time user executed sudo."
 6Portion of the log(s):
 7
 8Jan 24 02:10:56 liniverse sudo:  freebsd : TTY=pts/1 ; PWD=/usr/home/freebsd ; USER=root ; COMMAND=/usr/sbin/pkg install namp
 9
10 --END OF NOTIFICATION

OSSEC 在 hosts.allow 中阻止了 93.50.186.75 的 IP 地址。

 1OSSEC HIDS Notification.
 22015 Jan 25 02:06:47
 3
 4Received From: Freebsd->syscheck
 5Rule: 552 fired (level 7) -> "Integrity checksum changed again (3rd time)."
 6Portion of the log(s):
 7
 8Integrity checksum changed for: '/etc/hosts.allow'
 9Size changed from '3408' to '3434'
10What changed:
1193a94
12
13    ALL : 93.50.186.75 : deny
14
15Old md5sum was: 'f8ba903734ee1bd6afae641974a51522'
16New md5sum is : '56dfbd3922cf7586b81b6575f6564196'
17Old sha1sum was: 'a7a9886aa90f2f6aaa7660490809d6a0717b8d76'
18New sha1sum is : '6a0bf14c4614976d2c2e1157f157ae513f3f9cfc'
19
20 --END OF NOTIFICATION

文件「ngx.txt」是在「/home/freebsd」中创建的。

 1OSSEC HIDS Notification.
 22015 Jan 24 20:08:38
 3
 4Received From: liniverse->syscheck
 5Rule: 554 fired (level 7) -> "File added to the system."
 6Portion of the log(s):
 7
 8New file '/home/freebsd/ngx.txt' added to the file system.
 9
10 --END OF NOTIFICATION

希望这能让您了解一下OSSEEC所提供的内容。如前所述,FreeBSD还没有支持实时警报和文件删除警报,但是,该项目的GitHub页面上已经提出了相关的功能请求。

Published At
Categories with 技术
comments powered by Disqus