在CentOS服务器上部署psad(Port Scan Attack Detector)是一种高效的入侵检测方案,它通过分析iptables/firewalld的日志来识别端口扫描行为,并自动调用iptables规则将攻击源IP封禁。整个过程从安装到配置再到自动封禁,大约需要15分钟就能完成。核心原理是:psad实时监控内核日志中的连接记录,当检测到来自同一IP的多个端口探测请求时,立即触发告警并执行封禁策略。这套方案轻量、免费、效果直接,特别适合没有预算购买商业IDS/IPS的中小规模服务器环境。
为什么CentOS服务器需要psad而不是仅靠防火墙
很多管理员觉得装了firewalld或者iptables就够了,但实际上传统防火墙只能做"被动防御"——它根据你预设的规则放行或拒绝流量,却无法主动识别"谁在扫描你"。psad的价值在于它是一个"主动感知层",它不修改防火墙规则本身,而是从日志层面发现异常行为后,动态追加封禁规则。简单说,防火墙是门锁,psad是门口的监控摄像头加自动报警器。两者配合使用,安全等级完全不同。
psad的工作机制详解
psad的工作流程分为三个阶段。第一阶段是日志采集,它通过读取/var/log/messages或/var/log/syslog中内核记录的连接信息来获取数据。第二阶段是特征匹配,psad内置了大量的扫描特征签名,包括TCP SYN扫描、UDP扫描、FIN扫描、XMAS扫描、NULL扫描等十几种常见攻击模式。第三阶段是响应执行,一旦匹配成功,psad会自动生成iptables规则将源IP加入DROP链,同时可以发送邮件告警通知管理员。整个过程完全自动化,不需要人工干预。
CentOS 7和CentOS 8上安装psad的具体步骤
在CentOS 7上,需要先启用EPEL源,因为psad不在默认仓库中。执行以下命令:
yum install -y epel-release yum install -y psad iptables
在CentOS 8或Stream版本上,EPEL源同样适用:
dnf install -y epel-release dnf install -y psad iptables
安装完成后,启动psad服务并设置开机自启:
systemctl start psad systemctl enable psad
需要特别注意的一点是,psad依赖iptables来执行封禁操作。如果你的系统使用的是firewalld,需要先确认firewalld是否生成了iptables兼容规则,或者直接切换到iptables作为后端。可以用以下命令检查:
iptables -L -n
如果输出为空或者报错,说明iptables服务没有正常运行,需要先启动:
systemctl start iptables systemctl enable iptables
psad核心配置文件解读与优化
psad的主配置文件位于/etc/psad/psad.conf,这个文件决定了检测灵敏度、封禁策略、告警方式等关键参数。打开文件后你会看到大量配置项,下面逐一讲解最重要的几个。
首先是ENABLE_AUTO_IDS,这个参数必须设为Y,它控制psad是否自动执行封禁:
ENABLE_AUTO_IDS Y;
然后是AUTO_IDS_DANGER_LEVEL,默认值是5,范围1-5。数值越高,触发封禁所需的扫描强度越大。对于面向公网的服务器,建议设为3或4,避免误封正常流量:
AUTO_IDS_DANGER_LEVEL 4;
接下来是AUTO_IDS_EMAIL_ADDR,设置你的告警邮箱,确保能收到攻击通知:
AUTO_IDS_EMAIL_ADDR admin@yourdomain.com;
还有一个关键参数是AUTO_IDS_BLOCK_TIMEOUT,它决定封禁持续时间,单位是秒。默认3600秒(1小时),如果你希望永久封禁或者更长时间,可以调大:
AUTO_IDS_BLOCK_TIMEOUT 86400;
另外,HOSTNAME和INTERFACE这两个参数要根据你的实际环境填写。HOSTNAME设为你服务器的主机名,INTERFACE设为你的网卡名称(比如eth0或ens33):
HOSTNAME my-centos-server; INTERFACE eth0;
配置iptables日志记录以配合psad
psad需要从iptables日志中读取数据,所以必须确保iptables开启了日志功能。在CentOS上,默认的iptables规则可能没有开启LOG动作,需要手动添加。编辑/etc/sysconfig/iptables文件,在规则末尾添加如下内容:
-A INPUT -j LOG --log-prefix "IPTABLES_INPUT: " --log-level 4 -A FORWARD -j LOG --log-prefix "IPTABLES_FORWARD: " --log-level 4
保存后重启iptables使规则生效:
systemctl restart iptables
这一步非常关键,如果不加LOG规则,psad就无法获取到任何连接信息,相当于装了个摆设。很多人安装后发现psad不工作,90%的原因就是这一步没做。
psad的自动封禁规则详解
当psad检测到扫描行为后,它会在iptables的INPUT链最前面插入DROP规则。你可以通过以下命令查看被封禁的IP列表:
iptables -L INPUT -n --line-numbers
被psad封禁的IP通常会显示在规则列表的顶部,带有psad自动生成的注释标记。如果你想手动解除某个IP的封禁,找到对应的规则编号后执行:
iptables -D INPUT <规则编号>
如果想清空所有psad添加的封禁规则,可以用:
iptables -F INPUT iptables -A INPUT -j ACCEPT
但这样做会清除所有INPUT规则,包括你自己配置的,所以操作前务必备份现有规则:
iptables-save > /root/iptables_backup.txt
psad与其他安全工具的协同使用
psad并不是万能的,它最好作为纵深防御体系中的一环。建议配合以下工具一起使用:第一是fail2ban,fail2ban主要针对SSH暴力破解和应用层登录失败,而psad专注于网络层端口扫描,两者互补。第二是SELinux,确保SELinux处于enforcing模式,即使攻击者突破了网络层防线,SELinux也能限制其权限。第三是定期更新系统,psad的特征库会随版本更新,保持psad为最新版本能识别更多新型扫描手法。
更新psad特征库的命令是:
psad --sig-update
同时更新psad本身:
yum update psad
常见问题排查与误封处理
在实际使用中,最常见的问题是误封。比如某些CDN节点、监控探针或者负载均衡器会频繁探测你的服务器端口,触发psad的扫描检测。解决方法是在psad.conf中配置白名单:
IPTABLES_WHITELIST 10.0.0.0/8; IPTABLES_WHITELIST 172.16.0.0/12;
把你信任的内网网段或者特定IP加入白名单,psad就不会对这些来源执行封禁。另一个常见问题是psad启动失败,通常是因为/var/log/psad/fwdata目录权限不对,修复方法:
chown -R psad:psad /var/log/psad chmod 700 /var/log/psad
还有一个容易忽略的点:psad的日志文件位于/var/log/psad/psad.log,当你排查问题时,第一时间应该看这个文件,里面记录了每次检测和封禁的详细信息,包括源IP、目标端口、扫描类型、危险等级等。
psad的高级功能:DShield和Snort规则集成
psad支持将检测到的攻击信息上报到DShield分布式威胁情报平台,这样你不仅保护了自己,还为全球安全社区贡献了数据。在psad.conf中启用:
ENABLE_DSHIELD Y; DSHIELD_THRESHOLD 10;
此外,psad还支持导入Snort规则来扩展检测能力。如果你有Snort的规则文件,可以放到/etc/psad/snort_rules/目录下,psad会自动加载。这对于需要检测更复杂攻击模式的场景非常有用,比如检测特定漏洞利用的探测行为。
总结:psad在CentOS安全体系中的定位
psad不是一个替代防火墙的产品,而是防火墙的"智能增强插件"。它以极低的资源占用(通常不到50MB内存)实现了商业级IDS的核心功能——端口扫描检测和自动封禁。对于CentOS服务器管理员来说,安装psad是性价比最高的安全加固手段之一。从安装到配置到日常运维,整个链路清晰简单,即使是初级运维人员也能在半小时内完成部署。关键是要做好日志配置、白名单设置和定期更新这三件事,就能让psad持续稳定地为你的服务器站岗放哨。
