CentOS 防火墙防 DDoS 实操指南
一、先明确防护边界与原则
二、iptables 基线加固与速率限制
# 允许回环
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 放行已建立和相关连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 按需放行业务端口(示例:SSH/HTTP/HTTPS)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
# 限制新 SYN 速率(示例:每秒 1 个,突发 3 个)
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# 限制 ICMP,避免 ICMP 洪水
iptables -A INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
# 可选:限制 DNS UDP 53 端口速率(示例:每秒 5 个,突发 10 个)
iptables -A INPUT -p udp --dport 53 -m limit --limit 5/s --limit-burst 10 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j DROP
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT
iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 10 -j REJECT
iptables -A INPUT -s <攻击IP> -j DROP
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables
以上做法分别利用了 iptables 的状态匹配、limit 限速、connlimit 并发限制与黑白名单能力,适合在主机侧缓解常见洪泛与滥用。
三、firewalld 场景的等价配置
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --reload
# 仅允许某 IP 访问 22
firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family="ipv4" source address="1.2.3.4" port port="22" protocol="tcp" accept'
# 将某网段直接丢弃(静默丢弃,不返回拒绝)
firewall-cmd --permanent --zone=drop \
--add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" drop'
firewall-cmd --reload
四、联动防护与检测
yum install -y fail2ban
cat >/etc/fail2ban/jail.local <<'EOF'
[DEFAULT]
bantime = 600
findtime = 600
maxretry = 3
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
EOF
systemctl enable --now fail2ban
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
firewall-cmd --panic-on;恢复:firewall-cmd --panic-off。iptables -L -n -v --line-number;观测日志:tail -f /var/log/messages /var/log/secure。五、按攻击类型的实用规则示例
| 攻击类型 | 主要特征 | 防火墙侧缓解要点 |
|---|---|---|
| SYN Flood | 海量 TCP SYN、半开连接堆积 | 限制每秒新 SYN 数(limit/–limit-burst),放行已建立连接,必要时缩短 TCP 半开等待或启用 syncookie(内核参数) |
| UDP Flood | 大量 UDP 包冲击随机/特定端口 | 对高噪声端口(如 53)做速率限制,异常来源直接丢弃 |
| ICMP Flood | 大量 ping 包 | 全局限速或临时丢弃 ICMP,保留少量用于探测 |
| HTTP 洪水(CC) | 应用层高频合法形态请求耗尽后端 | 仅靠防火墙效果有限,建议叠加 WAF/验证码/人机识别/业务限流;Web 服务器(如 Tomcat)可下调 maxThreads、启用连接限制与反向代理/CDN 分担 |
| 以上规则与建议覆盖常见洪泛与滥用场景,应用层攻击需与WAF/业务策略协同处置。 |