介绍
能够检测到可能表明入侵尝试的网络活动可以帮助您在发生事件之前采取适当的行动。
入侵检测系统用于记录可疑连接并报告看起来不寻常的活动发生时,有些程序被用作纯粹的通知系统,而其他程序可以积极尝试阻止似乎有意造成伤害的流量。
psad
工具,即端口扫描攻击检测,是一个软件,积极监控你的防火墙日志,以确定是否正在进行扫描或攻击事件。
在本指南中,我们将探索如何在Ubuntu 12.04 VPS上安装和配置psad。
安装 psad
psad 入侵检测系统在 Ubuntu 的默认存储库中可用,因此可以通过 apt 轻松获取:
1sudo apt-get update
2sudo apt-get install psad
为了配置邮件发送通知管理员,您将被要求配置邮件服务器。
在大多数情况下,您可以选择互联网网站
,然后输入与您的服务器相关的域名. 这将是由 psad 生成的电子邮件中从
字段中使用的域名部分。
设置IPTables规则
psad 检测服务器端口上的活动的方式是监控防火墙应用程序产生的日志. Ubuntu 默认情况下使用 iptables 防火墙,但它完全没有配置,并且默认情况下不监控或阻止任何东西。
虽然您可以通过键入以下命令来轻松启用日志,但我们会做一个更强大的配置:
1sudo iptables -A INPUT -j LOG
2sudo iptables -A FORWARD -j LOG
如果您输入了上述规则,请在配置之前清洗规则,以便我们可以从头开始。
1sudo iptables -F
您可以通过键入查看当前的规则(此时只应包含默认策略):
1sudo iptables -S
1-P INPUT ACCEPT
2-P FORWARD ACCEPT
3-P OUTPUT ACCEPT
我们现在可以开始附加我们的规则,主要是INPUT链。我们希望告诉iptables放弃我们不需要或不想要的连接。
第一条规则将允许我们服务器生成的所有流量,转向我们的服务器,这种类型的连接通常用于服务相互通信并轻松传输信息:
1sudo iptables -A INPUT -i lo -j ACCEPT
接下来,我们想添加一个规则,明确允许与现有连接相关的所有流量,这将允许我们当前的会话继续不间断:
1sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
接下来,我们可以添加我们希望向公众开放的服务,对于SSH,我们可以添加这样的行:
1sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果我们有一个 Web 服务器在默认端口 80 上运行,我们可以添加这样的规则:
1sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
添加您希望使用相同语法打开的合法、公开可访问的服务的任何其他端口:
1sudo iptables -A INPUT -p protocol --dport port_num -j ACCEPT
您完成添加合法服务后,我们将放弃所有剩余的连接. 任何触及此规则的内容都与我们的合法流量规则不符。
在我们这样做之前,我们需要添加一个规则,告诉iptables开始记录流量,这将导致iptables记录尚未处理的流量。
1sudo iptables -A INPUT -j LOG
我们还应该将这个规则添加到前端链中,如果我们最终将流量转移到其他地方。
1sudo iptables -A FORWARD -j LOG
最后,让我们放下尚未匹配的所有外部流量,我们可以通过添加一个将链中的一切匹配到尽头的规则来做到这一点:
1sudo iptables -A INPUT -j DROP
或者,我们可以使用内置的策略功能来配置当一个包通过链条而不匹配任何规则时会发生什么:
1sudo iptables -P INPUT DROP
结果在功能上完全相同。
值得注意的是,如果您需要清洗 iptables 并设置 DROP 策略(而不是将其添加为链条底部的规则),则应在清洗之前扭转策略:
1sudo iptables -P INPUT ACCEPT
2sudo iptables -F
如果您未能做到这一点,您的 iptables 规则将被清除,只保留放弃所有入口包的默认策略,这将切断所有进入您的服务器的网络流量,包括来自您的 SSH 连接的流量。
默认情况下,iptables 不会在重启之间维持其规则,所以在您测试配置并确信它能完成您想要的操作后,您可以下载并启用使这些规则持久的工具:
1sudo apt-get install iptables-persistent
2sudo service iptables-persistent start
配置 psad 以检测扫描
现在我们有一个 iptables 规则集配置了所谓的默认放下
策略,我们可以开始配置 psad 来开始分析日志。
打开主 psad 配置文件,使用 root 特权:
1sudo nano /etc/psad/psad.conf
您应该修改的第一件事是文件的顶部。您应该更改EMAIL_ADDRESSES
参数以匹配您想在生成报告时通知的电子邮件地址。您还应该更改HOSTNAME
以匹配您的域名,以便它引用正确的机器:
1EMAIL_ADDRESSES [email protected], [email protected];
2
3HOSTNAME your_domain.com;
请确保以半列(;)结束每个行,以便 psad 正确阅读文件。
您可能想看看的一个部分是危险级别
声明,这些级别是PSAD分类威胁级别的一种方式。
它们是由参与事件的包数量自动确定的,但您也可以将某些类型的流量分配为一定的危险级别。
1DANGER_LEVEL1 5;
2DANGER_LEVEL2 15;
3DANGER_LEVEL3 150;
4DANGER_LEVEL4 1500;
5DANGER_LEVEL5 10000;
您可以根据您希望 psad 用于警报的敏感度级别来更改这些级别。
您还可以通过PORT_RANGE_SCAN_THRESHOLD
参数来配置 psad 的敏感性,这决定了在发出警报之前必须扫描的范围内的端口数量。
1PORT_RANGE_SCAN_THRESHOLD 1;
配置最重要的事情之一是IPT_SYSLOG_FILE
参数,因为它目前没有指向 syslog 默认使用的文件。
修改此,以指向 syslog 文件,其中 psad 实际上将有机会查看活跃日志:
1IPT_SYSLOG_FILE /var/log/syslog;
如果您使用某些端口用于诸如 端口敲击,您应该告诉 psad 忽略这些端口的尝试,以免通过常规活动触发警报:
1IGNORE_PORTS ports_or_range_to_ignore;
同样,您可以通过适当命名的IGNORE_PROTOCOLS
,IGNORE_INTERFACES
和IGNORE_LOG_PREFIXES
参数来忽略基于其他事物的消息。
如果您发现您经常收到警报,您可以通过调整电子邮件发送前必须达到的水平来设置电子邮件的门槛:
1MIN_DANGER_LEVEL 1; # Controls psad logging and email alerts
2EMAIL_ALERT_DANGER_LEVEL 1; # Applies only for email alerts
您也可以通过此设置直接限制电子邮件的数量:
1EMAIL_LIMIT 0;
零意味着没有限制. 这个限制是可以由来自单个IP地址的威胁生成的电子邮件数量。
现在,让我们保存并关闭文件。
psad 入侵检测
现在我们有一个基本的 psad 配置,完整的警报功能,我们可以实施我们的策略和激活我们的系统。
在我们开始之前,我们应该更新 psad 的签名定义,以便它能够正确识别已知的攻击类型。
1sudo psad --sig-update
这将获取最新的文件并更新数据库。
现在,我们需要重新启动服务以使用这些更新并实施我们的配置更改。
1sudo service psad restart
这将实现我们的日志监控。 若要查看 psad 检测事件的当前状态,请键入:
1sudo service psad status
1[+] psadwatchd (pid: 3737) %CPU: 0.0 %MEM: 0.0
2 Running since: Fri Jan 10 15:36:04 2014
3
4[+] psad (pid: 3735) %CPU: 0.0 %MEM: 0.3
5 Running since: Fri Jan 10 15:36:04 2014
6 Command line arguments: [none specified]
7 Alert email address(es): example@domain.com
8
9[+] Version: psad v2.1.7
10
11[+] Top 50 signature matches:
12 [NONE]
13
14[+] Top 25 attackers:
15 [NONE]
16
17[+] Top 20 scanned ports:
18 [NONE]
19
20[+] iptables log prefix counters:
21 [NONE]
22
23 Total packet counters: tcp: 0, udp: 0, icmp: 0
24
25[+] IP Status Detail:
26 [NONE]
27
28 Total scan sources: 0
29 Total scan destinations: 0
30
31[+] These results are available in: /var/log/psad/status.out
正如你所看到的,还没有找到任何东西,我们还可以看到检测到的事件被记录在位于 /var/log/psad/
的文件中。
测试端口扫描
从另一台计算机上,我们应该尝试扫描我们的服务器的端口,以生成防火墙上的一些打击。
我們將從另一台機器進行 SYN tcp 端口掃描,我們將告訴它假設我們的主機已經升起,通過「-PN」選項:
1sudo nmap -PN -sS server_domain_or_ip
1Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-10 15:54 EST
2Nmap scan report for server_domain_or_ip
3Host is up (0.013s latency).
4Not shown: 999 filtered ports
5PORT STATE SERVICE
622/tcp open ssh
7
8Nmap done: 1 IP address (1 host up) scanned in 6.84 seconds
正如你所看到的,这个扫描显示了我为我的防火墙配置的内容,每个端口都被标记为过滤
,表明它被防火墙保护,除了SSH端口,该端口被曝光。
在您的服务器上,您应该重新运行状态命令:
1sudo service psad status
您应该看到一个更大的警报列表,因为该事件只是一个1000个端口扫描,它会引发许多不同的威胁的签名匹配。
如果您有与您扫描的计算机相关的域,您应该看到与扫描相关的所有者谁是
报告。
您可以使用此方法尝试联系IP的所有者,或者可能是ISP或托管提供商。
实施侵入防范
现在我们已经验证了我们可以检测到试图访问我们的服务器的活动,我们可以选择实施预防机制,其中PSAD可以自动修改iptables规则以禁止扫描仪。
在我们这样做之前,我们应该看看auto_dl
文件:
1sudo nano /etc/psad/auto_dl
例如,如果我们有一个攻击者不断试图扫描我们的系统,我们可以自动将其设置为危险级别5:
1attacker_ip 5;
另一方面,你可以基本上免除某些IP地址从psad引发反应,我们可以在这里添加 localhost,并将其设置为0
,如果我们没有明确地在我们的iptables中添加一个规则。
为了我们的目的,因为我们将设置psad自动阻止被检测到的威胁IP的流量,我们应该将我们的家庭计算机添加到这个列表中,以便我们不会锁定自己:
1local_computer_ip 0;
保存并关闭文件,当你完成。
再次打开 psad 配置文件:
1sudo nano /etc/psad/psad.conf
搜索名为ENABLE_AUTO_IDS
的参数. 这是允许 psad 修改我们的防火墙以阻止某些地址的规则。
1ENABLE_AUTO_IDS Y;
接下来,我们要决定什么构成足够大的威胁级别来阻止侵权IP,我们可以通过调整这个参数来做到这一点:
1AUTO_IDS_DANGER_LEVEL 5;
另一个重要选项是分秒的总区块时间:
1AUTO_BLOCK_TIMEOUT 3600;
这将默认地阻止他们一个小时。
入侵预防测试
我们可以通过暂时禁止我们自己来测试这种功能,在相同的配置文件中,我们将设置这些参数:
1ENABLE_AUTOIDS Y;
2AUTO_IDS_DANGER_LEVEL 4;
3AUTO_BLOCK_TIMEOUT 60;
这将启用自动防火墙配置,设置危险级别为危险级别4,我们通过正常的SYN扫描击中,并设置区块时间为60秒。
保存并关闭文件。
如果您添加了您的主 IP 地址,打开auto_dl
文件,并暂时评论它。
1# local_computer_ip 0;
现在,重新启动 psad 以使其重新读取这些文件:
1sudo service psad restart
从您的家庭计算机,您可以重新运行上次进行的扫描:
1sudo nmap -PN -sS server_domain_or_ip
在此时,在几秒钟后,如果您通过SSH连接到您的psad机,您的连接应该被放弃。
這是因為 psad 採取行動,當您的掃描擊中足夠的端口以達到危險級別 4 時,它改變了 iptables 規則,以轉移流量到暫時封鎖您的 IP 的其他連鎖。
一旦您能够再次登录,您可以通过检查您的 iptable 规则来查看此转移的剩余部分:
1sudo iptables -S
1-P INPUT DROP
2-P FORWARD ACCEPT
3-P OUTPUT ACCEPT
4-N PSAD_BLOCK_FORWARD
5-N PSAD_BLOCK_INPUT
6-N PSAD_BLOCK_OUTPUT
7-A INPUT -j PSAD_BLOCK_INPUT
8-A INPUT -i lo -j ACCEPT
9-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
10-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
11-A INPUT -j LOG
12-A FORWARD -j PSAD_BLOCK_FORWARD
13-A FORWARD -j LOG
14-A OUTPUT -j PSAD_BLOCK_OUTPUT
正如你所看到的,更多的链条被创建,所有输入都被引导到这些链条中的一种。
现在您已经测试了此功能,请将其返回您想要使用的位置。如果您计划实际使用此功能,您可能应该增加禁令长度,此外,您还应该重新添加您知道将连接的IP地址:
1local_computer_ip 0;
1ENABLE_AUTOIDS Y;
2AUTO_IDS_DANGER_LEVEL 5;
3AUTO_BLOCK_TIMEOUT 3600;
不要忘了在完成为现实世界应用程序配置服务时重新启动 psad:
1sudo service psad restart
请记住,有某些类型的攻击可以欺骗源IP地址,这意味着如果攻击者怀疑您启用了自动阻止功能,可能会导致您意外禁止合法网站或服务。
结论
通过正确配置网络入侵检测工具(如 psad),您可以增加在实际发生问题之前获得有关威胁的必要警告的机会。
有效使用 psad 的关键是正确配置危险级别和电子邮件警报,然后跟踪任何问题. 这个工具,加上其他入侵检测资源,如 tripwire可以提供相当好的覆盖,以便能够检测入侵尝试。