web-dev-qa-db-ja.com

セキュリティで保護されていないホットスポットからインターネットを安全に使用できるようにOpenVPNをセットアップするにはどうすればよいですか?

目標:ノートブックが開いているホットスポット/アクセスポイントに接続されている間、自宅のPCを介してインターネットを安全に使用できるようにしたい。

I do SSHトンネル/ SOCKSプロキシを使用できることを知っていますが、アプリケーションをいじりたくありません(可能な場合でも使用します)。必要なのはOpenVPNセットアップだと思うので、次の方法に関する詳細なガイドを探しています。

  1. OpenVPNサーバーのインストールとセットアップ
  2. OpenVPNクライアント(NetworkManager)をセットアップする

これが動作するUbuntuバージョンは10.10および11.04です。

31
htorque

数か月前に正確な質問がありますが、さらに、可能であればIPv6接続が必要でした。 Serverfaultに関する私の質問に興味があるかもしれません:

サーバーに使用するNIC(「ネットワークインターフェイス」)は1つしかありませんでした。私の設定では、IPv6をサポートするためにカスタムスクリプトを実行する必要があるため、NetworkManagerは十分ではありませんでした。ただし、簡単にするために、ここではNetworkManagerを使用し、IPv6サポートを省略します。

まず、認証方法を決定するだけです。 SSLのように機能するより安全な証明書方式を使用します。ハンドシェイク中に、セッションに使用される共通の秘密が選択されます。他のメソッドは共有キーです。ユーザー名とパスワード。

サーバ

1.準備する

まず、openvpnサーバーをインストールします。これはSudo apt-get install openvpnと同じくらい簡単です。難しい部分はそれを設定することです。設定は/etc/openvpnにあります。

2.認証を構成する

サーバーには、サーバーとクライアントを識別するための証明書が必要です。これらの証明書は、CA(Common Authority)から取得されます。証明書および関連する秘密鍵の作成は、どのマシンでも実行できますが、サーバーで実行する必要はありません。本当に妄想している場合は、ネットワークに接続されていないマシンで実行し、証明書の転送にメモリスティックを使用する必要があります。

サーバーのCAと証明書を作成する

CAの秘密キーが危険にさらされない限り、この手順は1回実行する必要があります。その場合、サーバーによって受け入れられる有効な証明書を作成でき、セキュリティ侵害につながります。

公式ドキュメント は、/etc/openvpnで管理を行うことを提案しています。私はすべてをルートとして実行するのが大ファンではないので、別のディレクトリに配置します。

  1. 次のコマンドを実行して、管理ディレクトリを作成し、その中のファイルをコピーします。

    mkdir ~/openvpn-admin
    cd ~/openvpn-admin
    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
    cd easy-rsa
    
  2. 必要に応じてvarsのデフォルトを編集します。たとえば、あなたが妄想的であるためにKEY_SIZE=2048を設定します。
  3. 変数をロードし、次を実行してキーディレクトリを作成します。

    . vars
    
  4. No ... openssl.cnf file could be found Further invocations will failというエラーが表示された場合は、ln -s openssl-1.0.0.cnf openssl.cnfを実行してから、もう一度. varsを実行します。

  5. このCAを初めて使用する場合は、キー環境を準備します。以前に作成したCAを維持する場合は、notを実行します。そのためには、新しいca.crtをデプロイする必要があります。

    ./clean-all
    
  6. ./build-caを実行してCAを作成します。必要な詳細を入力できますが、クライアントがサーバーに接続すると、この情報がログファイルに表示されることに注意してください。これにより、サブフォルダーkeysにファイルca.keyおよびca.crtが作成されます。 ca.keyファイルを秘密にしておきますすべての状況で。そうしないと、キーを持っている人はだれでもサーバーに接続できます。
  7. 以前の証明書が紛失または期限切れになっている場合は、最初に./revoke-full serverを使用して古い証明書を取り消す必要があります。そうしないと、データベースエラーが発生します。
  8. 次を実行して、サーバーの証明書を作成します。

    ./build-key-server server
    

    パスワードの入力を求められたら、サーバーが起動するたびにパスワードを入力する必要がない限り、空のままにしてください(推奨されません)。証明書に署名してコミットすることを確認します。 2つの新しいファイルがディレクトリkeysに表示されます:server.keyおよびserver.crt

DHおよびtls-authの準備を使用

次を使用して Diffie-Hellman パラメーターを生成します。

./build-dh

強化のヒント ごとに、tls-authを使用します。そのためには、次を使用して共有秘密鍵を生成します。

openvpn --genkey --secret ta.key

結果のファイル(ta.key)もクライアントに配布する必要がありますが、公開しないでください。

クライアント用の証明書を作成する

クライアントごとに、次の手順を繰り返す必要があります。

  1. CAおよびサーバー証明書を作成したディレクトリを入力します。

    cd ~/openvpn-admin/easy-rsa
    
  2. CAの作成手順が既にあるためスキップした場合は、最初に変数を読み込む必要があります。

    . vars
    
  3. 古い証明書が紛失または期限切れであるために新しい証明書を作成する場合は、最初に./revoke-full youで古い証明書を取り消す必要があります。そうしないと、データベースエラーが発生します。
  4. クライアント証明書you.keyとそれに対応する証明書you.crtを作成します。

    ./build-key you
    

    CommonNameは一意である必要があります。 KDEを使用している場合、10.10の時点ではまだサポートされていないため、パスワードは空のままにします。サーバー証明書の生成と同様に、証明書への署名と変更のコミットを確認します。

3. OpenVPNサービスをセットアップする

デフォルトでは、OpenVPNは接続を受け入れるときにルートとして実行されます。サービスが悪意のあるインターネットから到達可能である場合、良い考えではありません。

  1. OpenVPN専用のユーザーを作成します。たとえば、openvpn

    Sudo useradd openvpn
    
  2. ファイルserver.keyserver.crtca.crt、およびdh1024.pem(キーサイズを変更した場合はdh2048.pem)をキーディレクトリから/etc/openvpnにコピーします。 400(所有者の読み取り専用)の許可は問題ありません。

    Sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
    Sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
    
  3. ファイルta.keyもコピーします。

    Sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    Sudo chmod 400 /etc/openvpn/ta.key
    
  4. ファイル/etc/openvpn/server.confを作成し、次の行を追加します。

    proto udp
    dev tap
    ca ca.crt
    cert server.crt
    key server.key
    dh dh1024.pem
    server 10.8.0.0 255.255.255.0
    Push "redirect-gateway def1"
    ifconfig-pool-persist ipp.txt
    keepalive 10 120
    tls-auth ta.key 0
    # Compress data to save bandwidth
    comp-lzo
    user openvpn
    group openvpn
    persist-key
    persist-tun
    # Logs are useful for debugging
    log-append openvpn-log
    verb 3
    mute 10
    
  5. 適切なアクセス許可を設定します。秘密にする必要はありませんが、構成の詳細を漏らさないようにしています。

    Sudo chmod 640 /etc/openvpn/server.conf
    

4.サーバーの仕上げ

サーバーで証明書を作成した場合は、証明書を暗号化するか、サーバーから移動することをお勧めします。いずれにせよ、ca.keyserver.keyをなくさないでください。最初のケースでは、他のユーザーがサーバーに接続できます。後者では、 MITM が可能です。

クライアント

サーバーのIPアドレスの他に、サーバー管理者は次のファイルを渡す必要があります。

  • ca.crt:証明書の検証用
  • server.crt:サーバーの検証とサーバーとの通信用
  • ta.key:セキュリティを強化するため
  • you.crt:サーバーで自分自身を識別するため
  • you.key:パスワードのようなもので、ファイルのアクセス許可は400でなければなりません(所有者の読み取り専用)

1.インストール

OpenVPNおよびNetworkManagerプラグインをインストールします(KDEおよびGnomeに適しています):

Sudo apt-get install openvpn network-manager-openvpn

network-manager-openvpnはユニバースリポジトリにあります。

2.設定

コントロールパネルで、次の詳細を使用します。

  • ゲートウェイ:サーバーのIPアドレス
  • タイプ:「証明書(TLS)」(Gnome)または「X.509証明書」(KDE)
  • CA証明書:ca.crtへのパス
  • ユーザー証明書:you.crtへのパス
  • 秘密鍵:you.keyへのパス

Advanced

  • ゲートウェイポート:自動(1194)(変更する必要はありません)
  • LZOデータ圧縮を使用:有効
  • TCP接続を使用:無効
  • TAPデバイスを使用:有効
  • 暗号:デフォルト
  • HMAC認証:デフォルト
  • TLS認証を使用:有効
    ta.keyにキーファイルパスを指定し、1に「キーの方向」を設定します。
  • todo-チェックアウト)サーバーはデフォルトゲートウェイをプッシュして、すべてのトラフィックがVPN接続を経由するようにします。前回チェックしたとき、network-manager-openvpnプラグインはそれをしませんでした。

NetworkManagerが機能しない、または使用したくない場合は、ca.crtにファイル(/etc/openvpn、...)を入れて、ファイル/etc/openvpn/client.confファイルを作成します。

client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20

起動時にこのVPNを有効にしたくない場合は、/etc/default/openvpnを編集し、#を削除して次の行のコメントを解除します。

#AUTOSTART="none"

この接続を開始するには、次を実行します。

Sudo /etc/init.d/openvpn start client

構成ファイルの名前がclient.confでない場合、clientの名前を変更する必要があります。例:構成ファイルにsafe.confという名前を付けた場合、Sudo /etc/init.d/openvpn start safeを実行する必要があります。

OpenVPNを停止するには、次を実行する必要があります。

Sudo /etc/init.d/openvpn stop
40
Lekensteyn

実際にアプリケーションをいじる必要はありません。これは「VPNと同じように」機能します。

  1. 最初にtsocksパッケージ(一時的な靴下)をインストールします。

    Sudo apt-get install tsocks
    
  2. 次に/etc/tsocks.confを編集して入力します

    server = 127.0.0.1
    server_port = 3333
    
  3. 次に、ターミナルを開いて入力します(これにより接続されます):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. 実行(別の端末またはALT-F2経由):

    tsocks firefox
    

これで、FirefoxはSSHが作成したコンピューター上のSOCKSサーバーにすべての通信を送信します。これはさらに、ホームマシンにトンネリングされ、そこでWebに送信されます。ホームマシンに必要なのは、SSHサーバーだけです。初めての場合は、手順3と4を繰り返します。

それは魅力のように機能します!残念ながら、クロムはtsocksが好きではありませんが、Firefoxは動作します。

8
MarkovCh1

SSHトンネルソリューションは、思っているより簡単です。 gSTMのようなプログラムは、GUIを使用してトンネルを開始/停止します。次に、ネットワークプロキシを開いて、直接インターネット接続から手動プロキシ設定に変更し、「システム全体に適用」を押すと、すべてのアプリがデータをトンネルに送信します。それぞれを個別に操作する必要はありません。

1
Felix