如何限制Docker容器仅访问主机指定端口并允许SSH流量
实现Docker容器的精准网络流量限制
核心需求梳理
- 保留外部通过主机2020端口SSH访问容器的能力(维持
-p 2020:22端口映射) - 仅允许容器访问主机的3030端口
- 禁止容器向互联网发送任何非授权流量
- 禁止容器与主机之间的其他未授权流量
- 不能使用
--internal网络标志
分步配置iptables规则
1. 优先允许容器访问主机3030端口
这条规则必须放在DROP规则之前,确保授权流量被优先匹配:
iptables -A INPUT -i br-68c6feca2ecb -p tcp --dport 3030 -j ACCEPT
2. 确保外部SSH流量能转发到容器
Docker的端口映射依赖FORWARD链规则,添加以下规则避免自定义规则阻断已映射的SSH流量:
# 允许外部流量转发到容器22端口(对应主机2020端口的映射) iptables -A FORWARD -o br-68c6feca2ecb -p tcp --dport 22 -j ACCEPT # 允许容器回包到外部SSH请求方 iptables -A FORWARD -i br-68c6feca2ecb -p tcp --sport 22 -j ACCEPT
3. 禁止容器向互联网发送流量
通过阻断容器网桥到主机外网接口的转发流量,彻底禁止容器访问互联网:
# 替换eth0为你的主机实际外网接口名(可通过`ip addr`查看) iptables -A FORWARD -i br-68c6feca2ecb -o eth0 -j DROP
4. 阻断容器与主机的其他非授权流量
这条规则放在所有允许规则之后,确保仅放行之前授权的流量:
iptables -A INPUT -i br-68c6feca2ecb -j DROP
5. 验证规则有效性
通过以下命令检查规则顺序是否正确(确保所有ACCEPT规则在DROP规则之前):
iptables -L INPUT --line-numbers iptables -L FORWARD --line-numbers
补充说明
- 若需要开放容器对主机其他端口的访问,只需添加类似
iptables -A INPUT -i br-68c6feca2ecb -p tcp --dport [目标端口] -j ACCEPT的规则 - 上述规则会在主机重启后失效,如需持久化,可使用
iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu系统)或对应发行版的iptables持久化工具
内容的提问来源于stack exchange,提问作者mehran rahnama
相关产品推荐
相关产品推荐

