また、OpenLDAP認証を使用すると、接続するクライアントごとに個別のOpenVPNクライアント証明書を生成する必要があるという問題を解消できます。
以下のリンクをたどって、CentOS8にOpenLDAPサーバーをインストールしてセットアップする方法を学びます。
CentOS8にOpenLDAPをインストールしてセットアップする
OpenVPNLDAPベースの認証を構成する
LDAP認証用のOpenVPNプラグインをインストールする
OpenVPN LDAPベースの認証を構成するには、LDAP認証用のOpenVPNプラグインをインストールする必要があります。プラグインはopenvpn-auth-ldap
と呼ばれます また、OpenVPN用のLDAPを介したユーザー名/パスワード認証を実装しています。
CentOS 7では、プラグインをインストールするにはEPELリポジトリが必要です;
yum install epel-release
yum install openvpn-auth-ldap
Ubuntuシステムの場合;
apt install openvpn-auth-ldap
CentOS 8では、残念ながら、この記事の執筆時点では、EPELリポジトリはこのパッケージを提供していません。
このデモでは、CentOS7システムでOpenVPNサーバーを実行しています。
openvpn-auth-ldap
パッケージの場合、/usr/lib64/openvpn
の下に必要なモジュールがあります。 ディレクトリ。
モジュールは、/usr/lib/openvpn
、ディレクトリ。
このパッケージは、OpenVPNLDAP認証構成ファイル/etc/openvpn/auth/ldap.conf
。
Ubuntuシステムでは、サンプルのOpenVPNLDAP認証構成が;
にあります。/usr/share/doc/openvpn-auth-ldap/examples/auth-ldap.conf
LDAPベースの認証用にOpenVPNサーバーを構成する
必要なプラグインを配置したら、次はLDAPベースの認証用にOpenVPNサーバーを構成します。
OpenVPN LDAPベースの認証構成ファイルを開き、OpenLDAPサーバーの詳細を定義します。
構成のバックアップを作成します。
cp /etc/openvpn/auth/ldap.{conf,.old}
ディレクトリ/ファイルが存在しない場合は、作成するだけです;
mkdir /etc/openvpn/auth
それが完了したら、サンプル構成ファイルをコピーします;
cp /usr/share/doc/openvpn-auth-ldap/examples/auth-ldap.conf /etc/openvpn/auth/ldap.conf
次に、編集用の構成ファイルを開きます。
vim /etc/openvpn/auth/ldap.conf
以下は、OpenLDAPサーバーのセットアップによるサンプル構成(コメント行なし)です。適切な設定を行います;
<LDAP>
URL ldap://ldapmaster.kifarunix-demo.com
BindDN cn=readonly,ou=system,dc=ldapmaster,dc=kifarunix-demo,dc=com
Password [email protected]
Timeout 15
TLSEnable no
FollowReferrals no
</LDAP>
<Authorization>
BaseDN "ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com"
SearchFilter "(uid=%u)"
RequireGroup false
</Authorization>
グループ認証に関して、OpenLDAPを介して認証する特定のユーザーのみがOpenVPNサーバーに接続できるように、よりきめ細かいOpenVPNアクセス制御を適用する場合は、OpenLDAPグループメンバーシップを利用できます。
たとえば、OpenLDAPサーバーには、OpenVPNサーバーへの接続を許可されているユーザーのみを含むVPNのみのグループがあります。
ldapsearch -Y ExTERNAL -H ldapi:/// -b ou=groups,dc=ldapmaster,dc=kifarunix-demo,dc=com -LLL -Q "(cn=vpnonly)"
dn: cn=vpnonly,ou=groups,dc=ldapmaster,dc=kifarunix-demo,dc=com objectClass: groupOfNames cn: vpnonly member: uid=koromicha,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com member: uid=johndoe,ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com
以下のガイドに従って、OpenLDAPグループメンバーシップを作成する方法をご覧ください。
OpenLDAPメンバーグループを作成する方法
したがって、グループメンバーシップ認証を有効にするには、 RequireGroup
の値を設定します trueに設定し、構成が次のようになるようにグループセクションを編集するオプション。
<LDAP>
URL ldap://ldapmaster.kifarunix-demo.com
BindDN cn=readonly,ou=system,dc=ldapmaster,dc=kifarunix-demo,dc=com
Password [email protected]
Timeout 15
TLSEnable no
FollowReferrals no
</LDAP>
<Authorization>
BaseDN "ou=people,dc=ldapmaster,dc=kifarunix-demo,dc=com"
SearchFilter "(uid=%u)"
RequireGroup true
<Group>
BaseDN "ou=groups,dc=ldapmaster,dc=kifarunix-demo,dc=com"
SearchFilter "memberOf=cn=vpnonly,ou=groups,dc=ldapmaster,dc=kifarunix-demo,dc=com"
MemberAttribute uniqueMember
</Group>
</Authorization>
この場合、ユーザー koromichaのみ およびjohndoe OpenVPNサーバーに接続できます。
適切な変更を加えたら、構成を保存して終了します。
次に、OpenVPNサーバー構成ファイルに以下の行を追加して、認証にOpenLDAPを使用するようにOpenVPNサーバーを構成します。
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
次のように、この行をOpenVPNサーバー構成ファイルに追加するだけです。
echo "plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf" >> /etc/openvpn/server/server.conf
モジュールへの正しいパスを設定してください。 たとえば、Ubuntu 18.04 / 20.04では、パスは/usr/lib/openvpn/openvpn-auth-ldap.so
。
したがって、行は次のようになります。
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
クライアントのユーザー名/パスワード認証を有効にする
次に、クライアント構成ファイルを編集して、 auth-user-passを含めます。 ユーザー名/パスワード認証方式を有効にするディレクティブ。
たとえば、これはOpenVPNサーバーのセットアップに基づくサンプルのクライアント構成ファイルです。
client tls-client pull dev tun proto udp remote 192.168.2.132 1194 resolv-retry infinite nobind #user nobody #group nogroup persist-key persist-tun key-direction 1 remote-cert-tls server comp-lzo verb 3 auth-nocache dhcp-option DNS 8.8.8.8 dhcp-option DNS 10.8.0.1 auth SHA512 auth-user-pass tls-auth /home/johndoe/ta-key ca /home/johndoe/ca.crt cert /home/johndoe/johndoe.crt key /home/johndoe/johndoe.key
OpenVPNサーバーサービスを再起動します;
systemctl restart [email protected]
OpenVPNクライアントのLDAP認証を確認する
これで構成は完了です。すべてが正常であることを確認するには、クライアントでOpenVPN接続を開始します;
sudo openvpn johndoe.ovpn
Sat Apr 18 08:50:11 2020 OpenVPN 2.4.8 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Nov 1 2019 Sat Apr 18 08:50:11 2020 library versions: OpenSSL 1.1.1 FIPS 11 Sep 2018, LZO 2.08 Enter Auth Username: johndoe Enter Auth Password: ************* ... Sat Apr 18 08:50:26 2020 /sbin/ip addr add dev tun0 10.8.0.60/24 broadcast 10.8.0.255 Sat Apr 18 08:50:26 2020 /sbin/ip route add 192.168.2.132/32 via 10.0.2.2 Sat Apr 18 08:50:26 2020 /sbin/ip route add 0.0.0.0/1 via 10.8.0.1 Sat Apr 18 08:50:26 2020 /sbin/ip route add 128.0.0.0/1 via 10.8.0.1 Sat Apr 18 08:50:26 2020 Initialization Sequence Completed
認証が失敗した場合;
... Sat Apr 18 08:53:36 2020 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1) Sat Apr 18 08:53:36 2020 AUTH: Received control message: AUTH_FAILED Sat Apr 18 08:53:36 2020 SIGTERM[soft,auth-failure] received, process exiting
OpenVPNサーバーでは、ログにそのような行が表示されます;
tail -f /var/log/openvpn/openvpn.log
... 192.168.56.1:53489 [johndoe] Peer Connection Initiated with [AF_INET]192.168.56.1:53489 johndoe/192.168.56.1:53489 OPTIONS IMPORT: reading client specific options from: /etc/openvpn/ccd/johndoe johndoe/192.168.56.1:53489 PLUGIN_CALL: POST /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so/PLUGIN_CLIENT_CONNECT status=0 johndoe/192.168.56.1:53489 OPTIONS IMPORT: reading client specific options from: /tmp/openvpn_cc_565148162b7cd88618c8c5e6efba7007.tmp johndoe/192.168.56.1:53489 MULTI: Learn: 10.8.0.60 -> johndoe/192.168.56.1:53489 johndoe/192.168.56.1:53489 MULTI: primary virtual IP for johndoe/192.168.56.1:53489: 10.8.0.60 johndoe/192.168.56.1:53489 PUSH: Received control message: 'PUSH_REQUEST'
janedoe
としてOpenVPNサーバーに接続してみてください 、許可されたvpnonly
グループ。これは自動的に失敗します。
sudo openvpn janedoe.ovpn
Sat Apr 18 10:00:05 2020 OpenVPN 2.4.8 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Nov 1 2019 Sat Apr 18 10:00:05 2020 library versions: OpenSSL 1.1.1 FIPS 11 Sep 2018, LZO 2.08 Enter Auth Username: janedoe Enter Auth Password: ************** ... Sat Apr 18 10:00:19 2020 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1) Sat Apr 18 10:00:19 2020 AUTH: Received control message: AUTH_FAILED Sat Apr 18 10:00:19 2020 SIGTERM[soft,auth-failure] received, process exiting
素晴らしい。 OpenLDAPサーバーを介して認証するようにOpenVPNクライアントを正常に構成しました。
これで、OpenVPNLDAPベースの認証を構成する方法に関するガイドは終わりです。お楽しみください。
関連チュートリアル
OpenVPNクライアントに静的IPアドレスを割り当てる
CentOS 8 /Ubuntu18.04のネットワークマネージャーを使用してOpenVPNに接続します
CentOS8でOpenVPNサーバーをセットアップする
Debian10でStrongSwanを使用してIPSECVPNをセットアップする