NATテーブルでUFWを使用するより良いVPN Killswitchはありますか?

NATテーブルでUFWを使用するより良いVPN Killswitchはありますか?

目的

Raspberry Piには次のインターフェースがあります。

  • eth0 (192.168.0.0/24) - プライベートネットワーク (例: NAT)
  • wlan0 (192.168.10.0/24) - インターネット接続が可能なパブリックネットワーク(例:LAN)
  • tun0(VPN) - VPN 接続

ファイアウォールの設定次の目標を達成するには:

  • すべての着信トラフィックの拒否:wlan0tun0(着信接続をブロック)
  • すべてのアウトバウンドトラフィックをeth0次にルーティングしますtun0(「水平」接続ブロック、つまりLANアクセスなし)。
    • オフにすると使用できません(例tun0:VPN Killswitch)eth0wlan0

主流事例

UFWでは、多くの「VPN Killswitch」の例を見てきましたが、すべて共通の構成を共有しています。

# Defaults
ufw default deny outgoing
ufw default deny incoming

# Allow local over ethernet (without VPN)
sudo ufw allow out to 192.168.0.0/24 # Allow out to LAN
sudo ufw allow in to 192.168.0.0/24 # Allow in to LAN

# Allow outgoing over ethernet to VPN
sudo ufw allow out to [VPN] port 1194 proto udp

# Allow outgoing over tun0
sudo ufw allow out on tun0 # Allow out over VPN

源泉:

私のNATはい(代替)

もちろん、私のアプリケーションには、ルーター、ファイアウォール、DNSとDHCPサーバー、VPNクライアントとして機能する仲介デバイス(Raspberry Pi)があるので、設定は少し異なります。ただし、NATテーブル()は/etc/ufw/before.rulesこれらのステートメントを処理しufw allow out/in to 192.168.0.0/24(2番目の宛先)、ほぼeth0すべてのアウトバウンドトラフィックをそのままルーティングするようです。tun0

# NAT table to "forward" private network to VPN tunnel
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o tun0 -j MASQUERADE
COMMIT

その後、eth0プライベートネットワーク()からのすべての着信項目をVPNトンネル(tun0)に「転送」する必要があります。そうですか?それともFORWARDここにも用語が必要ですか?

その後、次のような他の項目を構成する必要があるかどうかはわかりません。

# Set defaults (also see /etc/default/ufw)
sudo ufw default deny incoming
sudo ufw default deny outgoing

# Allow incoming requests to DNS/DHCP services (UDP) on eth0 interface only (i.e. Private Network -> Pi:43,67/udp)
sudo ufw allow in on eth0 from any to any port 53,67 proto udp

# Allow incoming requests to SSH service (TCP) on eth0 interface only (i.e. Private Network -> Pi:22/tcp)
sudo ufw allow in on eth0 from any to any port 22 proto tcp

# Allow outbound on wlan0 interface for VPN traffic only (i.e. Pi -> LAN:1194)
sudo ufw allow out on wlan0 from any to any port 1194 proto udp

# Allow all outbound traffic on eth0 (i.e. Pi -> Private Network)
sudo ufw allow out on eth0

# Allow all outbound traffic on VPN tunnel only (i.e. Pi -> VPN)
sudo ufw allow out on tun0

tracerouteNATテーブル(など)のみを使用したテストでpingVPN接続を切断すると、Raspberry Piでアウトバウンドインターネット接続が停止することがわかります。ただし、まだ確認したいのは、これが可能なすべての漏洩シナリオ(DNSなど)をカバーしているかどうかです。

注:dnsmasqまた、DHCPサーバーがプライベートネットワーク上のクライアントに公開するDNSサーバーとしてRaspberry Piを使用しています。可能であれば、DNSクエリのみを転送するdnsmasqように設定するか、パブリックDNS(たとえば8.8.8.8、8.8.4.4)に転送するかを選択する必要があるかどうか疑問に思います。tun0また、現在、この設定は依然としてアウトバウンド接続をブロックしますが、実行するとsudo ufw allow out on wlan0接続は復元されます(VPN Killswitchは引き続き機能します)。だから私はかなり近づいているようで、おそらくいくつかのルールが必要になるでしょう。

時間をかけてこれらの詳細を見て、フィードバックを提供してくれた皆さんに心から感謝します!

ベストアンサー1

/var/log/ufw.logそのため、他の人が別途考えていない限り、欠けている部分を見つけた可能性があると思うので、この答えを残してください(ありがとう)。

# Allow DNS queries
# [UFW BLOCK] IN= OUT=wlan0 SRC=192.168.10.x DST=192.168.10.1 LEN=66 TOS=0x00 PREC=0x00 TTL=64 ID=50892 DF PROTO=UDP SPT=22617 DPT=53 LEN=46 
sudo ufw allow out on wlan0 from any to any port 53 proto udp

したがって、現在のルールセットは次のようになります(デフォルトの発信に注意してください)。

Status: active
Logging: on (low)
Default: deny (incoming), deny (outgoing)
New profiles: skip

To                         Action      From
--                         ------      ----
53,67/udp on eth0          ALLOW IN    Anywhere
22/tcp on eth0             ALLOW IN    Anywhere

1194/udp                   ALLOW OUT   Anywhere on wlan0
Anywhere                   ALLOW OUT   Anywhere on eth0
Anywhere                   ALLOW OUT   Anywhere on tun0
53/udp                     ALLOW OUT   Anywhere on wlan0

注文する:

# Allow incoming requests to DNS/DHCP services (UDP) on eth0 interface only (i.e. Private Network -> Pi:43,67/udp)
sudo ufw allow in on eth0 from any to any port 53,67 proto udp

# Allow incoming requests to SSH service (TCP) on eth0 interface only (i.e. Private Network -> Pi:22/tcp)
sudo ufw allow in on eth0 from any to any port 22 proto tcp

# Allow outbound on wlan0 interface for DNS and VPN traffic only (i.e. Pi -> LAN:1194)
sudo ufw allow out on wlan0 from any to any port 53,1194 proto udp

# Allow all outbound traffic on eth0 (i.e. Pi -> Private Network)
sudo ufw allow out on eth0

# Allow all outbound traffic on VPN tunnel only (i.e. Pi -> VPN)
sudo ufw allow out on tun0

# Set defaults (also see /etc/default/ufw)
sudo ufw default deny incoming
sudo ufw default deny outgoing

これはまた、「ルーティング」を/etc/ufw/before.rules処理するために元の投稿で述べたNATテーブルエントリと組み合わせられますeth0 -> tun0

結局のところ、私のアイテムには次のような/etc/dnsmasq.conf単一のserverアイテムが含まれていました。

# Force VPN by selecting public DNS
server=8.8.8.8

# Do not read from /etc/resolv.conf and friends for system DNS
no-resolv

# Do not poll /etc/resolv.conf and friends for system DNS
no-poll

VPNを介して8.8.8.8に承認要求が送信され、設定(暗黙的なDHCP)になると、tracerouteクライアントはデフォルトでPiをDNSとして使用し、Piはこの設定を使用します。

これはパッケージです!

おすすめ記事