iptables 规则工作原理

我们来系统地讲解下 iptables 规则的生效原理,包括 匹配顺序、优先级、DROP 和 REJECT 的区别 等方面。


一、iptables 匹配规则的生效原理(顺序决定一切)

1. iptables 的规则是顺序匹配、先匹配先执行、匹配后就停止

  • 每个 iptables 表(如 filter, nat, mangle)中有若干链(chain),如 INPUT, OUTPUT, FORWARD

  • 每条链里可以添加多条规则,它们是有顺序的,从上到下依次检查。

  • 一旦有一条规则匹配成功(匹配了条件,比如 IP、端口、协议等),并执行了某个动作(ACCEPT、DROP、REJECT等)后,就不会再往下执行链中的其他规则。

举例:
iptables -A INPUT -p tcp --dport 80 -j DROP 
iptables -A INPUT -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
  • 虽然第二条规则允许 192.168.1.100 访问 80 端口,但由于第一条 DROP 已经匹配了所有访问 80 端口的请求(包括来自 192.168.1.100 的),所以第二条规则永远不会执行。

  • 结论:先 DROP,后 ACCEPT 的话,ACCEPT 永远无效。

如果你想“有条件地允许”,应该先写 ACCEPT,再写 DROP。

# 正确写法:先允许特定 IP,再阻止所有其他
iptables -A INPUT -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

二、DROP 和 REJECT 的区别

比较项DROPREJECT
行为直接丢弃数据包,不回复任何信息丢弃数据包,并返回拒绝信息(如 ICMP 或 TCP RST)
对客户端表现客户端会一直等待超时客户端立即收到连接被拒绝的反馈
安全隐蔽性更隐蔽,攻击者无法确定端口是否存在不隐蔽,攻击者知道端口拒绝连接
推荐用途更安全,对不明来源的 IP 做防御用于明确拒绝某些连接或做调试用

示例:
  • DROP:就像对方敲门你不理他,对方不知道你家有没有人。

  • REJECT:你直接告诉对方“别敲了,我不让你进”。


三、规则插入方式 -A vs -I

命令说明
-A追加规则(append),加到链尾部
-I插入规则(insert),默认加在链开头或指定位置

所以如果你用 -A 添加规则,要特别注意顺序是否会让后续规则失效。


四、默认策略(默认行为)

可以为每个链设置默认策略,如:

iptables -P INPUT DROP
  • 如果某个数据包没有被任何规则匹配到,那就走默认策略。

  • 常见的做法:默认 DROP,添加具体的 ACCEPT 规则。


五、小结

场景行为说明
同端口,先 DROP 后 ACCEPTDROP 生效,ACCEPT 无效
同端口,先 ACCEPT 后 DROP只要满足 ACCEPT 条件就不会被 DROP 拦截
DROP vs REJECTDROP 更隐蔽;REJECT 更明确但易暴露服务
没有匹配规则看链的默认策略,如默认 DROP 就会直接丢弃
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值