OpenVPNは、パブリックインターネット上に安全なプライベートネットワークを作成できるオープンソースアプリケーションです。 OpenVPNは、安全な接続を作成するために仮想プライベートネットワーク(VPN)を実装します。 OpenVPNはOpenSSLライブラリを使用して暗号化を提供し、証明書ベースの事前共有キー、ユーザー名/パスワード認証などのいくつかの認証メカニズムを提供します。
このチュートリアルでは、CentOS7.6にOpenVPNをインストールして構成する方法を段階的に説明します。そして、証明書ベースのOpenVPN認証を実装します。
- CentOS 7.6
- root権限
何をしますか?
- OpenVPNとEasy-RSAをインストールする
- Easy-RSA3変数の構成
- OpenVPNキーを作成する
- OpenVPNサーバーを構成する
- ファイアウォールを構成し、ポート転送を有効にする
- クライアントのセットアップ
- テスト
このチュートリアルでは、最新バージョンのcentosサーバー(7.5)を使用し、OpenVPN2.4とeasy-rsa3を使用します。OpenVPNおよびeasy-rsaパッケージをインストールする前に、「epel」リポジトリを確認してください。システムにインストールされています。お持ちでない場合は、以下のyumコマンドを使用してepelリポジトリをインストールしてください。
yum install epel-release -y
次に、システムにeasy-rsa3を使用してOpenVPN2.4をインストールします。
yum install openvpn easy-rsa -y
インストールが完了したら、openvpnとeasy-rsaのバージョンを確認してください。
openvpn --version
ls -lah /usr/share/easy-rsa/
easy-rsa3を搭載したOpenVPN2.4がインストールされています。
このステップでは、新しい「vars」ファイルを作成してeasy-rsa3を構成します。 'vars'ファイルにはEasy-RSA3設定が含まれています。
'/ etc / openvpn /'ディレクトリに移動し、'easy-rsa'スクリプトをコピーします。
cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/
次に、「easy-rsa / 3 /」ディレクトリに移動し、vimを使用して新しいvarsファイルを作成します。
cd /etc/openvpn/easy-rsa/3/
vim vars
以下のvarseasy-rsa3構成を貼り付けます。
EASYRSA_REQ_EMAIL set_var EASYRSA_DN set_var EASYRSA_PKI set_var set_var EASYRSA "$ PWD" "$ EASYRSA / PKI" "cn_only" set_var EASYRSA_REQ_COUNTRY "ID" set_var EASYRSA_REQ_PROVINCE "ジャカルタ" set_var EASYRSA_REQ_CITY "ジャカルタ" set_var EASYRSA_REQ_ORG "葉加瀬-ラボCERTIFICATE AUTHORITY" を「[set_var EASYRSA "$PWD" set_var EASYRSA_PKI "$EASYRSA/pki" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "ID" set_var EASYRSA_REQ_PROVINCE "Jakarta" set_var EASYRSA_REQ_CITY "Jakarta" set_var EASYRSA_REQ_ORG "hakase-labs CERTIFICATE AUTHORITY" set_var EASYRSA_REQ_EMAIL "[email protected]" set_var EASYRSA_REQ_OU "HAKASE-LABS EASY CA" set_var EASYRSA_KEY_SIZE 2048 set_var EASYRSA_ALGO rsa set_var EASYRSA_CA_EXPIRE 7500 set_var EASYRSA_CERT_EXPIRE 365 set_var EASYRSA_NS_SUPPORT "no" set_var EASYRSA_NS_COMMENT "HAKASE-LABS CERTIFICATE AUTHORITY" set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types" set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf" set_var EASYRSA_DIGEST "sha256"
保存して終了します。
注:
- 必要に応じて変数の値を変更します。
- セキュリティを強化するには、「EASYRSA_KEY_SIZE」を増やします。
- 「EASYRSA_CA_EXPIRE」と「EASYRSA_CERT_EXPIRE」を変更します。
次に、ファイルの権限を変更して、「vars」ファイルを実行可能にします。
chmod +x vars
Easy-RSA3設定のvarsファイルが作成されました。
このステップでは、作成したeasy-rsa3'vars'ファイルに基づいてOpenVPNキーを構築します。 CAキー、サーバーキーとクライアントキー、DHおよびCRLPEMファイルを作成します。
'easyrsa'コマンドラインを使用してこれらすべてのキーを作成します。 '/ etc / openvpn / easy-rsa/3'ディレクトリに移動します。
cd /etc/openvpn/easy-rsa/3/
キーを作成する前に、PKIディレクトリを初期化し、CAキーを作成する必要があります。
PKIディレクトリを開始し、以下のコマンドを使用してCAキーを構築します。
./easyrsa init-pki
./easyrsa build-ca
ここで、CAキーのパスワードを入力すると、「pki」ディレクトリの下に「ca.crt」ファイルと「ca.key」ファイルが表示されます。
次に、サーバーキーを作成し、「hakase-server」という名前のサーバーキーを作成します。
以下のコマンドを使用して、サーバーキー「hakase-server」を作成します。
./easyrsa gen-req hakase-server nopass
注:
- ノーパス =「hakase-server」キーのパスワードを無効にするオプション。
そして、CA証明書を使用して「hakase-server」キーに署名します。
./easyrsa sign-req server hakase-server
「CA」パスワードの入力を求められたら、パスワードを入力してEnterキーを押します。そして、「pki /issued/」ディレクトリの下に「hakase-server.crt」証明書ファイルを取得します。
OpenSSLコマンドを使用して証明書ファイルを確認し、エラーがないことを確認します。
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
すべてのサーバー証明書キーが作成されました。サーバーの秘密鍵は「pki/private / hakase-server.key」にあり、サーバー証明書は「pki / issued/hakase-server.crt」にあります。
次に、クライアントのキーを作成する必要があります。 'client01'という名前の新しいクライアントキーを生成します。
以下のコマンドを使用して、「client01」キーを生成します。
./easyrsa gen-req client01 nopass
次に、以下のようにCA証明書を使用して「client01」キーに署名します。
./easyrsa sign-req client client01
「yes」と入力してクライアント証明書要求を確認してから、CAパスワードを入力します。
'client01'という名前のクライアント証明書が生成されました。opensslコマンドを使用してクライアント証明書を確認してください。
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
選択したキーの長さとサーバーで使用可能なエントロピーによっては、このアクションに多くの時間がかかります。 'vars'ファイルで定義した長さキーを使用します。
以下のコマンドを使用して、Diffie-Hellman鍵を生成します。
./easyrsa gen-dh
'pki'ディレクトリにあるDHキーが生成されました。
オプション:CRLキーを生成します
CRL(Certificate Revoking List)キーは、クライアントキーを取り消すために使用されます。 VPNサーバーに複数のクライアント証明書があり、いくつかのキーを取り消す場合は、easy-rsaコマンドを使用して取り消す必要があります。
一部のキーを取り消す場合は、次のようにコマンドを実行します。
./easyrsa revoke someone
次に、CRLキーを生成します。
./easyrsa gen-crl
CRLPEMファイルは「pki」ディレクトリの下に生成されています-以下は私のサーバーの例です。
すべての証明書が生成されました。証明書ファイルとPEMファイルをコピーします。
サーバーキーと証明書をコピーします。
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/
client01キーと証明書をコピーします。
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
DHキーとCRLキーをコピーします。
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
このステップでは、openvpnサーバーの新しい構成「server.conf」を作成します。
'/ etc / openvpn /'ディレクトリに移動し、vimを使用して新しい構成ファイル'server.conf'を作成します。
cd /etc/openvpn/
vim server.conf
次のOpenVPNサーバー構成をそこに貼り付けます。
# OpenVPN Port, Protocol and the Tun port 1194 proto udp dev tun # OpenVPN Server Certificate - CA, server key and certificate ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/hakase-server.crt key /etc/openvpn/server/hakase-server.key #DH and CRL key dh /etc/openvpn/server/dh.pem crl-verify /etc/openvpn/server/crl.pem # Network Configuration - Internal network # Redirect all Connection through OpenVPN Server server 10.10.1.0 255.255.255.0 push "redirect-gateway def1" # Using the DNS from https://dns.watch push "dhcp-option DNS 84.200.69.80" push "dhcp-option DNS 84.200.70.40" #Enable multiple client to connect with same Certificate key duplicate-cn # TLS Security cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 auth SHA512 auth-nocache # Other Configuration keepalive 20 60 persist-key persist-tun comp-lzo yes daemon user nobody group nobody # OpenVPN Log log-append /var/log/openvpn.log verb 3
保存して終了します。
OpenVPNの構成が作成されました。
このステップでは、ポートフォワーディングカーネルモジュールを有効にし、OpenVPNのルーティング「Firewalld」を構成します。
次のコマンドを実行して、ポート転送カーネルモジュールを有効にします。
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
次に、FirewalldforOpenVPNを使用してルーティングを構成します。
'openvpn'サービスをfirewalldlistサービスに追加し、'tun0'インターフェースをfirewalldトラステッドゾーンに追加します。
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
「trusted」ゾーンfirewalldで「MASQUERADE」を有効にします。
firewall-cmd --permanent --zone=trusted --add-masquerade
OpenVPN内部IPアドレス「10.10.1.0/24」から外部IPアドレス「SERVERIP」へのNATを有効にします。
SERVERIP=$(ip route get 84.200.69.80 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
そしてfirewalldをリロードします。
firewall-cmd --reload
ポートフォワーディングとFirewalldルーティングが完了しました。ここで、openvpnサービスを開始し、システムの起動時に毎回自動的に起動できるようにします。
systemctl start [email protected]
systemctl enable [email protected]
以下のコマンドを使用して確認してください。
netstat -plntu
systemctl status [email protected]
OpenVPNサーバーはudpプロトコルポート「1194」で稼働しています。
'/ etc / openvpn / client'ディレクトリに移動し、vimを使用して新しいopenvpnクライアント構成ファイル'client01.ovpn'を作成します。
cd /etc/openvpn/client
vim client01.ovpn
次のOpenVPNクライアント構成をそこに貼り付けます。
client dev tun proto udp remote 139.xx.xx.xx 1194 ca ca.crt cert client01.crt key client01.key cipher AES-256-CBC auth SHA512 auth-nocache tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 resolv-retry infinite
compress lzo
nobind persist-key persist-tun mute-replay-warnings verb 3
保存して終了します。
次に、「/ etc / openvpn /client」ディレクトリを「zip」または「tar.gz」ファイルに圧縮し、ローカルコンピュータからscpを使用して圧縮ファイルをダウンロードします。
'/ etc / openvpn/client'ディレクトリを'client01.tar.gz'ファイルに圧縮します。
cd /etc/openvpn/
tar -czvf client01.tar.gz client/*
scp [email protected]:/etc/openvpn/client01.tar.gz .
クライアントでのテスト。
-Linuxの場合
OpenVPNパッケージをインストールし、GUI構成が必要な場合は、OpenVPNnetwork-managerをインストールします。
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y
ターミナルシェルを使用して接続する場合は、以下のOpenVPNコマンドを実行してください。
openvpn --config client01.ovpn
OpenVPNに接続したら、[新しいターミナル]タブを開き、curlコマンドを使用して接続を確認します。
curl ifconfig.io
そして、OpenVPNサーバーのIPアドレスを取得します。
MacOSの場合
Tunnelblickをダウンロードしてインストールします。
'client01.tar.gz'ファイルを抽出し、'client'ディレクトリの名前を'client01.tblk'に変更します。
tar -xzvf client01.tar.gz
mv client client01.tblk
「client01.tblk」をダブルクリックすると、TunnelblickがOpenVPN構成を自動的に検出し、インポートします。
次に、トップバーのTunnelblickを介して接続します。
Windows用のopenvpnクライアントをダウンロードし、構成をインポートします。