技术解析

请教一个 centos7 默认防火墙问题
0
2021-06-12 00:13:02
idczone
各位大佬 ,请教个问题
Centos7 默认防火墙是 firewalld,防火墙开启后,只开放了 80 端口和 SSH 端口国外服务器,用 firewall-cmd --list-all 也只能看到 80 和 SSH 端口,但服务器上装了 PHP-FPM ( 9000 端口),9000 端口没允许通过防火墙,为什么在外面机器上还是能 telnet 通呢?怎样让 9000 端口在外面机器上 telnet 不通呢
firewalld 也是用的 iptables,可以直接 iptables -vnL 检查一下当前实际使用中的配置,是不是默认放行了或者其他问题,

用 iptables-save 查看配置比较好
-L 显示的形式比较奇怪

要看有没有接管接口
如果没有 firewall-cmd --zone=X --add-interface=ethX

用 iptables-vnL 显示如下结果:
http://www.filedropper.com/firewall_1

执行报错
iptables v1.4.21: no command specified

执行 firewall-cmd --get-active-zones 显示如下结果:
docker
interfaces: br-25239aa44ec6 docker0
public
interfaces: ens160
这是不是有接管接口?
在 iptables -vnL 中有 9000 接口
4 200 ACCEPT tcp -- !br-25239aa44ec6 br-25239aa44ec6 0.0.0.0/0 172.18.0.2 tcp dpt:9000

public 接管了 ens160 。

现在执行 firewall-cmd --zone=public --add-interface=eth160 吗?

br-25239aa44ec6 这个 bridge 名看起来像是 docker 创建的。
Docker 默认情况下会自己插入防火墙规则放行-p 参数指定的端口。

对,服务器装好后,后面上线的产品都是商业公司部署的,刚刚发现在他们装了三个容器( PHP,mysql 和 nginx),分别开放了三个端口 9000,3306 和 80.查看端口映射时显示结果是
9000/tcp -> 0.0.0.0:9000
9000/tcp -> :::9000
3306/tcp -> 0.0.0.0:3306
3306/tcp -> :::3306
80/tcp -> 0.0.0.0:80
80/tcp -> :::80
是不是映射时,把 9000 和 3306 这两个端口的地址 0.0.0.0 改成本地 localhost 或者 127.0.0.1 ?除了 80 需要对外服务,这两个端口应该都是容器与服务器本身之间的通讯吧。

在网上看到一段话:
>>> 默认情况下, docker 启动后参数中如果加了端口映射, 就会自动将端口开放给所有网络设备访问,并且这种情况下即使在本机的系统防火墙中加规则也无效, 因为 docker 会自动添加一个优先级最高的针对这个映射端口全开放规则
参考:
1.https://www.fullstackmemo.com/2019/01/10/standalone-docker-firewall-set/
2.https://www.binss.me/blog/docker-pass-through-system-firewall/

我早就猜到你会多加一个空格

呵呵,恭喜你猜对了。:)

问题解决,谢谢各位
参考: https://blog.csdn.net/Jailman/article/details/111591811
禁止 docker 管理防火墙
修改 /etc/docker/daemon.json
{
“iptables”:false
}
重启 docker

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服