Pat*_*パトシ 7 security vpn networking
有没有办法阻止我的系统使用常规互联网并仅将其限制为仅在 Ubuntu 17 上使用 VPN?仅供参考,我已经通过 .ovpn 文件设置了 protonvpn,目前只需通过菜单中的下拉菜单将其打开即可连接到它。
我想强制所有连接只使用 VPN,如果 VPN 不可访问,它应该阻止所有类型的互联网连接。
我知道这与在 IPv4 部分设置路由有关,但我不确定是什么。
解决方案是使用 iptables 拒绝所有传出流量,除非流量通过隧道。
如果隧道被破坏,则在重新建立隧道之前无法再访问 Internet。
我假设您使用基于 TUN 的路由连接到 OpenVPN 服务器,并且您使用的是重定向网关 OpenVPN 客户端选项。
在任何地方创建一个文件(例如/root/iptables.vpn),你必须用vpn服务器的ip:port更改[VPN_IP]和[VPN_PORT]
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Set a default DROP policy.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
# Allow basic INPUT traffic.
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
# Allow basic OUTPUT traffic.
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
# Allow traffic to the OpenVPN server and via the tunnel.
-A OUTPUT -o tun+ -j ACCEPT
-A OUTPUT -p udp -m udp -d [VPN_IP] --dport [VPN_PORT] -j ACCEPT
# Reject everything else.
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT
Run Code Online (Sandbox Code Playgroud)
建立与 vpn 服务器的连接后,您必须启用规则:
iptables-restore < /root/iptables.vpn
Run Code Online (Sandbox Code Playgroud)
现在所有流量都将通过隧道路由。
编辑 正如作者所写,他使用类似网络管理器的方法运行连接,所以问题是他不知道服务器的远程 IP,因为它是从池中获取的。我认为(但现在我没有时间测试这个解决方案)一种方法可能是:
Run Code Online (Sandbox Code Playgroud)while read line do eval "echo ${line}" done < /root/iptables.vpn | /sbin/iptables-restore -v
脚本安全 2
/etc/openvpn/route.sh
每次建立与 vpn 的连接时,脚本都会运行。
如前所述,我还没有测试过这个......
记得在关闭 vpn 连接后刷新你的 iptables
是的。使用ufw。
当您连接到 VPN 时,它会创建一个虚拟设备。假设您的以太网名称是enp3s0并且您的 VPN 服务器侦听端口 1194,请使用这些命令。
# Default policies
ufw default deny incoming
ufw default deny outgoing
# Openvpn interface (adjust interface accordingly to your configuration)
ufw allow in on tun0
ufw allow out on tun0
# Openvpn (adjust port accordingly to your configuration)
ufw allow in on enp3s0 from any port 1194
ufw allow out on enp3s0 to any port 1194
Run Code Online (Sandbox Code Playgroud)
您可能想要启用本地网络,但如果您的路由器正在处理您的 DNS 请求(通常是这种情况),这会泄漏 DNS :
# Local Network (adjust IP, mask according to your configuration)
ufw allow in on enp3s0 from 192.168.1.0/24
ufw allow out on enp3s0 to 192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)
如果您通过域而不是 IP 地址连接到 VPN 服务器,则需要明确允许此类泄漏到达 DNS 服务器。添加这些命令:
# DNS
ufw allow in from any to any port 53
ufw allow out from any to any port 53
Run Code Online (Sandbox Code Playgroud)
然后使用ufw enable来打开这些规则。ufw disable如果出现问题或者您想要直接访问。
由 ArchWiki 提供。
方法有很多,但这取决于您使用的特定 VPN 软件。
/etc/network/interfaces您可以通过在 NetworkManager中或(如果您使用的是桌面系统则更有可能)编辑接口配置来阻止系统在未使用 VPN 时访问网络。打开 NM,选择“配置网络”或类似选项,然后编辑每个接口如何获取其地址的选项,以拥有不包含默认路由的静态路由(或将默认路由添加到黑洞)。然后设置您的 VPN,以便在它出现时为您提供默认路由。
由于没有有关您的设置的更多详细信息,我只能说这么多。