宝塔面板无法限制Docker端口的解决方法
宝塔与docker都是用iptables作为防火墙设置,但是宝塔是用的是 INPUT 链,而DOCER使用的是 DOCER-USER链
限制与Docker主机的连接
默认情况下,允许所有外部源IP连接到Docker主机。要仅允许特定的IP或网络访问容器,请在DOCKER-USER过滤器链的顶部插入一个否定的规则。例如,以下规则限制从以下所有IP地址进行的外部访问192.168.1.1:
iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.1 -j DROP
请注意,您将需要更改ext_if以与主机的实际外部接口相对应。您可以改为允许来自源子网的连接。以下规则仅允许从子网进行访问192.168.1.0/24:
iptables -I DOCKER-USER -i eth0 ! -s 192.168.1.0/24 -j DROP
最后,您可以指定要接受的IP地址范围--src-range (请记住-m iprange在使用--src-range或时也要添加--dst-range):
iptables -I DOCKER-USER -m iprange -i eth0 ! --src-range 192.168.1.1-192.168.1.3 -j DROP
您可以结合使用-s或--src-range与-d或--dst-range一起控制源和目标。例如,如果Docker守护程序同时监听 192.168.1.99和10.1.2.3,则可以制定特定于10.1.2.3并保持 192.168.1.99打开的规则。
比如我的服务器的对外网卡名是 eth0,执行以下命令,则可限制容器端口只可以 192.168.2.0 子网访问
iptables -I DOCKER-USER -i eth0 ! -s 192.168.2.0/24 -j DROP