我正在运行一个带有 Nginx 代理管理器的 vps,并且正在保护我的服务器。我希望当我通过 VPN 连接时能够连接到服务器的端口 81,但阻止互联网上的其他所有人访问它。
我尝试使用 ufw 阻止 eth0 上的端口 80,但没有结果,经过挖掘后,我发现了 iptables 的 DOCKER-USER 过滤器。
所以我用过:
iptables -I DOCKER-USER -i eth0 -p tcp --dport 81 -j DROP
效果不太好。我可以从服务器的公共 IP 地址访问端口 81,但我注意到 Web 面板的速度变慢了。
我该怎么做才能阻止从服务器的公共 IP 访问容器的 81 端口?
编辑:这是我尝试过的规则:
DOCKER-USER -i eth0 -o eth0 -p tcp -m tcp --dport 81 -j DROP
DOCKER-USER -i eth0 -p tcp -m conntrack --ctdir ORIGINAL -m tcp --dport 81 -j DROP
MagiiTech 在以下答案中的建议:
# Allowing traffic to and from tun0:
iptables -I DOCKER-USER 1 -i tun0 -j ACCEPT
iptables -I DOCKER-USER 2 -o tun0 -j ACCEPT
# Now we block 81/tcp
iptables -I DOCKER-USER 3 ! -i lo -p tcp --dport 81 -j DROP
(这可行,但我无法通过 vpn 连接登录到网络面板)
答案1
您的配置看起来不错,您确定您的外部网络接口称为 eth0(通常称为 enp1s0 之类的名称)吗?此外,如果您使用 IPv6 访问服务器,则必须使用 ip6tables 单独设置规则。
当您只有一台服务器时,我会采用这种方法,只允许来自 lo 接口的流量:
iptables -I DOCKER-USER 1 ! -i lo -p tcp --dport 81 -j DROP
编辑:
# Allowing traffic to and from tun0:
iptables -I DOCKER-USER 1 -i tun0 -j ACCEPT
iptables -I DOCKER-USER 2 -o tun0 -j ACCEPT
# Now we block 81/tcp
iptables -I DOCKER-USER 3 ! -i lo -p tcp --dport 81 -j DROP