firewalld可通过富规则限速、封禁ip及协同内核参数缓解轻中度syn/http/ssh洪水攻击。具体包括:每ip每分钟限3个ssh连接、每秒限10个http/https连接;用reject或drop封禁异常源;启用tcp_syncookies、调小synack_retries、增大max_syn_backlog。

firewalld 本身不是专门的 DDoS 防御工具,但配合富规则(rich rules)和连接限制机制,能在主机层面有效缓解轻中度 SYN Flood、HTTP Flood、SSH 暴力连接等洪水类攻击。关键不在于“完全拦截”,而在于快速识别异常流量并限速/丢弃,避免服务进程被拖垮。
启用并确认 firewalld 运行状态
确保 firewalld 已启用且正在运行:
- 启动服务并设为开机自启:sudo systemctl enable --now firewalld
- 检查状态:sudo firewall-cmd --state(应返回 running)
- 确认默认区域(如 public)已激活:sudo firewall-cmd --get-default-zone 和 sudo firewall-cmd --get-active-zones
用富规则限制每 IP 连接频率
这是防御端口洪水(如 SSH、HTTP)最直接有效的方式。firewalld 支持基于速率的限流,单位支持 s(秒)、m(分钟)、h(小时):
- 限制每 IP 每分钟最多新建 3 个 SSH 连接(防暴力扫描):
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule service name="ssh" limit value="3/m" accept' - 限制每 IP 每秒最多 10 个 HTTP 新连接(缓解轻量 HTTP Flood):
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule service name="http" limit value="10/s" accept' - 对 HTTPS 同理:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule service name="https" limit value="10/s" accept' - 执行 sudo firewall-cmd --reload 生效
封禁高频异常源 IP(手动+自动化结合)
当发现某 IP 在短时间内建立大量连接(如用 ss -nt | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20 查看),可立即拉黑:
- 临时封禁单个 IP:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.55" reject' - 封禁整个网段(如常见扫描段):
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" drop' - 注意:
reject发送拒绝响应,drop静默丢包——对 DDoS 更推荐drop,减少服务器回应开销
强化内核级 TCP 参数协同防御
firewalld 管规则,内核参数管协议栈行为。二者配合才能应对 SYN Flood 类攻击:
- 开启 SYN Cookie(抵御半连接耗尽):
sudo sysctl -w net.ipv4.tcp_syncookies=1 - 减小 SYN-ACK 重试次数(缩短无效连接等待时间):
sudo sysctl -w net.ipv4.tcp_synack_retries=2 - 增大 SYN 队列长度(容纳更多合法握手):
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096 - 将上述设置写入 /etc/sysctl.conf 并执行 sudo sysctl -p 持久化











