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

centos7 防火墙失效,这是怎么回事?

  •  
  •   janda ·
    jandaes · 2020-03-30 14:40:48 +08:00 · 5195 次点击
    这是一个创建于 1734 天前的主题,其中的信息可能已经有所发展或是发生改变。

    centos 7 防火墙明明已经启动了、但是我并没有对这个端口开放!

    而这个端口却可以访问这是怎么回事啊?

    端口号:32770

    防火墙信息:

    https://s1.ax1x.com/2020/03/30/GepBjO.png

    网页访问:

    https://s1.ax1x.com/2020/03/30/Ge9Nqg.png

    第 1 条附言  ·  2020-03-30 15:54:37 +08:00
    该网站是通过 Docker 运行的、端口也是映射的 docker 容器

    https://s1.ax1x.com/2020/03/30/GmjXiq.png
    22 条回复    2020-03-31 23:01:34 +08:00
    zwl2012
        1
    zwl2012  
       2020-03-30 15:23:48 +08:00 via iPhone
    安了 docker
    ashes1122
        2
    ashes1122  
       2020-03-30 15:38:29 +08:00
    禁一下这个端口然后看看有什么变化。
    janda
        3
    janda  
    OP
       2020-03-30 15:49:55 +08:00
    @zwl2012 是的、我这个网站就是用 docker 创建的、这个端口就是 docker 映射的!
    janda
        4
    janda  
    OP
       2020-03-30 15:50:09 +08:00
    @ashes1122 禁用和开启效果都是一样
    cev2
        5
    cev2  
       2020-03-30 16:18:15 +08:00   ❤️ 3
    这个问题在 Docker 官方文档中说的很明白,显然你是没有阅读官方文档就直接使用的 Docker 。
    Docker 自动设定的 iptables 规则 [DOCKER-USER DOCKER] 比你手动设定的 iptables/firewalld 规则优先级要高,所以除非把规则添加到上述 [] 中才能生效。
    不过如果你嫌麻烦还可以:
    0.如果需要外网访问,可在容器内设定防火墙;
    1.如果不需要外网访问 /爷就喜欢宿主防火墙,Docker 绑定 0.0.0.0 改为 127.0.0.1 。(●'◡'●)
    janda
        6
    janda  
    OP
       2020-03-30 16:38:43 +08:00
    @cev2 iptables 又不能直接完全禁用、用 firewall 替代,那我岂不是每次启动只能在 run 的时候添加 ip 才行吗

    > docker run -d --name test_jenkins -p 127.0.0.1:8080:8080 jenkins
    cev2
        7
    cev2  
       2020-03-30 17:06:30 +08:00
    @janda 6# What ?什么意思。
    run 一次就新建一个新的容器,你为什么每次启动都要新建一个容器呢?用原来的那个容器不可以吗?新建容器时你输入 [-p 127.0.0.1:8080:8080] 和 [-p 8080:8080] 的差别也不算大吧。/(ㄒoㄒ)/~~何况谁闲的没事整体新建容器呀。

    就是因为动系统不如动容器我才提的那两条呀,/疑问?你是修改宿主防火墙不嫌麻烦,但许久遇不到一次新建容器嫌多打 9 个字符吗?
    还是我没理解你的回复是什么意思?很迷呀。。
    janda
        8
    janda  
    OP
       2020-03-30 17:17:21 +08:00
    @cev2 我感觉动宿主机的 firewall 防火墙比较方便点、因为用的容器较多、里面每个防火墙都不一样、我对 iptables 也不是很熟练! 所以问问如果 我下次如果重新需要一个容器的时候、上面这个方法,是不是能够解决 docker 端口跳过宿主机防火墙的问题
    cev2
        9
    cev2  
       2020-03-30 17:48:30 +08:00
    @janda 8# 如果是单纯拒绝外网访问容器的话,是的。
    但如果还有筛选可访问 IP 等高级需求的话,配合端口转发也可以,就是不太雅观。大量容器下不推荐,难管理。

    也不清楚你是生产环境用的还是自己开发机 /VPS 玩的,
    如果是生产环境,宿主必须 firewalld 情况下,直接容器里单独配置 firewalld 应该最不容易出错;
    如果是自己机器上玩,→_→当然用 127.0.0.1/0.0.0.0 来回切换简单粗暴易用呀,折腾防火墙什么的最讨厌了。
    sumika
        10
    sumika  
       2020-03-30 18:17:49 +08:00
    可以禁止 docker 修改 iptables, 编辑 /etc/docker/daemon.json, 添加

    {
    "iptables": false
    }
    arloor
        11
    arloor  
       2020-03-30 19:18:35 +08:00   ❤️ 1
    docker 使用 iptables 创建了 nat 规则,prerouting 链规则。
    防火墙设置的是 input 规则

    流量进来会先看 prerouting 规则,再看 input 规则。prerouting 命中了,防护哦强的 input 自然没用了
    des
        12
    des  
       2020-03-30 19:46:59 +08:00 via Android
    还可以 network 用 host
    说实在的,docker 的网络转发效率真的是差
    clague
        13
    clague  
       2020-03-30 20:03:56 +08:00 via Android
    docker 会直接在 iptables 上开洞,最直接的办法是在机外设防火墙
    wxch111vv
        14
    wxch111vv  
       2020-03-30 20:19:19 +08:00 via Android
    所以我云服务器都用运营商的安全组 省事
    tomychen
        15
    tomychen  
       2020-03-30 20:20:41 +08:00
    因为 nat 的优先级比 filter 高,所以...filter 并不会被触发

    在 forward 上做
    janda
        16
    janda  
    OP
       2020-03-31 09:02:47 +08:00
    @cev2 这个不是批量创建的、我是阿里服务器自己测试玩的!

    由于使用不同的镜像、所以会导致容器内部有得防火墙都不一样、而且有得甚至都没有安装,我觉得这个维护成本更高,所以就想用一个外部的方法控制最好了





    @sumika 你这个方法我试过了、好像没有生效、创建的时候依旧会出现上面这个情况!





    @arloor iptables 防火墙感觉特麻烦、还是 firewall 好用、有没有办法可以在控制 docker 的上面解决这个问题呢



    @clague
    @wxch111vv 我是用的阿里云服务器、每启动一个容器就登录后台去设置安全组、还是比较麻烦、还是宿主机一个命令方便



    @tomychen
    @des 看样子我还是对 iptables 一无所知、去学习下
    youtoshell
        17
    youtoshell  
       2020-03-31 12:11:28 +08:00 via Android
    @janda 用 docker-compose 啊
    tomychen
        18
    tomychen  
       2020-03-31 13:31:01 +08:00
    如果想单纯阻断 32770 从外网穿到 docker:80 的话
    iptables -A FORWARD -p tcp --dport 32770 -j DROP
    就成了
    janda
        19
    janda  
    OP
       2020-03-31 14:44:34 +08:00
    @youtoshell 你这个具体怎么操作呢?




    @tomychen 我这是 c7 、默认安装的是 firewall,按照你这个是要安装一个 iptables 来替代 firewall 来操作吗?
    tomychen
        20
    tomychen  
       2020-03-31 14:58:55 +08:00
    firewall-cmd 和 iptables 就是两个前端,最终操作的都是 netfilter
    youtoshell
        21
    youtoshell  
       2020-03-31 15:40:10 +08:00
    @janda
    docker-compose.yml

    version: '3'

    services:
    test_jenkins:
    image: jenkins
    container_name: test_jenkins
    restart: always
    ports:
    - "127.0.0.1:8080:8080"

    docker-compose up -d
    janda
        22
    janda  
    OP
       2020-03-31 23:01:34 +08:00
    @youtoshell 大佬啊、 你这一段操作我没看懂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:13 · PVG 00:13 · LAX 08:13 · JFK 11:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.