V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
davoola
V2EX  ›  Linux

请教一个 centos7 默认防火墙问题

  •  
  •   davoola · 2021-06-02 11:10:20 +08:00 · 1745 次点击
    这是一个创建于 1307 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位大佬 ,请教个问题
    Centos7 默认防火墙是 firewalld,防火墙开启后,只开放了 80 端口和 SSH 端口,用 firewall-cmd --list-all 也只能看到 80 和 SSH 端口,但服务器上装了 PHP-FPM ( 9000 端口),9000 端口没允许通过防火墙,为什么在外面机器上还是能 telnet 通呢?怎样让 9000 端口在外面机器上 telnet 不通呢
    14 条回复    2021-06-02 14:48:18 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-06-02 11:17:09 +08:00
    firewalld 也是用的 iptables,可以直接 iptables -vnL 检查一下当前实际使用中的配置,是不是默认放行了或者其他问题,
    julyclyde
        2
    julyclyde  
       2021-06-02 11:18:34 +08:00
    用 iptables-save 查看配置比较好
    -L 显示的形式比较奇怪
    dzdh
        3
    dzdh  
       2021-06-02 12:01:50 +08:00
    要看有没有接管接口

    如果没有 firewall-cmd --zone=X --add-interface=ethX
    davoola
        4
    davoola  
    OP
       2021-06-02 12:04:38 +08:00
    @AoEiuV020 用 iptables-vnL 显示如下结果:
    http://www.filedropper.com/firewall_1
    davoola
        5
    davoola  
    OP
       2021-06-02 12:05:32 +08:00
    @julyclyde 执行报错
    iptables v1.4.21: no command specified
    davoola
        6
    davoola  
    OP
       2021-06-02 12:12:13 +08:00
    @dzdh 执行 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
    dzdh
        7
    dzdh  
       2021-06-02 12:14:31 +08:00
    @davoola public 接管了 ens160 。
    davoola
        8
    davoola  
    OP
       2021-06-02 12:23:52 +08:00
    @dzdh 现在执行 firewall-cmd --zone=public --add-interface=eth160 吗?
    raysonx
        9
    raysonx  
       2021-06-02 12:37:46 +08:00
    br-25239aa44ec6 这个 bridge 名看起来像是 docker 创建的。
    Docker 默认情况下会自己插入防火墙规则放行-p 参数指定的端口。
    davoola
        10
    davoola  
    OP
       2021-06-02 12:51:27 +08:00
    @raysonx 对,服务器装好后,后面上线的产品都是商业公司部署的,刚刚发现在他们装了三个容器( 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 需要对外服务,这两个端口应该都是容器与服务器本身之间的通讯吧。
    davoola
        11
    davoola  
    OP
       2021-06-02 13:07:25 +08:00
    在网上看到一段话:
    >>> 默认情况下, 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/
    julyclyde
        12
    julyclyde  
       2021-06-02 13:20:52 +08:00
    @davoola 我早就猜到你会多加一个空格
    davoola
        13
    davoola  
    OP
       2021-06-02 13:24:51 +08:00
    @julyclyde 呵呵,恭喜你猜对了。:)
    davoola
        14
    davoola  
    OP
       2021-06-02 14:48:18 +08:00   ❤️ 1
    问题解决,谢谢各位
    参考: https://blog.csdn.net/Jailman/article/details/111591811

    禁止 docker 管理防火墙
    修改 /etc/docker/daemon.json

    {
    “iptables”:false
    }

    重启 docker
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1038 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:47 · PVG 03:47 · LAX 11:47 · JFK 14:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.