openeuler22.03容器环境下可以通过iptables进行访问限制以保障容器安全,但发现服务器重启后,在“Chain DOCKER"链中的配置不生效(其实centos/redhat环境也有相同问题)。本文对其原因进行分析并提供解决办法。
一、问题现象
1、配置策略前
测试服务器192.168.80.132上运行了一个容器,将容器内的22映射到了主机的4434端口:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
692ce4d13d67 atmoz/sftp:debian-stretch "/entrypoint sftp:11…" 13 minutes ago Up 6 minutes 0.0.0.0:4434->22/tcp sftpsrv
测试服务情况本机及网内主机均可正常访问:
# telnet 192.168.80.132 4434
Trying 192.168.80.132...
Connected to 192.168.80.132.
Escape character is '^]'.
运行iptables -nL查看防火墙“Chain DOCKER"链数据如下:
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 172.17.0.2 tcp dpt:22
运行servcie iptables save保存当前iptables数据,运行cat /etc/sysconfig/iptables查看“Chain DOCKER"链配置
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 22 -j ACCEPT
2、配置策略
修改该段配置为,仅允许宿主机访问:
-A DOCKER -s 192.168.80.132/32 -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 22 -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 22 -j DROP
重启iptables服务并进行策略查看如下&#