我是 Docker 和 Portainer 的新手,我正尝试将其锁定,以防止在不需要时进行公共访问。
我的设置:
Windows 2022 Server running Hyper-V (host)
Ubuntu 22.04 Workstation (virtual machine)
Docker (latest)
Portainer (port 9000)
MySQL (latest)
我正在使用运行公共 IP 的 Ubuntu Workstation 22.04。我通过 ssh 登录并安装了 Docker、Portainer 和 MySQL。我正在测试 portainer,看看我是否可以从我的计算机外部访问它,显然我可以在任何位置访问它。
Ubuntu Ip: *.*.*.219
My Ip: *.*.*.84
Portainer Url: http://*.*.*.219:9000
我检查了 ufw,没有发现任何问题。我甚至直接封锁了 9000 端口,但仍然可以访问 Portainer 网站。
# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] Anywhere ALLOW IN *.*.*.84
[ 2] 80 ALLOW IN Anywhere
[ 3] 443 ALLOW IN Anywhere
[ 4] 9000 ALLOW IN *.*.*.84
[ 5] 9000 DENY IN Anywhere
[ 6] 9000 (v6) DENY IN Anywhere (v6)
我按照他们网站上的说明安装了 Portainer,没有遇到任何问题。我可以从互联网上的任何计算机访问 Portainer。我需要将其隔离到我的 IP。
我需要做什么才能知道为什么我的防火墙无法正常工作?
附加信息
答案1
ufw 默认不显示 iptables 规则。我建议您始终直接使用 iptables,而不是通过 ufw。您可以执行以下操作:
iptables -S
和
iptables -t nat -S
并发布减去任何识别地址的输出。
以下是基于标准安装以及锁定面向外部的服务器所需的规则。一旦我掌握了您的设置信息,我就可以调整所需的内容。
我假设 docker 已为您的容器指定了 ip 172.17.42.1,请根据您的设置调整地址。
将以下内容保存到文件中:例如 iprules.v4
iptables -I INPUT -s *.*.*.84 -j ACCEPT
iptables -t nat -I PREROUTING -s *.*.*.84 -p tcp -m tcp --dport 9000 -j DNAT --to-destination 172.17.42.1:9000
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT *** this is just incase you need ssh from somewhere, and also as a backup until you confirmed the rules are right as you are accessing it remotely.
iptables -P INPUT drop
然后运行:
iptables-restore < iprules.v4
然后我将禁用 ufw,否则如果重新加载规则,ufw 可能会覆盖 iptables。