给docker暴露的端口设置白名单
问题
之前有写过一篇博客
iptables对docker进行限制
介绍了如何限制对docker的访问,但是,如果是白名单,要如何写呢
可能很多人觉得应该是这样配置
iptables -F DOCKER-USER
iptables -A DOCKER-USER -s 192.168.5.100 -j ACCEPT
iptables -A DOCKER-USER -s 192.168.5.101 -j ACCEPT
iptables -A DOCKER-USER -j DROP
但是实际操作下来,发现,虽然确实限制了docker对外提供的服务,但是我们希望开放的白名单 192.168.5.100
和 192.168.5.101
也是无法访问的
解决办法
只针对指定的端口进行放通和拒绝
例如,需要为docker暴露端口 8080
设置白名单
iptables -F DOCKER-USER
iptables -A DOCKER-USER -s 192.168.5.100 -p tcp --dport 8080 -j ACCEPT
iptables -A DOCKER-USER -s 192.168.5.101 -p tcp --dport 8080 -j ACCEPT
iptables -A DOCKER-USER -p tcp --dport 8080 -j DROP
这样配置下来,就可以完美解决这个问题
实用脚本
因为每次设备重启或者docker重启,都会导致防火墙配置重新加载,那如何保证我们自定义的策略能够不被覆盖掉呢
写成systemd服务
脚本部分
vim /data/insert_custom_iptables.sh
#!/bin/bash
ipv4="
10.10.1.0/24
192.168.5.100
192.168.5.101
172.17.0.0/16
"
ipv6="
240e:6b0::/64
2400:3200::/64
2001:1112:1111:1111::/64
"
tcpport="
8080
3306
80
"
udpport="
162
53
"
# 为了保证docker服务和原本的防火墙策略已经加载完成
sleep 30
iptables -F DOCKER-USER
for i4 in $ipv4;do
for ptcp in $tcpport;do
iptables -I DOCKER-USER -s $i4 -p tcp --dport $ptcp -j ACCEPT
done
for pudp in $udpport;do
iptables -I DOCKER-USER -s $i4 -p udp --dport $pudp -j ACCEPT
done
done
ip6tables -F DOCKER-USER
for i6 in $ipv6;do
for ptcp in $tcpport;do
ip6tables -I DOCKER-USER -s $i6 -p tcp --dport $ptcp -j ACCEPT
done
for pudp in $udpport;do
ip6tables -I DOCKER-USER -s $i6 -p udp --dport $pudp -j ACCEPT
done
done
for ptcp in $tcpport;do
iptables -A DOCKER-USER -p tcp --dport $p -j DROP
ip6tables -A DOCKER-USER -p tcp --dport $p -j DROP
done
for pudp in $udpport;do
iptables -A DOCKER-USER -p udp --dport $pudp -j DROP
ip6tables -A DOCKER-USER -p udp --dport $pudp -j DROP
done
这里面需要注意的是
ip地址中还需要加上docker本身网络的网段,包括IPv4和IPv6网段
也就是上面的2001:1112:1111:1111::/64
和172.17.0.0/16
给权限
chmod +x /data/sinsert_custom_iptables.sh
systemd 服务
vim /etc/systemd/system/insert-custom-iptables.service
[Unit]
Description=Insert custom iptables rules to DOCKER-USER chain
After=docker.service
Requires=docker.service
[Service]
ExecStart=/data/insert_custom_iptables.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
启动服务
systemctl daemon-reload
systemctl enable insert-custom-iptables.service
systemctl restart insert-custom-iptables.service
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/18719936