【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に接続」を選択すると接続できる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です