我在我的服务器上使用 Selenium grid docker 容器,可以通过 http://IP_address:4444 从 Web 访问。请帮我弄清楚如何通过向 ufw 添加一些规则来过滤或禁用此连接?我尝试过这样的方法:
sudo ufw deny http/tcp
sudo ufw deny out http/tcp
sudo ufw deny 4444
sudo ufw deny out 4444
不幸的是这些都不起作用。
答案1
你的docker容器可能绕过了ufw规则,为此你可以进入或者创建/etc/docker/daemon.json
然后添加{ "iptables": false }
然后重新加载然后重新加载dockersudo systemctl reload docker
如果这仍然不起作用,您可以尝试确保已启用 ufw,sudo ufw enable
然后像这样允许来自本地网络的传入连接sudo ufw allow 192.168.1.0/24
(如果不同,请用您的本地网络地址替换 192.168.1.0),然后像这样阻止所有传入连接到端口 4444sudo ufw deny in 4444
现在如果你这样做sudo ufw status
你应该会看到类似
状态:活跃
至 操作 来自 -- ------ ---- 4444 拒绝进入 任何地方 任何地方 允许进入
192.168.1.0/24
答案2
解决方案尽可能简单。
Docker 使用 iptables 并根据您的 docker compose 或 docker run 参数自动更新其规则。
如果您通过 Docker 公开端口,则无论防火墙配置了什么规则,该端口都会公开。
但是你可以指示docker引擎在内部公开端口:
docker 运行:
-p 127.0.0.1:27017:27017
docker 撰写:
ports: - "127.0.0.1:4444:4444"
其余 ufw 规则将正常工作,直到它们不被 Docker 覆盖。