我正在创建一个仅限 SFTP 的Docker容器,该容器将由多人使用,其唯一目的是在他们自己的chrooted 环境中上传和管理文件。
从理论上讲,它非常安全:我将禁用所有形式的bash登录,并且不会在其中运行任何其他进程。但是,我想再加强一点:
我想阻止这个容器从内部访问 Internet,除了它作为 SFTP 服务器的目的。
澄清一下:我知道如何防止外部世界访问我的容器——我可以设置传入iptables规则,并且我只能在我的 docker run 命令中公开 SFTP 端口。
但是,当在容器内运行时,我想让以下命令(作为示例)失败:
curl google.com
Run Code Online (Sandbox Code Playgroud)
我的目的是减少被黑容器可能造成的损害(不能用于发送垃圾邮件等)。
我有一台运行 Wireguard 的服务器(因此需要masquerade)和一个在端口 2525 上运行的容器。
我有以下iptables规则:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 172.18.0.1:2525
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
直接连接时server:2525,Docker 容器能够看到我的真实 IP 地址 ( 1.2.3.4)。当连接到 port 时server:25,Docker 容器会看到由以下内容提供的本地 IP docker network:
Apr 07 12:45:46 mx postfix/smtpd[87]: lost connection after CONNECT from unknown[172.18.0.1]
Apr 07 12:45:46 mx postfix/smtpd[87]: disconnect from unknown[172.18.0.1] commands=0/0
Run Code Online (Sandbox Code Playgroud)
如何确保 Docker 容器在连接到端口 25 时(而不仅仅是在连接到端口 2525 时)正确地看到公共 IP …