iptables的规则顺序

读到一个博客

http://blog.csdn.net/wangmj51...
图片描述

iptables 限制ip访问
通过iptables限制9889端口的访问(只允许192.168.1.201、192.168.1.202、192.168.1.203),其他ip都禁止访问
iptables -I INPUT -p tcp --dport 9889 -j DROP
iptables -I INPUT -s 192.168.1.201 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.202 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.203 -p tcp --dport 9889 -j ACCEPT

注意命令的顺序不能反了

感觉作者表达错误了吧,因该是
iptables -I INPUT -s 192.168.1.201 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.202 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.203 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -p tcp --dport 9889 -j DROP

我对了,还是播客作者对了?

阅读 16.8k
4 个回答

之前看错了,没注意到命令里用的是 -I, 我以为是: iptables -A INPUT -p tcp --dport 9889 -j DROP


他这里-I后面没有跟数字,所以是插入第一行的.
按照博客里的命令最终iptables规则列表会是:

INPUT -s 192.168.1.203 -p tcp --dport 9889 -j ACCEPT
INPUT -s 192.168.1.202 -p tcp --dport 9889 -j ACCEPT
INPUT -s 192.168.1.201 -p tcp --dport 9889 -j ACCEPT
INPUT -p tcp --dport 9889 -j DROP

你这里这样写最终会是:

INPUT -p tcp --dport 9889 -j DROP
INPUT -s 192.168.1.201 -p tcp --dport 9889 -j ACCEPT
INPUT -s 192.168.1.202 -p tcp --dport 9889 -j ACCEPT
INPUT -s 192.168.1.203 -p tcp --dport 9889 -j ACCEPT

匹配到drop就被挡住了..

如果按照你这个顺序来的话你要把-I换成-A
-A是追加到末尾

新手上路,请多包涵

这有什么简单不简单的。首先你得知道 iptables 的规制顺序,然后知道 -A 和 -I 参数的含义。

-A 是追加规则,-I 是在头部插入规则。

iptables -I INPUT -s 192.168.1.201 -p tcp --dport 9889 -j ACCEPT  
iptables -I INPUT -s 192.168.1.202 -p tcp --dport 9889 -j ACCEPT  
iptables -I INPUT -s 192.168.1.203 -p tcp --dport 9889 -j ACCEPT  
iptables -I INPUT -p tcp --dport 9889 -j DROP
新手上路,请多包涵

作者第一条已经把端口访问拒绝了,后面9889的策略应该不生效了。

泛规则会修改重置所有条件内的规则

细化规则是在泛规则的基础上作区别细化

规则会从上到下执行生效

肯定是博客说的对呀

真有点BS你们, 这点小东西自己不会实验一下?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进