Linux
阻止 Docker 埠並將其訪問到幾個 IP 地址
我需要阻止所有 INPUT 流量到 Ubuntu 伺服器 16.04 上的埠 8090。我使用了 Iptables,但它不起作用。我使用的命令:
iptables -A INPUT -p tcp --dport 8090 -j DROP iptables -A INPUT -p tcp --dport 8090 -s <IP> -j ACCEPT
在 NAT 我有:
Chain DOCKER (2 references) target prot opt source destination DNAT tcp -- anywhere <VM local IP> tcp dpt:8090 to:172.21.0.2:8080
命名的公共介面和命名
eth0
的 docker 介面docker0
由於 DNAT,您現在正在路由。您的 INPUT 鏈不再用於這種 DNATed 流量,而是現在被遍歷的 FORWARD 鏈。新的目的地是
172.21.0.2:8080
規則現在應該關心的,而不是現在<VM local IP>:8090
。因此,有了 DNAT,您應該使用以下命令阻止您的流量(按正確的順序:允許例外,然後禁止其他一切):
iptables -A FORWARD -s <IP> -d 172.21.0.2 -p tcp --dport 8080 -j ACCEPT iptables -A FORWARD -d 172.21.0.2 -p tcp --dport 8080 -j DROP
為確保它實際上在任何系統規則之前完成,您可以執行以下操作:
iptables -I FORWARD 1 -s <IP> -d 172.21.0.2 -p tcp --dport 8080 -j ACCEPT iptables -I FORWARD 2 -d 172.21.0.2 -p tcp --dport 8080 -j DROP
這些規則可能會根據配置阻止其他容器到達此容器,因此您可能必須調整它們(例如,通過說明外部輸入介面)。無論如何,您必須找到一種方法將其與系統的防火牆方法很好地集成。