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