iptables高级扩展模块可实现连接状态、应用特征、时间窗口和载荷内容的精细化匹配:connlimit防止单ip并发滥用,ipset高效管理海量地址,string+recent实现轻量应用层防护,time和owner支持时空与身份维度控制。

在复杂网络环境中,单纯靠源IP、端口或协议做黑白名单已远远不够。iptables 的真正能力,藏在它的扩展模块里——它们让规则能感知连接状态、识别应用特征、响应时间窗口、甚至匹配载荷内容。
用 connlimit 防止单点滥用
当某个IP突然建立大量连接,大概率是扫描、爬虫或慢速攻击。connlimit 模块可按源IP或目标端口组合限制并发数,不依赖连接时长,响应快、开销低。
- 限制每个IP最多10个到Web服务的并发连接:iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
- 对SSH服务放宽松些,但单IP最多50个连接,且只限外网:iptables -A INPUT -p tcp --dport 22 -s ! 10.0.0.0/8 -m connlimit --connlimit-above 50 -j REJECT
用 ipset 管理海量地址集合
要封禁几千个恶意IP,或放行上百个CDN网段?逐条写 iptables 规则会导致性能断崖式下降。ipset 把地址预编译成哈希表或B树,一条规则就能完成毫秒级匹配。
- 创建一个名为 blocklist 的IP集合:ipset create blocklist hash:ip hashsize 8192
- 批量导入IP(如从威胁情报中提取):while read ip; do ipset add blocklist $ip; done
- 在iptables中调用:iptables -A INPUT -m set --match-set blocklist src -j DROP
用 string + recent 实现轻量应用层防护
虽然iptables不是WAF,但结合 string(搜索TCP载荷)和 recent(记录访问频次),可拦截典型攻击特征,适合HTTP明文场景。
- 拦截 User-Agent 含 sqlmap 或 nmap 的请求:iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "sqlmap" --from 0 --to 512 -j DROP
- 对30秒内发起超6次HTTP请求的IP,5分钟内拒绝其后续访问:iptables -A INPUT -p tcp --dport 80 -m recent --name httpboom --rcheck --seconds 300 --hitcount 6 -j DROP
iptables -A INPUT -p tcp --dport 80 -m recent --name httpboom --set -j ACCEPT
用 time 和 owner 做时空与身份维度控制
time 模块支持按星期、小时、日期范围生效;owner 模块(仅 OUTPUT 链)可区分不同用户或进程发起的出站连接,这对审计或多租户环境很实用。
- 只允许工作日 9:00–18:00 访问管理后台:iptables -A INPUT -p tcp --dport 8443 -m time --timestart 09:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
- 限制普通用户进程不能外连数据库端口:iptables -A OUTPUT -m owner ! --uid-owner root -p tcp --dport 3306 -j REJECT









