如何在Debian8上设置本地OSSEC安装

来自菜鸟教程
跳转至:导航、​搜索

介绍

OSSEC 是一个开源的、基于主机的入侵检测系统 (HIDS),它执行日志分析、完整性检查、Windows 注册表监控、rootkit 检测、基于时间的警报和主动响应。 如果您想密切关注其中发生的事情,它就是安装在您的服务器上的应用程序。

可以安装 OSSEC 以仅监视它所安装的服务器,用 OSSEC 的说法是 本地 安装,或者安装为 服务器 以监视一个或多个 代理 [ X199X]。 在本教程中,您将学习如何安装 OSSEC 以监控安装它的 Debian 8 服务器,即 local OSSEC 安装。

先决条件

要遵循本教程,您将需要:

  • 一个带有 sudo 非 root 用户和 SSH 密钥的 Debian 8 Droplet,您可以按照 本教程 进行设置。

第 1 步 — 安装所需的软件包

在这一步中,我们将安装 OSSEC 所需的软件包。 首先,更新包数据库。

sudo apt-get update

然后安装可用的更新。

sudo apt-get -y upgrade

最后,安装 OSSEC 的依赖项(build-essentialinotify-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 规则文件。

使用 nano 或您喜欢的文本编辑器打开 rules.v4 规则文件。

sudo nano /etc/iptables/rules.v4

该文件的完整内容如下所示:

原始 /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

您的输出将如下所示:

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 交付。 在此步骤中,您将下载它及其校验和文件,该文件用于验证 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

下载这两个文件后,验证压缩 tarball 的 md5sum。

md5sum -c ossec-hids-2.8.1-checksum.txt

输出应该是:

md5sum 输出

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

它的输出应该是:

sha1sum 输出

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

注意:在 2.8.1 版本中引入了 OSSEC 中的一个错误。 该错误导致它覆盖 /etc/hosts.deny 文件的内容。 2.9 版中已经有一个永久修复,应该很快就会发布。


要修复 /etc/hosts.deny 错误,请在从下载的 tarball 中解压 OSSEC 后,打开 /var/ossec/active-response 目录下的 host-deny.sh 文件。

nano active-response/host-deny.sh

在文件末尾,在 # Deleting from hosts.deny 注释下方的以下代码中查找以 TMP_FILE = 开头的两行。 编辑这两行以删除 = 符号两侧的空格,使代码块看起来像这样。

修改 host-deny.sh 代码块

# 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 服务器。

如果安装成功,安装后输出的最后几行应为:

OSSEC安装成功输出

- 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

电子邮件设置位于文件顶部,如下所示。

/var/ossec/etc/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>

'<电子邮件收件人> 是您在安装过程中提供的电子邮件。 警报将发送到该电子邮件地址,并且 ' 是安装脚本自动发现的 SMTP 服务器。 您不必更改这些值。

<电子邮件发件人> 是 OSSEC 的警报似乎来自的电子邮件地址。 默认情况下,它是根据 OSSEC 的邮件用户帐户和服务器的主机名创建的。 您应该将其更改为有效的电子邮件地址,以降低您的电子邮件被电子邮件提供商的 SMTP 服务器标记为垃圾邮件的几率。 注意 <电子邮件收件人><电子邮件发件人> 如果接收 SMTP 服务器没有严格的垃圾邮件策略,则可以相同。

修改电子邮件设置后,保存并关闭文件。 然后启动 OSSEC。

/var/ossec/bin/ossec-control start

检查您的收件箱中是否有一封说明 OSSEC 已启动的电子邮件。 如果您收到来自 OSSEC 安装的电子邮件,那么您知道未来的警报也会到达您的收件箱。 如果没有,请检查您的垃圾邮件文件夹。

第 6 步 — 添加警报

默认情况下,OSSEC 会在服务器上的文件修改和其他活动发出警报,但不会对新文件添加发出警报,也不会实时发出警报——仅在计划的系统扫描之后,即 79200 秒(或 22小时)默认情况下。 在本节中,我们将修改 OSSEC,使其能够在文件添加时实时发出警报。

首先,打开ossec.conf

nano ossec.conf

向下滚动到 <系统检查> 部分。 在 <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 的默认规则定义的 ossec_rules.xml 和可以添加自定义规则的 local_rules.xml

ossec_rules.xml 中,将文件添加到受监视目录时触发的规则是规则 554。 默认情况下,OSSEC 在触发该规则时不会发出警报,因此这里的任务是更改该行为。 默认情况下,规则 554 如下所示:

来自 /var/ossec/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 并对其进行修改以触发警报。 为此,打开 local_rules.xml

nano 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 以应用更改。

/var/ossec/bin/ossec-control restart

现在,无论何时添加、修改或删除文件,您都应该会收到警报。 请注意,只有在完整的系统扫描之后,OSSEC 才会实时警告文件添加。

第 6 步(可选)- 停止 IPTables 拒绝警报

在这个可选但强烈推荐的步骤中,我们将配置 OSSEC 以不对 IPTables 拒绝消息发出警报。

在本教程开始时,我们启用了 IPTables 防火墙。 安装 OSSEC 后,它会在规则 1002 上发出警报,该规则在 IPTables 拒绝攻击者并将事件记录到 syslog 时触发。 虽然很高兴知道攻击者何时被挫败,但此类警报每天可能数以百计并堵塞您的收件箱。

要删除这些警报,我们需要自定义规则 1002。 该规则可在 /var/ossec/rules/syslog_rules.xml 中找到,如下所示:

/var/ossec/rules/syslog_rules.xml 中的规则 1002

<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/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。 完整的规则如下所示。 将其复制并粘贴到文件底部,在带有组标记的行之前。

<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 所需的全部内容。 有很多进一步的自定义可用,您可以在项目 官方文档 中进行探索。