首页 > 其他分享 >Docker 容器映射端口访问限制

Docker 容器映射端口访问限制

时间:2024-12-02 18:33:19浏览次数:4  
标签:iptables 映射 -- 0.0 端口 6379 USER Docker DOCKER

在使用 Docker 容器时我们经常需要将容器端口映射到宿主机上。最基本的端口映射可以通过 "PORT:PORT" 来设置,比如 "6379:6379" 就是将容器的 6379 端口映射到宿主机的 6379 端口上。

然而,这种基本的端口映射存在一个主要问题:默认情况下,任何能访问到宿主机的客户端都可以访问这个端口。在生产环境中我们通常需要限制只允许特定的 IP 地址或网段访问容器端口。

0x00 Docker 网络工作原理

当我们映射容器端口时,Docker 会在 iptables 中添加相关规则。数据包的流向如下:

flowchart TD A[客户端] --eth0--> B[宿主机] --iptables NAT--> C[docker0 网桥] --转发--> D[容器]

为了限制访问我们需要在 DOCKER-USER 链中添加规则来控制流量。DOCKER-USER 链中的规则会在 DOCKER 链中的规则之前执行,具体文档可以查看 Packet filtering and firewalls

0x01 配置示例

首先创建一个测试用的 Redis 容器:

services:
  redis:
    image: redis:latest
    restart: unless-stopped
    ports:
      - 6379:6379
    volumes:
      - /etc/localtime:/etc/localtime:ro

测试下可访问性

机器1 (IP: 192.168.1.10):
redis connect test on machine1

机器2 (IP: 192.168.2.10):
redis connect test on machine2

添加访问控制规则

以下规则将只允许来自机器1网段访问 6379 端口:

# 允许已建立的连接
sudo iptables -I DOCKER-USER -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许指定网段访问指定端口
sudo iptables -I DOCKER-USER -i eth0 -p tcp -s 192.168.1.0/24 --dport 6379 -j ACCEPT

# 允许 docker0 网桥转发到指定端口的流量
sudo iptables -I DOCKER-USER -i docker0 -p tcp --dport 6379 -j ACCEPT
sudo iptables -I DOCKER-USER -o docker0 -p tcp --dport 6379 -j ACCEPT

# 拒绝其他所有访问该端口的请求
sudo iptables -A DOCKER-USER -p tcp --dport 6379 -j DROP

# 允许其他端口的流量(可选)
sudo iptables -A DOCKER-USER -j RETURN

多端口配置示例

如果需要限制多个端口,可以使用多端口匹配:

# 允许访问多个端口
sudo iptables -I DOCKER-USER -i eth0 -p tcp -s 192.168.1.0/24 -m multiport --dports 6379,8080,3306 -j ACCEPT

# 允许 docker0 网桥转发多个端口
sudo iptables -I DOCKER-USER -i docker0 -p tcp -m multiport --dports 6379,8080,3306 -j ACCEPT
sudo iptables -I DOCKER-USER -o docker0 -p tcp -m multiport --dports 6379,8080,3306 -j ACCEPT

# 拒绝其他所有访问这些端口的请求
sudo iptables -A DOCKER-USER -p tcp -m multiport --dports 6379,8080,3306 -j DROP

验证规则

检查规则是否正确配置:

# 查看规则列表
➜  sudo iptables -L DOCKER-USER -n -v --line-numbers
Chain DOCKER-USER (1 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     tcp  --  *      docker0  0.0.0.0/0            0.0.0.0/0            tcp dpt:6379
2        0     0 ACCEPT     tcp  --  docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:6379
3       28  1478 ACCEPT     tcp  --  eth0   *       192.168.1.0/24       0.0.0.0/0            tcp dpt:6379
4        9   540 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:6379
5       21  1107 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0

机器1 (IP: 192.168.1.10):
redis connect test on machine1

机器2 (IP: 192.168.2.10):
redis connect test on machine2

0x02 持久化规则

为了重启后规则不会丢失,需要保存下设置好的 iptables 规则:

# Ubuntu/Debian 系统
sudo netfilter-persistent save

# CentOS/RHEL 系统
sudo service iptables save

0x03 清理规则

如果需要删除规则,可以使用以下命令:

# 清除 DOCKER-USER 链中的所有规则
sudo iptables -F DOCKER-USER

# 恢复默认规则(允许所有流量)
sudo iptables -A DOCKER-USER -j RETURN

0x04 注意事项

  1. 确保规则顺序正确,ACCEPT 规则必须在 DROP 规则之前
  2. 添加规则时要考虑到容器间的通信需求
  3. 如果使用自定义 Docker 网络,需要相应调整网桥接口名称
  4. 建议在生产环境部署前充分测试规则的有效性

标签:iptables,映射,--,0.0,端口,6379,USER,Docker,DOCKER
From: https://www.cnblogs.com/sonui/p/18582454

相关文章

  • 云原生周刊:Kubernetes 和 Docker 的对比
    开源项目推荐DokployDokploy是一个功能强大的开源平台,为开发者提供与Vercel、Netlify和Heroku类似的全栈部署与托管体验。它支持现代化的开发工作流,提供快速、可靠的部署服务,涵盖前端、后端和全栈应用。Dokploy的开源特性让开发者可以完全掌控基础设施,同时享受自动化部署......
  • Docker常用应用之稍后阅读
    1.简介wallabag是一款开源的,可以自托管的稍后阅读工具。提供了浏览器插件和手机客户端,可以很方便的收藏文章用于稍后再看。wallabag官网,wallabaggithub地址,wallabagdockerhub2.部署2.1.docker部署cd/docker_data/mkdir-pwallabag/datacdwallabagvidocker-compose.y......
  • docker常用命令
    跳过了docker的安装,可以自己搜索安装.目录下面需要存在一个Dockerfile的文件,内容类似如下:FROMpython:3.11-slimWORKDIR/appRUNpip3installflaskRUNpip3installFlask-CorsRUNpip3installFlask-SQLAlchemyRUNpip3installFlask-HTTPAuthRUNpip3inst......
  • 有关docker save压缩传输的思考
    背景使用gzip/bzip2/xz配合dockersave可以压缩镜像体积,使用管道传输时效率有何不同?试验$dockerimagelsros:jazzy-ros-coreREPOSITORYTAGIMAGEIDCREATEDSIZErosjazzy-ros-core82a20bffe6e26monthsago486MB$doc......
  • 在 CentOS 上安装 Docker:构建容器化环境全攻略
    一、引言在当今的软件开发与运维领域,Docker无疑是一颗璀璨的明星。它以轻量级虚拟化的卓越特性,为应用程序的打包、分发和管理开辟了崭新的高效便捷之路。无论是开发环境的快速搭建,还是生产环境的稳定部署,Docker都展现出了无与伦比的优势。本文将带领您深入探索在CentOS系......
  • Windows更改远程桌面端口
    为了远程安全,默认在3389改为别的端口。本示例为3389改为533891、步骤:打开“开始→运行”,输入“regedit”,打开注册表,进入以下路径:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\Wds\rdpwd\Tds\tcp]修改PortNamber修改成所希望的端口即可,例如53389(......
  • 保姆级教程docker部署Elasticsearch+Kibana,必成
    文章目录概要介绍准备工作开始部署启动部署成功!概要介绍ELK监控体系中E和K两大组件,可以方便的搞起日志监控;本文采用dockers-compose方式部署,没用过docker的话请先参考别的教程学下哈组件版本elasticsearch8.14.3kibana8.14.3提示:这里有个重点,es和kibana的版本必......
  • 端口扫描工具(信息收集)
    1.masscan(kali自带)Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。masscan的扫描结果类似于nmap(一个很著名的端口扫描器),在内部,它更像scanrand,unicornscan,andZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。而且,mass......
  • Linux安装Docker
    一、Docker介绍1、Docker简介Docker是一种开源的容器化平台,用于开发、运维和部署应用程序。Docker允许你将应用程序及其依赖项封装到一个标准化的容器中,并能确保在任何环境下都能一致地运行。容器是一种轻量级、可移植的虚拟化技术,它比传统的虚拟机更高效。2、Docker的主......
  • docker study
    docker安装首先如果系统中已经存在旧的Docker,则先卸载:yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\docker-selinux安装......