docker 容器内的自动 iptables 规则

docker 容器内的自动 iptables 规则

我正在尝试在容器内设置特定的 iptables 规则,但到目前为止我还没有成功。到目前为止,我尝试进入 (exec bash) 容器并手动添加规则,然后将正在运行的容器导出到新映像。

当我导入图像并启动新容器时,iptable 规则仍然不存在。

如何在创建容器时拥有特定的 iptables 规则而不必自动设置它们?

我正在使用 docker-CE19.03.1

该图像是使用 debootstrap 创建的自定义 debian-strech。

答案1

我设法通过以下方式实现这一点:

1)在 bash 脚本中添加我希望应用的所有 iptables 规则。

2)使用Dockerfile将bash复制到容器

3)再次使用Dockerfile 在容器内运行iptables bash脚本。

例如:

iptables 脚本

#!/bin/bash
iptables -I FORWARD -i tun+ -j ACCEPT
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -s 10.88.0.0/24  -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -s 10.88.0.0/24  -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

echo "iptables executed " > /root/iptables_echo

Dockerfile

FROM "openvpn-server:ready"

WORKDIR /etc/openvpn
USER root

COPY iptables.sh /usr/local/bin/iptables.sh
RUN chmod +x /usr/local/bin/iptables.sh && apt-get install iptables
CMD iptables.sh

EXPOSE 443:443/tcp

答案2

iptables 规则在重启后不会持久。您应该尝试使用 Ubuntu 中的 iptables-persistent 包之类的东西。

apt install iptables-persistent 
mkdir -p /etc/iptables
iptables-save > /etc/iptables/rules.v4 
ip6tables-save > /etc/iptables/rules.v6
service iptables-persistent start

以下是一个方便的操作方法:http://www.microhowto.info/howto/make_the_configuration_of_iptables_persistent_on_debian.html

如果您使用的发行版没有这样的工具,您可以将规则放入脚本中,然后让 systemd 或 init 在启动时启动它。

相关内容