VPSにVPNサーバを構築したお話・サーバサイド編
VPSにVPNサーバを構築して自宅サーバと接続したときの構築手順を連々と。
今回はOpenVPNを使ってSSL-VPNを作るよ!
環境
回線はマンションの共有回線でグローバルIPアドレスがない(お金払えばもらえるけど)のでVPS側をサーバとして構築する。
サーバ構築
OpenVPNのインストールとeasy-rsaの準備
今回はOpenVPN 2.3.6を使った。最新版は公式サイトのダウンロードページで確認。ダウンロードに使うのでダウンロードURLもコピーしておくこと。
依存パッケージのインストール。lzo-develはLZO圧縮を使うなら入れる。 # yum -y install openssl-devel lzo-devel pam-devel OpenVPNをダウンロード # curl -LO http://swupdate.openvpn.org/community/releases/openvpn-2.3.6.tar.gz RPMパッケージを生成※。rpmbuildが入っていない場合はyum install rpm-build # rpmbuild -tb --clean openvpn-2.3.6.tar.gz 生成したRPMパッケージをインストール # yum localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.3.6-1.x86_64.rpm
インストールしたら生成したRPMパッケージとダウンロードしたソースは消しちゃってOK。
※ rpm-buildはrootでやんなよ!って書いてあったりするけどとりあえず…
# curl -LO https://github.com/OpenVPN/easy-rsa/archive/master.zip # unzip master.zip 作業にいろいろ便利だから移動する # cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/
ダウンロードしたzipファイルや解凍したディレクトリは消しちゃってOK。
証明書・秘密鍵類を作る
必要な証明書と秘密鍵を作るよ。
CA証明書・秘密鍵
まずはCA(認証局)と秘密鍵を作るよ。クソ高いお値段の証明書やプライベート認証局を正規に作るための面倒な手順やお金はいらない。オレオレ認証局を作る。ちなみにオレオレ認証局を作るとウェブサイトで使えるSSL証明書も発行できるけど絶対にオススメしない。特にパブリックで提供するサービスにはオレオレ認証局で認証されたオレオレ証明書なんて論外。
# cd /etc/openvpn/easyrsa3/ easyrsaを使う最初の1回だけ初期化のために以下のコマンドを投入 # ./easyrsa init-pki CAの証明書を作る # ./easyrsa build-ca Enter PEM pass phrase: [CA秘密鍵の任意のパスフレーズ。安易なものは絶対に付けないこと。] Verifying - Enter PEM pass phrase: [もう1度同じパスフレーズを入力] (いろいろ出てくる) Common Name (eg: your user, host, or server name) [Easy-RSA CA]: [任意の名前を入力]
成功すれば証明書が./pki/ca.crt, 秘密鍵がpki/private/ca.keyにそれぞれ作られるが証明書のみを/etc/openvpnにコピーする。
CAの秘密鍵はサーバ証明書・秘密鍵とクライアント証明書・秘密鍵を作る時だけ使うのでコピー不要。
# cp pki/ca.crt /etc/openvpn
サーバ証明書・秘密鍵を作る
./easyrsa build-server-full server nopass
Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: [CA秘密鍵のパスフレーズ]
オプションの説明をしておくと、buid-server-(ryはサーバの証明書と鍵を作るよ、Common Nameは「server」、パスフレーズはなし(nopass)。
サーバ証明書と秘密鍵ができたらそれぞれ/etc/openvpnにコピー
# cp pki/issued/server.crt /etc/openvpn # cp pkl/private/server.key /etc/openvpn
DHパラメータを生成する
サーバ証明書ができたらDH(Diffie-Hellman)パラメータを生成するよ。
# ./easyrsa gen-dh
結構時間掛かる場合があるのでそのときは待ち続ける。
生成できたらこれも/etc/openvpnにコピーしておく。
# cp pki/dh.pem /etc/openvpn/
証明書廃止リストを作る
このあと作るクライアント証明書や秘密鍵をなくした、パスフレーズを忘れたときにその証明書は信頼出来ないことを宣言する。
これに使うのが証明書失効リスト(CRL)。これは実際廃止しないと作れないのでダミーの証明書を作って廃止して生成する。
まずはダミークライアントの証明書を作る
# ./easyrsa build-client-full dummy nopass Enter pass phrase for /etc/openvpn/easyrsa3/pki/private/ca.key: [CA秘密鍵のパスフレーズ]
作ったら廃止する
./easyrsa revoke dummy 途中でホントに廃止していい?と聞いてくるのでyes. Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes
廃止できたらCRLを生成する
# ./easyrsa gen-crl
生成できたら/etc/openvpnにコピーしてリード権を付与
# cp pki/crl.pem /etc/openvpn # chmod o+r /etc/openvpn/crl.pem
ちなみにCRLはとりあえず無くてもいいけどいざという時にコンフィグから漏れてて使えていませんでしたーな事故を防ぐためにも最初に作っておくことをすすめる。
OpenVPNの設定
CA、サーバ証明書、CRLを準備したらいよいよOpenVPNの設定をする。
まずはTLSの鍵を作る
# openvpn --genkey --secret /etc/openvpn/ta.key
サンプルのコンフィグファイルをコピー。置いてある場所はバージョンやOSによって微妙に違う。
# cp /usr/share/doc/openvpn-2.3.6/sample/sample-config-files/server.conf /etc/openvpn
設定ファイルを編集する
# vim /etc/openvpn/server.conf TUNを使うようになっていることを確認 dev tun DHパラメータファイル名を確認 dh dh.pem 先頭のコメントアウト(;)を削除してTLS認証を有効にする tls-auth ta.key 0 OpenVPNサーバの実行権限を下げる user nobody group nobody ログファイルのパスを確認 log-append /var/log/openvpn.log 最終行へ追加(CRLを有効にする) crl-verify crl.pem
OpenVPNのログローテション
放置しておくとログが溜まり続けていいことがないのでローテーションを設定する
# vim /etc/logrotate.d/openvpn /var/log/openvpn.log { daily missingok compress rotate 2 notifempty sharedscripts postrotate /etc/init.d/openvpn restart 2>&1 > /dev/null end }
オプションについてはココでは書かない。各自の環境に合わせて適切なローテションを設定する。
次回予告
次回はクライアント側の設定を書くよ!