网络入侵检测的应用程序可以监控可疑流量并测试安全漏洞的网络接口。在本文中,我们将配置一个名为psad
工具来监控我们的防火墙日志,并确定是否有问题。
入侵检测系统用于记录可疑连接,并在发生异常活动时进行报告。有些程序纯粹用于系统通知,而其他程序可以主动尝试阻止似乎意图造成伤害的流量。psad
工具可以进行端口扫描攻击检测,psad
是一种主动监视防火墙日志以确定扫描或攻击事件是否正在进行的软件。它可以提醒管理员,或采取积极措施来阻止威胁。
在本文中,我们将探讨如何在Ubuntu 的服务器上安装和配置psad
。没有服务器的同学,我建议您使用腾讯云免费的开发者专属在线实验平台进行试验。
psad入侵检测系统在Ubuntu的默认库中,因此可以通过apt轻松获取安装:
sudo apt-get update
sudo apt-get install psad
为了通过邮件把警告发给管理员,系统会要求您配置postfix邮件服务器。
您可以选择“Internet站点”,然后输入与您的服务器关联的域名。这是psad生成的电子邮件中“发件人”字段中使用的域部分。
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
现在我们可以开始附加我们的规则,主要是入站规则。告诉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
如果我们在默认端口80上运行Web服务器,我们可以添加如下规则:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
使用相同的语法可服务添加任何其他端口:
sudo iptables -A INPUT -p protocol --dport port_num -j ACCEPT
完成添加服务后,我们将删除所有剩余的连接。我们需要添加告诉iptables开始记录流量的规则。
sudo iptables -A INPUT -j LOG
我们还应该将此规则添加到FORWARD中,以防我们最终在其他地方转发流量。
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
现在我们已经配置了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的“危险级别”声明。这些级别是psad对威胁级别进行分类的一种方式。它们由事件中涉及的数据包数自动确定,但您也可以将某些类型的流量分配为某个危险等级。要达到的每个级别的默认阈值是:
DANGER_LEVEL1 5;
DANGER_LEVEL2 15;
DANGER_LEVEL3 150;
DANGER_LEVEL4 1500;
DANGER_LEVEL5 10000;
您可以根据psad的警报的灵敏度级别来更改这些级别。
您还可以通过PORT_RANGE_SCAN_THRESHOLD
参数来配置psad的敏感程度。这里是确定在引发警报之前必须扫描的范围内的端口数。默认情况下,扫描两个端口后会引发警报。
PORT_RANGE_SCAN_THRESHOLD 1;
配置最重要的事情之一是配置IPT_SYSLOG_FILE
参数,因为它当前没有指向syslog默认的文件。将其修改为指向syslog文件。
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的签名定义,以便它能够正确识别已知的攻击类型。
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
命令对这台服务器端口进行扫描。看看psad能否判断出来。我们将从另一台机器进行SYN tcp端口扫描。
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个端口扫描,因此触发了许多不同威胁的签名匹配。对于针对特定端口或入口点的攻击,签名将更有帮助。
如果您设置了电子邮件提醒,那么您本应该收到一两封电子邮件。如果您有与您扫描的计算机相关联的域,则应该看到与扫描关联的所有者的“谁是”报告。
现在我们已经验证了我们可以检测到尝试访问我们服务器的活动,我们可以选择实现一种预防机制,其中psad可以自动修改iptables规则以禁止扫描程序。
在我们这样做之前,我们应该看看auto_dl
文件:
sudo nano /etc/psad/auto_dl
此文件指定我们应自动设置某些IP地址的危险等级。例如,如果我们有一个持续尝试探测我们系统的攻击者,我们可以自动将它们设置为危险等级5:
attacker_ip 5;
您也可以免除某些IP地址引发psad的反应。如果我们没有在iptables中明确添加规则,我们可以在这里添加localhost并将其设置为“0”。
我们应该将我自己的计算机IP添加到此列表中,以便psad不会锁定自己:
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地址:
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的关键是适当地配置危险等级和电子邮件警报。此工具与其他入侵检测资源相结合,可以提供相当好的覆盖范围,以便能够检测入侵企图。
参考文献:《How To Use psad to Detect Network Intrusion Attempts on an Ubuntu VPS》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。