iptables-openvpn无法访问端口80

iptables-openvpn无法访问端口80

我有一台使用 OpenVPN 设置的服务器。连接到 VPN 时,所有外部网站都运行良好,但当我尝试访问托管在同一台服务器上的网站时,连接失败。我可以通过 ssh 进入服务器,使用 lynx 拉取网站,没有任何问题。如果服务器上没有启动 iptables,它可以通过 vpn 运行(显然也可以从其他地方运行)。以下是我的 iptables 规则。它们是从各种在线来源拼凑起来的。

# Generated by iptables-save v1.4.14
*nat
:PREROUTING ACCEPT [14:1141]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [4:280]
:POSTROUTING ACCEPT [7:510]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed
# Generated by iptables-save v1.4.14
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s OFFICEIP/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s SERVERIP/32 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s OFFICEIP/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A INPUT -i tun+ -j ACCEPT
-A INPUT -i tap+ -j ACCEPT
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i eth0 -o tun+ -j ACCEPT
-A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tap+ -j ACCEPT
-A OUTPUT -j ACCEPT
COMMIT

答案1

您有一个“接受所有未明确拒绝的流量”的策略。这通常不是最佳实践,但您可能有充分的理由这样做。但是,这确实意味着您自己的一个或多个 DROP/REJECT 规则是导致问题的原因。(这不是在某个地方错过了 ACCEPT,然后策略拒绝流量的情况。)

因此,您可以在每条 DROP/REJECT 行前面放置一条调试日志记录行:

-A INPUT -d 127.0.0.0/8 ! -i lo -j LOG --log-prefix "iptables denied #1: " --log-level 7
-A INPUT -d 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
...
-A INPUT -j LOG --log-prefix "iptables denied #2: " --log-level 7
-A INPUT -j DROP
...
-A FORWARD -j LOG --log-prefix "iptables denied #3: " --log-level 7
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
...
-A FORWARD -j LOG --log-prefix "iptables denied #4: " --log-level 7
-A FORWARD -j REJECT --reject-with icmp-port-unreachable

目前还不清楚您是使用 tun(路由)还是 tap(桥接)进行 OpenVPN 连接。大多数情况下,您通过接受两者的流量来保护自己,但在 FORWARD 块中,您只有三条 ACCEPT 行用于 tun(路由)。为了保持一致,值得删除 tap 行或添加缺失的行。

在我看来,对于端口 80 的流量,没有通用的 ACCEPT 规则。您在这台主机上运行的网站是否可以从整个互联网上看到?(我认为应该是。)或者,如果该网站仅供内部使用,则应该有一个针对来自您的 10.8.0.0/24 子网的流量的 ACCEPT 规则。

相关内容