本文由财富云计算提供,我们提供高防服务器与 CDN 防护服务,NAT 型无独立公网 IP 价格比独立 IP 省一半以上,模板配合高防使用,源站自身也硬。
一、iptables 防护的定位:能做什么、不能做什么
先说清楚边界,别用错工具:
| 攻击 | iptables 能防吗 |
|---|---|
| 单 IP 高频扫描/爆破 | ✅ 拿手 |
| SYN Flood(小规模 <1万 PPS) | ✅ 限流 + Cookie 配合 |
| 慢速连接 | ✅ 连接数限制 |
| 全端口扫描 | ✅ 只开放必要端口 |
| 已知恶意 IP 段 | ✅ 黑名单 |
| 大流量 DDoS(带宽已满) | ❌ 包到不了机器,规则是摆设 |
| 分布式 CC | ❌ 防不住「合法的坏请求」 |
铁律:iptables 是源站自保的第一层筛子,不是高防的替代品。带宽被打满时,你写在 INPUT 链的规则连一个包都看不到。
二、基础规则模板(生产级)
先看全貌,再逐段讲。以下模板适用「对外只开 80/443 的 Web 服务器」,游戏服改端口即可:
#!/bin/bash
# /etc/iptables/rules.sh —— 生产防护模板
# 用法:bash rules.sh (规则立即生效,持久化见第五节)
### 0. 清空旧规则(初始化)
iptables -F
iptables -X
iptables -Z
### 1. 默认策略:INPUT 丢弃、FORWARD 丢弃、OUTPUT 放开
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
### 2. 环回接口全放(本地服务依赖)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
### 3. 已建立连接放行(关键!不然回程包全丢)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
### 4. 防 IP 伪造入站(反向路径过滤)
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# 源 IP 不是从哪来回哪去的,丢(防 SYN Flood 伪造源)
iptables -A INPUT ! -i eth0 -s 10.0.0.0/8 -j DROP # 内网段不该从外网口进
iptables -A INPUT ! -i eth0 -s 172.16.0.0/12 -j DROP
iptables -A INPUT ! -i eth0 -s 192.168.0.0/16 -j DROP
# 注意:NAT 型/内网环境按实际网卡调整
### 5. 防扫描:无效 TCP 包直接丢
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP # 新连接必须 SYN 开头
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # NULL 扫描
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP # Xmas 扫描
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # SYN+FIN
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # SYN+RST
iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP # Fin/Urg/psh 组合
iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ACK,PSH,URG -j DROP
### 6. SYN Flood 防护
iptables -N SYN_FLOOD
iptables -A INPUT -p tcp --syn -j SYN_FLOOD
iptables -A SYN_FLOOD -m limit --limit 50/s --limit-burst 100 -j RETURN
iptables -A SYN_FLOOD -j DROP # 超速的 SYN 全丢
### 7. ICMP:允许 ping(小包),禁大 ping / 广播
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type broadcast-request -j DROP
# 需要完全禁 ping(防 ICMP Flood):删上面两行,加 ↓
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
### 8. 开放业务端口
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH --rsource
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP # SSH 60 秒 5 次新连接 = 封
iptables -A INPUT -p tcp --dport 22 -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
### 9. 单 IP 连接数限制(防慢速/连接耗尽)
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 50 -j DROP
### 10. UDP 谨慎开放(游戏服按需)
# iptables -A INPUT -p udp --dport 2456:2458 -j ACCEPT # 示例:英灵神殿
# 其他 UDP 默认已 DROP(默认策略)
### 11. 日志(最后,被丢的包记下来给分析)
iptables -A INPUT -m limit --limit 5/m -j LOG --log-prefix "iptables-dropped: " --log-level 7三、逐段详解:关键规则在防什么
3.1 第 3 条:ESTABLISHED,RELATED(最容易被忘)
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT没有这条,你的网站能出去回不来——TCP 是双向的,请求出去、响应回来,回来的包属于「已建立连接」。默认 DROP 策略下不加这条,用户访问全超时。新手配 iptables 第一大坑就是这个。
3.2 第 5 条:扫描防护
Nmap 扫描用各种畸形 TCP 包探你的端口状态。--tcp-flags 匹配组合:
ALL NONE:所有标志位都清(NULL 扫描)ALL ALL:所有标志位置位(Xmas 扫描)SYN,FIN SYN,FIN:FIN 不带 ACK、SYN 带 FIN——正常协议栈永远不会产生的组合
这些包有一个共同点:正常网络设备永远不会发。所以放心 DROP,零误杀。
3.3 第 6 条:SYN Flood 限流
iptables -N SYN_FLOOD
iptables -A INPUT -p tcp --syn -j SYN_FLOOD
iptables -A SYN_FLOOD -m limit --limit 50/s --limit-burst 100 -j RETURN
iptables -A SYN_FLOOD -j DROP思路:SYN 包走自定义链,每秒 50 个以内的 RETURN(放行),超速的 DROP。阈值按业务调——正常站点新连接几十到几百每秒,攻击时几万。50/s 偏保守(适合低流量站),电商大促要调高。
3.4 第 8 条:SSH 防爆破(recent 模块)
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROPrecent 模块记录源 IP:第一次 SSH 新连接记名,60 秒内第 5 次新连接就 DROP。爆破脚本每秒试几十次密码的,直接被关在门外。
进阶:SSH 更稳的姿势是改端口 + 密钥登录 + fail2ban(SSH 加固),iptables recent 是兜底。
3.5 第 9 条:连接数限制(connlimit)
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP单 IP 超过 50 个并发连接就丢。防 Slowloris(几百慢速连接)和连接耗尽攻击。阈值按业务调:普通网站 50 够,下载站/长连接业务要放开。
四、游戏服专用版
游戏服 UDP 为主,模板这样改:
### 游戏服核心:只开游戏端口,UDP 严格管控
# Rust:28015 游戏 + 28016 RCON(RCON 只放管理 IP!)
iptables -A INPUT -p tcp --dport 28015 -m conntrack --ctstate NEW -j ACCEPT
iptables -A INPUT -p udp --dport 28015 -j ACCEPT
iptables -A INPUT -p tcp --dport 28016 -s 你的管理IP/32 -j ACCEPT # RCON 只给你
# 其他 UDP 全 DROP(默认策略)
# 英灵神殿:UDP 2456-2458
iptables -A INPUT -p udp --dport 2456:2458 -j ACCEPT
# 森林之子:8766/27016/9700
iptables -A INPUT -p udp --dport 8766 -j ACCEPT
iptables -A INPUT -p udp --dport 27016 -j ACCEPT
iptables -A INPUT -p udp --dport 9700 -j ACCEPT
# UDP Flood 缓解(杯水车薪,但比没有强)
iptables -A INPUT -p udp -m limit --limit 200/s --limit-burst 500 -j ACCEPT
# 注意:这行会误杀正常游戏 UDP 洪流(游戏协议突发包多)——按游戏实测调游戏服的 UDP 限流要极度小心:游戏协议本身就是高频小包(玩家移动同步),限流阈值设低了直接卡玩家。游戏服防 UDP Flood 主要靠高防,本机 iptables 只做端口管控。
五、持久化与运维
5.1 保存规则(重启不丢)
# Debian/Ubuntu
apt install -y iptables-persistent
netfilter-persistent save
# 规则存到 /etc/iptables/rules.v4
# CentOS(firewalld 系统)
# 直接禁用 firewalld 用 iptables:
systemctl disable --now firewalld
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables5.2 改规则的救命流程
规则写错把自己关门外的概率极高。安全流程:
# 1. 先在 screen/tmux 里操作(断线不丢会话)
screen -S ipt
# 2. 或者设置定时任务:5 分钟后自动清空规则(后悔药)
echo "iptables -F; iptables -P INPUT ACCEPT" | at now + 5 minutes
# 3. 再应用新规则
bash rules.sh
# 4. 确认 SSH 还能连(新终端登录测试)
# 5. 没问题就取消后悔药
atrm <任务号>没有 at 命令:先 sleep 300 && iptables -F 后台跑一条,测试完 kill 掉。
5.3 规则备份与版本管理
iptables-save > /etc/iptables/rules.v4.backup-$(date +%F)
# 改规则前先备份,出问题 10 秒回滚
iptables-restore < /etc/iptables/rules.v4.backup-2026-10-21六、监控与日志分析
# 看当前规则命中情况(找没用的规则删掉)
iptables -L -v -n --line-numbers | head -30
# pkts 列 = 命中包数,长期 0 的规则可以考虑删
# 看被丢的包去了哪(日志)
dmesg | grep "iptables-dropped" | tail -20
# 或 journalctl -k | grep iptables-dropped
# 实时看 TOP 被封 IP(配合日志聚合)
tail -f /var/log/kern.log | grep iptables-dropped日志量控制:-m limit --limit 5/m 防止日志刷爆磁盘——被 DDoS 时全记录能几分钟写满一个 G。
七、完整部署检查清单
□ SSH 先测通再上规则(screen/at 后悔药就位)
□ lo 接口放行(本地服务:MySQL/Redis 通信)
□ ESTABLISHED,RELATED 放行(回程包)
□ 22 端口有 recent 防爆破(或已改端口+密钥)
□ 80/443 已开(业务正常)
□ 游戏 UDP 端口已开(游戏服)
□ 扫描包规则命中(nmap 自测:nmap -sS/-sF 你的IP → 全 filtered)
□ 规则已持久化(reboot 不丢)
□ 日志限流开启(不会刷爆磁盘)
□ 大流量攻击的预案明确(切高防,不是改 iptables)自测扫描防护(拿 nmap 打自己验证):
nmap -sS -p 1-1000 你的服务器IP
# 结果:只有 22/80/443 开放,其他 filtered = 防护生效八、小结
iptables 防护模板五件套:默认 DROP + ESTABLISHED 放行(基础)、畸形包过滤(防扫描)、SYN 限流 + 连接数限制(防小洪水)、recent 模块防爆破(SSH)、端口最小化(UDP 严格管控)。它是源站的地基,但记住边界:带宽被打满时 iptables 是摆设,大流量永远靠高防(高防选购)。运维上铁律是改规则先备好后悔药——十个站长九个被自己写的 INPUT 规则锁在门外过。
相关阅读:
本文由财富云计算整理,我们提供高防服务器、CDN 防护与 NAT 型云服务器,无独立公网 IP 机型价格比独立 IP 省一半以上,需要防火墙方案定制或高防产品的咨询。更多教程见端口速查表。
延伸阅读
- 高防误区与避坑清单:25 个坑+下单前必问 14 问+到货验货流程
- DNS 攻击防护专题:劫持、隧道、投毒、放大四类攻击与 DNSSEC
- 电商大促防攻击预案:T-14 到当天的分级响应与降级开关
- 源站真实 IP 隐藏完全指南:六大暴露面排查+NAT 型终极方案
- 日志分析找攻击源:Nginx 日志三维度分析法与证据固定
- 攻击应急响应手册:六阶段响应流程,从确认到复盘的照做清单
- OpenResty Lua 自研 WAF:动态限流+攻击特征检测+Redis 黑名单
- Nginx 进阶防护:连接层、请求层、行为层三层生产级配置

[...]# 其他全 DROP(默认策略)模板见iptables 抗 DDoS 配置,改造成回源专用。3.4 封禁探测# 发现攻击者直连源站 IP(日志里出现非 CDN 段的访问)[...]
2026-10-21 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-21 回复