Iptables
iptables - 只允許訪問不同子網上的單個埠
我已經啟動並執行了一個 OpenVPN 伺服器,目前允許在 VPN (10.8.0.0/24) 和 LAN (192.168.2.0/24) 網路之間路由所有流量。我的 iptables 如下所示:
iptables -t filter -F iptables -t nat -F iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i tun0 -j ACCEPT iptables -A FORWARD -i eth0 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -s '10.8.0.0/24' -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.2.26 iptables -t nat -A POSTROUTING -s '192.168.2.0/24' -j MASQUERADE iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o tun0 -j SNAT --to-source 10.8.0.1
192.168.2.26 & 10.8.0.1 是 VPN-Server 上的介面。
我現在希望縮小範圍,只允許特定使用者使用特定目標。一個例子:
我希望 IP 為 10.8.0.10 的使用者只能訪問埠 8080 上的 192.168.2.100,而不能訪問 LAN 子網中的其他任何內容。經過大量的Google搜尋,我嘗試了一些 SNAT 和 DNAT 的狂野組合,但沒有找到解決方案。
如何實現上述場景?
所以我找到了解決我的問題的方法,如果有人需要並偶然發現:
我放棄了 iptables 並選擇了 ufw。
/etc/sysctl.conf:
net.ipv4.ip_forward=1
/etc/default/ufw:
DEFAULT_FORWARD_POLICY="DROP"
/etc/ufw/before.rules:
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic between OpenVPN and LAN -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE -A POSTROUTING -s 192.168.2.0 -o tun0 -j MASQUERADE COMMIT # END OPENVPN RULES
這樣一來,一切都設置為路由和轉發,由於預設的“丟棄”策略,目前還沒有轉發任何內容。
如問題中所述,要將單個 IP 路由到不同子網的另一個 IP 上的埠,我只需要執行以下規則集:
sudo ufw route allow in on tun0 out on eth0 to 192.168.2.100 proto tcp port 8080 from 10.8.0.10