CentOS7にOpenVPNインストール

参考にしたページ(というより、この3ページを見て作業した方がわかりやすいと思う)。

 

CentOS7にOpenVPNをインストールしたので備忘録として記録。rpmbuildなんかしなくてもrpmパッケージが公式で配布されているのだけれども、せっかくなので手元でrpmを生成してインストールする。

途中でrpmbuildを使うのでrpmdevtoolsとyum-utilsと念のためgcc(デフォルトでは入っていないことがある)をインストールして、rpmdev-setuptreeコマンドを実行する。これでrpmbuildが使用可能。

# yum install rpmdevtools yum-utils gcc-c++
# rpmdev-setuptree

次はOpenVPNをインストール

# yum -y install openssl-devel lzo-devel pam-devel
# wget http://swupdate.openvpn.org/community/releases/openvpn-2.3.5.tar.gz
# rpmbuild -tb --clean openvpn-2.3.5.tar.gz
# yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.5-1.x86_64.rpm
# rm -f ~/rpmbuild/RPMS/x86_64/openvpn-*
# rm -f openvpn-2.3.5.tar.gz

次はeasyrsa3をダウンロードして認証局を構築する。まずはダウンロードして/etc/openvpnへコピー。

# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
# unzip master.zip
# cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/
# rm -rf easy-rsa-master/
# rm -f master.zip

init-pki認証局を初期化した後、build-caで認証局を作成する(途中でPEMパスフレーズを聞かれるので、何でも良いから4文字以上入力する)。その後、build-server-fullで秘密鍵の作成・署名を行う。パスワードは要らないのでnopassオプションを指定する。さらにgen-dhでDHパラメータを生成する。

# cd /etc/openvpn/easyrsa3/
# ./easyrsa init-pki
# ./easyrsa build-ca
# ./easyrsa build-server-full server nopass
# ./easyrsa gen-dh

証明書廃止リストがあった方が便利なので、いったんクライアントを作成してすぐに廃止し、証明書廃止リストを作成する。

# ./easyrsa build-client-full dummy nopass
# ./easyrsa revoke dummy
# ./easyrsa gen-crl

作成した諸々のファイルをコピーする。認証局の証明書はpki/ca.crtにあり、pki/private秘密鍵pki/issuedに証明書があるのでコピー。ちなみに、.crtは証明書、.keyは秘密鍵ファイル。

# cp ./pki/ca.crt /etc/openvpn/
# cp ./pki/issued/server.crt /etc/openvpn/
# cp ./pki/private/server.key /etc/openvpn/
# cp ./pki/dh.pem /etc/openvpn/
# cp ./pki/crl.pem /etc/openvpn/
# chmod o+r /etc/openvpn/crl.pem

OpenVPNを設定する。

# openvpn --genkey --secret /etc/openvpn/ta.key
# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
# vi /etc/openvpn/server.conf

OpenVPN設定ファイルが開くので設定を一部変更。この辺を書き換える。crl-verify crl.pemは追記する。

dh dh.pem
tls-auth ta.key 0 # This file is secret
user nobody
group nobody
log-append  /var/log/openvpn.log
crl-verify crl.pem

OpenVPNログローテーション設定

# vi /etc/logrotate.d/openvpn
/var/log/openvpn.log {
    missingok
    notifempty
    sharedscripts
    postrotate
        systemctl restart openvpn 2>&1 > /dev/null || true
    endscript
}

手元の環境ではfirewalldではなく、(あまりよくないけど)iptablesを使っているのでiptables設定。

# vi /etc/sysconfig/iptables

# VPNサーバーからの送信を許可
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT
iptables -I INPUT -i tun+ -j ACCEPT

OpenVPN起動スクリプト編集

# vi /etc/rc.d/init.d/openvpn
echo 1 > /proc/sys/net/ipv4/ip_forward

OpenVPN起動

# systemctl start openvpn.service
# systemctl enable openvpn.service