我想运行一个带有中央日志和fail2ban
服务的 docker 容器,以防止 dos/ddos 攻击。
我在运行具有此类功能的容器时遇到问题,它还可以修改主机 iptables。
有一个项目ianblenke/docker-fail2ban但是它不起作用...
授予容器标志特权仅允许我控制iptables
此容器。有没有办法iptables
通过容器控制主机?
问候。
我想运行一个带有中央日志和fail2ban
服务的 docker 容器,以防止 dos/ddos 攻击。
我在运行具有此类功能的容器时遇到问题,它还可以修改主机 iptables。
有一个项目ianblenke/docker-fail2ban但是它不起作用...
授予容器标志特权仅允许我控制iptables
此容器。有没有办法iptables
通过容器控制主机?
问候。
默认情况下,Docker 容器在隔离的网络命名空间内运行,它们无法访问主机网络配置(包括 iptables)。
如果您希望您的容器能够修改主机的网络配置,您需要将--net=host
选项传递给docker run
. 从docker-run(1)
手册页:
--net="bridge"
Set the Network mode for the container
'bridge': creates a new network stack for the container on the docker bridge
'none': no networking for this container
'container:': reuses another container network stack
'host': use the host network stack inside the container.
Note: the host mode gives the container full access to
local system services such as D-bus and is therefore
considered insecure.
您将需要同时运行--privileged
和--net=host
。
--privileged
不再需要标志。从 Docker 1.2 开始,您现在可以使用参数运行映像,--cap-add=NET_ADMIN
这--cap-add=NET_RAW
将允许内部 iptables。
可能还值得注意的iptables
是,未安装来自 Docker Hub 包的官方 Ubuntu 映像。所以一般指令应该是
apt-get install iptables
--net=host
使用和--cap-add=NET_ADMIN
--cap-add=NET_RAW
选项运行 docker 容器。此外,如果您有一个缺少iptables
软件包的 docker 镜像,并且您不想从中创建自定义镜像,您可以iptables
在同一网络空间中运行容器。例如,如果你有容器container-without-iptables
正在运行,并且你想container-with-iptables
在同一个网络命名空间中启动一些容器,你可以这样做:
docker run -it --pid=container:container-without-iptables --net=container:container-without-iptables --cap-add sys_admin container-with-iptables