如何使 httpd 只能通过 VPN 访问?

如何使 httpd 只能通过 VPN 访问?

我有一台运行 PPTP 的服务器,该服务器应该运行一个只能通过 VPN 访问的 httpd(nginx)。我还运行了其他几个 httpd,它们不应该在 VPN 上运行。

路由表

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         x.x.x.x         0.0.0.0         UG    0      0        0 bond0
x.x.x.x         x.x.x.x         255.255.255.255 UGH   0      0        0 bond0
x.x.x.x         0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
x.x.x.x         0.0.0.0         255.255.255.248 U     0      0        0 bond0
x.x.x.x         0.0.0.0         255.255.0.0     U     1008   0        0 bond0

当我 ping mydomain.com 时(这应该与 VPN 兼容)

ping mydomain.com
PING mydomain.com (x.x.x.x) 56(84) bytes of data.
^C
--- mydomain.com ping statistics ---
32 packets transmitted, 0 received, 100% packet loss, time 31248ms

但我可以在 tcpdump -vv -i ppp0 中看到数据包

15:21:09.543764 IP (tos 0x0, ttl 52, id 37313, offset 0, flags [DF], proto ICMP (1), length 84)
    cable-x.x.x.x.dynamic.provider.com > anon-60-160.vpn.ipredator.se: ICMP echo request, id 4652, seq 8, length 64

答案1

您也许可以将特定的 nginx 实例配置为仅在 PPTP 接口上监听。

http_core 模块的文档指定一个 listen 指令以允许 nginx 仅监听特定的地址和/或端口。

listen <IP of VPN>:<port>在 nginx 实例上应该可以在 vpn 上工作

答案2

最简单的方法是 - 在专用端口上运行服务器并拒绝来自此端口的 ppp 以外的接口的请求:

iptables -A INPUT -i ! ppp+ -p tcp --dport <protected-port> -j REJECT

上述方法的主要缺点是 - 您的服务器仍然可能会意外打开。


如果您正在寻找稳定可靠的解决方案来保护专用服务器人员,那么我推荐以下方式:

选择任何免费的专用私人地址,例如10.255.255.1

使用此地址设置内部虚拟分接接口。

# cat > ifcfg-tap0
DEVICE=tap0
TYPE=Tap
IPADDR=10.255.255.1
NETMASK=255.255.255.255
ONBOOT=yes

/etc/sysctl.conf如果不需要,可以选择禁用代理 arp :

net.ipv4.conf.default.proxy_arp=0

选择专用端口来运行你的 http 服务器,例如8888

将你的服务器绑定到专用的 IP/端口:

listen 10.255.255.1:8888

限制对 10.255.255.1 的访问(本地或仅从 VPN):

-I INPUT -p ip -s 10.255.255.1 -j ACCEPT
-I INPUT -i ! ppp+ -p ip -d  10.255.255.1 -j REJECT

主要工作已完成。所有专门绑定到 10.255.255.1 的应用程序只能在内部或使用 VPN 进行访问。

但是现在您需要关注客户端到 10.255.255.1 的路由。您可以避免这种情况,并使用您通常用于访问主机的任何 IP 地址通过 VPN 使您的 http 服务器可访问:

iptables -t nat -A PREROUTING -i ppp+ -p tcp --dport 8888 -d <normal_server_address> -j DNAT --to 10.255.255.1:8888

相关内容