介绍
能够检测可能指示入侵尝试的网络活动可以帮助您在事件发生之前采取适当的措施。 入侵检测系统可用于此特定原因。
入侵检测系统用于记录可疑连接,并在其发生异常活动时进行报告。 一些程序仅仅用作通知系统,而其他程序可以主动尝试阻止似乎意图导致危害的流量。
该psad
工具,它代表端口扫描攻击检测,是一种软件可以主动监控您的防火墙日志,以确定是否扫描或攻击事件正在进行中。 然后它可以警告管理员,或采取积极措施来阻止威胁。
在本指南中,我们将探讨如何在Ubuntu 12.04 VPS上安装和配置psad。 在其他分布上的程序应该是相似的。
安装psad
psad入侵检测系统在Ubuntu的默认存储库中可用,因此可以通过apt容易地获取:
sudo apt-get update
sudo apt-get install psad
为了配置邮件传递以向管理员发出警告,系统将要求您配置Stapling邮件服务器。
在大多数情况下,您可以选择“Internet站点”,然后输入与您的服务器相关联的域名。 这将是在psad生成的电子邮件中的“From”字段中使用的名称的域部分。
配置IPTables规则
psad检测服务器端口上的活动的方式是监视防火墙应用程序生成的日志。 Ubuntu默认附带了iptables防火墙,但它完全未配置,默认情况下不监视或阻止任何内容。
虽然您可以通过键入以下命令简单地启用日志记录,我们将做一个更健壮的配置:
sudo iptables -A INPUT -j LOG
sudo iptables -A FORWARD -j LOG
如果您输入了上述规则,请在配置之前清除规则,以便我们可以从头开始。
sudo iptables -F
您可以通过键入以下内容查看当前规则(此时应仅包括默认策略):
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
我们现在可以开始添加我们的规则,主要是INPUT链。 我们想告诉iptables丢弃我们不需要或不想要的连接。 我们需要添加规则以在添加限制之前显式允许我们的授权连接。
第一个规则将允许我们的服务器生成的所有流量定向到我们的服务器。 这种类型的连接通常用于服务彼此通信和容易传递信息:
sudo iptables -A INPUT -i lo -j ACCEPT
接下来,我们要添加一个规则,以显式允许与现有连接相关的所有流量。 这将允许我们当前的会话继续不间断:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
接下来,我们可以添加我们希望向公众开放的服务。 对于SSH,我们可以添加如下行:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果我们有一个Web服务器在默认端口80上运行,我们可以添加一个这样的规则:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
添加任何其他端口为合法,可公开访问的服务,您希望保持打开以相同的语法:
sudo iptables -A INPUT -p protocol --dport port_num -j ACCEPT
完成添加合法服务后,我们将删除所有剩余的连接。 任何违反此规则的内容都不符合我们对合法流量的规则。
在我们这样做之前,我们需要添加一个规则,让iptables开始记录流量。 这将导致iptables记录尚未处理的流量。
sudo iptables -A INPUT -j LOG
我们还应该将此规则添加到前向链,以防我们最终在其他地方转发流量。
sudo iptables -A FORWARD -j LOG
最后,让我们删除所有尚未匹配的无关流量。 我们可以通过添加一个匹配链中所有内容的规则到结束像这样做:
sudo iptables -A INPUT -j DROP
或者,我们可以使用内置的策略功能来配置当数据包通过链而不匹配任何规则时发生的情况:
sudo iptables -P INPUT DROP
结果在功能上完全相同。
需要注意的一点是,如果你需要刷新你的iptables,并且你设置一个DROP策略(而不是添加它作为一个规则在链的底部),你应该在冲洗之前扭转策略:
sudo iptables -P INPUT ACCEPT
sudo iptables -F
如果你没有这样做,你的iptables规则将被刷新,只有丢弃所有传入数据包的默认策略将保留。 这将切断进入您的服务器的所有网络流量,包括来自您的SSH连接的流量。
默认情况下,iptables不会在重新启动之间维护它的规则,所以在你测试了你的配置,并确保它做你想要的,你可以下载并启用一个工具,使这些规则持久化:
sudo apt-get install iptables-persistent
sudo service iptables-persistent start
配置psad以检测扫描
现在我们有一个配置了所谓的“默认丢弃”策略的iptables规则集,我们可以开始配置psad来开始解析日志。
使用root权限打开主psad配置文件:
sudo nano /etc/psad/psad.conf
你应该修改的第一件事是在文件的顶部。 你应该改变EMAIL_ADDRESSES
参数来适应您希望在生成报表时通知的电子邮件地址。 你也应该修改HOSTNAME
到你自己的域名,以便它引用正确的机器:
EMAIL_ADDRESSES address1@domain.com, address2@other.com; HOSTNAME your_domain.com;
确保用分号(;)结束每行,以使psad正确读取文件。
你可能想看看的一个部分是“危险级别”声明。 这些级别是psad对威胁级别进行分类的一种方式。
它们由事件中涉及的数据包数量自动确定,但您也可以将某些类型的流量分配为特定危险级别。 要达到的每个级别的默认阈值为:
DANGER_LEVEL1 5;
DANGER_LEVEL2 15;
DANGER_LEVEL3 150;
DANGER_LEVEL4 1500;
DANGER_LEVEL5 10000;
您可以根据您希望psad用于警报的敏感级别更改这些级别。
您还可以配置PSAD的敏感程度将通过PORT_RANGE_SCAN_THRESHOLD
参数。 这将确定在生成警报之前必须扫描的范围中的端口数。 默认设置是在扫描两个端口后出现警报。
PORT_RANGE_SCAN_THRESHOLD 1;
其中一个配置最重要的事情是IPT_SYSLOG_FILE
参数,因为它目前是不是在默认情况下Syslog使用的文件指出。
将其修改为指向syslog文件,其中psad实际上有机会查看活动日志:
IPT_SYSLOG_FILE /var/log/syslog;
如果您使用特定端口的东西像端口碰撞 ,你应该告诉PSAD忽略这些端口的尝试,这样你就不会触发通过日常活动警报:
IGNORE_PORTS ports_or_range_to_ignore;
您同样可以忽略通过适当命名的基础上其他事情的消息IGNORE_PROTOCOLS
, IGNORE_INTERFACES
和IGNORE_LOG_PREFIXES
参数。
如果您发现收到快讯的频率过高,您可以通过调整在发送电子邮件之前必须达到的级别来设置电子邮件的阈值:
MIN_DANGER_LEVEL 1; # Controls psad logging and email alerts
EMAIL_ALERT_DANGER_LEVEL 1; # Applies only for email alerts
您也可以直接通过设置以下内容来限制电子邮件数量:
EMAIL_LIMIT 0;
零表示没有限制。 此限制是可以由单个IP地址的威胁生成的电子邮件数。
暂时,让我们保存并关闭文件。
实现psad入侵检测
现在,我们有一个基本的PSad配置,完成警报功能,我们可以实施我们的政策和激活我们的系统。
在我们开始之前,我们应该更新psad的签名定义,以便它可以正确识别已知的攻击类型。 通过调用:
sudo psad --sig-update
这将获取最新的文件并更新数据库。
现在,我们需要重新启动服务以使用这些更新并实现我们的配置更改。 类型:
sudo service psad restart
这将实现我们的日志监视。 要查看psad检测到的事件的当前状态,请键入:
sudo service psad status
[+] psadwatchd (pid: 3737) %CPU: 0.0 %MEM: 0.0
Running since: Fri Jan 10 15:36:04 2014
[+] psad (pid: 3735) %CPU: 0.0 %MEM: 0.3
Running since: Fri Jan 10 15:36:04 2014
Command line arguments: [none specified]
Alert email address(es): example@domain.com
[+] Version: psad v2.1.7
[+] Top 50 signature matches:
[NONE]
[+] Top 25 attackers:
[NONE]
[+] Top 20 scanned ports:
[NONE]
[+] iptables log prefix counters:
[NONE]
Total packet counters: tcp: 0, udp: 0, icmp: 0
[+] IP Status Detail:
[NONE]
Total scan sources: 0
Total scan destinations: 0
[+] These results are available in: /var/log/psad/status.out
正如你所看到的,还没有发现。 我们还可以看到,检测到的事件记录到位于文件/var/log/psad/
。
执行测试端口扫描
从另一台计算机,我们应该尝试扫描我们的服务器的端口,以在防火墙上生成一些命中。 我们可以用这样做nmap
工具。
我们将从另一台机器执行SYN tcp端口扫描。 我们会告诉它假设我们的主机正常传递它-PN
选项:
sudo nmap -PN -sS server_domain_or_ip
Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-10 15:54 EST Nmap scan report for server_domain_or_ip Host is up (0.013s latency). Not shown: 999 filtered ports PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 6.84 seconds
如您所见,此扫描指示我为防火墙配置的内容。 每个端口标记为“过滤”,表示受防火墙保护,除了暴露的SSH端口。
在您的服务器上,您应该重新运行status命令:
sudo service psad status
您应该看到更多的警报列表。 因为事件只是一个1000端口扫描,它触发签名匹配许多不同的威胁。 对于一个更尖锐的攻击,它集中在一个特定的端口或入口点,签名将更有帮助。
如果您设置了电子邮件提醒,您应该也已收到一封电子邮件或两封电子邮件。 如果您有与扫描的计算机相关联的域,那么您应该看到与扫描相关联的所有者的“谁是”报告。
您可以使用它尝试联系IP的所有者,或者ISP或托管服务提供商。
实施入侵防御
现在我们已经验证我们可以检测试图访问我们的服务器的活动,我们可以选择实现一个预防机制,其中psad可以自动修改iptables规则禁止扫描程序。
我们这样做之前,我们应该先看看该auto_dl
文件:
sudo nano /etc/psad/auto_dl
此文件指定应自动设置某些IP地址的危险级别。 例如,如果我们有一个攻击者不断尝试探测我们的系统,我们可以自动将其设置为危险级别5:
attacker_ip 5;
另一方面,你可以基本上免除某些IP地址从psad中引发反应。 我们可以在这里添加localhost并将其设置为“0”,如果我们没有明确地在iptables中添加规则。
为了我们的目的,由于我们将设置psad来自动阻止来自检测到的威胁IP的流量,我们应该将我们的家庭计算机添加到此列表,以便我们不会锁定:
local_computer_ip 0;
保存并在完成后关闭文件。
再次打开psad配置文件:
sudo nano /etc/psad/psad.conf
搜索名为参数ENABLE_AUTO_IDS
。 这是允许psad修改我们的防火墙以阻止某些地址的规则。 如果你想自动这样做,你可以这样改变:
ENABLE_AUTO_IDS Y;
接下来,我们要决定什么是足够大的威胁级别来阻止违规IP。 我们可以通过调整这个参数来实现:
AUTO_IDS_DANGER_LEVEL 5;
另一个重要选项是总阻塞时间(秒):
AUTO_BLOCK_TIMEOUT 3600;
默认情况下,这将阻止他们一个小时。
测试入侵防御
我们可以通过临时禁止我们自己来测试这是如何工作的。 在同一个配置文件中,我们将设置这些参数:
ENABLE_AUTOIDS Y;
AUTO_IDS_DANGER_LEVEL 4;
AUTO_BLOCK_TIMEOUT 60;
这将打开自动防火墙配置,将阈值设置为危险级别4,我们使用正常的SYN扫描命中,并将阻塞时间设置为60秒。
保存并关闭文件。
打开auto_dl
文件,如果您添加的家的IP地址,并暂时评论说出来。
# local_computer_ip 0;
现在,重新启动psad,使其重新读取这些文件:
sudo service psad restart
从家用计算机,您可以重新运行上次您执行的扫描:
sudo nmap -PN -sS server_domain_or_ip
在这一点上,几秒钟后,如果您通过SSH连接到您的psad机器,您的连接应该删除。 您将无法再连接60秒。
这是因为psad在您的扫描击中足够多的端口以达到危险级别4时采取了行动。它修改了iptables规则,将流量转移到其他暂时阻止您的IP的链。
一旦您能够再次登录,您可以通过检查您的iptable规则,看到这个转移的残余:
sudo iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N PSAD_BLOCK_FORWARD
-N PSAD_BLOCK_INPUT
-N PSAD_BLOCK_OUTPUT
-A INPUT -j PSAD_BLOCK_INPUT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j LOG
-A FORWARD -j PSAD_BLOCK_FORWARD
-A FORWARD -j LOG
-A OUTPUT -j PSAD_BLOCK_OUTPUT
正如你所看到的,创建了更多的链,并且所有输入都被引导到这些链中的一个。 在禁令期间,此链将删除您的家庭连接的IP的连接尝试。
现在您已测试此功能,将其还原为您要使用的。 如果您计划实际使用此功能,则应该增加禁用长度。 此外,您应该重新添加您知道您将连接到的IP地址:
local_computer_ip 0;
ENABLE_AUTOIDS Y; AUTO_IDS_DANGER_LEVEL 5; AUTO_BLOCK_TIMEOUT 3600;
在为现实应用程序配置服务后,不要忘记重新启动psad:
sudo service psad restart
请记住,有一些类型的攻击可以欺骗源IP地址。 这意味着,如果怀疑您启用了自动阻止功能的攻击者,可能会导致您意外禁止合法网站或服务。 要非常小心,并且权衡这种类型的配置的成本和好处。
结论
通过正确配置网络入侵检测工具(如psad),您可以在问题实际发生之前增加获取有关威胁的必要警告的机会。 像psad这样的工具可以提供高级警告,并可以自动处理某些情况。
有效使用psad的关键是正确配置危险级别和电子邮件警报,然后跟进任何问题。 这个工具,再加上其他的入侵检测资源,如绊线能够提供相当不错的覆盖率,能够检测到入侵企图。