#author("2018-08-12T13:04:20+09:00","","") [[CentOS7]] **Firewallの設定変更 [#g9f1607c] firewallへTCP 1194の通信許可を設定 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# firewall-cmd --add-port=1194/tcp --zone=external --permanent| |[root@localhost ~]# firewall-cmd --reload| *OpenVPNインストール [#ve80b5aa] OpenVPNとeasy-rsaをepelリポジトリからインストールします。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# yum -y install openssl-devel lzo-devel pam-devel &color(lime){← OpenVPNインストールに必要なパッケージをインストール};| |[root@localhost ~]# wget http://swupdate.openvpn.org/community/releases/openvpn-2.4.6.tar.gz| |&color(lightpink){※最新版のURLは[[ダウンロードページ>http://openvpn.net/index.php/download/community-downloads.html]]};| |[root@localhost ~]# rpmbuild -tb --clean openvpn-2.4.6.tar.gz &color(lime){← OpenVPNのRPMパッケージ生成};| |[root@localhost ~]# yum -y localinstall ~/rpmbuild/RPMS/x86_64/openvpn-2.4.6-1.x86_64.rpm &color(lime){← 生成したOpenVPNのRPMパッケージをインストール};| |[root@localhost ~]# rm -f ~/rpmbuild/RPMS/x86_64/openvpn-* &color(lime){← 生成したOpenVPNのRPMパッケージを削除};| |[root@localhost ~]# rm -f openvpn-2.4.6.tar.gz &color(lime){← ダウンロードしたファイルを削除};| |[root@localhost ~]# wget https://github.com/OpenVPN/easy-rsa/archive/master.zip &color(lime){← easy-rsaダウンロード};| |[root@localhost ~]# unzip master.zip &color(lime){← easy-rsa解凍};| |[root@localhost ~]# cp -r easy-rsa-master/easyrsa3/* /etc/openvpn/ &color(lime){← easyrsa3を所定のディレクトリへコピー};| |[root@localhost ~]# rm -rf easy-rsa-master/ &color(lime){← 解凍先ディレクトリを削除};| |[root@localhost ~]# rm -f master.zip &color(lime){← ダウンロードしたファイルを削除};| **認証局の設置 [#j70832ca] バージョンアップで設定ファイルや証明書が変更されるのを防ぐために新しいディレクトリを作り、そこに設定ファイルなどを保存する運用を行う。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# cd /etc/openvpn &color(lime){←ディレクトリ移動};| |[root@localhost openvpn]# ./easyrsa init-pki &color(lime){←初期化};| **認証局の作成 [#z4d27d64] |BGCOLOR(black):COLOR(white):|c |[root@localhost openvpn]# ./easyrsa build-ca &color(lime){← CA証明書・秘密鍵作成};| |Generating a 2048 bit RSA private key &br; .......................................+++ &br; .............................................................................+++ &br; writing new private key to '/etc/openvpn/pki/private/ca.key.UzE5bd0SCu' &br; Enter PEM pass phrase: &color(lime){←任意のパスフレーズを入力}; &br; Verifying - Enter PEM pass phrase: &color(lime){←もう一度入力}; &br; ----- &br; You are about to be asked to enter information that will be incorporated &br; into your certificate request. &br; What you are about to enter is what is called a Distinguished Name or a DN. &br; There are quite a few fields but you can leave some blank &br; For some fields there will be a default value, &br; If you enter '.', the field will be left blank. &br; ----- &br; Common Name (eg: your user, host, or server name) [Easy-RSA CA]: &color(lime){←VPN接続時のホスト名(FQDN)を入力(例:hogehoge.com)}; &br; &br; CA creation complete and you may now import and sign cert requests. &br; Your new CA certificate file for publishing is at: &br; /etc/openvpn/pki/ca.crt| -CA証明書(ca.crt)およびCA秘密鍵(ca.key)が作成されます -入力したパスフレーズは、CA秘密鍵(ca.key)のパスフレーズになります **DHパラメータ作成 [#pf8739d3] |BGCOLOR(black):COLOR(white):|c |[root@localhost openvpn]# ./easyrsa gen-dh| |&color(lightpink){時間が掛かる(2分~3分)ので、しばし待機};| |DH parameters of size 2048 created at /etc/openvpn/pki/dh.pem| DHパラメータ(dh.pem)が作成されます。 **ta.key作成 [#m4d82b5f] tls-authを設定しておくと、VPNセッション開始時のパケットをHMACで認証し、認可されないパケットは破棄されるため、DDoS攻撃を防ぐことができるみたい。オープンなVPNサーバーを建てる時には設定しておくことがオススメらしい。ta.keyは静的共有鍵なので、安全な方法で配送される必要がある。 |BGCOLOR(black):COLOR(white):|c |[root@localhost openvpn]# openvpn --genkey --secret ./ta.key| **サーバー用の証明書と秘密鍵の作成 [#qab9f682] VPNサーバー「hogehoge.com」用の証明書と秘密鍵をパスフレーズ無しで作成します。 |BGCOLOR(black):COLOR(white):|c |[root@localhost openvpn]# ./easyrsa build-server-full hogehoge.com nopass| |Generating a 2048 bit RSA private key &br; ....+++ &br; .......................................................+++ &br; writing new private key to '/etc/openvpn/easy-rsa/pki/private/hogehoge.com.key.O3l2ARzsse' &br; ----- &br; Using configuration from ./openssl-1.0.cnf &br; Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: &color(lime){←CA秘密鍵(ca.key)のパスフレーズを入力}; &br; Check that the request matches the signature &br; Signature ok &br; The Subject's Distinguished Name is as follows &br; commonName :ASN.1 12:'hogehoge.com' &br; Certificate is to be certified until Mar 28 17:05:59 2028 GMT (3650 days) &br; &br; Write out database with 1 new entries &br; Data Base Updated| サーバー用の証明書(hogehoge.com.crt)および秘密鍵(hogehoge.com.key)が作成されます **クライアント用の証明書と秘密鍵の作成 [#xf02ccb1] クライアント「client01」用の証明書と秘密鍵をパスフレーズ無しで作成します。 |BGCOLOR(black):COLOR(white):|c |[root@localhost openvpn]# ./easyrsa build-client-full client01 nopass &br; Generating a 2048 bit RSA private key &br; ................+++ &br; ..............................................................................................................+++ &br; writing new private key to '/etc/openvpn/easy-rsa/pki/private/client01.key.MY2YPyBgBr' &br; ----- &br; Using configuration from ./openssl-1.0.cnf &br; Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: &color(lime){←CA秘密鍵(ca.key)のパスフレーズを入力}; &br; Check that the request matches the signature &br; Signature ok &br; The Subject's Distinguished Name is as follows &br; commonName :ASN.1 12:'client01' &br; Certificate is to be certified until Mar 28 17:17:18 2028 GMT (3650 days) &br; Write out database with 1 new entries &br; Data Base Updated| クライアント用の証明書(client01.crt)および秘密鍵(client01.key)が作成されます **OpenVPNの設定 [#ped09565] ***サーバー設定 [#z08362e9] ''証明書のコピー'' |BGCOLOR(black):COLOR(white):|c |[root@localhost openvpn]# cp /etc/openvpn/pki/ca.crt .| |[root@localhost openvpn]# cp /etc/openvpn/pki/dh.pem .| |[root@localhost openvpn]# cp /etc/openvpn/pki/issued/hogehoge.com.crt .| |[root@localhost openvpn]# cp /etc/openvpn/pki/private/hogehoge.com.key .| ''サーバーのコンフィグファイルのひな型をコピー'' |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# cp /usr/share/doc/openvpn*/sample/sample-config-files/server.conf /etc/openvpn/server.conf| ''コンフィグファイル(server.conf)の編集'' |BGCOLOR(black):COLOR(white):|c |port 1194 &color(lime){←使用するポート番号}; &br; proto udp &color(lime){←使用するプロトコル}; &br; dev tap0 &color(lime){←TAP/TUNデバイス指定 ([[VPNのtapとtunの違い]])}; &br; ca ca.crt &color(lime){←ca証明書}; &br; cert hogehoge.com.crt &color(lime){←サーバ証明書}; &br; key hogehoge.com.key # This file should be kept secret &color(lime){←秘密鍵の指定}; &br; dh dh.pem &color(lime){←乱数(DH)パラメータの指定}; &br; ifconfig-pool-persist ipp.txt &color(lime){←配布用IPアドレスのテーブル(固定IPを使用する場合、ipp.txtを編集)}; &br; server-bridge xxx.xxx.xxx.xxx 255.255.255.0 xxx.xxx.xxx.201 xxx.xxx.xxx.210 &color(lime){←コメント解除して変更 [ブリッジに割り当てるIPアドレス・ネットマスク・クライアントに割り当てるIPアドレスの範囲}; &br; client-to-client &color(lime){←クライアント間通信の許可}; &br; keepalive 10 120 &color(lime){←キープアライブ設定(10秒ごとに生存確認、120秒無応答でダウン)}; &br; tls-auth ta.key 0 # This file is secret &color(lime){←TLS認証キーの指定}; &br; cipher AES-256-CBC &color(lime){←キーの強度を指定}; &br; comp-lzo &color(lime){←圧縮の有効可}; &br; user nobody &color(lime){←ユーザ権限の設定}; &br; group nobody &br; persist-key &br; persist-tun &br; status /var/log/openvpn-status.log &color(lime){←ステータスログ}; &br; log /var/log/openvpn.log &color(lime){←稼働ログ}; &br; log-append /var/log/openvpn.log &br; verb 3 &color(lime){←ログレベル}; &br; ;explicit-exit-notify 1 &color(lime){←tcpを使う場合はコメントアウトする};| **ipp.txtの記述方法 [#n97f63bd] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/openvpn/ipp.txt| |client01,xxx.xxx.xxx.xx1 &br; client02,xxx.xxx.xxx.xx2| ここで固定指定されていないユーザーについては、サーバー設定ファイルに記載された範囲内で、使用されていないものが順番に使用される。 **起動テスト [#kd62729e] ''別ターミナルを起動してログイン後にログを表示させる'' |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# tail -f /var/log/openvpn.log| ''設定中のターミナルで起動テストを実行'' |BGCOLOR(black):COLOR(white):|c |[root@localhost openvpn]# openvpn server.conf| |Sun Apr 1 03:28:46 2018 OpenVPN 2.4.5 x86_64-redhat-linux-gnu [Fedora EPEL patched] [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Mar 1 2018 &br; &br; (省略) &br; &br; Sun Apr 1 03:28:46 2018 Initialization Sequence Completed| ※こんな感じのログが出ればOK *ダミー(dummy)インターフェースを作成する [#o2563863] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/modprobe.d/dummy.conf| |install dummy /sbin/modprobe --ignore-install dummy; /sbin/ip link set name dummy0 dev dummy0| |[root@localhost ~]# vi /etc/modules-load.d/dummy.conf| |# Load dummy.ko at boot &br; dummy| |[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-dummy0| |NAME=dummy0 &br; DEVICE=dummy0 &br; ONBOOT=yes &br; TYPE=Ethernet &br; NM_CONTROLLED=no| 再起動後、ダミーがあるかどうか確認してください。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# reboot| |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# ifconfig dummy0| |dummy0: flags=195<UP,BROADCAST,RUNNING,NOARP> mtu 1500 &br; inet 10.10.10.1 netmask 255.255.255.0 broadcast 10.10.10.255 &br; ether 00:22:22:ff:ff:ff txqueuelen 0 (Ethernet)| **bridge-utilsパッケージのインストール [#k6d731c9] ''bridge-utils'' がインストールされていなければインストールします。 |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# yum -y install bridge-utils| *IPv4フォワーディングを有効にする [#d1a6df38] **IP Forwardingが有効になっていることを確認 [#f1995ccd] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# less /proc/sys/net/ipv4/ip_forward| |0 &color(lime){←「0」の場合は無効/「1」の場合は有効};| **フォワーディング有効化 [#x87023c4] |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# vi /etc/sysctl.conf| |net.ipv4.ip_forward=1 &color(lime){←最下行に追記};| |[root@localhost ~]# sysctl -p &color(lime){←設定反映};| **サービスとして起動 [#h64f9b94] ''サービスとして起動'' |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# systemctl start openvpn@server| ''サービス状態確認'' |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# systemctl starus openvpn@server| ''サービス自動起動'' |BGCOLOR(black):COLOR(white):|c |[root@localhost ~]# systemctl enable openvpn@server|