目的
Raspberry Piには次のインターフェースがあります。
- eth0 (192.168.0.0/24) - プライベートネットワーク (例: NAT)
- wlan0 (192.168.10.0/24) - インターネット接続が可能なパブリックネットワーク(例:LAN)
- tun0(VPN) - VPN 接続
ファイアウォールの設定次の目標を達成するには:
- すべての着信トラフィックの拒否:
wlan0
、tun0
(着信接続をブロック) - すべてのアウトバウンドトラフィックを
eth0
次にルーティングしますtun0
(「水平」接続ブロック、つまりLANアクセスなし)。- オフにすると使用できません(例
tun0
:VPN Killswitch)eth0
wlan0
- オフにすると使用できません(例
主流事例
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
源泉:
- https://forums.whirlpool.net.au/archive/2561726
- https://www.reddit.com/r/VPN/comments/4ik46m/vpn_killswitch_setup_using_ufw/
- https://www.youtube.com/watch?v=x9fb2UAWkBE
- https://github.com/andreisid/bash/blob/master/killswitch.sh
私の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
traceroute
NATテーブル(など)のみを使用したテストでping
VPN接続を切断すると、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はこの設定を使用します。
これはパッケージです!