为什么 iptables 中第一条规则没有被匹配

为什么 iptables 中第一条规则没有被匹配

我有 iptables 规则,希望允许来自 2 个 ips 的 ssh。

为什么第二条规则的计数器增加,而第一条规则的计数器没有增加。

即使我从两个 IP 都尝试,我也无法 ssh 到它。

Chain INPUT (policy ACCEPT 87 packets, 6188 bytes)
pkts bytes target     prot opt in     out     source          destination
0     0 REJECT       tcp  --  *      *      !115.x.x.71       0.0.0.0/0            tcp dpt:22 reject-with icmp-port-unreachable

14  1400 REJECT     tcp  --  *      *      !115.x.x.176      0.0.0.0/0            tcp dpt:22 reject-with icmp-port-unreachable

这难道不像当我从 115.xx71 进行 ssh 时,它符合第一条规则,我应该获得访问权限,但它不会与第二条规则匹配,即使我从 115.xx176 进行 ssh,它违反了第一条规则,它将被拒绝,但我甚至无法从第一个 IP 进行 ssh。

答案1

这绝对行不通!

原因:

  1. 如果你从 .71 连接,第二条规则将拒绝你的连接
  2. 如果你从任何地方连接,第一条规则将拒绝你的连接

这样做的原因是,如果一条规则在 iptables 中不匹配,它将继续执行下一条规则。

您必须允许来自 .71 和 .176 的连接,然后拒绝所有其他连接。

为什么第一条规则上的计数器没有增加:我不知道。

编辑澄清一下:

iptables逐一检查规则。如果规则匹配,则评估将停止并显示目前的结果。因此,您的规则iptables将执行以下操作:

  1. 如果你从 .71 连接
    • 第一条规则不匹配(因为 src !xxx71 不匹配)
    • 第二条规则拒绝请求(因为 src !xxx176 匹配),结果应该是REJECT
  2. 如果你从其他地方连接(例如 xxx176)
    • 第一条规则匹配(因为 src !xxx71 匹配)因此连接被拒绝。

因此,为了满足您的要求,您必须首先在第一条规则中接受来自 .71 和 .176 的连接,然后拒绝所有其他连接。

请阅读一些教程来iptables了解它的工作原理,同时查看dmourati 的回答作为运行示例。

答案2

iptables -A INPUT -p tcp --dport 22 -s IP-ADDR-1 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s IP-ADDR-2 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT

相关内容