• iptables 限制 Docker IP 和端口访问

    等保整改安全加固时,使用 iptabels 限制 docker 端口不生效,限制非 docker 容器端口可生效。经查阅大量资料,发现 Docker 容器创建时会自动创建 iptables 策略,Docker 使用的 i 规则链是 DOCKER-USER,所以需使用 iptables 对 DOCKER-USER 链做限制。

    目录

    一、【模板参考】限制与 Docker 主机的连接

    二、【实际案例】iptables 限制 Docker 端口和 IP

    1、案例 1:限制 IP 访问

    2、案例 2:限制 docker 指定端口访问策略

    3、查询 DOCKER-USER 策略

    4、删除 DOCKER-USER 策略

    5、保存 DOCKER-USER 策略,默认临时生效

    三、访问测试

    一、【模板参考】限制与 Docker 主机的连接 默认情况下,允许所有外部源 IP 连接到 Docker 主机。要仅允许特定的 IP 或网络访问容器,请在 DOCKER-USER 过滤器链的顶部插入一个否定的规则。

    #限制除 192.168.1.1 地址外的其他地址访问 $ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP 请注意,您将需要更改 ext_if 与主机的实际外部接口相对应。!排除以外。您可以改为允许来自源子网的连接。

    #限制除 192.168.1.0/24 网段外的其他地址访问 $ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP 最后,您可以指定要接受的 IP 地址范围--src-range(请记住-m iprange 在使用--src-range 或时也要添加--dst-range):

    #限制除 192.168.1.1-192.168.1.3 外的其他地址访问 $ iptables -I DOCKER-USER -m iprange -i ext_if ! --src-range 192.168.1.1-192.168.1.3 -j DROP 您可以结合使用-s 或--src-range 与-d 或--dst-range 一起控制连续源地址和连续目标地址。例如,如果 Docker 守护程序同时监听 192.168.1.99 和 10.1.2.3,则可以制定特定于 10.1.2.3 并保持 192.168.1.99 打开的规则。

    二、【实际案例】iptables 限制 Docker 端口和 IP 1、案例 1:限制 IP 访问 1.1 首先需添加一条禁止所有 IP 访问 docker 策略

    iptables -I DOCKER-USER -i eth0 -s 0.0.0.0/0 -j DROP 注:允许上方命令后,如果出现容器无法上网问题,请将下方策略添加到上方策略前。

    iptables -I DOCKER-USER -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT 1.2 在依次添加所有允许访问 docker 的 IP,允许 172.27.100.101 地址访问 docker

    iptables -I DOCKER-USER -i eth0 -s 172.27.100.101 -j ACCEPT 2、案例 2:限制 docker 指定端口访问策略 2.1 禁止所有 IP 访问 docker 的 389 端口

    iptables -I DOCKER-USER -i eth0 -p tcp --dport 389 -j DROP 2.2 允许 172.27.30.92 地址访问 docker 的 389 端口

    iptables -I DOCKER-USER -i eth0 -s 172.27.30.92 -p tcp --dport 389 -j ACCEPT 3、查询 DOCKER-USER 策略 [root@test ~]# iptables --line -nvL DOCKER-USER Chain DOCKER-USER (1 references) num pkts bytes target prot opt in out source destination
    1 8 432 ACCEPT tcp -- eth0 * 172.27.30.92 0.0.0.0/0 tcp dpt:389 2 13 740 DROP tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:389 3 188 12524 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
    4、删除 DOCKER-USER 策略 #删除 DOCKER-USER 链第一条(num)规则 iptables -D DOCKER-USER 1 5、保存 DOCKER-USER 策略,默认临时生效 [root@test ~]# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ] 三、访问测试 telnet 测试:

    [root@zabbix_server ~]# telnet 127.0.0.1 8075 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection timed out nc 端口测试:

    [root@node ~]# nc -zv 172.27.30.94 389 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connected to 172.27.30.94:389. Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.