centos 7 防火墙明明已经启动了、但是我并没有对这个端口开放!
而这个端口却可以访问这是怎么回事啊?
端口号:32770
防火墙信息:
https://s1.ax1x.com/2020/03/30/GepBjO.png
网页访问:
https://s1.ax1x.com/2020/03/30/Ge9Nqg.png
安了 docker
禁一下这个端口然后看看有什么变化。
是的、我这个网站就是用 docker 创建的、这个端口就是 docker 映射的!
禁用和开启效果都是一样
这个问题在 Docker 官方文档中说的很明白,显然你是没有阅读官方文档就直接使用的 Docker 。
Docker 自动设定的 iptables 规则 [DOCKER-USER DOCKER] 比你手动设定的 iptables/firewalld 规则优先级要高,所以除非把规则添加到上述 [] 中才能生效。
不过如果你嫌麻烦还可以:
0.如果需要外网访问,可在容器内设定防火墙;
1.如果不需要外网访问 /爷就喜欢宿主防火墙,Docker 绑定 0.0.0.0 改为 127.0.0.1 。(●'◡'●)
iptables 又不能直接完全禁用、用 firewall 替代,那我岂不是每次启动只能在 run 的时候添加 ip 才行吗
> docker run -d --name test_jenkins -p 127.0.0.1:8080:8080 jenkins
6What ?什么意思。
run 一次就新建一个新的容器,你为什么每次启动都要新建一个容器呢?用原来的那个容器不可以吗?新建容器时你输入 [-p 127.0.0.1:8080:8080] 和 [-p 8080:8080] 的差别也不算大吧。/(ㄒoㄒ)/~~何况谁闲的没事整体新建容器呀。
就是因为动系统不如动容器我才提的那两条呀,/疑问?你是修改宿主防火墙不嫌麻烦,但许久遇不到一次新建容器嫌多打 9 个字符吗?
还是我没理解你的回复是什么意思?很迷呀。。
我感觉动宿主机的 firewall 防火墙比较方便点、因为用的容器较多、里面每个防火墙都不一样、我对 iptables 也不是很熟练! 所以问问如果 我下次如果重新需要一个容器的时候、上面这个方法,是不是能够解决 docker 端口跳过宿主机防火墙的问题
8如果是单纯拒绝外网访问容器的话,是的。
但如果还有筛选可访问 IP 等高级需求的话,配合端口转发也可以,就是不太雅观。大量容器下不推荐,难管理。
也不清楚你是生产环境用的还是自己开发机 /VPS 玩的,
如果是生产环境,宿主必须 firewalld 情况下,直接容器里单独配置 firewalld 应该最不容易出错;
如果是自己机器上玩,→_→当然用 127.0.0.1/0.0.0.0 来回切换简单粗暴易用呀,折腾防火墙什么的最讨厌了。
可以禁止 docker 修改 iptables, 编辑 /etc/docker/daemon.json, 添加
{
"iptables": false
}
docker 使用 iptables 创建了 nat 规则,prerouting 链规则。
防火墙设置的是 input 规则
流量进来会先看 prerouting 规则,再看 input 规则。prerouting 命中了,防护哦强的 input 自然没用了
还可以 network 用 host
说实在的,docker 的网络转发效率真的是差
docker 会直接在 iptables 上开洞,最直接的办法是在机外设防火墙
所以我云服务器都用运营商的安全组 省事
因为 nat 的优先级比 filter 高,所以...filter 并不会被触发
在 forward 上做
这个不是批量创建的、我是阿里服务器自己测试玩的!
由于使用不同的镜像、所以会导致容器内部有得防火墙都不一样、而且有得甚至都没有安装,我觉得这个维护成本更高,所以就想用一个外部的方法控制最好了
你这个方法我试过了、好像没有生效、创建的时候依旧会出现上面这个情况!
iptables 防火墙感觉特麻烦、还是 firewall 好用、有没有办法可以在控制 docker 的上面解决这个问题呢
我是用的阿里云服务器、每启动一个容器就登录后台去设置安全组、还是比较麻烦、还是宿主机一个命令方便
看样子我还是对 iptables 一无所知、去学习下
用 docker-compose 啊
如果想单纯阻断 32770 从外网穿到 docker:80 的话
iptables -A FORWARD -p tcp --dport 32770 -j DROP
就成了
你这个具体怎么操作呢?
我这是 c7 、默认安装的是 firewall,按照你这个是要安装一个 iptables 来替代 firewall 来操作吗?
firewall-cmd 和 iptables 就是两个前端,最终操作的都是 netfilter
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
大佬啊、 你这一段操作我没看懂