麒麟系统通过pam模块联动防火墙实现暴力破解自动断网:配置pam_exec调用脚本封ip并关闭网卡,结合pam_faillock设3次失败阈值,确保精准阻断攻击源。

麒麟系统在检测到暴力破解密码行为时,需立即切断网络连接以阻断攻击源,防止进一步渗透或横向移动。该操作不依赖外部工具,仅通过系统内置的PAM模块与防火墙联动实现,触发后自动执行firewall-cmd命令封禁当前登录IP并关闭对应网络接口。
配置PAM触发暴力破解响应机制
这一步让系统在密码连续失败达到阈值时,自动执行自定义脚本,是整个自动断网流程的启动开关。
执行命令编辑SSH认证模块配置:sudo vim /etc/pam.d/sshd
在文件顶部插入以下行(必须放在所有auth行之前):
auth [default=ignore,success=ok] pam_exec.so /usr/local/bin/block_attack.sh
该行确保每次认证失败都调用脚本,且不干扰原有faillock逻辑;若放在其他位置,可能被跳过或重复执行。
编写暴力破解拦截脚本
脚本需实时提取登录失败的源IP,并完成封禁+断网双动作,避免只封IP而留有其他协议通道。
创建脚本文件:sudo touch /usr/local/bin/block_attack.sh && sudo chmod +x /usr/local/bin/block_attack.sh
写入以下内容(注意替换wlan0或eth0为你的实际主网卡名):
cat > /usr/local/bin/block_attack.sh #!/bin/bash
if [ -n "$PAM_RHOST" ] && [ "$PAM_RHOST" != "127.0.0.1" ] && [ "$PAM_RHOST" != "::1" ]; then
IP=$PAM_RHOST
/usr/sbin/firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"$IP\" drop" 2>/dev/null
/usr/sbin/firewall-cmd --reload 2>/dev/null
ip link set wlan0 down 2>/dev/null
sleep 3
ip link set wlan0 up 2>/dev/null
fi
EOF
脚本中wlan0必须与你主机实际使用的主网络接口一致;若为有线连接,请改为eth0或运行ip -br a | grep UP确认名称。不改会导致断网失败但无报错。
启用PAM失败计数并设阈值
仅触发脚本不够,必须配合PAM内置计数器,在第三次失败时才激活断网,避免误伤合法用户输入错误。
执行命令编辑系统认证配置:sudo vim /etc/pam.d/system-auth
在auth段开头添加(确保在pam_env.so之前):
auth [default=bad success=ok] pam_faillock.so preauth silent deny=3 unlock_time=300 fail_interval=300
在account段添加:
account [default=bad success=ok] pam_faillock.so
这两行启用5分钟内累计失败3次即触发后续动作;deny=3必须与脚本中实际拦截逻辑匹配,否则断网不会发生。
验证并强制加载新PAM策略
第一步:重启SSH服务使PAM配置生效:sudo systemctl restart sshd
第二步:手动测试触发链路是否完整——使用另一台机器对当前麒麟系统执行三次错误密码SSH登录。
第三步:登录成功后立即检查:sudo firewall-cmd --list-rich-rules | grep $(hostname -I | awk '{print $1}'),若返回空则说明IP未被封;此时应检查/var/log/secure中是否有pam_exec调用记录。
第四步:确认网络接口状态:ip link show wlan0 | grep "state",输出必须含DOWN字样才算断网成功。











