docker如何利用iptables限制外网访问
先看官网: 点击跳转
如果有问题,也别来问我,我也不懂,下面自己感悟一下,或者有iptables的大佬,欢迎指教
还有什么问题,想咨询的,加群:582337768。 这个群不是我的,但是我在里面,但是还是那句话,我也不懂。
然后开始了, 首先使用DOCKER-USER的chain来进行操作。
DOCKER-USER该chain在ubuntu下面,除非重启服务器,不然就不会被重置。但是在firewalld下面(RHEL项目),由于firewalld会操作到该链,所以需要自己去验证。
容器的限制,主要是限制容器内的端口,而不是限制转发后的端口,可以通过 iptables -L FORWARD -nv
查看,还可以查看 DOCKER
的chain。
# 下面的操作限制的是80端口,而不是8001,其中8001是NAT网络转发出来的,限制不了。
# 启动一个容器,通过网桥映射端口对外
docker run -itd -p 8001:80 nginx
# 自己查看一下容器的网桥的地址断,下面的其实是比较暴力的方式,直接限制了172.16到172.31的网段了
# 拒绝所有请求的访问
iptables -I DOCKER-USER -p all -d 172.16.0.0/12 -j DROP
# 可以加上虚拟网络接口,这样就可以不需要同意 docker0对应的网段了,不然下面还是需要同意一下的
#iptables -I DOCKER-USER ! -i docker0 -d 172.16.0.0/16 -j DROP
# 这个命令就是tcp的连接状态,主要是容器请求外网使用
iptables -I DOCKER-USER -p all -d 172.16.0.0/12 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许访问,集群内互通
# 允许docker访问,这里配置12网段,理想情况是 根据现场环境进行配置,默认一般是172.16.0.0/16
iptables -I DOCKER-USER -p all -s 172.16.0.0/12 -j ACCEPT
# 允许IP地址的访问
iptables -I DOCKER-USER -p all -s 192.168.1.12 -j ACCEPT
需要注意一下,如果用compose启动的程序,容器的IP地址和使用的虚拟网桥、网卡设备又变化了,所以可能需要对应的操作修改。
反正要么-d参数指向, 要么用 ! -i br-xxxsdas 的方式。 自己研究一下吧