我正在尝试阻止OUTPUT
Chain 中给出的所有 IP 的其他几个 IP。
当我安装 Iptables 时,OUTPUT
链是空的,输入链添加了STATED, ESTABLISHED
IP,并拒绝除给定链规则之外的所有 IP 。它起作用了,我只需要添加 ssh 和其他端口来允许来自输入链的流量。当我安装 iptables 时,INPUT
REJECT 规则被添加了。INPUT
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:<....>
2 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
3 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
4 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
对于OUTPUT
链,它是空的。我添加了下面的规则,它将接受出站流量和一些其他端口的 ssh 连接并保存了规则,它有效。
sudo iptables -I OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -I OUTPUT -p tcp -m tcp --dport <...> -j ACCEPT
sudo iptables -I OUTPUT -p tcp -m tcp --dport <..> -j ACCEPT
sudo service iptables save
注意:不要运行以下规则,否则可能会将您锁定在 VM 中。当我添加规则以阻止OUTPUT
>>中的所有端口时sudo iptables -A OUTPUT -j REJECT
,VM 会立即被锁定并且无法访问 VM。
从云控制台重新启动 VM 后,我能够重新获得访问权限,因为上述iptable
规则未被保存。
过了一段时间后,我尝试了>> sudo iptables -A OUTPUT -j Drop
,但它再次锁定了 VM,需要重新启动才能访问 VM。
请告诉我如何阻止所有出站端口(如输入链),而不会被锁定。当前 Iptables 配置如下。
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:<....>
2 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
3 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
4 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:<>
2 ACCEPT tcp -- anywhere anywhere tcp dpt:<>
3 ACCEPT tcp -- anywhere anywhere tcp dpt:<>
4 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
答案1
您所做的正是阻止传出流量所需要的,并且您确实通过向 OUTPUT 链添加规则来实现阻止传出流量。
您没有考虑到的是,任何传入连接(即允许的连接)也需要发送回流量,因此也始终会产生相关的传出流量。换句话说,允许的连接是双向的,传入连接(由您的 INPUT 规则控制)和您的服务器发送回的响应(由您的 OUTPUT 规则控制)。
未经测试的示例
最小状态防火墙配置仅允许环回接口和 SSH 作为入口流量并拒绝所有其他流量,如下所示:
iptables -I 1 INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I 2 INPUT -i lo -j ACCEPT
iptables -I 3 INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,UNTRACKED -j ACCEPT
...
other allowances here
...
# as the last rule, reject everything that isn't explicitly allowed
iptables -A INPUT -j REJECT
最小的状态防火墙配置,用于出口过滤,同样应允许通过允许的连接、DNS 查找和响应(端口 53 TCP 和 UDP)往返于您的名称服务器的流量,
iptables -I 1 OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I 2 OUTPUT -o lo -j ACCEPT
iptables -I 3 OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -I 3 OUTPUT -p udp -m udp --dport 53 -j ACCEPT
...
other allowances here
...
# as the last rule, reject everything that isn't explicitly allowed
iptables -A OUTPUT -j REJECT