需求说明
Docker容器的端口,我们需要管控防火墙访问,例如只允许某个IP地址或者IP地址段才能访问容器的端口;在没有Docker的情况下,很容易使用iptables来限定特定的IP/IP地址段访问。
如果要限制Docker里的容器访问外网,详见:https://blog.terrynow.com/2022/01/25/iptable-block-all-docker-containers-outgoing-connections/
实现
Docker服务中,会生成一个虚拟的interface,我们需要对这个interface来执行特定的防火墙规则。
以6379端口(Redis)为例,例如,我们需要设定只有192.168.1.0/24才能访问Redis的6379端口,可以这样做:
# 先禁止某个端口的全部访问 iptables -I DOCKER -p tcp --dport 6379 -j DROP # 或者先禁止DOCKER的全部访问 # iptables -I DOCKER -j DROP # 然后再一个一个有需要的开启 iptables -I DOCKER -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT # 放行需要访问的IP地址或者IP地址段 iptables -I DOCKER -s 192.168.1.0/24 -p tcp --dport 6379 -j ACCEPT # 保存到配置文件,到时候iptables重启后还能生效 iptables-save > /etc/sysconfig/iptables
修改后记得重启下docker服务,或者docker里的容器
如果你的服务器使用的Linux的firewalld作为防火墙,那么在防火墙层面的设置会比较复杂,建议用这种方式实现:
https://blog.terrynow.com/2022/01/06/docker-container-port-firewalld-settings/
当然如果你的网络环境中,最外层有其他的软件、硬件防火墙,那么可以不用考虑这些问题。
文章评论