如何配置docker的iptables规则DOCKER-USER来限制输出?

Sra*_*raw 5 linux networking iptables docker

我正在运行一个容器,我只想允许它访问特定的 ip。换句话说,我想拒绝大多数目标ip。

我尝试了以下方法:

iptables -I DOCKER-USER -o custom-interface ! -d xxx.xxx.xxx.xxx -j REJECT
Run Code Online (Sandbox Code Playgroud)

但它拒绝所有连接,我不能ping xxx.xxx.xxx.xxx

真的很奇怪,我想我只是通过不会到达xxx.xxx.xxx.xxx的自定义接口阻止输出数据包。因此,所有到达 xxx.xxx.xxx.xxx 的传入数据包和输出数据包都被接受。

但似乎我错了。为什么?任何帮助表示赞赏。

编辑

接受的答案显示了如何配置传入限制,然后我学习了如何配置传出限制。

创建一个 BEFORE_DOCKER 表

iptables -N BEFORE_DOCKER
Run Code Online (Sandbox Code Playgroud)

默认

iptables -I BEFORE_DOCKER -j DROP
Run Code Online (Sandbox Code Playgroud)

Docker Containers Public Admin access(在此处插入所有允许的 IP)

iptables -I BEFORE_DOCKER -o eth0 -d 172.114.1.23 -j ACCEPT
iptables -I BEFORE_DOCKER -o eth0 -d 10.129.172.12 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

Docker Containers Restricted LAN Access(在此处插入您的 LAN IP 范围或多个 IP)

iptables -I BEFORE_DOCKER -o eth1 -d 192.168.10.1 -j ACCEPT
iptables -I BEFORE_DOCKER -o eth1 -d 192.168.10.2 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

最后一步是将它作为 FORWARD 链上的第一个表插入。

iptables -I FORWARD -i docker0 -j BEFORE_DOCKER
Run Code Online (Sandbox Code Playgroud)

Sha*_*han 4

创建一个默认规则为 REJECT 的 BEFORE_DOCKER 表,下一步是将其作为 FORWARD 链上的第一个表插入。

创建 BEFORE_DOCKER 表

iptables -N BEFORE_DOCKER
Run Code Online (Sandbox Code Playgroud)

默认

iptables -I BEFORE_DOCKER -j DROP
Run Code Online (Sandbox Code Playgroud)

Docker 容器公共管理员访问(在此处插入所有允许的 IP)

iptables -I BEFORE_DOCKER -i eth0 -s 172.114.1.23 -j ACCEPT
iptables -I BEFORE_DOCKER -i eth0 -s 10.129.172.12 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

Docker 容器限制 LAN 访问(在此处插入您的 LAN IP 范围或多个 IP)

iptables -I BEFORE_DOCKER -i eth1 -s 192.168.10.1 -j ACCEPT
iptables -I BEFORE_DOCKER -i eth1 -s 192.168.10.2 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

最后一步是将其作为 FORWARD 链上的第一个表插入。

iptables -I FORWARD -o docker0 -j BEFORE_DOCKER
Run Code Online (Sandbox Code Playgroud)

希望它会有所帮助!