DUICUO

OpenVPNとPrivacyIDEAを使用して2要素認証リモートアクセスを設定する方法

企業では、従業員が自宅や出張先から会社のITリソースにアクセスできるようにするため、VPNリモートアクセスシステムがトレンドになっています。しかし、従業員のパスワード管理意識の低さや、攻撃者がソーシャルエンジニアリングデータベースを悪用するケースは、攻撃者にとって都合の良い経路を提供してしまうことがよくあります。二要素認証システムの導入は、パスワード検証を強化する非常に効果的な方法です。現在、このような安全な認証システムは数多く存在しており、RSAのセキュア認証システムはよく知られています。

RSAは包括的なID認証ソリューションを提供しており、特にRSA SecurID二要素認証ソリューションは、この分野のデファクトスタンダードとなっています。このソリューションは、導入の容易さ、成熟度、信頼性の高さから、情報セキュリティ分野において幅広い信頼を得ています。RSAの製品ラインナップは幅広く、従来のハードウェアトークンデバイスに加え、スマートデバイスで利用できるソフトウェアトークンも提供しており、高い利便性を実現しています。

しかし、中小企業にとって、RSAのような商用ID認証ソリューションの利用は法外な費用がかかります。IT予算が不足している場合、二要素認証ソリューションの選択肢が限られることも少なくありません。

Google Authenticator プロジェクトは、複数のモバイルプラットフォームでワンタイムパスワードを生成するためのソフトウェア実装であり、Pluggable Authentication Module(PAM)の実装も含まれています。OAuth とは異なり、オープンスタンダード Initiative for Open Authentication(OATH)に基づいてワンタイムパスワードを生成します。RFC 4226 で定義されている HMAC ベースのワンタイムパスワード(HOTP)アルゴリズムと、RFC 6238 で定義されている時間ベースのワンタイムパスワード(TOTP)アルゴリズムをサポートしています。

Google Authenticator が成熟し、OpenVPN と 2 要素認証システムを組み合わせることで、完全にオープンソース ソフトウェアに基づいた安全なリモート アクセス システムを構築できるようになりました。

OpenVPNは、暗号化された仮想プライベートネットワーク(VPN)トンネルを作成するための無料のオープンソースソフトウェアです。OpenVPNを使用すると、自宅、オフィス、ホテルなど、異なるネットワークアクセス拠点間で、ローカルエリアネットワーク(LAN)に似たプライベートネットワークトンネルを簡単に構築できます。

PAMでは、Google Authenticatorを使用して二要素認証(2F)が実装されています。しかし、その管理と保守は煩雑で、直感的ではありません。ユーザーはシステムアカウントである必要があり、PINコードの変更や新しいトークンの生成にはシステムにログインしてコマンドを実行する必要があるため、初心者ユーザーにとっては難しく、潜在的なセキュリティリスクをもたらします。管理者は、会社の既存のアカウントシステムを使用できず、認証システム上に別のアカウントシステムを構築・管理する必要があります。

PrivacyIDEAは、モジュール型の認証システムおよび認証サーバーです。PrivacyIDEAを使用すると、ローカルログイン、VPN、リモートアクセス、SSH接続を強化できます。また、認証中にウェブサイトやポータルにアクセスするための優れた二要素認証ソリューションとして、既存のアプリケーションのセキュリティを向上できます。当初は、OTP(ワンタイムパスワード)認証デバイスをOTPサーバーとして機能させるために使用されていましたが、チャレンジレスポンス、SSHキー、X.509証明書などの他の「デバイス」も利用可能です。Linuxシステムで動作し、完全にオープンソースです。

PrivacyIDEAは、ユーザーフレンドリーな管理インターフェースを備えています。管理者管理からユーザー自身による管理まで、Web経由で簡単に操作できます。PrivacyIDEAは、ローカルファイル、データベース、LDAPからユーザー情報を読み取ることができます。これにより、企業のアカウントシステムとのシームレスな統合が可能になり、非常に便利です。

[[162052]]

PrivacyIDEAのHOTPとTOTPはGoogle Authenticatorを使用しています。そのため、スマートフォンでGoogle Authenticatorアプリを使用するのが非常に便利です。

PrivacyIDEAは、OpenVPNとの統合に3つの方法を提供します。1つ目は、PAMのprivacyidea_pam.pyモジュールを使用する方法です。OpenVPNはPAM認証を使用し、PAMはprivacyidea_pam.pyモジュールを呼び出してPrivacyIDEAによる検証を行います。2つ目は、OpenVPNとFreeRADIUSを直接統合する方法です。OpenVPNはRADIUS認証を使用し、FreeRADIUSはPrivacyIDEAによる検証を行います。3つ目は、OpenVPN内でRADIUS PAMモジュールを使用する方法です。

I. スキームの原則

あらゆる要素を考慮した結果、2番目のアプローチ、つまりOpenVPN + FreeRADIUS + PrivacyIDEAを選択しました。このソリューションはトラブルシューティングがはるかに容易で、汎用性も優れています。

概略図:

オープンVPN

関連する手順は次のとおりです。まず、リモートユーザーが認証情報を提供してVPN接続を開始します。次に、OpenVPNはユーザーの認証情報を提供し、FreeRADIUSで認証を行います。次に、FreeRADIUSはPerlスクリプトを介してPrivacyIDEAで情報を検証します。PrivacyIDEAは検証結果をFreeRADIUSに送信し、FreeRADIUSは認証結果をOpenVPNに送信します。最後に、OpenVPNが結果を確認し、認証が成功した場合は接続が確立されます。認証に失敗した場合は、接続が閉じられ、失敗メッセージが送信されます。

II. ソフトウェアのインストールと設定

Ubuntu-Server14.04 オペレーティング システムで具体的な操作を実行します。

1. PrivacyIDEAをインストールして管理する

1.1 システム時間

TOTPは時間ベースのワンタイムパスワードであり、時間の整合性はトークンコードと認証の成否に直接影響します。そのため、端末(携帯電話)とPrivacyideaシステムの時計が同期している必要があります。

ローカルタイムゾーンを設定し、NTP サービスを有効にします。

1.2 PrivacyIDEAソースを追加

リポジトリは、コマンドを使用して追加することも、/etc/apt/sources.list に直接書き込むことで追加できます。

  1. ## -apt-repository ppa:privacyidea/privacyideaを追加します

あるいは、`vi` を使用して `/etc/apt/sources.list` を編集し、リポジトリを追加します。

  1. deb http://ppa.launchpad.net/privacyidea/privacyidea/ubuntu 信頼できるメイン
  2.  
  3. deb-src http://ppa.launchpad.net/privacyidea/privacyidea/ubuntu 信頼できるメイン

リポジトリのアップグレード: apt-get update。

1.3 PrivacyIDEをインストールする

  1. # apt-get で privacyidea-apache2 をインストールします

インストールが成功したら、依存パッケージをインストールし、いくつかの Web ベースの証明書を生成する必要があります。

プライバシーアイデアシステム管理者を作成する

  1. #pi-manager 管理者にideauser を追加–e [email protected]

デフォルトのシステム管理ページは https://<ローカルIPアドレス> です。システムを管理するには、Webインターフェースにログインしてください。

インストールが完了したら、管理インターフェイスにログインして PrivacyIDEA を管理できます。

インターフェースのスクリーンショットの一部:

続く……

2. FreeRADIUSをインストールして設定する

PrivacyIDEAはFreeRADIUSのPrivacyIDEAバージョンを提供します。これは基本的に、FreeRADIUSにいくつかの設定変更を加えた改良版です。あるいは、FreeRADIUSを直接インストールして設定することもできます。ここではFreeRADIUSのPrivacyIDEAバージョンをインストールします。

2.1 privacyidea-radiusをインストールする

  1. # apt-get で privacyidea-radius をインストール

FreeRADIUS は認証に Perl プログラムを使用するように設定されており、PrivacyIDEA は POST を使用して Perl プログラムと対話します。

デフォルトの Perl プログラムは /usr/share/privacyidea/freeradius/privacyidea_radius.pm です。

FreeRADIUS 設定で確認できます。

2.2 FreeRADIUSの設定

RADIUS クライアント ファイルを構成します。

  1. # vim /etc/freeradius/clients.conf

デフォルトでは、ローカルマシン 127.0.0.1 が RADIUS クライアントになります。他のデバイスがある場合は、クライアントリストに追加してください。

インストール後、RADIUS サービスが正常に動作しているかどうかをテストできます。

3. OpenVPN をインストールして設定します。

3.1 証明書の生成を容易にするために、ソフトウェア easy-rsa をインストールします。

  1. # apt-get install easy-rsa
  2.  
  3. # apt-get で openvpn をインストール

証明書の生成を容易にするために easy-rsa をインストールします。

3.2 証明書の生成

# varsファイルを変更する

/usr/share/easy-rsa/2.0/ を CD します。

vim変数

# 証明書情報を変更します。

  1. エクスポート KEY_COUNTRY= "CN"  
  2. エクスポート KEY_PROVINCE= "北京"  
  3. エクスポート KEY_CITY= "北京"  
  4. エクスポート KEY_ORG= "NetOps"  
  5. KEY_EMAIL=”[email protected]” をエクスポート
  6. KEY_OU= "netops"をエクスポート 

# 環境変数を初期化する

  1. ソース変数

# ルート証明書、ルートキー、サーバー証明書、サーバーキー、Diffie-Hellman キー、および ta.key ファイルを生成します。

  1. ./clean-すべて 
  2. ./build-ca
  3. ./build-key-server OpenVPN
  4. ./build-dh
  5. openvpn --genkey --秘密キー/ta.key  

生成された証明書ファイルは、現在のディレクトリのキー ディレクトリに配置されます。

3.3 OpenVPNの設定

# サーバー設定ファイルを /etc/openvpn にコピーします。

  1. cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn/

# 設定ファイルを編集する

必要に応じて、プロトコル、ネットワークセグメント、証明書キー、プッシュルート、DNSなどを変更します。以下を参照してください。

  1. ポート1194
  2. プロトコルTCP
  3. 開発タン
  4. ca /usr/share/easy-rsa/2.0/keys/ca.crt
  5. 証明書 /usr/share/easy-rsa/2.0/keys/server.crt
  6. キー/usr/share/easy-rsa/2.0/keys/server.key  
  7. dh /usr/share/easy-rsa/2.0/keys/dh2048.pem
  8. サーバー 192.168.10.0 255.255.255.0
  9. ifconfig-pool-persist ipp.txt
  10. 「ルート 10.0.0.0 255.0.0.0」をプッシュします 
  11. 「dhcp-option DNS 10.10.10.10」をプッシュします 
  12. キープアライブ 10 120
  13. tls-auth /usr/share/easy-rsa/2.0/keys/ta.キー0
  14. コンプ・ルゾ
  15. 持続キー 
  16. 持続タン
  17. ステータス openvpn-status.log
  18. openvpn.log にログを記録する
  19. ログ追加 openvpn.log
  20. 動詞5

OpenVPN を起動し、起動できるかどうかをテストします。問題があれば早期に解決します。

3.4 パケット転送とファイアウォールの設定

3.4.1 パケット転送を有効にする

  1. # echo "1" > /proc/sys/net/ipv4/ip_forward
  2. # vim /etc/sysctl.conf
  3. net.ipv4.ip_forward = 1

3.4.2 ファイアウォールの設定

  1. #iptables -I 入力 -p tcp --dport 1194 -m コメント --comment "openvpn" -j 受け入れ 
  2. #iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j マスカレード

必ず iptables を保存し、起動時に自動的に開始されるように設定してください。

4. Radiusプラグインをインストールする

Radiusplugin は、RADIUS 認証をサポートする OpenVPN プラグインです。

http://www.nongnu.org から radiusplugin ソース コード パッケージをダウンロードします。

4.1 gcc、c++、libgcryptをインストールする

  1. # apt-get install gcc g++ libgcrypt11

4.2 Radiusプラグインのコンパイル

パッケージを解凍し、ディレクトリに入り、コマンド `make` を使用してコンパイルします。

4.3 Radiusプラグインの設定

ディレクトリから radiusplugin.cnf ファイルと radiusplugin.so ファイルを /etc/openvpn にコピーします。

radiusplugin.cnf ファイルを変更します。

  1. # vim 半径プラグイン.cnf
  2. サーバ
  3. {
  4. アカウントポート=1813
  5. 認証ポート=1812
  6. 名前= 127.0.0.1
  7. 再試行=1
  8. 待機=1
  9. 共有秘密=テスト123
  10. }

sharedsecret は、freeradius clients.conf 内の sharedsecret と一致している必要があります。

5. OpenVPN 構成ファイルを再度変更します。

OpenVPN 構成ファイルを変更して、クライアントのユーザー名とパスワード認証を有効にします。OpenVPN は RADIUS 認証を使用します。

5.1 設定ファイル server.conf を変更する

  1. # vim /etc/openvpn/server.conf
  2. クライアント証明書不要
  3. ユーザー名を共通として 
  4. プラグイン /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf

6. サービスを再起動してテストします。

6.1 サービスを再起動する

  1. /etc/init.d/radiusdを再起動します。
  2. /etc/init.d/openvpn を再起動

6.2 OpenVPNクライアントの設定

OpenVPNクライアントをインストールします。ルート証明書ファイル(ca.crtとta.key)をOpenVPNインストールディレクトリのconfigディレクトリにダウンロードします。次に、クライアントファイル(xx.ovpn)を設定します。

情報は次のとおりです。

  1. クライアント
  2. 開発タン
  3. プロトコルTCP
  4. リモート <あなたのIPアドレス> 1194
  5. 解決再試行無限
  6. ノーバインド
  7. 持続キー 
  8. 持続タン
  9. ca ca.crt
  10. ns-cert-type サーバー
  11. TLS認証ta.key 1
  12. コンプ・ルゾ
  13. 動詞3
  14. 認証-ユーザー-パスワード

注:クライアントがWindowsシステムにインストールされている場合は、管理者権限で起動する必要があります。管理者権限がない場合、システムはVPNプッシュルートを追加しません。複数のVPNサービスがある場合は、ルート証明書ca.crt、ta.keyファイル、およびクライアントxx.ovpnファイルをすべてconfigディレクトリ配下の同じディレクトリに配置できます。

6.3 テスト

PrivacyIDEA の使用に関する詳細な手順については、公式ドキュメントまたは私の編集物「PrivacyIDEA 管理」を参照してください。

以下の3つのステップでテストすることをお勧めします。1. PrivacyIDEAサービスが正常に動作し、トークン認証が成功しているかどうかをテストします。2. RADIUSサービスが正常に動作し、RADIUSとPrivacyIDEAの認証が成功しているかどうかをテストします。3. OpenVPN認証が成功しているかどうかをテストします。プロンプトに基づいて問題を特定し、解決できるはずです。

まず、スマートフォンにGoogle認証をインストールし、PrivacyIDEAでQRコードを生成します。次に、Google認証を開き、QRコードをスキャンしてアカウントを追加します。この時点で、30秒ごとに変化するトークンコードが表示されます。次に、PrivacyIDEAの「トークン」インターフェースで、トークンのPINコードまたはトークンコードが正しいことを確認します。以下をご覧ください。

FreeRADIUSとPrivacyIDEAが正しく機能しているかどうかを確認するには、`radtest`コマンドを使用してください。また、トラブルシューティングを容易にするために、FreeRADIUSのデバッグモードを使用してサービスを起動することもできます。

次に、OpenVPNクライアントを使用して認証の成功をテストします。問題が発生した場合は、OpenVPNのログを確認してください。

注意: CentOSではバージョンの問題によりRadiuspluginにエラーが発生する場合があります。別のバージョンでコンパイルしてみてください。

バージョンの違いにより、FreeRADIUSを直接インストールする場合は、まずFreeRADIUSの認証タイプをPerlプログラムに変更し、privacyidea_radius.pmファイルをダウンロードする必要があります。関連するFreeRADIUS設定を変更することをお勧めします。バージョン2.xと3.xは異なることに注意してください。

著者紹介

[[162055]]

シャオ・レイは2014年に西安郵電大学を卒業しました。現在は360でネットワークエンジニアとして勤務し、オフィスネットワーク、無線ネットワーク、VPNを担当しています。ネットワーク技術とLinux技術に興味を持っています。