限制特定来源连接需四维协同:按物理接口筛选、用--state new限新建速率、用connlimit控单ip并发、分层执行“先放行再拒绝后限并发”,并以reject--reject-with tcp-reset替代drop确保友好断连。

限制特定来源的连接,核心是“精准识别来源 + 分层控制连接行为”。单纯用 -s 加 DROP 只能封死访问,但生产环境更需要的是:防暴力扫描、控并发、保关键连接、避免误伤。真正有效的高级规则,必须结合接口、状态、速率和连接数四个维度协同工作。
按物理接口 + 单IP并发数限流
适用于防止某IP通过固定网卡(如eth0)对SSH或Web端口发起大量长连接:
- 命令示例(限制
eth0上每个IP对22端口最多3个并发):iptables -A INPUT -i eth0 -p tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j REJECT --reject-with tcp-reset -
--connlimit-mask 32表示按单个IP统计;若要按/24网段统计(如限制整个办公网段最多10连接),改用--connlimit-mask 24 - 务必用
REJECT --reject-with tcp-reset,比DROP更友好——客户端能立刻断开,不卡在重试超时
按接口 + 新建连接速率限速
专治短连接泛滥型攻击(如SSH爆破、HTTP扫描),重点盯住 NEW 状态:
- 命令示例(
ens33上每分钟最多15个新SSH连接,初始允许突发8个):iptables -A INPUT -i ens33 -p tcp --dport 22 -m state --state NEW -m limit --limit 15/min --limit-burst 8 -j ACCEPTiptables -A INPUT -i ens33 -p tcp --dport 22 -m state --state NEW -j DROP - 关键点:
--state NEW必须带上,否则会对已建立连接重复计数,导致业务中断 -
--limit-burst是初始信用额度,首次可连8次;之后严格按15/min执行
组合策略:三步分层控制(推荐生产部署)
顺序不能错——先放行合规流量,再拒超额,最后管已建连接:
- 第一步:放行合法新建连接(带速率保护)
iptables -A INPUT -i ens33 -p tcp --dport 80 -m state --state NEW -m limit --limit 20/min --limit-burst 10 -j ACCEPT - 第二步:拒绝所有其他新建请求
iptables -A INPUT -i ens33 -p tcp --dport 80 -m state --state NEW -j DROP - 第三步:对已建立连接做并发约束(防一个IP开几十个长连接占满资源)
iptables -A INPUT -i ens33 -p tcp --dport 80 -m state --state ESTABLISHED -m connlimit --connlimit-above 15 -j REJECT --reject-with tcp-reset
验证与持久化要点
规则写完不等于生效,必须检查和固化:
- 查看规则是否命中:
iptables -L INPUT -v -n | grep "dpt:22",观察pkts列是否增长 - 确认内核模块已加载:
lsmod | grep xt_connlimit,未加载则运行modprobe xt_connlimit - 保存规则防重启丢失:
Debian/Ubuntu:iptables-save > /etc/iptables/rules.v4
CentOS/RHEL:service iptables save或iptables-save > /etc/sysconfig/iptables











