我正在尝试创建一个简单的 iptables 配置,将传出连接限制为一组 IP 地址。但是,每次我尝试配置 OUTPUT 规则时,我都会终止 ssh 连接。
为了解决这个问题,我们假设我想允许所有传入流量,并且只允许端口 53 上的 ip 8.8.8.8 传出流量。
这是我开始的 iptables 配置:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere ip-172-17-0-2.eu-central-1.compute.internal tcp dpt:9090
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target prot opt source destination
DROP all -- anywhere anywhere
RETURN all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
现在我尝试限制传出流量,如下所示:
iptables -I OUTPUT -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
iptables -P OUTPUT DROP
我执行第二个命令的实例我的 ssh 连接被阻止,我必须重新启动服务器。
也许我对 iptables 或 ssh 的理解错了。我的印象是 OUTPUT 链将控制服务器发起的传出连接,并且不应该影响我在端口 22 上连接到服务器的能力。此外,端口 80 和 443 上的所有其他传入连接都被终止,因此它不仅SSH。
答案1
我想我现在明白了:
iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
iptables -P OUTPUT DROP
这应该阻止服务器发起的连接上的所有传出流量。但不适用于由传入连接发起的连接。