GNU/Linux >> Linux の 問題 >  >> Ubuntu

Let’sEncryptを使用してUbuntu18.04 /16.04でOpenConnectVPNサーバー(ocserv)をセットアップします

このチュートリアルでは、 Ubuntu 16.04/18.04にOpenConnectVPNサーバーをインストールする方法を説明します。 。 OpenConnect VPNサーバー、別名 ocserv は、Cisco AnyConnnect VPNプロトコルのオープンソース実装であり、企業や大学で人気があります。 AnyConnectは、SSLベースのVPNプロトコルであり、個々のユーザーがリモートネットワークに接続できるようにします。

OpenConnect VPNサーバーの機能:

  • 軽量で高速。私のテストでは、OpenConnectVPNを使用して4kでYouTubeを視聴できます。私の国ではYouTubeがブロックされています。
  • CiscoAnyConnectクライアントと互換性があります
  • パスワード認証と証明書認証をサポートします
  • セットアップが簡単

他のVPNテクノロジーと比較して、エンドユーザーがOpenConnectVPNを使用するのは非常に簡単で便利であるという事実が特に気に入っています。コンピューターにDebianベースのLinuxディストリビューションをインストールして、Webサイトのブロックをすばやく解除したり、IPアドレスを非表示にしたりする場合は、OpenConnectクライアントをインストールし、2行のコマンドでサーバーに接続します。

sudo apt install openconnect

sudo openconnect -b vpn.mydomain.com

gnutls-bin ソフトウェアパッケージには、独自のCAおよびサーバー証明書を作成するためのツールが含まれていますが、Let’sEncrypt証明書を取得してインストールします。 Let’s Encrypt証明書を使用する利点は、VPNクライアントソフトウェアによって無料でセットアップが簡単で信頼できることです。

要件

このチュートリアルに従うには、ブロックされたWebサイトに自由にアクセスできるVPS(仮想プライベートサーバー)が必要です(国外またはインターネットフィルタリングシステム)。次の機能を備えたカマテラVPSをお勧めします:

  • 30日間の無料トライアル。
  • 月額4ド​​ル(1 GB RAM)から
  • 高性能KVMベースのVPS
  • 米国、カナダ、英国、ドイツ、オランダ、香港、イスリアルを含む世界中の9つのデータセンター。

以下にリンクされているチュートリアルに従って、KamateraでLinuxVPSサーバーを作成してください。

  • カマテラでLinuxVPSサーバーを作成する方法

Ubuntu 18.04を実行しているVPSを入手したら、以下の手順に従ってください。

OpenConnect VPNでHTTPSを有効にするには、ドメイン名も必要です。 NameCheapからドメイン名を登録したのは、価格が安く、whoisのプライバシー保護が一生無料になるからです。

ステップ1:Ubuntu 16.04/18.04にOpenConnectVPNサーバーをインストールする

Ubuntu 16.04/18.04サーバーにログインします。次に、aptを使用します ocservをインストールするには パッケージ。16.04以降Ubuntuリポジトリに含まれています。

sudo apt install ocserv

インストールすると、OpenConnectVPNサーバーが自動的に起動します。次のコマンドでステータスを確認できます:

systemctl status ocserv

サンプル出力:

● ocserv.service - OpenConnect SSL VPN server
   Loaded: loaded (/lib/systemd/system/ocserv.service; enabled; vendor preset: enabled
   Active: active (running) since Thu 2017-11-30 05:45:07 UTC; 11s ago
     Docs: man:ocserv(8)
 Main PID: 19235 (ocserv-main)
   CGroup: /system.slice/ocserv.service
           ├─19235 ocserv-main                                                  
           └─19242 ocserv-secm 

実行されていない場合は、次のコマンドで開始できます:

sudo systemctl start ocserv

デフォルトでは、OpenConnect VPNサーバーはTCPおよびUDPポート443でリッスンします。Webサーバーで使用されている場合、VPNサーバーを起動できません。 OpenConnectVPN構成ファイルでポートを変更する方法については後で説明します。

ステップ2:Let’s Encrypt Client(Certbot)をUbuntu 16.04/18.04サーバーにインストールする

次のコマンドを実行して、公式PPAから最新バージョンのcertbotをインストールします。 software-properties-common PPAからパッケージをインストールする場合は、が必要です。 Ubuntuサーバーにない可能性があります。

sudo apt install software-properties-common

sudo add-apt-repository ppa:certbot/certbot

sudo apt update

sudo apt install certbot

バージョン番号を確認するには、

を実行します
certbot --version

サンプル出力:

certbot 0.31.0

ステップ3:Let’sEncryptからTLS証明書を取得する

スタンドアロンプ​​ラグイン

Ubuntu 16.04 / 18.04サーバーで実行されているWebサーバーがなく、OpenConnect VPNサーバーでポート443を使用する場合は、スタンドアロンプ​​ラグインを使用してLet’sEncryptからTLS証明書を取得できます。次のコマンドを実行します。ドメイン名にAレコードを設定することを忘れないでください。

sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com

説明:

  • certonly :証明書を取得しますが、インストールしないでください。
  • --standalone :スタンドアロンプ​​ラグインを使用して証明書を取得します
  • --preferred-challenges http :http-01チャレンジを実行して、ポート80を使用するドメインを検証します。デフォルトでは、スタンドアロンプ​​ラグインはポート443を使用するtls-sniチャレンジを実行します。ポート443はOpenConnect VPNサーバーですでに使用されているため、変更する必要があります。デフォルトの動作。
  • --agree-tos :Let'sEncryptの利用規約に同意します。
  • --email :メールアドレスはアカウントの登録と復旧に使用されます。
  • -d :ドメイン名を指定してください。

次のスクリーンショットからわかるように、証明書を正常に取得しました。

webrootプラグインの使用

Ubuntu 16.04 / 18.04サーバーにポート80と443でリッスンするWebサーバーがあり、OpenConnect VPNサーバーで別のポートを使用する場合は、webrootプラグインを使用して証明書を取得することをお勧めします。これは、webrootプラグインがで動作するためです。ほとんどすべてのWebサーバーであり、Webサーバーに証明書をインストールする必要はありません。

まず、vpn.example.comの仮想ホストを作成する必要があります。

Apache

Apacheを使用している場合は、

sudo nano /etc/apache2/sites-available/vpn.example.com.conf

そして、次の行をファイルに貼り付けます。

<VirtualHost *:80>        
        ServerName vpn.example.com

        DocumentRoot /var/www/vpn.example.com
</VirtualHost>

ファイルを保存して閉じます。次に、Webルートディレクトリを作成します。

sudo mkdir /var/www/vpn.example.com

www-data(Apacheユーザー)をWebルートの所有者として設定します。

sudo chown www-data:www-data /var/www/vpn.example.com -R

この仮想ホストを有効にします。

sudo a2ensite vpn.example.com

変更を有効にするためにApacheをリロードします。

sudo systemctl reload apache2

仮想ホストを作成して有効にしたら、次のコマンドを実行して、webrootプラグインを使用してLet’sEncrypt証明書を取得します。

sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com

Nginx

Nginxを使用している場合は、

sudo nano /etc/nginx/conf.d/vpn.example.com.conf

次の行をファイルに貼り付けます。

server {
      listen 80;
      server_name vpn.example.com;

      root /var/www/vpn.example.com/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

ファイルを保存して閉じます。次に、Webルートディレクトリを作成します。

sudo mkdir -p /var/www/vpn.example.com

www-data(Nginxユーザー)をWebルートの所有者として設定します。

sudo chown www-data:www-data /var/www/vpn.example.com -R

変更を有効にするためにNginxをリロードします。

sudo systemctl reload nginx

仮想ホストを作成して有効にしたら、次のコマンドを実行して、webrootプラグインを使用してLet’sEncrypt証明書を取得します。

sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com

ステップ4:OpenConnectVPNサーバー構成ファイルの編集

ocserv構成ファイルを編集します。

sudo nano /etc/ocserv/ocserv.conf

まず、パスワード認証を構成します。デフォルトでは、PAM(Pluggable Authentication Modules)によるパスワード認証が有効になっています。これにより、Ubuntuシステムアカウントを使用してVPNクライアントからログインできます。この動作は、次の行をコメントアウトすることで無効にできます。

auth = "pam[gid-min=1000]"

ユーザーがシステムアカウントではなく別のVPNアカウントを使用してログインできるようにする場合は、次の行を追加して、パスワードファイルによるパスワード認証を有効にする必要があります。

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

この構成ファイルの編集が終了したら、ocpasswdの使用方法を確認します。 /etc/ocserv/ocpasswdを生成するためのツール ファイル。ユーザー名とエンコードされたパスワードのリストが含まれています。

:Ocservはクライアント証明書認証をサポートしていますが、Let’sEncryptはクライアント証明書を発行しません。クライアント証明書を発行するには、独自のCAを設定する必要があります。

次に、ocservでTCPおよびUDPポート443を使用したくない場合は、次の2行を見つけて、ポート番号を変更します。それ以外の場合はそのままにしておきます。

tcp-port = 443
udp-port = 443

次に、次の2行を見つけます。それらを変更する必要があります。

server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem
server-key = /etc/ssl/private/ssl-cert-snakeoil.key

デフォルト設定をLet’sEncryptサーバー証明書とサーバーキーファイルのパスに置き換えます。

server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem

次に、クライアントの最大数を設定します。デフォルトは16です。無制限の場合はゼロに設定します。

max-clients = 16

ユーザーが同時にログインできるデバイスの数を設定します。デフォルトは2です。無制限の場合はゼロに設定します。

max-same-clients = 2

次に、次の行を見つけます。 falseを変更します trueに VPNのパフォーマンスを最適化できるMTUディスカバリーを有効にします。

try-mtu-discovery = false

その後、デフォルトのドメインをvpn.example.comに設定します。

default-domain = vpn.example.com

IPv4ネットワーク構成はデフォルトで以下のとおりです。ほとんどのホームルーターもIPv4ネットワーク範囲を192.168.1.0/24に設定しているため、これにより問題が発生します。 。

ipv4-network = 192.168.1.0
ipv4-netmask = 255.255.255.0

別のプライベートIPアドレス範囲(10.10.10.0/24)を使用して、IPアドレスの衝突を回避できるため、ipv4-networkの値を変更します。 に

ipv4-network = 10.10.10.0

次の行のコメントを解除して、VPN経由ですべてのDNSクエリをトンネリングします。

tunnel-all-dns = true

DNSリゾルバアドレスを変更します。 GoogleのパブリックDNSサーバーを使用できます。

dns = 8.8.8.8

:特にVPNプロバイダーの場合は、同じサーバーで独自のDNSリゾルバーを実行することをお勧めします。同じサーバーで実行されているDNSリゾルバーがある場合は、DNSを次のように指定します

dns = 10.10.10.1

10.10.10.1は、VPNLAN内のOpenConnectVPNサーバーのIPアドレスです。これにより、VPNサーバーとDNSリゾルバー間のネットワーク遅延が排除されるため、クライアントのDNSルックアップが少し高速化されます。

次に、すべてのルートパラメータをコメントアウトします(次の4行の先頭に#記号を追加します)。これにより、サーバーがクライアントのデフォルトゲートウェイとして設定されます。

route = 10.10.10.0/255.255.255.0
route = 192.168.0.0/255.255.0.0
route = fef4:db8:1000:1001::/64

no-route = 192.168.5.0/255.255.255.0

ファイルを保存して閉じます。次に、VPNサーバーを再起動して、変更を有効にします。

sudo systemctl restart ocserv

ステップ5:DTLSハンドシェイクの失敗を修正する

Ubuntu16.04およびUbuntu18.04では、ocservデーモンocserv.socket 構成ファイルの「listen-host」値を尊重しません。これにより、クライアントがVPNサーバーに接続するときに次のエラーが発生します。

DTLS handshake failed: Resource temporarily unavailable, try again.

このエラーを修正するには、ocserv.serviceファイルを編集する必要があります。まず、元のファイルを/lib/systemd/system/にコピーします。 /etc/systemd/system/へのディレクトリ 新しいバージョンのocservパッケージで変更を上書きしたくないので、ディレクトリを編集してから編集します。 (systemdユニットファイルの詳細については、man systemd.unitを実行してください。 。)

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service
sudo nano /etc/systemd/system/ocserv.service

次の2行をコメントアウトします。

Requires=ocserv.socket

Also=ocserv.socket

ファイルを保存して閉じます。次にsystemdをリロードします

sudo systemctl daemon-reload

ocserv.socketを停止し、無効にします。

sudo systemctl stop ocserv.socket

sudo systemctl disable ocserv.socket

ocservサービスを再起動します。

sudo systemctl restart ocserv.service

ocserv systemdサービスは、再起動に失敗してもメッセージを出力しないため、ステータスをチェックして、実際に実行されていることを確認する必要があります。

systemctl status ocserv

ステップ6:VPNアカウントの作成

次に、ocpasswdツールを使用してVPNアカウントを生成します。

sudo ocpasswd -c /etc/ocserv/ocpasswd username

ユーザーのパスワードを設定するように求められ、情報は/etc/ocserv/ocpasswdに保存されます。 ファイル。パスワードをリセットするには、上記のコマンドをもう一度実行します。

ステップ7:IP転送を有効にする

VPNサーバーがVPNクライアントと外部との間でパケットをルーティングするには、IP転送を有効にする必要があります。 sysctl.confを編集します ファイル。

sudo nano /etc/sysctl.conf

このファイルの最後に次の行を追加します。

net.ipv4.ip_forward = 1

ファイルを保存して閉じます。次に、以下のコマンドで変更を適用します。 -p オプションは、 /etc/sysctl.confからsysctl設定をロードします ファイル。このコマンドは、システムを再起動しても変更を保持します。

sudo sysctl -p

ステップ8:IPマスカレード用にファイアウォールを構成する

サーバーがVPNクライアントの仮想ルーターになるように、サーバーファイアウォールでIPマスカレードを設定する必要があります。 iptablesファイアウォールのフロントエンドであるUFWを使用します。以下を使用してUbuntuにUFWをインストールします:

sudo apt install ufw

まず、SSHトラフィックを許可する必要があります。

sudo ufw allow 22/tcp

次に、サーバーのメインネットワークインターフェースの名前を見つけます。

ip addr

ご覧のとおり、ens3という名前です。 私のUbuntuサーバーで。

IPマスカレードを設定するには、UFW設定ファイルにiptablesコマンドを追加する必要があります。

sudo nano /etc/ufw/before.rules

デフォルトでは、filterにはいくつかのルールがあります テーブル。このファイルの最後に次の行を追加します。 ens3を置き換えます 独自のネットワークインターフェイス名を使用します。

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Nanoテキストエディタでは、Ctrl+Wを押すと、ファイルの最後に移動できます。 、次にCtrl+Vを押します 。

上記の行が追加されます( -A POSTROOUTINGの最後までのルール natのチェーン テーブル。仮想プライベートネットワークをインターネットにリンクします。また、ネットワークを外界から隠します。そのため、インターネットはVPNサーバーのIPしか見ることができませんが、ホームルーターがプライベートホームネットワークを隠すように、VPNクライアントのIPを見ることができません。

デフォルトでは、UFWはパケット転送を禁止しています。プライベートネットワークの転送を許可できます。 ufw-before-forwardを見つけます このファイルにチェーンを追加し、次の3行を追加します。これは、送信元IPまたは宛先IPが10.10.10.0/24にある場合にパケット転送を受け入れます。 範囲。

# allow forwarding for trusted network
-A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT

ファイルを保存して閉じます。次に、UFWを有効にします。

sudo ufw enable

以前にUFWを有効にしたことがある場合は、systemctlを使用してUFWを再起動できます。

sudo systemctl restart ufw

ここで、次のコマンドを使用して、NATテーブルのPOSTROUTINGチェーンにルールをリストするとします。

sudo iptables -t nat -L POSTROUTING

仮面舞踏会のルールを見ることができます。

ステップ9:ファイアウォールでポート443を開く

次のコマンドを実行して、TCPおよびUDPポート443を開きます。ocservに別のポートを構成した場合は、443を構成済みのポートに変更します。

sudo ufw allow 443/tcp
sudo ufw allow 443/udp

これで、OpenConnectVPNサーバーはクライアント接続を受け入れる準備ができました。

VPNクライアントのDNSサーバーとして10.10.10.1を指定した場合は、VPNクライアントが次のUFWルールを使用してポート53に接続できるようにする必要があります。

sudo ufw insert 1 allow in from 10.10.10.0/24

また、VPNクライアントが以下のような再帰DNSクエリを送信できるように、BINDDNSサーバーの構成を編集する必要があります。

allow-recursion { 127.0.0.1; 10.10.10.0/24; };

Ubuntu 16.04/18.04デスクトップにOpenConnectVPNクライアントをインストールして使用する方法

次のコマンドを実行して、OpenConnectVPNコマンドラインクライアントをUbuntuデスクトップにインストールします。

sudo apt install openconnect

以下のようにコマンドラインからVPNに接続できます。 -b フラグは、接続が確立された後、バックグラウンドで実行されます。

sudo openconnect -b vpn.example.com:port-number

VPNユーザー名とパスワードの入力を求められます。接続が正常に確立されると、次のメッセージが表示されます。

Got CONNECT response: HTTP/1.1 200 CONNECTED
CSTP connected. DPD 90, Keepalive 32400
Connected tun0 as 192.168.1.139, using SSL
Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM).

接続を停止するには、次のコマンドを実行します:

sudo pkill openconnect

クライアントを非対話的に実行するには、次の構文を使用します。

echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin

Network Managerを使用してVPN接続を管理する場合は、これらのパッケージもインストールする必要があります。

sudo apt install network-manager-openconnect network-manager-openconnect-gnome

VPNサーバーに正常に接続しても、パブリックIPアドレスが変更されない場合は、IP転送またはIPマスカレードが機能していないことが原因です。 iptablesコマンドにタイプミスがあったため、コンピューターがインターネットを閲覧できなくなったことがあります。

システム起動時の自動接続

OpenConnect VPNクライアントが起動時にサーバーに自動的に接続できるようにするために、systemdサービスユニットを作成できます。

sudo nano /etc/systemd/system/openconnect.service

次の行をファイルに追加します。赤いテキストを置き換えます。

[Unit]
  Description=OpenConnect VPN Client
  After=network-online.target systemd-resolved.service
  Wants=network-online.target

[Service]
  Type=simple
  ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin'
  ExecStop=/bin/bash -c '/sbin/resolvconf -d tun0 && /usr/bin/pkill -SIGINT openconnect && /sbin/ip route flush 12.34.56.78'
  Restart=always
  RestartSec=2

[Install]
  WantedBy=multi-user.target

ファイルを保存して閉じます。次に、このサービスを有効にして、起動時に開始されるようにします。

sudo systemctl enable openconnect.service

ファイルの内容の説明:

  • After=network-online.target systemd-resolved.service およびWants=network-online.target ネットワークが起動した後にこのサービスを実行します。 openconnect.serviceが必要です systemd-resolved.serviceの後に開始します これにより、OpenConnectによって設定されたDNSサーバーアドレスがsystemd-resolved.serviceによって上書きされないようになります。 。
  • 実際には、このサービスはネットワークが起動する前でも実行できます。 Restart=alwaysを追加します およびRestartSec=2 このサービスが失敗した場合、2秒後にこのサービスを再起動します。
  • Systemdはパイプのリダイレクトを認識しないため、ExecStart ディレクティブでは、コマンドを一重引用符で囲み、Bashシェルで実行します。
  • OpenConnect VPNクライアントはバックグラウンドで実行されるsystemdサービスとして実行されるため、-bを追加する必要はありません。 openconnectへのフラグ コマンド。
  • ExecStop ディレクティブはVPN接続を停止するためのものです。まず、resolvconfを使用します DNSサーバー設定を元に戻すコマンド。 tun0 はTUNデバイスのデフォルト名であり、ip linkで確認できます。 指図。次に、pkillを使用します openconenctを停止するコマンド 処理する。最後に、ip route flushを使用してLinuxカーネルルーティングテーブルを復元します。 指図。 12.34.56.78を置き換えます VPNサーバーのIPアドレスを使用します。

このSystemdサービスをすぐに開始するには、

を実行します
sudo systemctl start openconnect

このSystemdサービスを停止するには、

を実行します
sudo systemctl stop openconnect

自動-VPN接続が切断されたときに再起動

さまざまな理由でVPN接続が切断されることがありました。 VPNクライアントを自動的に再起動するには、rootユーザーのcrontabファイルを編集します。

sudo crontab -e

このファイルの最後に次の行を追加します。

* * * * * ping -c 10 10.10.10.1 > /dev/null || systemctl restart openconnect

このCronジョブは毎分実行され、VPNクライアントがVPNサーバーのプライベートIPアドレス(10.10.10.1)にpingできるかどうかを確認します。 pingが失敗した場合は、右側のコマンドが実行され、VPNクライアントが再起動されます。 || BashのOR演算子です。左側のコマンドがエラーを返した場合にのみ、右側のコマンドを実行します。

ファイルを保存して閉じます。

WindowsおよびMacOS用のOpenConnectGUIクライアント

OpenConnectGUIGithubページからダウンロードできます。

速度

OpenConnectVPNはかなり高速です。 YouTubeで4k動画を視聴するために使用できます。ご覧のとおり、接続速度は 63356 Kbpsです。 、これは 61 Mbit / sに変換されます 。

そして、これがspeedtest.netでのテスト結果です。

速度の最適化

OpenConnectは、デフォルトでTLS over UDPプロトコル(DTLS)を使用して高速化を実現しますが、UDPは信頼性の高い伝送を提供できません。 TCPはUDPよりも低速ですが、信頼性の高い伝送を提供できます。最適化のヒントの1つは、DTLSを無効にし、標準TLS(TCP経由)を使用してから、TCPBBRを有効にしてTCP速度を上げることです。

DTLSを無効にするには、ocserv構成ファイルの次の行をコメントアウトします(先頭に#記号を追加します)。

udp-port = 443

ファイルを保存して閉じます。次に、ocservサービスを再起動します。

sudo systemctl restart ocserv.service

TCP BBRを有効にするには、次のチュートリアルを確認してください。

  • TCPBBRを有効にしてUbuntuネットワークのパフォーマンスを簡単に向上させる方法

私のテストでは、TCPBBRが有効になっている標準のTLSはDTLSの2倍高速です。

Let'sEncrypt証明書の自動更新

rootユーザーのcrontabファイルを編集します。

sudo crontab -e

ファイルの最後に次の行を追加します。 VPNサーバーが新しい証明書とキーファイルを取得するには、ocservサービスを再起動する必要があります。

@daily certbot renew --quiet && systemctl restart ocserv

トラブルシューティングのヒント

OpenVZ VPSを使用している場合は、VPSコントロールパネルでTUN仮想ネットワークデバイスが有効になっていることを確認してください。

問題が発生した場合は、OpenConnectVPNサーバーのログを確認してください。

sudo journalctl -xe -u ocserv.service

ポート443を別のポートに変更すると、中国のグレートファイアウォールがこのVPN接続をブロックすることがわかりました。

ocservが/etc/ocserv/ocserv.confを読み込めないと言った場合 ファイル、ocservを停止できます。

sudo systemctl stop ocserv

次に、デバッグを有効にしてフォアグラウンドで実行します。

sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10

次に、出力により、ocservが機能しない理由の手がかりが得られる可能性があります。

OpenConnectVPNサーバーとWebサーバーが同時にポート443を使用できるようにします

次の記事をお読みください:

  • HAProxyを使用して同じボックスでOpenConnectVPNサーバーとApache/Nginxを実行する

ocservでTLS1.0とTLS1.1を無効にする方法

PCI評議会は2018年6月30日にTLS1.0を廃止し、メインストリームのWebブラウザは2020年にTLS1.0とTLS1.1を無効にする予定です。VPNサーバーでも同じことを行う必要があります。メインの構成ファイルを編集します。

sudo nano /etc/ocserv/ocserv.conf

次の行を見つけます:

tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0"

OpenConnectVPNサーバーでTLS1.0およびTLS1.1を無効にするには、-VERS-TLS1.0を追加するだけです。 および-VERS-TLS1.1 行に。

tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1"

ファイルを保存して閉じます。次に、ocservを再起動します。

sudo systemctl restart ocserv

現在、ocservはTLS1.2のみを受け入れます。 ocservでのTLSパラメータの設定の詳細については、GnuTLS優先度文字列を参照してください。

OpenConnectVPNサーバーでTLS1.0がサポートされているかどうかを確認するには、次のコマンドを実行します。

openssl s_client -connect vpn.your-domain.com:443 -tls1

そしてTLS1.1を確認してください

openssl s_client -connect vpn.your-domain.com:443 -tls1_1

出力に次のメッセージが表示された場合は、TLSバージョンがサポートされていないことを意味します。

New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported

TLS 1.3を有効にしようとしましたが、Ubuntuのocservパッケージではまだサポートされていません。

ユーザーごとまたはグループごとの構成

Ocservでは、ユーザーごとおよびグループごとの構成が可能です。この機能を有効にするには、/etc/ocserv/ocserv.confの次の2行のコメントを解除します ファイル。

config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/

ファイルを保存して閉じます。次に、ユーザーごとおよびグループごとの構成ディレクトリを作成します。

sudo mkdir /etc/ocserv/config-per-user/
sudo mkdir /etc/ocserv/config-per-group/

次に、これら2つのディレクトリの下にファイルを作成できます。たとえば、user1を作成します user1のカスタム構成を許可するファイル 。

sudo nano /etc/ocserv/config-per-user/user1

group1を作成することもできます group1という名前のグループのカスタム構成を許可するファイル 。

sudo nano /etc/ocserv/config-per-group/group1

以下のようなものをファイルに追加できます。

route = 10.10.10.0/255.255.255.0

これは、user1の後を意味します このVPNサーバーに接続し、10.10.10.0/24へのトラフィックのみ ネットワークはVPNサーバー経由でルーティングされます。他のIPアドレスへのトラフィックは、元のゲートウェイを介してルーティングされます。このトリックを使用して、別のVPS(仮想プライベートサーバー)が通常のトラフィックを中断することなくこのVPNサーバーに接続できるようにするため、VPNサーバーのtunデバイス(vpns0)は常にオンになります。つまり、VPNサーバーには常にプライベートIPアドレス10.10.0.1。

ファイルを保存して閉じます。変更を有効にするには、ocservを再起動します。

sudo systemctl restart ocserv

仮想ホスティング

ocservに新しい仮想ホストを追加するには、最初に手順3の方法を使用して、新しい仮想ホストのTLS証明書を取得する必要があります。次に、ocserv構成ファイルを編集します。

sudo nano /etc/ocserv/ocserv.conf

このファイルの最後に移動します。 Nanoテキストエディタでは、Ctrl+Wを押すことができます 、次にCtrl+V ファイルの最後にジャンプします。次の行を追加します。 vpn2.example.comを置き換えます 2番目の仮想ホストのホスト名を使用します。

[vhost:vpn2.example.com]
#Allow password authentication and certificate authentication
enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]"
auth = "certificate"

tcp-port = 443

#uncomment the two lines if ocserv runs behind HAProxy.
#listen-host = 127.0.0.1
#listen-proxy-proto = true

# SSL/TLS configuration
ca-cert = /etc/ocserv/ssl/ca-cert.pem
server-cert = /etc/letsencrypt/live/vpn2.example.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn2.example.com/privkey.pem
cert-user-oid = 0.9.2342.19200300.100.1.1

#Networking configuration. Use a different network range for this virtual host. 
device = vpns
ipv4-network = 10.10.20.0
ipv4-netmask = 255.255.255.0
route = default
dns = 8.8.8.8
tunnel-all-dns = true

compression = true
max-clients = 0
max-same-clients = 0
try-mtu-discovery = true
idle-timeout=1200
mobile-idle-timeout=2400

config-per-user = /etc/ocserv/config-per-user/
config-per-group = /etc/ocserv/config-per-group/

ファイルを保存して閉じます。次に、ocservを再起動します。

sudo systemctl restart ocserv

UFW構成ファイルを編集します。

sudo nano /etc/ufw/before.rules

ufw-before-forwardを見つけます このファイルにチェーンを追加し、次の2行を追加します。これは、送信元IPまたは宛先IPが10.10.20.0/24にある場合にパケット転送を受け入れます。 範囲。

-A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT
-A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT

ファイルを保存して閉じます。次にUFWを再起動します。

sudo systemctl restart ufw

ocservデーモンは、仮想ホストでは一部のパラメーターが無視されることを通知する場合があることに注意してください。ただし、無視されたパラメータのいくつかが実際に必要であることがわかりました。たとえば、device = vpnsを削除した場合 仮想ホストからの回線では、仮想ホストへのVPN接続を確立するときに次のエラーが発生する可能性があります。

VPN service unavailable; reason: Server configuration error

また、VPNサーバーはログに次のエラーメッセージを生成します。

no networks are configured; rejecting client

注意 iOS上のAnyConnectVPNクライアントはTLSSNIをサポートしていないため、iOSユーザーはデフォルトの仮想ホストに接続します。

ocservの複数のインスタンスを実行する方法

1つのocservプロセスは、サーバー上の1つのTCPまたはUDPポートにのみバインドできます。 ocservが複数のTCPまたはUDPポートにバインドできるようにする場合は、複数のocservプロセスを実行する必要があります。とても簡単です。 /lib/systemd/system/ocserv.serviceをコピーします 新しいファイルに。

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service

次に、新しいファイルを編集します。

sudo nano /etc/systemd/system/ocserv2.service

変更

/etc/ocserv/ocserv.conf

/etc/ocserv/ocserv2.conf

ファイルを保存して閉じます。次に、/etc/ocserv/ocserv2.confを編集できます ファイルを作成し、カスタム構成を追加します。完了したら、2番目のocservサービスを開始します。

sudo systemctl start ocserv2

Ubuntu
  1. UbuntuでWireGuardVPNを設定する方法(ステップバイステップガイド)

  2. Ubuntu22.04でStrongSwanを使用してIKEv2VPNサーバーをセットアップする方法

  3. Ubuntu18.04でLet'sEncryptを使用してNginxを保護する-その方法は?

  1. Debian 11BullseyeでOpenConnectVPNサーバー(ocserv)をセットアップする

  2. Debian 10BusterでOpenConnectVPNサーバー(ocserv)をセットアップする

  3. OpenConnect VPNサーバー(ocserv)での証明書認証の設定

  1. Ubuntu20.04でPleskを使用してEメールサーバーを設定する方法

  2. UbuntuでPure-FTPdを使用して安全なFTPサーバーをセットアップする方法

  3. Ubuntu 20.04/18.04で独自のWireGuardVPNサーバーをセットアップする