在 CentOS 上使用 iptables 做基础防攻击(防扫描、防暴力、防洪水等),可以从以下几个方面入手。下面以 CentOS 7 为例(CentOS 6 类似,CentOS 8 默认用 nftables,但仍可装 iptables)。
iptables -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -N SYNFLOOD
iptables -A SYNFLOOD -m limit --limit 10/s --limit-burst 20 -j RETURN
iptables -A SYNFLOOD -j DROP
iptables -A INPUT -p tcp --syn -j SYNFLOOD
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
含义:60 秒内同一 IP 超过 4 次 SSH 连接直接丢弃
connlimitiptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -s 127.0.0.0/8 ! -i lo -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -p tcp --dport 22 -m limit --limit 5/min -j LOG --log-prefix "SSH-ATTACK: "
fail2ban(强烈推荐)yum install epel-release -y
yum install fail2ban -y
systemctl enable fail2ban
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
✅ SSH:改端口 + iptables 限流 + fail2ban
✅ Web:limit + connlimit
✅ 系统层:sysctl 防 syn flood
✅ 网络层:云防火墙 / 安全组
如果你愿意,我可以:
你现在是哪种服务器场景?