【CentOS】OpenVPN & LDAPでVPNサーバ構築


環境

CentOS 7.4
OpenVPN 2.4.4

参考サイト

ServerWorldさん:https://www.server-world.info/query?os=CentOS_7&p=openvpn
cloudpackさん:https://cloudpack.media/73

※前提条件

LDAPサーバは既に構築済みとします


サーバ作業手順

■インストール

必要なものをインストールします。

yum --enablerepo=epel install openvpn openvpn-auth-ldap easy-rsa net-tools bridge-utils  

■各種証明書生成

easy-rsaのディレクトリに移動し、各種証明書を生成します。

cd /usr/share/easy-rsa/2.0   

CA 証明書

まず、varsファイルを修正します。

vim vars  

内容は以下の通りです。(コメント行・空行は除外しています)

export EASY_RSA="`pwd`"  
export OPENSSL="openssl"  
export PKCS11TOOL="pkcs11-tool"  
export GREP="grep"  
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`  
export KEY_DIR="$EASY_RSA/keys"  
export PKCS11_MODULE_PATH="dummy"  
export PKCS11_PIN="dummy"  
export KEY_SIZE=2048  
export CA_EXPIRE=3650  
export KEY_EXPIRE=3650  
export KEY_COUNTRY="JP"         #国  
export KEY_PROVINCE="Tokyo"     #都道府県  
export KEY_CITY="Shibuya-ku"    #市区町村  
export KEY_ORG="AAA-Company"    #組織名  
export KEY_EMAIL="fooo@aaa.com" #メールアドレス  
export KEY_OU="BTeam"           #チーム名など(任意)  
export KEY_NAME="EasyRSA"  

CA証明書を生成します。

source ./vars  
./clean-all  
./build-ca  
〜色々聞かれるが全てそのままエンターで良さそう〜  

サーバー証明書

サーバ証明書を生成します。

./build-key-server server  
〜色々聞かれるが基本的にはそのままエンターで良さそう〜  
〜途中でYes/Noを聞かれるので、そこは「y」と入力する〜  

Diffie Hellman(DH)

DHを生成します。

./build-dh  

各種証明書の移動

OpenVPNのディレクトリに生成した証明書達を移動します。

cp keys/ca.crt /etc/openvpn/.  
cp keys/server.crt /etc/openvpn/.  
cp keys/server.key /etc/openvpn/.  
cp keys/dh2048.pem /etc/openvpn/.  

■OpenVPN設定

OpenVPNのサーバ設定をします。

cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/server.conf /etc/openvpn/server.conf  
vim /etc/openvpn/server.conf  

内容は以下の通りです。(コメント行・空行は除外しています)

port 1194  
proto tcp  
dev tun  
ca ca.crt  
cert server.crt  
key server.key  
dh dh2048.pem  
server 192.168.10.0 255.255.255.0        #OpenVPNサーバのサブネットマスク  
route 192.168.10.0 255.255.255.0         #クライアントに割り振るサブネットマスク=serverと同じで良い  
push "redirect-gateway def1"             #クライアントは全ての通信をVPN経由にする  
push "dhcp-option DNS 192.168.10.254"    #DNSサーバの設定  
keepalive 10 120  
status /var/log/openvpn-status.log  
log         /var/log/openvpn.log  
log-append  /var/log/openvpn.log  
verb 3  
plugin    /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"  
client-cert-not-required  
username-as-common-name  

LDAPサーバへの接続設定もします。

vim /etc/openvpn/auth/ldap.conf  

内容は以下の通りです。(コメント行・空行は除外しています)

<LDAP>  
    URL     ldap://ldap.sample.com   #LDAPサーバへのURL  
    Timeout     15  
    TLSEnable   no  
    FollowReferrals yes  
</LDAP>  
<Authorization>  
    BaseDN      "ou=People,dc=sample,dc=com" #LDAPサーバのログインアカウント情報のDN  
    SearchFilter    "(&(uid=%u))"  
    RequireGroup    false  
</Authorization>  

■iptable設定

VPN接続してきたクライアントがVPNサーバ経由で外部連携するためにはiptableでマスカレードしてあげる必要があります。
openvpn起動時にiptable設定ができるようスクリプトを作っておきます。

起動スクリプト

#!/bin/bash  
  
# 設定クリア  
/etc/openvpn/openvpn-shutdown  
  
# マスカレード設定(IPアドレスや利用するイーサネット等のIFは環境に合わせて変更)  
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eno1 -j MASQUERADE  
  
# VPNサーバからの送信許可設定  
iptables -I OUTPUT -o tun+ -j ACCEPT  
iptables -I FORWARD -o tun+ -j ACCEPT  

停止スクリプト

#!/bin/bash  
  
# iptablesルール削除関数  
delete() {  
    rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r`  
    for num in $rule_number  
    do  
        iptables -D $target $num  
    done  
}  
  
# 受信ルール削除  
target='INPUT'  
delete  
  
# 転送ルール削除  
target='FORWARD'  
delete  
  
# 送信ルール削除  
target='OUTPUT'  
delete  

■起動

systemctl start iptables  
systemctl start openvpn  
sh /etc/openvpn/openvpn-startup  

クライアント作業手順

■Tunnelblinkの取得

以下サイトよりダウンロード&インストールします。  
https://tunnelblick.net/downloads.html  

■VPN設定

サーバ側で生成したca.crtをクライアント側にダウンロードし、その同じディレクトリにsample.ovpnを作成します。
※上記「sample」部分については任意の名前にしてください。それがTunnelblink上での接続先名になります。

sample.ovpnの中身は以下のようにしてください。

client  
  
auth-user-pass  
  
dev    tun  
proto  tcp  
  
ca     ca.crt  
  
remote xxx.xxx.xxx.xxx 1194 #xxxはクライアントからVPNサーバへアクセスする際のIPアドレス  

この作成したovpnファイルをダブルクリックで開くとTunnelblinkが起動し、VPN設定がされる。

■VPN接続

Tunnelblinkを起動し、上部常駐アイコンより「sampleに接続」を選択すると接続できる。