docker容器限定ip访问

docker容器限定ip访问

  • 一、测试所需环境:
  • [二、使用docker的 iptables 策略](#二、使用docker的 iptables 策略)
  • [三、Docker使用iptables 与系统Firewalld之间的关系](#三、Docker使用iptables 与系统Firewalld之间的关系)
  • 四、冲突解决方案

一、测试所需环境:

主机1:

ip:192.168.3.117

环境配置:docker、httpd(docker容器)

主机2:

ip:192.168.3.122


二、使用docker的 iptables 策略

默认情况下,允许所有外部源IP连接到Docker主机。要仅允许特定的IP(192.168.3.122)访问容器,需要在DOCKER-USER过滤器链中插入相应规则。具体命令如下:

  1. 查看DOCKER-USER的链中的规则信息
powershell 复制代码
#显示DOCKER-USER的链中的规则信息
iptables -nL DOCKER-USER
  1. 主机1httpd容器的默认访问端口为80,首先要禁止所有IP访问docker的80端口
powershell 复制代码
# 在主机192.168.3.117执行如下命令:(ens192 为本机网卡,以实际为准)
#禁止所有IP访问docker的80端口
iptables -I DOCKER-USER -i ens192 -p tcp --dport 80 -j DROP
  1. 限定主机2访问主机1的httpd容器,删除DOCKER-USER的链中的默认规则(默认规则允许任意ip访问)
powershell 复制代码
#只允许192.168.3.122访问docker的80端口
iptables -I DOCKER-USER -i ens192 -s 192.168.3.122 -p tcp --dport 80 -j ACCEPT
#删除DOCKER-USER的链中的默认规则
iptables -D DOCKER-USER -j RETURN
  1. 保存新的DOCKER-USER策略,并设置iptables开机自启
powershell 复制代码
#保存DOCKER-USER策略
service iptables save
#设置iptables开机自启,使策略永久生效
systemctl enable iptables.service
#或者
/etc/rc.d/init.d/iptables save

注: 通过iptables 命令设置的规则,默认是临时性的。若需要规则永久生效,则要将命令写入iptables配置文件之中。
使用此策略时,Firewall会被关闭

三、Docker使用iptables 与系统Firewalld之间的关系

Docker使用iptables来管理网络流量和端口转发。而Firewalld是CentOS/RHEL 7中默认的防火墙管理工具,它也使用iptables来实现规则。

当Firewalld激活时,它会自动配置iptables规则,并将iptables的管理权限交给自己。这就导致了Firewalld会屏蔽Docker容器的网络访问。这样会导致,在系统Firewalld限定ip访问后,容器的网络仍旧是任意ip均可访问。


四、冲突解决方案

禁用 docker 的 iptables 规则,使用系统的Firewalld

powershell 复制代码
#在daemon.json文件加入以下命令,若没有该文件,需要创建一个
vi /etc/docker/daemon.json
{
"iptables":false
}

开启网络地址转换(NAT)

powershell 复制代码
firewall-cmd --add-masquerade --permanent
#重新加载防火墙设置,使刚才添加的规则生效
firewall-cmd --reload

仅允许主机2访问主机1的80端口

powershell 复制代码
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.3.122" port protocol="tcp" port="80" accept'
#重新加载防火墙设置,使刚才添加的规则生效
firewall-cmd --reload
#查看防火墙设置
firewall-cmd --list-all

重启docker

powershell 复制代码
systemctl restart docker
相关推荐
BullSmall1 小时前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman
梦梦代码精4 小时前
开源AI应用平台BuildingAI解析:插件化架构、应用市场与热门案例
人工智能·机器学习·docker·开源
IT瑞先生6 小时前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
梦远青城7 小时前
Docker 部署python的paddle进行OCR文字识别身份证
python·docker·ocr·paddle·身份证识别
java_logo8 小时前
ELK Docker Compose 部署指南:轻松搭建日志检索平台
elk·elasticsearch·docker·容器·kibana·logstash·轩辕镜像
ShallWeL9 小时前
Orin 上用 Docker 跑通目标检测功能
人工智能·目标检测·docker·容器
辰同学ovo10 小时前
用“舞台换景”讲清 Docker 的 Restart 与 Recreate
运维·docker·容器
看-是灰机10 小时前
使用go语言实现对接
linux·开发语言·后端·docker·语言模型·golang·飞书
关关长语1 天前
Wsl解决MySQL容器跨域权限问题
mysql·docker·容器
IT小辉同学1 天前
# Milvus v3.0-beta docker-compose 启动失败完整排错教程
docker·eureka·milvus