我有一个 Docker 容器向 Internet 公开端口 3306。我想限制对某些公共 IP 地址的访问。例如,让我们使用 1.2.3.4。
作为附加条件,我希望规则在重新启动 Docker 守护程序和重新启动服务器后仍然存在。这允许我在服务器重新启动时使用iptables-persistent
( iptables-save
/ iptables-restore
) 来恢复规则,而不会dockerd
干扰它的启动。
我尝试了以下方法:
修改FORWARD
链:
iptables -I FORWARD -p tcp --dport 3306 -j REJECT
iptables -I FORWARD -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
这在启动 Docker 守护进程后完成。重新启动守护进程时,Docker 在链的顶部插入了额外的规则,而我的自定义规则最终会被忽略。
修改DOCKER
链:
iptables -N DOCKER # if chain does not yet exist
iptables -I DOCKER -p tcp --dport 3306 -j REJECT
iptables -I DOCKER -p tcp --dport 3306 -s 1.2.3.4 …
Run Code Online (Sandbox Code Playgroud)