Debian 11 /Debian10にOpenVPNサーバーをインストールする
system update
apt updateを実行します
Debian 11 /Debian10にOpenVPNをインストールする
OpenVPNパッケージは、デフォルトのDebian 11 /Debian10リポジトリで利用できます。
apt install openvpn -y
OpenVPN公開鍵インフラストラクチャを作成する
OpenVPNPKIを初期化します。 PKIの構成:
- サーバーと各クライアントの公開鍵と秘密鍵
- サーバーとクライアントの各証明書に署名するために使用されるマスター認証局(CA)の証明書とキー。
したがって、easy-rsa構成ディレクトリを別の場所にコピーして、将来のOpenVPNパッケージのアップグレードによって変更が上書きされないようにします。
cp -r /usr/share/easy-rsa /etc/
次に、PKIを初期化します。
cd /etc/easy-rsa/
./easyrsa init-pki
サンプルコマンド出力;
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/easy-rsa/pki
認証局(CA)の証明書とキーを作成する
次に、OpenVPNサーバーとクライアントの証明書に署名するためのCA証明書とキーを生成します。
cd /etc/easy-rsa/ ./easyrsa build-ca
これにより、CAキーのパスフレーズとサーバーの共通名の入力を求められます。
Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: Generating RSA private key, 2048 bit long modulus (2 primes) .............................................+++++ ...................................+++++ e is 65537 (0x010001) Can't load /etc/easy-rsa/pki/.rnd into RNG 139670192284800:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=/etc/easy-rsa/pki/.rnd You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:Kifarunix-demo CA CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /etc/easy-rsa/pki/ca.crt
CA証明書が生成され、/etc/easy-rsa/pki/ca.crt
に保存されます。 。
DiffieHellmanパラメーターの生成
OpenVPNサーバーと接続しているクライアント間のTLSハンドシェイク中にキー交換に使用されるDiffie-Hellmanキーを生成します。このコマンドは、Easy-RSAディレクトリ内で実行されています;
./easyrsa gen-dh
サイズ2048のDHパラメータは、/etc/easy-rsa/pki/dh.pem
。
OpenVPNサーバーの証明書とキーを生成する
OpenVPNサーバーの証明書と秘密鍵を生成するには、以下のコマンドを実行します;
cd /etc/easy-rsa
./easyrsa build-server-full server nopass
上記で作成したCAキーパスフレーズを入力して、証明書とキーを生成します。
nopass
パスフレーズの使用を無効にします。
出力例;
Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 Generating a RSA private key ........................................+++++ .......................................+++++ writing new private key to '/etc/easy-rsa/pki/private/server.key.MMFHTTtpKD' ----- Using configuration from /etc/easy-rsa/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Oct 10 18:23:08 2024 GMT (1080 days) Write out database with 1 new entries Data Base Updated
ハッシュベースのメッセージ認証コード(HMAC)キーを生成する
TLS / SSL事前共有認証キーは、DoS攻撃とUDPポートフラッディングを回避するために、すべてのSSL/TLSハンドシェイクパケットで追加のHMAC署名として使用されます。これは、コマンド;
openvpn --genkey secret /etc/easy-rsa/pki/ta.keyを使用して生成できます。
OpenVPN失効証明書を生成する
以前に署名された証明書を無効にするには、失効証明書を生成する必要があります。
Easy-RSAディレクトリ内でスクリプトを実行します;
./easyrsa gen-crl
失効証明書が生成され、/etc/easy-rsa/pki/crl.pem
に保存されます。 。
出力例;
Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 Using configuration from /etc/easy-rsa/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: An updated CRL has been created. CRL file: /etc/easy-rsa/pki/crl.pem
サーバー証明書とキーをサーバー構成ディレクトリにコピーする
生成されたすべてのサーバー証明書/キーをOpenVPNサーバー構成ディレクトリにコピーします。
cp -rp /etc/easy-rsa/pki/{ca.crt,dh.pem,ta.key,crl.pem,issued,private} /etc/openvpn/server/
OpenVPNクライアントの証明書とキーを生成する
OpenVPNクライアントの証明書と秘密鍵は次のように生成できます
cd /etc/easy-rsa
./easyrsa build-client-full koromicha nopass
- ここで
koromicha
証明書とキーが生成されるクライアントの名前です。 - 証明書とキーを生成するクライアントごとに、常に一意の共通名を使用してください。
コマンド出力の例;
Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019 Generating a RSA private key ...........................+++++ ...........................................................................................................................+++++ writing new private key to '/etc/easy-rsa/pki/private/koromicha.key.saAaE6L0tX' ----- Using configuration from /etc/easy-rsa/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/easy-rsa/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'koromicha' Certificate is to be certified until Oct 10 18:25:37 2024 GMT (1080 days) Write out database with 1 new entries Data Base Updated
2番目のクライアント用に生成するには、
./easyrsa build-client-full janedoe nopass
easyrsa
の使用方法を確認できます ./easyrsa --help
を使用したコマンド 。
クライアント証明書とキーをクライアントディレクトリにコピーする
OpenVPNクライアントディレクトリを作成します。たとえば、2つのクライアント、koromichaとjanedoeの証明書とキーファイルを生成したため、ディレクトリを次のように作成します。
mkdir /etc/openvpn/client/{koromicha,janedoe}
その後、クライアントが生成した証明書/キーとサーバーCA証明書をOpenVPNクライアント構成ディレクトリにコピーします。できます
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/koromicha.crt,private/koromicha.key} /etc/openvpn/client/koromicha
cp -rp /etc/easy-rsa/pki/{ca.crt,issued/janedoe.crt,private/janedoe.key} /etc/openvpn/client/janedoe/
Debian 11 /Debian10でOpenVPNサーバーを構成する
次のステップは、OpenVPNサーバーを構成することです。サンプルのOpenVPNサーバー構成を/etc/openvpn/server
にコピーします 以下に示すディレクトリ;
Debian10の場合;
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
構成を抽出します。
cd /etc/openvpn/server/ gunzip server.conf.gz
Debian11の場合;
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
構成ファイルserver.conf
を変更します 、ニーズに合わせて;
これは、コメントなしの構成のように見えます。
cp /etc/openvpn/server/server.conf{,.bak}
cat > /etc/openvpn/server/server.conf << 'EOL' port 1194 proto udp dev tun ca ca.crt cert issued/server.crt key private/server.key # This file should be kept secret dh dh.pem topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 8.8.8.8" client-to-client keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC comp-lzo persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1 auth SHA512 EOL
編集が完了したら、構成を保存して終了します。
OpenVPNIP転送の構成
クライアントからのトラフィックがOpenVPNサーバーのIPアドレスを介してルーティングされるようにするには(クライアントのIPアドレスをマスクするのに役立ちます)、OpenVPNサーバーでIP転送を有効にする必要があります。
行のコメントを解除します。net.ipv4.ip_forward=1
、/etc/sysctl.conf
IPv4のパケット転送を有効にするには
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
サーバーを再起動せずに変更を適用します。
sysctl -p
ファイアウォールを介したOpenVPNサービスポートを許可します。
ufw allow 1194/udp
UFWでIPマスカレードを設定する
パケットが送信されるデフォルトのインターフェースを見つけます。
ip route get 8.8.8.8
8.8.8.8 via 10.0.2.2 dev enp0s3 src 10.0.2.15 uid 0
次に、UFWルールを更新します;
vim /etc/ufw/before.rules
*filter
の直前に次の強調表示された行を追加します テーブル設定。使用するインターフェースは上記のインターフェース名と一致することに注意してください。
...
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o enp0s3 -j MASQUERADE
COMMIT
# Don't delete these required lines, otherwise there will be errors
*filter
...
構成を保存して終了します。
UFWパケット転送を有効にします;
sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw
UFWをリロードします;
ufw reload
Debian 11 /Debian10でOpenVPNサーバーを実行する
OpenVPNサーバーを起動して有効にし、システムの起動時に実行できるようにします。
systemctl enable --now [email protected]
ステータスの確認;
systemctl status [email protected]
● [email protected] - OpenVPN service for server Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-10-26 15:06:18 EDT; 9s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 1595 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 2359) Memory: 2.4M CGroup: /system.slice/system-openvpn\x2dserver.slice/[email protected] └─1595 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf Oct 26 15:06:18 debian systemd[1]: Starting OpenVPN service for server... Oct 26 15:06:18 debian systemd[1]: Started OpenVPN service for server.
OpenVPNサービスを実行すると、トンネリングインターフェイスtun0が作成されます;
ip add s
...
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::bf6a:bdf4:58e1:ec24/64 scope link stable-privacy
valid_lft forever preferred_lft forever
また、必ずログを確認してください;
tail /var/log/openvpn/openvpn.log
/sbin/ip link set dev tun0 up mtu 1500 /sbin/ip addr add dev tun0 10.8.0.1/24 broadcast 10.8.0.255 Could not determine IPv4/IPv6 protocol. Using AF_INET Socket Buffers: R=[212992->212992] S=[212992->212992] UDPv4 link local (bound): [AF_INET][undef]:1194 UDPv4 link remote: [AF_UNSPEC] MULTI: multi_init called, r=256 v=256 IFCONFIG POOL: base=10.8.0.2 size=252, ipv6=0 IFCONFIG POOL LIST Initialization Sequence Completed
これで、OpenVPNサーバーはクライアントからの接続を受け入れてルーティングする準備が整いました。
これで、Debian 11 /Debian10にOpenVPNサーバーをインストールする方法に関するガイドは終わりです。
これで、それに応じてクライアントを構成できます。
関連チュートリアル
CentOS 8 /Ubuntu18.04にOpenVPNクライアントをインストールして構成する
OpenVPNLDAPベースの認証を構成する
Ubuntu18.04でStrongSwanを使用してIPSECVPNを構成する