介绍
<$>[注] 注: 截至 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。
因此,对于这个教程,你将需要:
- 新服务器运行 FreeBSD 10.1.
- 启用防火墙、启用 NTP 和配置时区. 您可以通过遵循 新 FreeBSD 10.1 服务器的推荐步骤中的说明来完成此操作。
** 注意:** 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 - 更新系统
登录并将可用的安全和包更新应用到系统中. 如果您尚未登录,请通过键入:
1ssh [email protected]
在上面的命令中,用您的服务器的真实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.conf
的syscheck
区域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 规则应该去的地方;你应该 not 对ossec_rules.xml
进行更改。
1sudo nano /usr/local/ossec-hids/rules/local_rules.xml
使用CONTROL+SHIFT+V
将您的主机文本编辑器的规则粘贴到nano
。 请确保您将其粘贴到 group 标签中。 我们将通知级别更改为7
,并告诉OSSEEC,该规则将规则 554 从ossec_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页面上已经提出了相关的功能请求。