Wireguard 限制對本地網路中的服務和機器的訪問
我在我的本地網路中執行一個 Wireguard“伺服器”,我通過我的靜態公共 IP 遠端訪問它。我希望能夠將 Wireguard 遠端對等點的訪問限制為我的區域網路中的服務/機器,我在其中託管其他伺服器。
範例:安裝了 Wireguard 的伺服器 1 (192.168.1.23 | 10.0.0.1) + Nextcloud + Jellyfin 在同一台機器上 伺服器 2 (192.168.1.62) 和 Photoprism
遠端對等體 1 (10.0.0.2 | 動態 ip) 遠端對等體 2 (10.0.0.3 | 動態 ip)
我想要:
1- 允許 peer1 (10.0.0.2) 訪問伺服器 1 Nextcloud + Jellyfin 並訪問伺服器 2 到 Photoprism。
2- 允許 Peer2 (10.0.0.3) 僅訪問伺服器 1 Nextcloud 但不允許訪問 Jellyfin 並阻止訪問伺服器 2
現在我可以從所有 Peers 訪問我區域網路中的所有機器。
iptables 規則:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE; iptables -t nat -A POSTROUTING -o wg0 PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s7 -j MASQUERADE; iptables -t nat -D POSTROUTING -o wg0
我遵循了Justin Ludwig的本教程,因為站點到點拓撲與我的非常相似。所以我嘗試用這些規則複製 Iptables 規則:
# masquerading PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x200 PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x200 -j MASQUERADE PostDown = iptables -t mangle -D PREROUTING -i wg0 -j MARK --set-mark 0x200 PostDown = iptables -t nat -D POSTROUTING ! -o wg0 -m mark --mark 0x200 -j MASQUERADE # wireguard ingress PreUp = iptables -I INPUT -p udp --dport 2332 -j ACCEPT PostDown = iptables -D INPUT -p udp --dport 2332 -j ACCEPT # site firewall PreUp = iptables -N wg0-filter PreUp = iptables -N to-photoprism PreUp = iptables -N to-jellyfin PreUp = iptables -N to-nextcloud PreUp = iptables -I INPUT -i wg0 -j wg0-filter PreUp = iptables -I FORWARD -i wg0 -j wg0-filter PreUp = iptables -I FORWARD -o wg0 -j wg0-filter PreUp = iptables -I OUTPUT -o wg0 -j wg0-filter PreUp = iptables -A wg0-filter -m state --state ESTABLISHED,RELATED -j ACCEPT PreUp = iptables -A wg0-filter -d 192.168.1.63 -p tcp --dport 2342 -j to-photoprism PreUp = iptables -A wg0-filter -d 192.168.1.23 -p tcp --dport 8096 -j to-jellyfin PreUp = iptables -A wg0-filter -d 192.168.1.23 -p tcp --dport 80 -j to-nextcloud PreUp = iptables -A wg0-filter -j REJECT PreUp = iptables -A to-photoprism -s 10.0.0.2 -j ACCEPT PreUp = iptables -A to-jellyfin -s 10.0.0.2 -j ACCEPT PreUp = iptables -A to-jellyfin -s 10.0.0.3 -j ACCEPT PreUp = iptables -A to-nextcloud -s 10.0.0.2 -j ACCEPT PreUp = iptables -A to-nextcloud -s 10.0.0.3 -j ACCEPT PostDown = iptables -D INPUT -i wg0 -j wg0-filter PostDown = iptables -D FORWARD -i wg0 -j wg0-filter PostDown = iptables -D FORWARD -o wg0 -j wg0-filter PostDown = iptables -D OUTPUT -o wg0 -j wg0-filter PostDown = iptables -F to-photoprism PostDown = iptables -F to-jellyfin PostDown = iptables -F to-nextcloud PostDown = iptables -X to-photoprism PostDown = iptables -X to-jellyfin PostDown = iptables -X to-nextcloud
這不起作用,Peer 1 和 Peer 2 可以訪問伺服器 1,這兩個服務,但不是伺服器 2。
我不太了解我必須改變什麼才能完成這項工作,如果有人能插話,我會很高興。
提前致謝
總體而言,您的 iptables 規則對我來說看起來不錯;雖然:
- 在問題描述中,您提到伺服器 2 的 IP 地址為
192.168.1.62
;但在 iptables 規則中,您似乎正在使用192.168.1.63
它:iptables -A wg0-filter -d 192.168.1.63 -p tcp --dport 2342 -j to-photoprism
這是一個地方或另一個地方的錯字嗎? 2. 在描述中,您提到 Peer 2 (
10.0.0.3
) 不應訪問 Jellyfin;但是在 iptables 規則中,您可以使用以下行授予它訪問權限:iptables -A to-jellyfin -s 10.0.0.3 -j ACCEPT
也許您打算刪除此規則? 3. 我沒有看到任何
PostDown
斷開wg0-filter
鏈條的命令,就像您對其他自定義鏈條所做的那樣;確保包括它們:PostDown = iptables -F wg0-filter PostDown = iptables -X wg0-filter
如果沒有這些拆卸命令,如果您進行更改並重新啟動,最終
wg0-chain
可能會使用以前嘗試的舊規則,而不是更新的更新。(並確保您遵循文章中的“進行配置更改”建議,在進行配置更改並重新啟動之前關閉 WireGuard 界面 -sudo iptables-save
在界面關閉時執行以仔細檢查您是否有任何舊規則或鏈沒有清理乾淨。)