Ubuntu 18.04でStrongSwanを使用してIKEv2 VPNサーバーをセットアップする方法

前書き

仮想プライベートネットワーク(VPN)を使用すると、コーヒーショップ、会議、空港などの信頼できないネットワークを通過するトラフィックを安全に暗号化できます。

IKEv2、またはInternet Key Exchange v2は、サーバーとクライアント間の直接IPSecトンネリングを可能にするプロトコルです。 IKEv2 VPN実装では、IPSecはネットワークトラフィックの暗号化を提供します。 IKEv2は一部のプラットフォーム(OS X 10.11以降、iOS 9.1以降、およびWindows 10)でネイティブにサポートされ、追加のアプリケーションは不要であり、クライアントのしゃっくりを非常にスムーズに処理します。

このチュートリアルでは、Ubuntu 18.04サーバーでStrongSwanを使用してIKEv2 VPNサーバーをセットアップし、Windows、macOS、Ubuntu、iOS、およびAndroidクライアントからサーバーに接続します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

[[step-1 -—- installing-strongswan]] ==ステップ1—StrongSwanのインストール

まず、VPNサーバーとして構成するオープンソースのIPSecデーモンであるStrongSwanをインストールします。 また、インフラストラクチャの資格情報を提供する認証局を作成できるように、公開キーインフラストラクチャコンポーネントもインストールします。

次のように入力して、ローカルパッケージキャッシュを更新し、ソフトウェアをインストールします。

sudo apt update
sudo apt install strongswan strongswan-pki

すべてがインストールされたので、証明書の作成に進みましょう。

[[step-2 -—- creating-a-certificate-authority]] ==ステップ2—認証局の作成

IKEv2サーバーには、クライアントに対して自身を識別するための証明書が必要です。 必要な証明書の作成を支援するために、strongswan-pkiパッケージには、認証局とサーバー証明書を生成するユーティリティが付属しています。 まず、作業するすべてのアセットを保存するためのディレクトリをいくつか作成します。 ディレクトリ構造は、/etc/ipsec.d内のいくつかのディレクトリと一致し、最終的には作成したすべてのアイテムを移動します。 プライベートファイルが他のユーザーに表示されないように、アクセス許可をロックダウンします。

mkdir -p ~/pki/{cacerts,certs,private}
chmod 700 ~/pki

すべてを格納するディレクトリ構造ができたので、ルートキーを生成できます。 これは、ルート認証局の署名に使用される4096ビットのRSAキーになります。

これらのコマンドを実行してキーを生成します。

ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

キーを取得したら、キーを使用してルート証明書に署名し、ルート認証局の作成に進むことができます。

ipsec pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
    --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

必要に応じて、distinguished name(DN)の値を別の値に変更できます。 ここでの一般的な名前は単なるインジケータであるため、インフラストラクチャ内のどの名前とも一致する必要はありません。

ルート認証局を稼働させたので、VPNサーバーが使用する証明書を作成できます。

[[step-3 -—- generate-a-certificate-for-the-vpn-server]] ==ステップ3—VPNサーバーの証明書を生成する

次に、VPNサーバーの証明書とキーを作成します。 この証明書により、クライアントは、生成したばかりのCA証明書を使用してサーバーの信頼性を検証できます。

まず、次のコマンドを使用して、VPNサーバーの秘密キーを作成します。

ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

次に、前の手順で作成した認証局のキーを使用して、VPNサーバー証明書を作成して署名します。 次のコマンドを実行しますが、共通名(CN)およびサブジェクトの別名(SAN)フィールドをVPNサーバーのDNS名またはIPアドレスに変更します。

ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | ipsec pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=server_domain_or_IP" --san "server_domain_or_IP" \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem

StrongSwanが必要とするすべてのTLS / SSLファイルを生成したので、次のように入力して、ファイルを/etc/ipsec.dディレクトリの所定の場所に移動できます。

sudo cp -r ~/pki/* /etc/ipsec.d/

このステップでは、クライアントとサーバー間の通信を保護するために使用される証明書ペアを作成しました。 また、CAキーを使用して証明書に署名したため、クライアントはCA証明書を使用してVPNサーバーの信頼性を確認できます。 すべての証明書の準備ができたので、ソフトウェアの構成に進みます。

[[step-4 -—- configuring-strongswan]] ==ステップ4—StrongSwanの設定

StrongSwanには、いくつかの例を含むデフォルトの構成ファイルがありますが、ほとんどの構成を自分で行う必要があります。 最初から始める前に、参照用にファイルをバックアップしましょう。

sudo mv /etc/ipsec.conf{,.original}

次のように入力して、新しい空の構成ファイルを作成して開きます。

sudo nano /etc/ipsec.conf

まず、StrongSwanに、デバッグのためにデーモンステータスを記録し、重複した接続を許可するように指示します。 これらの行をファイルに追加します。

/etc/ipsec.conf

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

次に、VPNの構成セクションを作成します。 また、StrongSwanにIKEv2 VPNトンネルを作成し、起動時にこの構成セクションを自動的に読み込むように指示します。 ファイルに次の行を追加します。

/etc/ipsec.conf

. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

また、クライアントが予期せず切断された場合に、「ダングリング」接続をクリアするためにデッドピア検出を設定します。 以下の行を追加してください。

/etc/ipsec.conf

. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

次に、サーバー(左側)側のIPSecパラメーターを構成します。 これをファイルに追加します。

/etc/ipsec.conf

. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

[。注意]##

Note:サーバーID(leftid)を構成するとき、VPNサーバーがドメイン名で識別される場合にのみ@文字を含めます。

サーバーがIPアドレスで識別される場合は、次のIPアドレスを入力します。

    leftid=203.0.113.7

次に、使用するプライベートIPアドレス範囲やDNSサーバーなどのクライアント(右側)のIPSecパラメーターを構成できます。

/etc/ipsec.conf

. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

最後に、StrongSwanに、クライアントが接続するときにユーザーの資格情報を要求するように指示します。

/etc/ipsec.conf

. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

構成ファイルは次のようになります。

/etc/ipsec.conf

config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity

示されているように設定したことを確認したら、ファイルを保存して閉じます。

VPNパラメーターを構成したので、ユーザーがサーバーに接続できるようにアカウントの作成に移りましょう。

[[step-5 -—- configuring-vpn-authentication]] ==ステップ5—VPN認証の構成

これで、VPNサーバーはクライアント接続を受け入れるように構成されましたが、まだ資格情報が構成されていません。 ipsec.secretsという特別な構成ファイルでいくつかのことを構成する必要があります。

  • サーバーがクライアントに対して認証できるように、サーバー証明書の秘密キーの場所をStrongSwanに伝える必要があります。

  • また、VPNへの接続を許可するユーザーのリストを設定する必要があります。

編集のために秘密ファイルを開きましょう。

sudo nano /etc/ipsec.secrets

最初に、StrongSwanに秘密鍵の場所を伝えます。

/etc/ipsec.secrets

: RSA "server-key.pem"

次に、ユーザーの資格情報を定義します。 任意のユーザー名またはパスワードの組み合わせを作成できます。

/etc/ipsec.secrets

your_username : EAP "your_password"

ファイルを保存して閉じます。 VPNパラメータの操作が完了したので、設定が適用されるようにVPNサービスを再起動します。

sudo systemctl restart strongswan

VPNサーバーがサーバーオプションとユーザー資格情報の両方で完全に構成されたので、次は最も重要な部分であるファイアウォールの構成に進みます。

[[step-6 -—- configuring-the-firewall-amp-kernel-ip-forwarding]] ==ステップ6—ファイアウォールとカーネルIP転送の構成

StrongSwanの構成が完了したら、VPNトラフィックを転送して許可するようにファイアウォールを構成する必要があります。

前提条件のチュートリアルに従った場合、非常に基本的なUFWファイアウォールを有効にする必要があります。 UFWをまだ設定していない場合は、次のように入力してベースライン設定を作成し、有効にすることができます。

sudo ufw allow OpenSSH
sudo ufw enable

次に、標準のIPSecポート500および4500へのUDPトラフィックを許可するルールを追加します。

sudo ufw allow 500,4500/udp

次に、UFWの構成ファイルの1つを開き、IPSecパケットのルーティングと転送のためのいくつかの低レベルポリシーを追加します。 その前に、サーバー上のどのネットワークインターフェイスがインターネットアクセスに使用されているかを見つける必要があります。 デフォルトルートに関連付けられたインターフェイスを照会することで、それを見つけることができます。

ip route | grep default

公開インターフェースは、「dev」という語に従う必要があります。 たとえば、この結果は、eth0という名前のインターフェイスを示しています。これは以下で強調表示されています。

Outputdefault via 203.0.113.7 dev eth0 proto static

パブリックネットワークインターフェイスがある場合は、テキストエディタで/etc/ufw/before.rulesファイルを開きます。

sudo nano /etc/ufw/before.rules

ファイルの先頭近く(*filter行の前)に、次の構成ブロックを追加します。

/etc/ufw/before.rules

*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

上記の構成のeth0の各インスタンスを、ip routeで見つけたインターフェイス名と一致するように変更します。 *nat行は、ファイアウォールがVPNクライアントとインターネット間のトラフィックを正しくルーティングおよび操作できるようにルールを作成します。 *mangle行は、特定のVPNクライアントで発生する可能性のある問題を防ぐために、最大パケットセグメントサイズを調整します。

次に、*filterとチェーン定義行の後に、構成のブロックをもう1つ追加します。

/etc/ufw/before.rules

. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

これらの行は、VPNクライアントが接続できるようにESP(Encapsulating Security Payload)トラフィックを転送するようにファイアウォールに指示します。 ESPは、VPNパケットが信頼できないネットワークを通過するときに追加のセキュリティを提供します。

完了したら、ファイルを保存して閉じます。

ファイアウォールを再起動する前に、ネットワークカーネルパラメーターを変更して、あるインターフェイスから別のインターフェイスへのルーティングを許可します。 UFWのカーネルパラメーター構成ファイルを開きます。

sudo nano /etc/ufw/sysctl.conf

ここでいくつかの設定を行う必要があります。

  • まず、IPv4パケット転送を有効にします。

  • パケットフラグメンテーションの問題を防ぐために、パスMTUディスカバリを無効にします。

  • また、man-in-the-middle攻撃を防ぐために、ICMPリダイレクトを受け入れたりICMPリダイレクトを送信したりすることもありません。

ファイルに加える必要がある変更は、次のコードで強調表示されています。

/etc/ufw/sysctl.conf

. . .

# Enable forwarding
# Uncomment the following line
net/ipv4/ip_forward=1

. . .

# Do not accept ICMP redirects (prevent MITM attacks)
# Ensure the following line is set
net/ipv4/conf/all/accept_redirects=0

# Do not send ICMP redirects (we are not a router)
# Add the following lines
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1

完了したらファイルを保存します。 UFWは、次回の起動時にこれらの変更を適用します。

これで、ファイアウォールを無効にしてから再度有効にすることで、すべての変更を有効にできます。

sudo ufw disable
sudo ufw enable

プロセスの確認を求められます。 Yと入力して、新しい設定でUFWを再度有効にします。

[[step-7 -–- testing-the-vpn-connection-on-windows-ios-and-macos]] ==ステップ7– Windows、iOS、およびmacOSでのVPN接続のテスト

すべての設定が完了したので、試してみましょう。 最初に、作成したCA証明書をコピーして、VPNに接続するクライアントデバイスにインストールする必要があります。 これを行う最も簡単な方法は、サーバーにログインして証明書ファイルの内容を出力することです。

cat /etc/ipsec.d/cacerts/ca-cert.pem

次のような出力が表示されます。

Output-----BEGIN CERTIFICATE-----
MIIFQjCCAyqgAwIBAgIIFkQGvkH4ej0wDQYJKoZIhvcNAQEMBQAwPzELMAkGA1UE

. . .

EwbVLOXcNduWK2TPbk/+82GRMtjftran6hKbpKGghBVDPVFGFT6Z0OfubpkQ9RsQ
BayqOb/Q
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----および-----END CERTIFICATE-----行を含むこの出力をコンピューターにコピーし、ca-cert.pemなどの認識可能な名前でファイルに保存します。 作成するファイルの拡張子が.pemであることを確認してください。

ca-cert.pemファイルをコンピューターにダウンロードしたら、VPNへの接続をセットアップできます。

Windowsから接続する

まず、次の手順に従ってルート証明書をインポートします。

  1. WINDOWS+Rを押してRunダイアログを表示し、mmc.exeと入力してWindows管理コンソールを起動します。

  2. FileメニューからAdd or Remove Snap-inに移動し、使用可能なスナップインのリストからCertificatesを選択して、Addをクリックします。

  3. VPNを任意のユーザーと連携させたいので、Computer Accountを選択し、Nextをクリックします。

  4. ローカルコンピューターで構成しているので、Local Computerを選択し、Finishをクリックします。

  5. Console Rootノードの下で、Certificates (Local Computer)エントリを展開し、Trusted Root Certification Authoritiesを展開してから、Certificatesエントリを選択します。
    Certificates view

  6. ActionメニューからAll Tasksを選択し、Importをクリックして、証明書のインポートウィザードを表示します。 Nextをクリックして、紹介を通過します。

  7. File to Import画面で、Browseボタンを押して、保存した証明書ファイルを選択します。 次に、Nextをクリックします。

  8. Certificate StoreTrusted Root Certification Authoritiesに設定されていることを確認し、Nextをクリックします。

  9. Finishをクリックして証明書をインポートします。

次に、次の手順でVPNを構成します。

  1. Control Panelを起動し、Network and Sharing Centerに移動します。

  2. Set up a new connection or networkをクリックしてから、Connect to a workplaceを選択します。

  3. Use my Internet connection (VPN)を選択します。

  4. VPNサーバーの詳細を入力します。 サーバーのドメイン名またはIPアドレスをInternet addressフィールドに入力し、Destination nameにVPN接続を説明するものを入力します。 次に、Doneをクリックします。

新しいVPN接続がネットワークのリストの下に表示されます。 VPNを選択し、Connectをクリックします。 ユーザー名とパスワードの入力を求められます。 それらを入力し、OKをクリックすると、接続されます。

macOSからの接続

次の手順に従って、証明書をインポートします。

  1. 証明書ファイルをダブルクリックします。 Keychain Accessがポップアップし、「キーチェーンアクセスがシステムキーチェーンを変更しようとしています。 これを許可するにはパスワードを入力してください。」

  2. パスワードを入力し、Modify Keychainをクリックします

  3. 新しくインポートされたVPN証明書をダブルクリックします。 これにより、信頼レベルを指定できる小さなプロパティウィンドウが表示されます。 IP Security (IPSec)Always Trustに設定すると、パスワードの入力を再度求められます。 この設定は、パスワードを入力すると自動的に保存されます。

証明書が重要で信頼されたので、次の手順でVPN接続を構成します。

  1. System Preferencesに移動し、Networkを選択します。

  2. ネットワークのリストの左下にある小さな「プラス」ボタンをクリックします。

  3. 表示されるポップアップで、InterfaceVPNに設定し、VPN TypeIKEv2に設定して、接続に名前を付けます。

  4. [Server]および[Remote ID]フィールドに、サーバーのドメイン名またはIPアドレスを入力します。 Local IDは空白のままにします。

  5. Authentication Settingsをクリックし、Usernameを選択して、VPNユーザー用に構成したユーザー名とパスワードを入力します。 次に、OKをクリックします。

最後に、ConnectをクリックしてVPNに接続します。 これで、VPNに接続されます。

Ubuntuから接続する

Ubuntuマシンから接続するには、StrongSwanをサービスとして設定および管理するか、接続するたびに1回限りのコマンドを使用します。 手順は両方に提供されます。

サービスとしてのStrongSwanの管理

  1. ローカルパッケージキャッシュを更新します:sudo apt update

  2. StrongSwanと関連ソフトウェアsudo apt install strongswan libcharon-extra-pluginsをインストールします

  3. CA証明書を/etc/ipsec.d/cacertsディレクトリにコピーします:sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

  4. VPNが自動的に開始されないようにStrongSwanを無効にします:sudo systemctl disable --now strongswan

  5. /etc/ipsec.secretsファイルでVPNユーザー名とパスワードを構成します:your_username : EAP "your_password"

  6. /etc/ipsec.confファイルを編集して、構成を定義します。

/etc/ipsec.conf

config setup

conn ikev2-rw
    right=server_domain_or_IP
    # This should match the `leftid` value on your server's configuration
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

VPNに接続するには、次を入力します。

sudo systemctl start strongswan

再度切断するには、次を入力します。

sudo systemctl stop strongswan

1回限りの接続に単純なクライアントを使用する

  1. ローカルパッケージキャッシュを更新します:sudo apt update

  2. charon-cmdおよび関連ソフトウェアsudo apt install charon-cmd libcharon-extra-pluginsをインストールします

  3. CA証明書をコピーしたディレクトリに移動します:cd <^>/path/to/ca-cert.pem

  4. サーバーのCA証明書、VPNサーバーのIPアドレス、および構成したユーザー名を使用して、charon-cmdでVPNサーバーに接続します:sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

  5. プロンプトが表示されたら、VPNユーザーのパスワードを入力します。

これで、VPNに接続されます。 切断するには、CTRL+Cを押して、接続が閉じるのを待ちます。

iOSから接続する

iOSデバイスでVPN接続を構成するには、次の手順を実行します。

  1. ルート証明書が添付されたメールを自分に送信します。

  2. iOSデバイスでメールを開き、添付の証明書ファイルをタップしてから、Installをタップしてパスコードを入力します。 インストールしたら、Doneをタップします。

  3. SettingsGeneralVPNに移動し、Add VPN Configurationをタップします。 これにより、VPN接続構成画面が表示されます。

  4. Typeをタップし、IKEv2を選択します。

  5. [Description]フィールドに、VPN接続の短い名前を入力します。 これは好きなものにすることができます。

  6. [Server]および[Remote ID]フィールドに、サーバーのドメイン名またはIPアドレスを入力します。 Local IDフィールドは空白のままにすることができます。

  7. Authenticationセクションにユーザー名とパスワードを入力し、Doneをタップします。

  8. 作成したVPN接続を選択し、ページ上部のスイッチをタップすると、接続されます。

Androidから接続する

次の手順に従って、証明書をインポートします。

  1. CA証明書が添付されたメールを自分に送信します。 CA証明書をダウンロードフォルダーに保存します。

  2. PlayストアからStrongSwan VPN clientをダウンロードします。

  3. アプリを開きます。 右上隅の“more” iconをタップし(3つのドットアイコン)、CA certificatesを選択します。

  4. 右上隅の“more” iconをもう一度タップします。 Import certificateを選択します。

  5. ダウンロードフォルダー内のCA証明書ファイルを参照して選択し、アプリにインポートします。

証明書がStrongSwanアプリにインポートされたので、次の手順でVPN接続を構成できます。

  1. アプリで、上部のADD VPN PROFILEをタップします。

  2. ServerにVPNサーバーのドメイン名またはパブリックIPアドレスを入力します。

  3. VPNタイプとしてIKEv2 EAP (Username/Password)が選択されていることを確認してください。

  4. サーバーで定義した資格情報をUsernamePasswordに入力します。

  5. CA certificateセクションでSelect automaticallyの選択を解除し、Select CA certificateをクリックします。

  6. 画面上部のIMPORTEDタブをタップし、インポートしたCAを選択します(以前に「DN」を変更しなかった場合は、「VPNルートCA」という名前になります)。

  7. 必要に応じて、Profile name (optional)にわかりやすい名前を入力してください。

VPNに接続する場合は、StrongSwanアプリケーションで作成したばかりのプロファイルをクリックします。

接続のトラブルシューティング

証明書をインポートできない場合は、ファイルの拡張子が.pem.txtではなく.pemであることを確認してください。

VPNに接続できない場合は、使用したサーバー名またはIPアドレスを確認してください。 サーバーのドメイン名またはIPアドレスは、証明書の作成時に一般名(CN)として設定したものと一致する必要があります。 一致しない場合、VPN接続は機能しません。 CNがvpn.example.comの証明書を設定した場合、VPNサーバーの詳細を入力するときにmustvpn.example.comを使用します。 証明書の生成に使用したコマンドと、VPN接続の作成時に使用した値を再確認してください。

最後に、ドメイン名を使用している場合は、VPN構成を再確認して、leftid値が@記号で構成されていることを確認します。

また、IPアドレスを使用している場合は、@記号が省略されていることを確認してください。

結論

このチュートリアルでは、IKEv2プロトコルを使用するVPNサーバーを構築しました。 これで、どこにいてもオンラインアクティビティの安全性を確保できます。

ユーザーを追加または削除するには、手順5をもう一度見てください。 各行は1人のユーザー用であるため、ユーザーの追加または削除はファイルの編集と同じくらい簡単です。

StrongSwanはログをsyslogにダンプするため、ここからログファイルアナライザーのセットアップを検討することができます。 チュートリアルのHow To Install and Use Logwatch Log Analyzer and Reporter on a VPSには、その設定に関する詳細情報があります。

this guide from the EFF about online privacyにも興味があるかもしれません。

Related