本記事はプロモーションを含みます
AirVPNでVPN over Torを使う際に注意しないといけないのは、NetworkLockを使うとVPN over Torが失敗することです。
AirVPNではNetworkLockという名称でKILLスイッチ機能を提供しています。KILLスイッチとは、VPNが切断された状態でインターネットに接続してしまい本当のIPアドレスが漏洩することを防ぐ機能です。
ではなぜNetworkLockを有効化した状態でVPN over Tor接続が失敗するのかというと、それはVPN over Tor接続に必要なTor接続がNetworkLockにより遮断されてしまうためです。
そのためAirVPNでVPN over Torで接続するためにはNetworkLockを無効化しなくてはいけません。
しかしNetworkLockを無効化するというのは危険を伴うためおすすめできません。そこで、NetworkLockを無効化した状態でも安全な状態を保つ方法を紹介します。
今回はKali Linuxを対象としていますが、Debian LinuxやUbuntu Linuxでも同様の方法で対処できます。
FW(ファイアウォール)をインストールする
システムが最新の状態に保たれていることを前提にしています。
$ sudo apt update $ sudo apt upgrade -y $ sudo apt autoremove -y $ sudo apt autoclean
ファイアウォールとして ufw をインストールします。
$ sudo apt install ufw
いったん設定をリセットしておきます。
$ sudo ufw reset
インストール直後の状態であれば ufw は inactive のはずです。
┌──(kali㉿kali)-[~] └─$ sudo ufw status Status: inactive ┌──(kali㉿kali)-[~] └─$
追加するルール
次のルールを追加します。
項番 | インタフェース | 送信元IP | 送信元ポート | 送信先IP | 送信先ポート |
1 | eth0 | any | any | any | 9001/tcp |
2 | lo | any | any | any | 9150/tcp |
3 | lo | any | any | any | 9151/tcp |
4 | tun0 | any | any | any | any |
項番1はTor接続するためのルールです。インタフェースは”eth0″としていますが、環境によってethではなくensになっているかも知れません。自分の環境のインタフェースが分からない場合は ifconfig コマンドでインタフェース名を確認してください。
※ifconfig
コマンドがシステムにない場合はip a
コマンドを実行してください。
┌──(kali㉿kali)-[~] └─$ ifconfig eth0: flags=4163mtu 1500 inet 192.168.37.132 netmask 255.255.255.0 broadcast 192.168.37.255 inet6 fe80::20c:29ff:fea0:4a9e prefixlen 64 scopeid 0x20 ether 00:0c:29:a0:4a:9e txqueuelen 1000 (Ethernet) RX packets 642236 bytes 964082513 (919.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 65065 bytes 4053924 (3.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
項番2はTorのデータ通信です。インタフェースはlo(ループバックインタフェース)です。通常は「lo」ですが、念のため ifconfig コマンドで確認してみてください。
項番3はTorのコントロール通信です。
最後の項番4はVPN接続後のトンネル通信です。トンネルを通る通信はすべて許可しておく必要があります。インタフェース名はOpenVPNで使う仮想インタフェースである「tun0」としています。通常は「tun0」で問題ありませんが、複数の仮想インタフェースを作成している場合は「tun1」や「tun2」が存在している可能性があるので注意してください。
トンネルインタフェース(tun0)はAirVPNで接続しないと ifconfig コマンドで表示されませんから注意してください。
ここまで確認できましたら、以下の4つのコマンドを実行してルールを追加してください。
sudo ufw allow out on eth0 from any to any port 9001 proto tcp
sudo ufw allow out on lo from any to any port 9150 proto tcp
sudo ufw allow out on lo from any to any port 9151 proto tcp
sudo ufw allow out on tun0 from any to any
デフォルト設定を変える
FWルールを追加したらufwを起動します。
$ sudo ufw enable
エラーなく起動したらステータスを確認します。
$ sudo ufw status verbose
コマンドを実行すると以下のように表示されるはずです。
┌──(kali㉿kali)-[~] └─$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 9001/tcp ALLOW OUT Anywhere on eth0 9150/tcp ALLOW OUT Anywhere on lo 9151/tcp ALLOW OUT Anywhere on lo Anywhere ALLOW OUT Anywhere on tun0 9001/tcp (v6) ALLOW OUT Anywhere (v6) on eth0 9150/tcp (v6) ALLOW OUT Anywhere (v6) on lo 9151/tcp (v6) ALLOW OUT Anywhere (v6) on lo Anywhere (v6) ALLOW OUT Anywhere (v6) on tun0 ┌──(kali㉿kali)-[~] └─$
ここで注意が必要です。
Default: deny (incoming), allow (outgoing), disabled (routed)
上記のように表示されている場合(おそらく皆さん該当するはず)、デフォルト設定を変えなければいけません。というのも「allow (outgoing)
」は外向けの通信がデフォルトですべて許可されるためです。
試しにgoogle.comにPingを実行すると成功するはずです。
┌──(kali㉿kali)-[~] └─$ ping google.com -c3 PING google.com (172.217.161.46) 56(84) bytes of data. 64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=1 ttl=128 time=15.6 ms 64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=2 ttl=128 time=13.6 ms 64 bytes from nrt12s23-in-f14.1e100.net (172.217.161.46): icmp_seq=3 ttl=128 time=13.1 ms --- google.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2016ms rtt min/avg/max/mdev = 13.067/14.094/15.610/1.093 ms ┌──(kali㉿kali)-[~] └─$
デフォルト設定を変えるには次のコマンドを実行します。
$ sudo ufw default deny outgoing
実行すると次のように表示されます。
┌──(kali㉿kali)-[~] └─$ sudo ufw default deny outgoing Default outgoing policy changed to 'deny' (be sure to update your rules accordingly)
では改めてステータスを表示します。
┌──(kali㉿kali)-[~] └─$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), deny (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 9001/tcp ALLOW OUT Anywhere on eth0 9150/tcp ALLOW OUT Anywhere on lo 9151/tcp ALLOW OUT Anywhere on lo Anywhere ALLOW OUT Anywhere on tun0 9001/tcp (v6) ALLOW OUT Anywhere (v6) on eth0 9150/tcp (v6) ALLOW OUT Anywhere (v6) on lo 9151/tcp (v6) ALLOW OUT Anywhere (v6) on lo Anywhere (v6) ALLOW OUT Anywhere (v6) on tun0 ┌──(kali㉿kali)-[~] └─$
こんどはoutgoingもdenyになっていますね。
Default: deny (incoming), deny (outgoing), disabled (routed)
google.comへPingするとDNS通信が遮断されているため名前解決に失敗します。
┌──(kali㉿kali)-[~] └─$ ping google.com -c3 ping: google.com: Temporary failure in name resolution
次にIPアドレスを指定してPingを実行しても通信が遮断されて応答がないことを確認します。この状態であればFWで通信が遮断されています。
┌──(kali㉿kali)-[~] └─$ ping 1.1.1.1 -c3 PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. --- 1.1.1.1 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2032ms
FWの起動と停止、状態確認をおこなうコマンド
ufwを起動して通信を遮断する場合は sudo ufw enable
を実行します。
ufwを停止してすべての通信を許可する場合は sudo ufw disable
を実行します。
現在のufwステータスを確認する場合は sudo ufw status verbose
を実行します。
VPN over Torで接続できることを確認する
あとは通常のVPN over Tor接続をおこなうだけです。詳細はVPN over Tor接続の解説記事でご紹介しているので参考にしてみてください。
sudo ufw enabl ← e が抜けてます。
ご指摘ありがとうございます。
記事を修正しました。