我有 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
这绝对行不通!
原因:
- 如果你从 .71 连接,第二条规则将拒绝你的连接
- 如果你从任何地方连接,第一条规则将拒绝你的连接
这样做的原因是,如果一条规则在 iptables 中不匹配,它将继续执行下一条规则。
您必须允许来自 .71 和 .176 的连接,然后拒绝所有其他连接。
为什么第一条规则上的计数器没有增加:我不知道。
编辑澄清一下:
iptables
逐一检查规则。如果规则匹配,则评估将停止并显示目前的结果。因此,您的规则iptables
将执行以下操作:
- 如果你从 .71 连接
- 第一条规则不匹配(因为 src !xxx71 不匹配)
- 第二条规则拒绝请求(因为 src !xxx176 匹配),结果应该是
REJECT
- 如果你从其他地方连接(例如 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