如何在 Debian 8 上设置本地 OSSEC 安装
介绍
OSSEC 是一个开源的、基于主机的入侵检测系统 (HIDS),可执行日志分析、完整性检查、Windows 注册表监控、rootkit 检测、基于时间的警报和主动响应。如果您想密切关注服务器内部发生的事情,这是一个需要安装在服务器上的应用程序。
OSSEC 可以安装来监视安装它的服务器,这是OSSEC 术语中的本地安装,或者安装为服务器来监视一个或多个代理。在本教程中,您将学习如何安装 OSSEC 来监视安装它的 Debian 8 服务器,即本地OSSEC 安装。
先决条件
要遵循本教程,您需要:
- 一个具有 sudo 非 root 用户和 SSH 密钥的 Debian 8 Droplet,您可以按照本教程进行设置。
第1步 - 安装所需的软件包
在此步骤中,我们将安装OSSEC所需的软件包。首先,更新包数据库。
sudo apt-get update
然后安装可用的更新。
sudo apt-get -y upgrade
最后,安装OSSEC的依赖项(build-essential
和inotify-toops
)和ntp
,这是一个网络时间协议服务。
sudo apt-get install build-essential inotify-tools ntp
最后,启用NTP服务。这有助于服务器自动保持准确的时间。
sudo systemctl start ntp
第2步 - 启用防火墙
全新安装的 Debian 8 服务器没有活动的防火墙应用程序。在此步骤中,我们将学习如何启用 IPTables 防火墙应用程序并确保运行时规则在重新启动后仍然存在。
实现此目的的最简单方法是iptables-persistent
使用以下命令安装该包:
sudo apt-get install -y iptables-persistent
验证后,系统会提示您将 IPv4 和 IPv6 防火墙规则保存到单独的文件中。在两个提示符下按ENTER以接受默认位置,即/etc/iptables/rules.v4
和/etc/iptables/rules.v6
。
默认情况下,这些文件中没有规则,因此我们必须创建它们以保护服务器并保持开放的 SSH 连接。我们只对 IPv4 规则感兴趣,因此我们只修改规则文件rules.v4
。
rules.v4
使用或您最喜欢的文本编辑器打开规则文件nano
。
sudo nano /etc/iptables/rules.v4
该文件的完整内容如下:
# Generated by iptables-save v1.4.21 on Sat May 9 01:27:00 2015
*filter
:INPUT ACCEPT [5722:416593]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4372:503060]
COMMIT
# Completed on Sat May 9 01:27:00 2015
以下默认规则集足以保护服务器并保持 SSH 连接畅通,因此只需将其复制并粘贴在:OUTPUT ACCEPT [4372:503060]和COMMIT行之间即可。这些规则取自Debian 官方文档;您可以通过内联注释查看每条规则的作用。
# Allow all loopback traffic. Drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all outbound traffic
-A OUTPUT -j ACCEPT
# Uncomment the next two lines to allow HTTP and HTTPS connections
#-A INPUT -p tcp --dport 80 -j ACCEPT
#-A INPUT -p tcp --dport 443 -j ACCEPT
# Allow SSH connections. If you changed your SSH port, do same here.
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allow ping
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP
保存并关闭文件。然后,要应用新规则集,请重新启动iptables-persistent
。
sudo systemctl restart netfilter-persistent
您现在可以使用此命令验证规则是否到位。
sudo iptables -L
你的输出将如下所示:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
. . .
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
第3步 - 下载并验证OSSEC
OSSEC 以压缩包的形式提供。在此步骤中,您将下载它及其校验和文件,该文件用于验证 tarball 未被篡改。您可以查看项目网站以获取最新版本。在撰写本文时,OSSEC 2.8.1 是最新稳定版本。
要下载 tarball,请输入:
wget -U ossec http://www.ossec.net/files/ossec-hids-2.8.1.tar.gz
然后使用下载校验和文件
wget -U ossec http://www.ossec.net/files/ossec-hids-2.8.1-checksum.txt
下载两个文件后,验证压缩包的 md5sum。
md5sum -c ossec-hids-2.8.1-checksum.txt
输出应为:
ossec-hids-2.8.1.tar.gz: OK
md5sum: WARNING: 1 line is improperly formatted
然后验证 SHA1 校验和。
sha1sum -c ossec-hids-2.8.1-checksum.txt
其输出应为:
ossec-hids-2.8.1.tar.gz: OK
sha1sum: WARNING: 1 line is improperly formatted
在每种情况下,请忽略WARNING行。OK行确认文件没有问题。
第4步 - 安装OSSEC
在此步骤中,我们将安装OSSEC。首先,解压它。
tar xf ossec-hids-2.8.1.tar.gz
它将被解压到名为 的目录中ossec-hids-2.8.1
。转到该目录。
cd ossec-hids-2.8.1
注意:OSSEC 2.8.1 版中存在一个错误。该错误会导致其覆盖文件的内容/etc/hosts.deny
。2.9 版中已有一个永久修复,应该很快就会发布。
要修复该/etc/hosts.deny
错误,请从下载的 tarball 中提取 OSSEC 后打开目录host-deny.sh
中的文件。/var/ossec/active-response
nano active-response/host-deny.sh
在文件末尾,查找以下代码中以 开头的两行TMP_FILE =
,位于# Deleting from hosts.deny
注释下方。编辑这两行以删除符号两侧的空格=
,使代码块如下所示。
# Deleting from hosts.deny
elif [ "x${ACTION}" = "xdelete" ]; then
lock;
TMP_FILE=`mktemp /var/ossec/ossec-hosts.XXXXXXXXXX`
if [ "X${TMP_FILE}" = "X" ]; then
# Cheap fake tmpfile, but should be harder then no random data
TMP_FILE="/var/ossec/ossec-hosts.`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -1 `"
fi
保存并关闭文件。这样就完成了错误修复。
接下来开始安装。
sudo ./install.sh
在整个安装过程中,系统会提示您提供一些输入。首先,系统会提示您选择安装语言,默认情况下,安装语言为英语 (en)。如果这是您的首选语言,请按ENTER。否则,请先从支持的语言列表中输入 2 个字母。然后,再次按ENTER开始安装。
问题 1 会询问您想要哪种安装(服务器、代理、本地、混合还是帮助)?输入local并按ENTER。
对于以下所有问题,请按ENTER接受默认值,但请注意,问题 3.1 将提示您输入电子邮件地址。输入后,安装程序将使用它自动查找相应的 SMTP 服务器。
如果安装成功,安装后输出的最后几行应为:
- Configuration finished properly.
- To start OSSEC HIDS:
/var/ossec/bin/ossec-control start
- To stop OSSEC HIDS:
/var/ossec/bin/ossec-control stop
- The configuration can be viewed or modified at /var/ossec/etc/ossec.conf
. . .
第4步 - 自定义OSSEC的电子邮件设置
在这里我们将验证上一步中指定的电子邮件凭据和 OSSEC 自动配置的电子邮件凭据是否正确。
电子邮件设置位于 OSSEC 的主配置文件 - 中ossec.conf
,该文件位于“/var/ossec/etc”目录中。要访问和修改任何 OSSEC 文件,首先需要切换到 root 用户。
sudo su
现在您是root用户,请切换到OSSEC的配置文件所在的目录。
cd /var/ossec/etc
然后备份该配置文件。
cp ossec.conf ossec.conf.00
nano
使用文本编辑器或您喜欢的文本编辑器打开原始文件。
nano 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>
< email_to>是您在安装期间提供的电子邮件。警报将发送到该电子邮件地址,而< smtp_server>是安装脚本自动发现的 SMTP 服务器。您不必更改这些值。
< email_from>是 OSSEC 警报可能来自的电子邮件地址。默认情况下,它基于 OSSEC 的邮件用户帐户和服务器的主机名创建。您应该将其更改为有效的电子邮件地址,以减少您的电子邮件被电子邮件提供商的 SMTP 服务器标记为垃圾邮件的可能性。请注意,如果接收 SMTP 服务器没有严格的垃圾邮件策略,则< email_to>和< email_from>可以相同。
修改电子邮件设置后,保存并关闭文件。然后启动OSSEC。
/var/ossec/bin/ossec-control start
检查您的收件箱,查看是否有表明 OSSEC 已启动的电子邮件。如果您收到来自 OSSEC 安装的电子邮件,则说明未来的警报也将到达您的收件箱。如果没有,请检查您的垃圾邮件文件夹。
第 6 步 - 添加警报
默认情况下,OSSEC 会对服务器上的文件修改和其他活动发出警报,但不会对新文件添加发出警报,也不会实时发出警报 - 仅在计划的系统扫描之后发出警报,默认情况下为 79200 秒(或 22 小时)。 在本节中,我们将修改 OSSEC,以便它可以对文件添加发出实时警报。
首先,打开ossec.conf
。
nano ossec.conf
向下滚动到< syscheck>部分。在标签下方<frequency>
添加< alert\_new\_files>yes< /alert\_new\_files >
。
<syscheck>
<!-- Frequency that syscheck is executed - default to every 22 hours -->
<frequency>79200</frequency>
<alert_new_files>yes</alert_new_files>
当您仍然ossec.conf
打开时,请查看OSSEC监视的系统目录列表,该列表位于您修改的最后一行下方。 添加report_changes="yes" realtime="yes"
到两个目录标签。
<!-- Directories to check (perform all possible verifications) -->
<directories report_changes="yes" realtime="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories report_changes="yes" realtime="yes" check_all="yes">/bin,/sbin</directories>
除了 OSSEC 已配置为监控的默认目录列表之外,您还可以添加任何您想要监控的目录。例如,您可以添加您的主目录。为此,请在其他目录行下方添加此新行,替换您的用户名。
<!-- Directories to check (perform all possible verifications) -->
<directories report_changes="yes" realtime="yes" check_all="yes">/etc,/usr/bin,/usr/sbin</directories>
<directories report_changes="yes" realtime="yes" check_all="yes">/bin,/sbin</directories>
<directories report_changes="yes" realtime="yes" check_all="yes">/home/<^sammy</directories><^>
现在保存并关闭ossec.conf
。
下一个要修改的文件在/var/ossec/rules
目录中,因此请更改到该目录。
cd /var/ossec/rules
该/var/ossec/rules
目录包含许多 XML 文件,其中包括ossec_rules.xml
,其中包含 OSSEC 的默认规则定义,以及local_rules.xml
,您可以在其中添加自定义规则。
在 中ossec_rules.xml
,当文件添加到受监控目录时触发的规则是规则 554。默认情况下,当触发该规则时,OSSEC 不会发出警报,因此这里的任务是改变这种行为。以下是规则 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 并对其进行修改以触发警报。为此,请打开local_rules.xml
。
nano local_rules.xml
在文件末尾,在 </group> 标签的行之前添加以下内容。
<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 以应用更改。
/var/ossec/bin/ossec-control restart
现在,每当添加、修改或删除文件时,您都应该会收到警报。请注意,OSSEC 不会实时发出文件添加警报,只有在进行完整系统扫描后才会发出警报。
第 6 步(可选) - 停止 IPTables 拒绝警报
在此步骤中,这是可选的但强烈推荐,我们将配置 OSSEC 以不对 IPTables 拒绝消息发出警报。
在本教程开始时,我们启用了 IPTables 防火墙。安装 OSSEC 后,它将根据规则 1002 发出警报,当 IPTables 拒绝攻击者并将事件记录到系统日志时,就会触发该警报。虽然知道攻击者何时被挫败是件好事,但这样的警报每天可能有数百条,会堵塞您的收件箱。
要删除这些警报,我们需要自定义规则 1002。该规则位于 中/var/ossec/rules/syslog_rules.xml
,如下所示:
<rule id="1002" level="2">
<match>$BAD_WORDS</match>
<options>alert_by_email</options>
<description>Unknown problem somewhere in the system.</description>
</rule>
打开syslog_rules.xml
以进行编辑。
nano /var/ossec/rules/syslog_rules.xml
找到BAD_WORDS
变量,该变量定义在该文件的顶部,包含许多关键字。它看起来像这样:
<var name="BAD_WORDS">core_dumped|failure|error|attack|bad |illegal |denied|refused|unauthorized|fatal|failed|Segmentation Fault|Corrupted</var>
在定义下方BAD_WORDS
,复制并粘贴这个新变量IGNORED_WORD
。该变量只包含一个关键字。
<var name="BAD_WORDS">core_dumped|failure|error|attack|bad |illegal |denied|refused|unauthorized|fatal|failed|Segmentation Fault|Corrupted</var>
<var name="IGNORED_WORD">denied</var>
然后,我们将在规则 1002 的自定义版本中使用新IGNORED_WORD
变量,我们将其称为规则 100031。完整规则如下所示。将其复制并粘贴到文件底部,位于带有 group 标签的行之前。
<rule id="100031" level="0">
<if_sid>1002</if_sid>
<match>$IGNORED_WORD</match>
<description>Ignored IPTables deny messages.</description>
</rule>
</group>
<!-- EOF -->
保存并关闭文件。使用变量和自定义规则,重新启动OSSEC。
/var/ossec/bin/ossec-control restart
这样,OSSEC 应该停止发送 IPTables 拒绝消息的警报。
结论
这就是在 Debian 8 服务器上安装和配置本地 OSSEC 所需的全部内容。还有很多进一步的自定义功能,您可以在项目官方文档中进行探索。