我已经设置了一个 pi-hole docker 容器并在 CentOS7 上暴露了 dns 端口和端口 80。然而,这些端口现在可用于所有来源,因为它在 VPS 上运行,所以不是很方便。
所以我试图让 firewallD 过滤流向我的 docker 容器的流量。
所以我的 docker 容器运行如下:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18881454da0c pihole/pihole:latest "/s6-init" 24 hours ago Up About an hour (healthy) 0.0.0.0:53->53/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:53->53/udp pihole
在firewallD上我设置了以下acl(去CentOS的流量被这个过滤得很好):
sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: docker0
sources:
services:
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="<home ip>/32" accept
我已将 docker0 接口设置为公共区域:
sudo firewall-cmd --permanent --zone=public --change-interface=docker0
sudo firewall-cmd --get-active-zones
public
interfaces: docker0
但是当我从互联网上进行端口扫描时,我仍然可以看到所有 docker 暴露的端口。
我可以使用 iptables 命令解决这个问题:
sudo iptables -N CUSTOM_PIHOLE
sudo iptables -A CUSTOM_PIHOLE --source <home ip> --destination 172.17.0.2 -j ACCEPT
sudo iptables -R DOCKER 1 --source 0.0.0.0/0 --destination 172.17.0.2 -j CUSTOM_PIHOLE
sudo iptables -D DOCKER 3
sudo iptables -D DOCKER 2
但是当 firewallD 重新加载时,这个配置就会丢失。
有没有办法使用 firewallD 过滤到 docker-container 的流量?