使用 iptables 在 OpenVPN 客戶端上配置 VPN Kill Swi

 虛擬專用網絡通常用於通過加密隧道將互聯網流量從本地設備路由到遠程 VPN 服務器來逃避審查、監視或地理定位。在這種情況下,VPN 服務器是所有連接的客戶端設備的互聯網網關,它將來自客戶端的流量轉發到互聯網,然後接收流量並將其路由回客戶端設備。但是,始終存在 VPN 連接意外斷開的風險,這可能會導致您的流量通過公共互聯網而不是通過加密的 VPN 連接進行通信。https://www.linode.com/docs/guides/vpn-firewall-killswitch-for-linux-and-macos-clients/

因此,VPN 客戶端通常使用防火牆規則來確保互聯網流量僅允許到達 VPN 網關。這可以防止客戶端的流量在與 VPN 服務器突然斷開連接時受到影響。此功能有時被稱為終止開關,因為它具有在 VPN 連接失敗時立即阻止所有互聯網連接的效果。

在你開始之前

本指南假設您已經在 Linode 上運行了一台 OpenVPN 服務器,並且至少配置了一個客戶端來連接到該服務器。如果您需要幫助來執行此操作,請參閱我們有關設置 OpenVPN 環境的三部分系列:

  1. 使用 Debian 設置強化 OpenVPN 服務器

  2. 通過 OpenVPN 服務器傳輸您的互聯網流量

  3. 配置 OpenVPN 客戶端設備

收集客戶端設備信息

在配置客戶端設備之前,您需要了解:

  • 設備的網絡接口名稱。
  • 客戶端的本地網絡的子網。

您可以通過route在 Linux 客戶端上運行命令來找到此信息。

1
2
3
4
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gw-li938.linode 0.0.0.0         UG    0      0        0 eth0
45.56.120.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

輸出在Iface列 (eth0) 下顯示網絡接口名稱,在Genmask (255.255.255.0)下顯示 LAN 的子網。這些值將在本指南的其餘部分中使用,因此請將wlp6s0和替換為在客戶端上198.168.0.1/24運行時找到的接口和 IP 地址/子網。route

對於 macOS,命令networksetup -listallhardwareportsifconfig將顯示所有可能的網絡接口和關聯的網絡信息。從該列表中,您可以找到以太網和 WiFi 設備名稱及其本地子網。

配置 client.ovpn

在您的客戶端上,更改client.ovpn配置文件如下:

  1. 您應該已經有設置dev tun來指定虛擬網絡適配器。將其更改為 tun0,以便在防火牆規則中引用它:

    文件:client.ovpn
    1
    
    dev tun0
  2. 確保您的 VPN 服務器按其 IP 地址而不是主機名列出。例如:

    文件:client.ovpn
    1
    
    remote 198.51.100.0 1194

GNU/Linux 客戶端

大多數 GNU/Linux 用戶使用iptablesufw來管理他們的防火牆。本指南將介紹這兩個選項的配置。

使用 iptables 的 VPN 防火牆

重要的
您可能需要使用 來備份當前的 iptables 規則集iptables-save
  1. 使用以下iptables規則集創建 shell 腳本:

    文件:iptables-vpn.sh
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    
    #!/bin/bash
    iptables --flush
    iptables --delete-chain
    iptables -t nat --flush
    iptables -t nat --delete-chain
    iptables -P OUTPUT DROP
    iptables -A INPUT -j ACCEPT -i lo
    iptables -A OUTPUT -j ACCEPT -o lo
    iptables -A INPUT --src 192.168.0.0/24 -j ACCEPT -i wlp6s0
    iptables -A OUTPUT -d 192.168.0.0/24 -j ACCEPT -o wlp6s0
    iptables -A OUTPUT -j ACCEPT -d 198.51.100.0 -o wlp6s0 -p udp -m udp --dport 1194
    iptables -A INPUT -j ACCEPT -s 198.51.100.0 -i wlp6s0 -p udp -m udp --sport 1194
    iptables -A INPUT -j ACCEPT -i tun0
    iptables -A OUTPUT -j ACCEPT -o tun0
  2. 將腳本保存為iptables-vpn.sh,然後使用設置權限chmod並執行腳本:

    chmod +x iptables-vpn.sh
    ./iptables-vpn.sh
    

此規則集取代了預先存在的iptables 規則,並指示防火牆丟棄除環回流量、本地網絡的子網以及在端口1194 上進出OpenVPN 服務器IP 的UDP 流量之外的所有傳出連接。此外,所有傳入和傳出連接都將被刪除。允許通過虛擬網絡接口tun0

您的 VPN 防火牆現已激活,但此規則集只是臨時的,當您重新啟動 Linode 時將會被清除。要使防火牆永久存在,您可以安裝iptables-persistentDebian 或基於 Ubuntu 的發行版的軟件包,或者您可以查看我們的iptablesFirewalld指南來創建永久規則集和/或配置文件。

使用 ufw 的 VPN 防火牆

重要的
您可能需要備份當前的防火牆規則集。
  1. 創建一個包含以下命令的新 shell 腳本:

    文件:ufw-vpn.sh
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    ufw --force reset
    ufw default deny incoming
    ufw default deny outgoing
    ufw allow in on tun0
    ufw allow out on tun0
    ufw allow in on wlp6s0 from 192.168.0.0/24
    ufw allow out on wlp6s0 to 192.168.0.0/24
    ufw allow out on wlp6s0 to 198.51.100.0 port 1194  proto udp
    ufw allow in on wlp6s0 from 198.51.100.0 port 1194 proto udp
    ufw enable
  2. 將腳本保存為ufw-vpn.sh,然後使用設置權限chmod並執行腳本:

    chmod +x ufw-ks.sh
    ./ufw-ks.sh
    

您的 VPN 防火牆現已啟用。ufw disable如果您想禁用防火牆,請使用。

蘋果 OS X / macOS

Pf是較新版本的 OS X 和 macOS 使用的防火牆應用程序。

  1. 編輯pf配置文件:

    文件:/etc/pf.conf
    1
    2
    3
    4
    
    block drop all
    pass on lo0
    pass on utun0
    pass out proto udp from any to 198.51.100.0 port 1194
  2. 導入新添加的規則如下:

    pfctl -f /etc/pf.conf
    
  3. 打開防火牆:

    pfctl -e
    

啟用後pf,您的 VPN 防火牆就會處於活動狀態。pfctl -d如果您需要停用防火牆,請使用。

在帶有 Tunnelblick OpenVPN 客戶端的最新版本的 OS X 或 macOS 中,您可能有未使用的utun接口,在這種情況下您將無法連接到 VPN 服務器。您可以使用 檢查未使用的接口ifconfig

utun0例如,如果您有未使用的,請更改pass on utun0pf.conf:

pass on utun1

更多信息

您可能希望查閱以下資源以獲取有關此主題的更多信息。雖然提供這些內容是希望它們有用,但請注意,我們不能保證外部託管材料的準確性或及時性。

留言

這個網誌中的熱門文章

DeepNude 2.0 – Deepnude AI算法一键脱衣,绿色破解版,免费下载

用数字货币洗钱,警察蜀黍就没招了吗?| 浅黑笔记

最简单的Trojan一键脚本,效率高/速度快/延迟低,支持tls1.3,系统要求>=Centos7