# /sbin/iptables -nvL
上面的 iptables 命令的输出看起来像这样...
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 192.168.101.101 0.0.0.0/0 tcp dpt:3306 state NEW,RELATED,ESTABLISHED
16810 1009K ACCEPT tcp -- * * 192.168.101.120 0.0.0.0/0 tcp dpt:3306
这两行有什么区别?第二个 IP 没有“状态为新,...”。这有什么区别吗?我所做的就是允许从这些 IP 在默认端口 3306 上访问 mysql
答案1
-m state
它与 iptables 规则的匹配有关。您可以使用它iptables-save
来查看完整规则。
state NEW,RELATED,ESTABLISHED
意味着只有这三个会被接受。
iptables
(或者更准确地说,netfilter)知道以下状态:
- 新 - 新连接
- ESTABLISHED - 检测到双向流量
- 相关 - 与原始连接相关的流量(例如,与 TCP 连接相关的 ICMP 回复)
- 无效 - 流量无效,例如收到了不合适的 TCP 段
conntrack
UNTRACKED-netfilter模块未跟踪流量
至于您的问题:这两条规则几乎没有区别。
答案2
不同之处在于您提到的源 IP 地址和状态标志。
至于为什么您的第一个 IP 没有连接或无法连接,当您在 iptables 中使用连接跟踪时,您通常会有一条规则,例如:
接受所有 -- 任何地方任何地方状态 RELATED,ESTABLISHED
作为万能药。
.101 规则将是新的。
接受 tcp -- 192.168.101.101 任意位置状态新 tcp dpt:306