我有一台服务器 A,其 WG 隧道 IP 为 10.9.0.1,一台服务器 B,其 WG 隧道 IP 为 10.9.0.4,我的移动设备,其 WG 隧道 IP 为 10.9.0.3。
服务器 A 和 B 已启用 UFW 并允许传入端口为 SSH 和 WG 端口。
我将通过手机连接到服务器 A 进行所有互联网活动,一切正常。我尝试通过手机浏览器访问在服务器 B 上运行的 Web 服务器http://10.9.0.4启用服务器 B 上的 UFW 后无法使其工作。但是,当我禁用服务器 B 上的 UFW 后,我可以通过手机访问 Web 服务器。我希望 Web 服务器仅通过 VPN 访问,不希望公开访问。有人能帮我找出 UFW 中缺少的哪条规则阻止我访问服务器 B 的 Web 服务器吗?我尝试在服务器 B 上的接口 wg0 上接受所有传入/传出,但徒劳无功。
服务器 B 和移动设备作为对等体连接到服务器 A,并且能够从移动设备和服务器 A ping 通服务器 B。
服务器 B 的 UFW
Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
5440 ALLOW IN Anywhere
44787/udp ALLOW IN Anywhere
80,443/tcp on wg0 ALLOW IN Anywhere
5440 (v6) ALLOW IN Anywhere (v6)
44787/udp (v6) ALLOW IN Anywhere (v6)
80,443/tcp (v6) on wg0 ALLOW IN Anywhere (v6)
443 ALLOW OUT Anywhere
53 ALLOW OUT Anywhere
80 ALLOW OUT Anywhere
443 (v6) ALLOW OUT Anywhere (v6)
53 (v6) ALLOW OUT Anywhere (v6)
80 (v6) ALLOW OUT Anywhere (v6)
服务器 A 的 UFW
Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
5440 ALLOW IN Anywhere
44787 ALLOW IN Anywhere
44787 (v6) ALLOW IN Anywhere (v6)
53 ALLOW OUT Anywhere
80,443/tcp ALLOW OUT Anywhere on wg0
53/udp ALLOW OUT Anywhere on wg0
53 (v6) ALLOW OUT Anywhere (v6)
80,443/tcp (v6) ALLOW OUT Anywhere (v6) on wg0
53/udp (v6) ALLOW OUT Anywhere (v6) on wg0
编辑:我已在服务器 B 上禁用 UFW,并用如下所示的 iptables 替换。存在问题。
#!/usr/bin/env bash
#############################
# SETUP
#############################
# Define your hostname
DEMOSTHENES=X.X.X.X
# Clear all rules
/sbin/iptables -F
iptables -I FORWARD -s 10.9.0.0/24 -i wg0 -j ACCEPT #sample rule to allow packet forwarding from your wg subnet
#############################
# MANAGEMENT RULES
#############################
# Allow SSH (alternate port)
/sbin/iptables -A INPUT -p tcp -d $DEMOSTHENES --dport 5440 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -d $DEMOSTHENES --dport 44787 -j ACCEPT
/sbin/iptables -A INPUT -p udp -d $DEMOSTHENES --dport 44787 -j ACCEPT
# Allow web server access
iptables -A INPUT -i wg0 -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o wg0 -p tcp -m multiport --sports 80,443 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -j DROP
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere v8.domain.co tcp dpt:5440
ACCEPT tcp -- anywhere v8.domain.co tcp dpt:44787
ACCEPT udp -- anywhere v8.domain.co udp dpt:44787
ACCEPT tcp -- anywhere anywhere multiport dports http,https state NEW,ESTABLISHED
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 10.9.0.0/24 anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere multiport sports http,https state ESTABLISHED
答案1
我以前没有用过 ufw,但我看到它说您的“路由”策略在服务器 B ufw 规则上设置为拒绝,这意味着所有来自不同主机并注定要到达服务器 B 的数据包都被阻止(如果我理解正确的话)。尝试创建一个规则以允许转发数据包(还要编辑 /etc/sysctl.conf 并确保您正在转发 ipv4 和 ipv6 数据包;net.ipv4.ip_forward=1 和 net.ipv6.conf.all.forwarding=1)或将 FORWARD 链的默认策略设置为接受并查看会发生什么。我使用 iptables,它非常挑剔,有时对规则使用 Insert 而不是 Append 会产生很大的不同。
iptables -I FORWARD -s 10.9.0.0/24 -i wg0 -j ACCEPT #sample rule to allow packet forwarding from your wg subnet
iptables -P FORWARD ACCEPT #change default policy on filter tables FORWARD chain