openvpn (ユーザー名パスワードモード)

目次

1. はじめに

1. 定義

2. 原則

3. 暗号化と認証

2. Centos 7.5 で openvpn を構築する

1. openvpn と easy-rsa をインストールします (このパッケージは CA 証明書の作成に使用されます)

2. /etc/openvpn/ ディレクトリを構成します

3. サーバー証明書とキーを作成する

4. クライアント証明書を作成する

5. サーバー側で必要なファイルを etc/openvpn/ ディレクトリに置きます

6. 必要なクライアント ファイルを root/client/ ディレクトリに置きます

7. サーバーの構成ファイルを作成します。

8. iptables は NAT ルールを設定し、ルート転送をオープンします

9.openvpnサービスを開きます

3. クライアントは openvpn に接続します

1. openvpn クライアントをダウンロードしてインストールします

2. クライアント構成ファイルを構成してインポートします。


1.はじめに

1. 定義

 OpenVPN は、仮想プライベート ネットワーク用の暗号化トンネルを作成するためのソフトウェア パッケージです。

2.原則

OpenVPNの技術的核心は仮想ネットワーク カードであり、その後にSSLプロトコルが実装されます。

仮想ネットワーク カードは、基盤となるネットワーク プログラミング テクノロジを使用して実装されるドライバー ソフトウェアです。このようなプログラムをインストールすると、非実際のネットワーク カードがホストに追加され、他のネットワーク カードと同様に構成できます。サービス プログラムはアプリケーション層で仮想ネットワーク カードを開くことができ、アプリケーション ソフトウェア (Web ブラウザなど) が仮想ネットワーク カードにデータを送信すると、サービス プログラムはそのデータを読み取ることができます。サービス プログラムが適切なデータを仮想ネットワーク カードに書き込むと、アプリケーション ソフトウェアもそれを受け取ることができます。仮想ネットワーク カードは多くのオペレーティング システムに実装されており、これがOpenVPN がプラットフォーム間で使用できる重要な理由です。

OpenVPN  では、ユーザーがリモート仮想アドレス (実際のアドレスとは異なる、仮想ネットワーク カードで使用されるアドレス シリーズに属する) にアクセスすると、オペレーティング システムはデータ パケット (TUN モード) またはデータ フレーム (TAP) を送信します。仮想ネットワークカード上では、サービス プログラムがデータを受信して​​対応する処理を実行した後、SOCKET を介して外部ネットワークからデータを送信します。これにより、一方向の転送プロセスが完了し、逆も同様です。リモートサービスプログラムがSOCKETを通じて外部ネットワークからデータを受信すると、対応する処理の後、それを仮想ネットワークカードに送り返し、アプリケーションソフトウェアはそれを受信できるようになります。

3.暗号化と認証

( 1 ) 暗号化

  OpenVPN は、OpenSSLライブラリを使用してデータを暗号化し、情報を制御します。つまり、OpenSSLでサポートされている任意のアルゴリズムを使用できます。接続のセキュリティを強化するためのオプションのパケットHMAC機能を提供します。さらに、OpenSSLのハードウェア アクセラレーションによってパフォーマンスも向上します。2.3.0以降のバージョンではPolarSSL が導入されています

( 2 ) 認証

OpenVPN は、両方の当事者の身元を確認するために、次のようなさまざまな認証方法を提供します。

事前共有秘密鍵

②第三者 証明書

③ユーザー 名とパスワードの組み合わせ

  事前共有キーは最も単純ですが、同時にポイントツーポイントVPNの作成にのみ使用できます。PKI に基づくサードパーティ証明書は最も完全な機能を提供しますが、追加のメンテナンスが必要です。PKI証明書システム。OpenVPN2.0 以降、ユーザー名とパスワードの組み合わせによる認証方式が導入され、クライアント証明書を省略できますが、暗号化にはサーバー証明書が必要になります。

2. Centos 7.5 でopenvpn を構築する

1. openvpneasy-rsaをインストールします(このパッケージはCA証明書の作成に使用されます)

( 1 ) epelウェアハウスソースをインストールする

yum install epel-release -y

( 2 ) openvpnをインストールする

[root@localhost ~]# yum -y install openvpn

( 3 ) githubで、最新のeasy-rsaをダウンロードします。

https://github.com/OpenVPN/easy-rsaダウンロードパッケージ  

②アップロード 、解凍

[root@localhost ~]# mkdir openvpn
[root@localhost  openvpn]# unzip easy-rsa-3.0.5.zip
[root@localhost  openvpn]# mv easy-rsa-3.0.5 easy-rsa

2. /etc/openvpn/ディレクトリを構成します

( 1 ) ディレクトリを作成し、easy-rsaディレクトリをコピーします。

[root@localhost  ~]# mkdir -p /etc/openvpn/
[root@localhost  openvpn]# cp -Rp easy-rsa /etc/openvpn/

( 2 ) varsファイルを設定、編集し、独自の環境に合わせて設定します

[root@localhost  test]# cd /etc/openvpn/easy-rsa/easyrsa3
[root@localhost  easyrsa3]# cp vars.example vars
[root@localhost  easy-rsa3]# vim vars (将下面6行写入文件)

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Beijing"
set_var EASYRSA_REQ_ORG         "username"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "My OpenVPN"

3.サーバー証明書とキーを作成する

/etc/openvpn/easy-rsa/easyrsa3/ディレクトリに入ります

①初期化 _

[root@localhost  ~]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@localhost  easyrsa3]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/easyrsa3/pki

ルート証明書を作成する

[root@localhost easyrsa3]# ./easyrsa build-ca

注: 上記の部分では、 PEMパスワードPEM パス フレーズを入力する必要があります。2回入力します。このパスワードは覚えておく必要があります。覚えておかないと、今後証明書に署名できなくなります。また、共通名を入力する必要があります。これは一意に設定できます。

サーバー側証明書を作成する

[root@localhost easyrsa3]# ./easyrsa gen-req サーバー nopass

このプロセスでは、共通名を入力する必要があります。これはオプションですが、前のルート証明書と同じではありません。

サーバー証明書に署名する

[root@localhost easyrsa3]# ./easyrsa 署名サーバー サーバー

このコマンドでは世代を確認し、「yes」と入力する必要があります。また、その時点でCAを作成したときのパスワードも指定する必要があります。パスワードを忘れた場合は最初からやり直します

⑤Diffie-Hellmanを作成して、キー安全でないネットワークのコマンドを通過することを保証します。

[root@localhost easyrsa3]# ./easyrsa gen-dh

4.クライアント証明書を作成する

ルートディレクトリに移動して新しいクライアントフォルダを作成し、任意の名前を付けます。次に、先ほど解凍して得たeasy-rasフォルダをクライアントフォルダにコピーし以下のディレクトリに入ります

[root@localhost  ~]# mkdir client
[root@localhost  ~]# cp /etc/openvpn/easy-rsa client -Rp
[root@localhost  ~]# cd client/easy-rsa/easyrsa3/

②初期化 _

[root@localhost easyrsa3]# ./easyrsa init-pki //確認するには「yes」と入力します

クライアントキーを作成し、証明書を生成します(クライアントログイン時に入力したパスワードを忘れずに生成してください)

 [root@localhost easyrsa3]# ./easyrsa gen-req username //名前は自分で定義します

取得したユーザー要求をインポートし、証明書に署名します

a. /etc/openvpn/easy-rsa/easyrsa3/に移動します。

[root@localhost easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/

b.輸入要求

[root@localhost  easyrsa3]# ./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/username.req username

c.署名証明書

[root@localhost easyrsa3]# ./easyrsa クライアントのユーザー名に署名します

注:クライアントはここで生成されるため、クライアントである必要がありユーザー名は以前にインポートされた名前と一致している必要があります。

上記の署名証明書はサーバーと同様であるため、スクリーンショットは撮りませんが、期間中はCAのパスワードを入力する必要があります。

5.サーバー側で必要なファイルをetc/openvpn/ディレクトリに置きます

CA証明書、サーバー証明書、秘密鍵

[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn/

6.必要なクライアント ファイルをroot/client/ディレクトリに置きます

クライアントの証明書、秘密キー、およびキー モードでログインする場合は、それをクライアントにコピーし、ログイン モードを変更します。この記事では、ログインにユーザー名とパスワードを使用します。

[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/client/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/username.crt /root/client/
[root@localhost  ~]# cp /root/client/easy-rsa/easyrsa3/pki/private/username.key /root/client

 クライアント構成ファイルにコピーするためにクライアント ca ファイルを表示します。

7.サーバーの構成ファイルを作成します。

( 1 ) openvpnをインストールすると、サーバー構成ファイルの例が提供されます。 /usr/share/doc/openvpn-2.4.11/sample/sample-config-filesの下にserver.confファイルがあるので、コピーします。このファイルを/etc/openvpnにコピーします

[root@localhost ~]# rpm -ql openvpn |grep server.conf

[root@localhost ~]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/

( 2 ) 設定ファイルを変更する

[root@localhost ~]# vim /etc/openvpn/server.conf

[root@localhost ~]# grep '^[^#|;]' /etc/openvpn/server.conf の変更は次のとおりです。

A. キー ログイン モード設定ファイルはあまり実用的ではないため、無視しても問題ありません。B 設定ファイルを使用してください。

local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3

B. ユーザー名とパスワードのログイン モード設定ファイル

local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3
script-security 3
auth-user-pass-verify /etc/openvpn/checkpw.sh via-env    #指定用户认证脚本
username-as-common-name
verify-client-cert none

( 3 ) ユーザーファイルの設定とスクリプトの確認

#检查脚本
[root@localhost ~]# vim /etc/openvpn/checkpw.sh 
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <[email protected]>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.

PASSFILE="/etc/openvpn/pw-file"
LOG_FILE="/var/log/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

###########################################################

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1


#密码文件
[root@localhost ~]# vim /etc/openvpn/pw-file 
user1 123456789
user2 haha2023

( 4 ) 権限を設定する

[root@localhost  ~]# mkdir /var/log/openvpn
[root@localhost  ~]# chown -R openvpn.openvpn /var/log/openvpn/
[root@localhost  ~]# chown -R openvpn.openvpn /etc/openvpn/*

8. iptables はNATルールを設定し、ルート転送をオープンします

[root@localhost  ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
[root@localhost  ~]# iptables -vnL -t nat
[root@localhost  ~]# vim /etc/sysctl.conf //打开路由转发
net.ipv4.ip_forward = 1
[root@localhost  ~]# sysctl -p

9.openvpnサービス開きます

[root@localhost  ~]# openvpn /etc/openvpn/server.conf &

[root@localhost ~]# netstat -ntlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      14948/openvpn       

3. クライアントはopenvpnに接続します

1. openvpnクライアントをダウンロードしてインストールします

https://download.csdn.net/download/zhangxueleishamo/87688762

ダウンロードしてインストールするだけです

2.クライアント構成ファイルを構成してインポートします。

client
proto tcp
remote 服务器ip 1194
dev tun
nobind
persist-key
persist-tun
cipher AES-128-GCM
verb 3
comp-lzo
auth-user-pass
<ca>
将上文二.6中ca密码在上文中有直接复制进来,即可
</ca>

 3.ログイン

4 番目、openvpn の最適化

1.ルーティングとDNSを構成する

openvpn のメイン設定ファイルにルートを追加します。クライアントが指定されたネットワーク セグメントにアクセスするときは、VPN 回線が使用されます。それ以外の場合は、VPN 回線のトラフィックを占有する不要な操作を避けるために、マシンの元のネットワークが使用されます。

dhcp を追加して DNS を自動的に取得し、イントラネット DNS を指定できます

push "route 10.0.0.0 255.0.0.0"
#push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 202.106.0.20"
push "dhcp-option DNS 94.140.14.14"

 2. 圧縮 comp-lzo を無効にする

comp-lzo 圧縮機能がサーバーとクライアントの両方で削除され、パフォーマンスが 2 ~ 4 倍向上しました

3. プロトコルを proto tcp--->proto udp port 21194 に変更します。

udp は tcp よりもはるかに高速であることは誰もが知っています。プロトコルとポート番号を変更すると、速度が向上するだけでなく、セキュリティも向上します。

port 21194
proto udp

4. 1 つのアカウントを複数のログイン用に構成する

duplicate-cn

5.エラー

1、サーバー証明書がありません

Fri Apr 14 17:49:21 2023 警告: サーバー証明書の検証方法が有効になっていません。詳細については、http://openvpn.net/howto.html#mitm を参照してください。
クライアント ファイルに追加することで解決しました

リモート証明書TLSサーバー

2. ファイルのインポート時にエラーが見つかりました: 外部証明書がありません

クライアントファイルに追加することで解決

client-cert-not-required 

おすすめ

転載: blog.csdn.net/zhangxueleishamo/article/details/130130211