我看到我添加的规则/etc/shorewall/rules
设置得很好,但DOCKER
过滤规则是在我在 shorewall 规则中设置的规则之前应用的。
我已经看到DOCKER-USER
可以用来在 iptables 中设置 docker 相关规则。有没有办法让 shorewall 在DOCKER-USER
表中添加规则?
答案1
Shorewall 似乎并没有原生支持这一点,而且创建者似乎也没有这样做的兴趣:
我已经说过很多次了,如果我要在一个物理系统上运行 Shorewall 和 Docker,我至少会在虚拟机中运行其中之一。请注意,这样做需要 Shorewall 生成的规则集决定将哪些流量发送到 Docker,但它使这两个产品不会互相影响,并确保有一个易于理解的安全框架。
另外,如果重来一次,我不会在 Shorewall 中实现任何 Docker 支持。我认为这样做是一个错误。
但是,如果您愿意深入研究一些原始 iptables,那么您可以将命令放入 Shorewall 启动/停止文件中。在下面的示例中,enp8s0
是我的以太网接口。它:(0) 创建链(如果 Docker 没有这样做,可能是在重新启动时),(1) 允许已建立的流量流出容器,(3) 允许端口 80 和 443 到达我的以太网接口,(4) 记录接下来的丢弃,(5) 丢弃从我的以太网连接到达 DOCKER-USER 的所有其他流量。
/etc/shorewall/start
:
iptables -L DOCKER-USER >/dev/null || iptables -N DOCKER-USER
iptables -I DOCKER-USER 1 -i enp8s0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I DOCKER-USER 2 -i enp8s0 -m conntrack --ctstate INVALID -j DROP
iptables -I DOCKER-USER 3 -i enp8s0 --match multiport -p tcp --dports 80,443 -j ACCEPT
iptables -I DOCKER-USER 4 -i enp8s0 -m conntrack --ctstate NEW -j LOG --log-prefix "DOCKER-USER_DROP "
iptables -I DOCKER-USER 5 -i enp8s0 -m conntrack --ctstate NEW -j DROP
/etc/shorewall/stop
:这可以确保多个shorewall restart
s 不会重复规则,并且 Docker 放入的默认 RETURN 规则仍然存在。
iptables -F DOCKER-USER
iptables -I DOCKER-USER -j RETURN
那么干脆shorewall check && shorewall restart
。您还可以使用 确认之前和之后iptables -nL DOCKER-USER -v
。