Docker下的服务端口使用iptables限定特定IP访问

2022-01-03 4099点热度 0人点赞 0条评论

需求说明

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/

当然如果你的网络环境中,最外层有其他的软件、硬件防火墙,那么可以不用考虑这些问题。

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论