Iptables
伺服器後資源的訪問控制
我想限制 VPN 使用者對單個 LAN 的訪問。我一直在嘗試
client-config-dir
在 server.conf 中解決問題,但無法使其正常工作。+---------+ +---------+ | client1 | | client2 | +---------+ +---------+ \ / +---------+ | server | 10.10.1.23 +---------+ | +---------+ | vpc | 10.10.0.0/16 +---------+ | +---------+ | local | 10.10.0.112 +---------+
+-------------------------------+ | VPC | subnet | region | +------+------------+-----------+ | vpc0 | 10.10.0.0/16 | region0 | +------+-------------+----------+
使用我目前的 openvpn 設置,我能夠連接到 VPC 後面的所有實例。但是我需要client1只能訪問機器10.10.0.112和client2只能訪問機器10.10.0.222。我一直在玩
ccd
指令和 iptables,但無法理解它。我的 OpenVPN
server.conf
port 1194 proto udp dev tun user nobody group nogroup persist-key persist-tun keepalive 10 120 topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "dhcp-option DNS 10.10.0.2" push "redirect-gateway def1 bypass-dhcp" dh none client-config-dir /etc/openvpn/ccd ecdh-curve prime256v1 tls-crypt tls-crypt.key 0 crl-verify crl.pem ca ca.crt cert server_4nP1zpKP5eaV6jEz.crt key server_4nP1zpKP5eaV6jEz.key auth SHA256 cipher AES-128-GCM ncp-ciphers AES-128-GCM tls-server tls-version-min 1.2 tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 log-append /home/ubuntu/openvpn.log status /var/log/openvpn/status.log verb 3
client1.ovpn
client proto udp remote **.**.***.*** 1194 dev tun resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server verify-x509-name server_4nP1zpKP5eaV6jEz name auth SHA256 auth-nocache cipher AES-128-GCM tls-client tls-version-min 1.2 tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256 setenv opt block-outside-dns # Prevent Windows 10 DNS leak verb 3
伺服器的路由表
netstat -nr
0.0.0.0 10.10.1.1 0.0.0.0 UG 0 0 0 eth0 10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0 10.10.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
IP 路由
ip route
default via 10.10.1.1 dev eth0 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 10.10.1.0/24 dev eth0 proto kernel scope link src 10.10.1.140
客戶的CCD
需要client-config-dir的幫助,只希望client1能夠訪問10.10.0.112,目前可以訪問VPN伺服器後面的所有區域網路機器。
客戶端IPTABLE
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 10.10.0.112 -j ACCEPT
如果有人能指出我正確的方向,將不勝感激。
您應該為客戶端分配固定 IP。例如
ccd/client1
可能包含:ifconfig-push 10.8.0.112 255.255.255.0 push "route 10.10.0.112"
通過這種方式,客戶端僅接收到一個固定地址 (
10.8.0.112
) 和一個用於主機的路由10.10.0.112
。客戶端當然可以覆蓋伺服器發送的配置並添加一些自己的配置,例如:pull-ignore "ifconfig" # this will fail ifconfig 10.8.0.222 255.255.255.0 # this will work route 10.10.0.0 255.255.0.0
伺服器將丟棄來自 的所有數據包
client1
,這些數據包沒有地址,10.8.0.112
因此該ifconfig
指令將不起作用,但這不是安全功能,而是技術限制。另一方面,該route
指令將按要求工作。因此,您需要在 VPN 伺服器上添加防火牆規則:
# Access to DNS server iptables -A FORWARD -p udp --dport 53 -s 10.8.0.0/24 -d 10.10.0.2 -j ACCEPT iptables -A FORWARD -p tcp --dport 53 -s 10.8.0.0/24 -d 10.10.0.2 -j ACCEPT # Access for client1 iptables -A FORWARD -s 10.8.0.112 -d 10.10.0.112 -j ACCEPT # Drop everything else iptables -A FORWARD -s 10.8.0.0/24 -d 10.10.0.0/16 -j DROP