我有一个运行密码验证 SFTP 服务器的 docker 容器(客户端要求 - 我已经输掉了这场战斗)。为了减轻暴力攻击的风险,我曾考虑在容器内安装 iptables 和 fail2ban。但是,要使 iptables 正常工作,这需要我允许容器 NET_ADMIN 权限。
我无法从 Docker 文档中找到这是否允许容器简单地更改其自己的网络,或者同时修改主机网络。我所找到的只是一个摘要,例如:
Capability Key | Capability Description
---------------|-----------------------
NET_ADMIN | Perform various network-related operations.
阅读 Docker 文档中链接的 MAN 页面提供了其所赋予的功能列表,但当然它不是在 Docker 上下文中编写的……
Perform various network-related operations:
- interface configuration;
- administration of IP firewall, masquerading, and accounting
- modify routing tables;
- bind to any address for transparent proxying;
- set type-of-service (TOS)
- clear driver statistics;
- set promiscuous mode;
- enabling multicasting;
...所以我仍然不清楚这些能力是在主机级别授予的,还是仅与容器的网络有关。我想到另一种策略是使用共享卷公开容器的 auth.log,并在主机上运行 fail2ban(我显然必须在 Docker 引擎上设置 --iptables=false),但我更喜欢没有外部主机依赖性并且所有内容都在单个容器内的简洁性。
有人可以减轻我的恐惧或提供其他选择吗?
答案1
这取决于您是否设置--net=host
:
或者如手册页所述:
--net="bridge" 为容器设置网络模式‘bridge’:在默认 Docker 网桥上创建网络堆栈‘none’:无网络‘container:’:重用另一个容器的网络堆栈‘host’:使用 Docker 主机网络堆栈。注意:主机模式让容器可以完全访问本地系统服务(例如 D-bus),因此被认为是不安全的。