linux防火墙需通过内核调优(syn cookie、backlog等)、firewalld动态限速封禁、netstat+firewall-cmd脚本联动及fail2ban日志分析,构建“检测→判定→阻断→恢复”闭环防御机制。

Linux系统防火墙本身不内置“自动联动防御”能力,但可以通过组合内核参数调优、动态防火墙规则管理、实时连接监控和脚本化响应,构建一套轻量级、可落地的分布式攻击(如DDoS、SYN Flood)响应机制。关键不是等待攻击发生后再手动封IP,而是建立“检测→判定→阻断→恢复”的闭环流程。
启用并优化内核级SYN防护
这是抵御SYN Flood等初级分布式攻击的第一道防线,无需额外工具,直接生效:
- 开启SYN Cookie:防止半连接队列溢出,命令为 sysctl -w net.ipv4.tcp_syncookies=1
- 增大SYN backlog:提升并发连接缓冲能力,建议设为2048或更高,命令为 sysctl -w net.ipv4.tcp_max_syn_backlog=2048
- 缩短SYN重试间隔:减少恶意连接占用资源时间,设为2~3次,命令如 sysctl -w net.ipv4.tcp_synack_retries=2
- 永久生效:将上述设置写入 /etc/sysctl.conf,运行 sysctl -p 加载
用firewalld实现动态IP限速与临时封禁
firewalld支持基于源IP的速率限制(rate limiting),适合应对中小规模DDoS或扫描行为:
- 对HTTP/HTTPS端口启用每分钟最多60个新连接的限制:firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="80" protocol="tcp" limit value="60/m" accept' --permanent
- 对异常高频连接源(如1秒内新建超10个连接)直接丢弃:firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="80" protocol="tcp" limit value="10/s" reject' --permanent
- 所有规则需执行 firewall-cmd --reload 生效;封禁效果可配合 firewall-cmd --list-rich-rules 查看
编写简易联动检测脚本(netstat + firewall-cmd)
不依赖第三方软件,利用系统原生命令识别异常连接并自动拉黑:
- 定时检查ESTABLISHED状态连接数超阈值(如单IP > 50)的客户端:netstat -tn | awk '$NF=="ESTABLISHED" {print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -n 20
- 用脚本提取高连接数IP,调用firewalld加入黑名单区域(如block zone):firewall-cmd --permanent --add-source=192.168.1.100 --zone=block
- 建议将该逻辑封装为cron任务(如每2分钟执行一次),并设置自动解封机制(例如30分钟后移除source)
- 注意:生产环境应加白名单保护运维IP,避免误封
结合fail2ban实现服务层联动(可选增强)
若已部署Web服务(如Nginx/Apache),fail2ban能解析日志识别攻击模式(如大量404、POST洪水),并自动触发firewalld封禁:
- 安装fail2ban后,启用默认nginx[http-auth]或apache-badbots过滤器
- 在 /etc/fail2ban/jail.local 中指定backend为firewalld:banaction = firewallcmd-rich-rules
- 设定触发阈值(如5分钟内10次失败请求)和封禁时长(如3600秒),重启fail2ban服务即可生效











