背景:接管公网服务器后,压力山大,服务器上容器部署了区块链公网节点、矿池等重要服务,不容有失,否则自吻10次都不够。认认真真地从零自学。研究任务一波一波,这不,小白收到了只开放公网服务器指定端口,屏蔽无关端口的任务(需求:公网服务器可以查询公网区块链节点本地数据,外部服务器不能访问)。一番筛选,决定选用一款简单好用的防火墙管理工具ufw。快速学习ufw后,开始小牛试刀。(这里不讨论ufw)。
ufw屏蔽服务器商非docker容器应用使用端口没有任何问题。问题出在屏蔽不了容器应用对应端口。排除了“ufw使用不当”、“docker-compose.yml端口映射不正确”等原因,Goole之,solve,and整理输出文档。以下方法在半年前亲测可用,写文章没再次验证。
1、修改ufw默认配置
vim /etc/default/ufw
#把DEFAULT_FORWARD_POLICY修改为
DEFAULT_FORWARD_POLICY=“ACCEPT”
重新加载 uwf reload
开放2375端口 ufw allow 2375/tcp
2、修改Docker读取iptables默认配置
vi /etc/default/docker
在DOCKER_OPTS中增加参数--iptables=false
确认/lib/systemd/system/docker.service文件中,启动参数局否带有$DOCKER_OPTS
没有的话可修改为如下
EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
3、修改/etc/ufw/before.rules,NAT配置
vim /etc/ufw/before.rules
在`*filter`前面添加下面内容
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
COMMIT
reboot永久生效。