允许端口3306

# /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没有“状态新,…”。 这有什么区别? 我所要做的就是允许从默认端口3306上的这些IP访问mysql

它与iptables规则中的-m state匹配有关。 你可以使用iptables-save查看完整的规则。

state NEW,RELATED,ESTABLISHED意味着只有这三个将被接受。

iptables (或者更确切地说,netfilter)知道以下状态:

  • 新的 – 新的连接
  • build立 – 检测到双向stream量
  • 相关 – 与原始连接有关的stream量(例如,与TCP连接相关的ICMP回复)
  • 无效 – stream量无效,例如收到错误的TCP段
  • UNTRACKED – stream量不被netfilter的conntrack模块跟踪

至于你的问题:两条规则几乎没有区别。

不同的是你提到的源IP地址和状态标志。

至于为什么你的第一个IP没有连接或不能连接,当你在iptables中使用连接跟踪时,你通常会有一个规则:

接受所有 – 任何地方的任何地方状态RELATED,ESTABLISHED

作为catchall。

.101规则将只是新的。

接受tcp – 192.168.101.101任何地方新的tcp dpt:306