我有一个正在运行的 docker webapp,端口映射到运行机器的 nginx 服务器,并且使用 fail2ban 进行速率限制。
不幸的是,当查看 netstat 时,docker 看起来好像正在使用所有内部 IP(类似于localhost:59719
),而不是通过外部 IP 请求公开,因此 nginx 和 fail2ban 速率限制没有效果。
有谁找到解决这个问题的方法吗?
答案1
对源 IP 进行速率限制的一种方法是不使用 NAT 或代理。这可能过于简单,因为有时应用程序需要代理;还有更多方法可以进行容器联网。
静态寻址我根据 Michael Stapelberg 的博客稍作修改后获得了 IPv6 配置: 添加/etc/docker/daemon.json
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:13b:330::/64"
}
创建网络和静态寻址容器。
docker network create --subnet 2001:db8:13b:330::/64 --ipv6 nginx
docker run \
--network nginx \
--ip6 2001:db8:13b:330:ff::80 \
--publish 203.0.113.1:80:80 \
nginx