リモートワーク・テレワークの普及で、社外から社内システムに安全にアクセスするためのVPN需要は急速に高まっている。なかでも「OpenVPN」はオープンソースの老舗SSL VPNとして、長年にわたって企業・エンジニアに使われてきた実績がある。
しかし「インストールはできたが、セキュリティ設定が不安」「証明書の管理方法がわからない」というつまずきは多い。設定ファイルのデフォルト値には、現代の基準では推奨されない暗号スイートが残っている場合もある。
この記事では、LinuxへのOpenVPNサーバー構築を、CA(認証局)の構築から証明書管理・ファイアウォール設定・セキュリティ強化まで、現場で使えるレベルで解説する。

OpenVPNとは?SSL VPNの概要と特徴
OpenVPNは、OpenSSL(TLSライブラリ)をベースにした仮想プライベートネットワーク(VPN)ソフトウェアだ。2001年に公開されたオープンソースプロジェクトで、LinuxをはじめWindows・macOS・iOS・Androidと幅広いプラットフォームに対応している。
主な特徴は以下のとおりだ。
・SSL/TLSによる通信暗号化: 通信路全体をTLS 1.2/1.3で保護し、第三者による傍受を防ぐ
・証明書ベースの認証: PKI(公開鍵基盤)を使いサーバー・クライアント双方を相互認証できる
・ポート制約の少なさ: UDP 1194番ポートが標準だが、TCP 443でHTTPS経由の通信も可能。ファイアウォールの制約が厳しい環境でも通信を通しやすい
・サイトツーサイトとリモートアクセス両対応: 拠点間VPNと、外出先のPCからオフィスへのリモートアクセスVPN、どちらにも使える
・豊富なクライアントエコシステム: 多くのVPNサービスがOpenVPNプロトコルをサポートし、サードパーティクライアントも充実している
PKI・デジタル証明書の仕組みについては、PKI(公開鍵基盤)とは?認証局・信頼チェーン・デジタル証明書の仕組みをわかりやすく解説も参考にしてほしい。
IPsec VPN・WireGuardとの違い
VPNプロトコルはOpenVPNだけではない。現在よく使われる3つを簡単に整理する。
| プロトコル | 暗号化基盤 | 速度 | 設定の複雑さ | クライアント対応幅 |
|---|---|---|---|---|
| OpenVPN | OpenSSL(TLS) | 中 | 中(設定項目多い) | 非常に広い |
| IPsec(IKEv2) | カーネル組み込み暗号 | 速い | 高(PKI必須、設定複雑) | OS標準対応が多い |
| WireGuard | 最新暗号のみ(固定) | 最速 | 低(設定がシンプル) | 広がりつつある |
OpenVPNの優位点は「歴史的な実績と幅広いクライアント対応」だ。古い端末・業務制限のある環境・既存のVPNサービスが多くOpenVPNをサポートしている。一方、新規構築でシンプルさと速度を優先するならWireGuardが選択肢になる。
・WireGuard入門|OpenVPNより速くて設定が簡単な現代のVPNをLinuxに構築する実践ガイド
・IPsecとは?VPNプロトコルの仕組み・モード・拠点間VPN設定を現場目線で解説
OpenVPNサーバーの構築手順(Ubuntu 22.04 LTS)
以下はUbuntu 22.04 LTSへのOpenVPNサーバー構築の実践手順だ。rootまたはsudo権限で実行する。
1. OpenVPNとEasy-RSAのインストール
# パッケージ更新とインストール sudo apt update sudo apt install -y openvpn easy-rsa
Easy-RSAはOpenVPN付属の証明書管理ツールで、CA(認証局)の構築から証明書の発行・失効まで一貫して操作できる。
2. Easy-RSAでCA(認証局)を構築する
# Easy-RSA作業ディレクトリを作成 make-cadir ~/openvpn-ca cd ~/openvpn-ca # vars ファイルを編集して組織情報を設定 # 変更点: set_var EASYRSA_REQ_ORG, EASYRSA_REQ_EMAIL 等を実際の値に変更する nano vars # PKIを初期化してCAを構築(CAパスフレーズは必ず設定し、安全に保管すること) ./easyrsa init-pki ./easyrsa build-ca
CAの秘密鍵(ca.key)の保管について: CAはオフライン端末に保管し、証明書発行時だけ使用する「オフラインCA」が理想だ。サーバー上に置く場合は、少なくともca.keyのファイル権限を600に設定し、rootのみがアクセスできる場所に保管してほしい。
3. サーバー証明書・DH・TLSキーの生成
# サーバー証明書(パスフレーズなし = サービス自動起動のため) ./easyrsa gen-req server nopass ./easyrsa sign-req server server # Diffie-Hellmanパラメーター(PFS=前方秘匿性を支える鍵交換用) ./easyrsa gen-dh # TLS認証キー(tls-cryptに使用) openvpn --genkey secret pki/ta.key
DH(Diffie-Hellman)パラメーターの生成にはCPUによっては数分かかることがある。
4. サーバー設定ファイル(server.conf)
# /etc/openvpn/server/server.conf port 1194 proto udp dev tun # 証明書・鍵ファイルのパス(実際のパスに変更すること) ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem # 変更点: tls-authよりtls-cryptを推奨(認証前パケットを暗号化できる) tls-crypt /etc/openvpn/server/ta.key # ネットワーク設定 server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 8.8.8.8" # セキュリティ設定 # 変更点: AES-256-CBCよりGCMを推奨(認証付き暗号化) cipher AES-256-GCM tls-version-min 1.2 ncp-ciphers AES-256-GCM:AES-256-CBC # 変更点: 圧縮は無効にする(VORAACLEサイドチャネルリスク低減) # compress / comp-lzo は記述しない # プロセス権限を降格(rootから一般ユーザーへ) user nobody group nogroup # ログ status /var/log/openvpn/status.log log-append /var/log/openvpn/openvpn.log verb 3
5. ファイアウォールとIPフォワーディングの設定
# IPフォワーディングを永続的に有効化 sudo sysctl -w net.ipv4.ip_forward=1 echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-openvpn.conf sudo sysctl -p /etc/sysctl.d/99-openvpn.conf # UFWでOpenVPNポートを許可 sudo ufw allow 1194/udp # NATマスカレード設定(eth0は実際のネットワークインターフェース名に置き換える) sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # サービスを有効化・起動 sudo systemctl enable --now openvpn-server@server
firewalldを使っているRHEL/AlmaLinux/Rocky Linux系環境では、firewalldの設定入門|ゾーン・ルール・ポート制御でLinuxを守る方法を参照してほしい。
6. クライアント証明書の発行と.ovpnファイルの作成
# クライアント証明書の発行(ユーザーごとに個別発行すること) cd ~/openvpn-ca ./easyrsa gen-req client01 nopass ./easyrsa sign-req client client01
生成されたclient01.crt・client01.keyとCA証明書(ca.crt)・ta.keyを組み込んだ.ovpnファイルをユーザーに配布する。.ovpnファイルには秘密鍵が含まれるため、メールでの配布は避け、SFTPや社内ファイルサーバー等の安全な経路で配布すること。
セキュリティ強化のポイント
1. tls-cryptで認証前トラフィックを保護する
tls-auth(HMACシグネチャのみ)より強力なtls-crypt(対称暗号+HMAC)を使うことで、VPNサーバーへの認証前パケット自体を暗号化できる。正規のクライアント以外からの接続試行を早い段階で切り捨てられるため、DoSやポートスキャンへの耐性が上がる。
2. 証明書失効リスト(CRL)を運用する
# クライアント証明書を失効させる手順 cd ~/openvpn-ca ./easyrsa revoke client01 ./easyrsa gen-crl # 生成したCRLをOpenVPNが参照できる場所に配置 sudo cp pki/crl.pem /etc/openvpn/server/crl.pem # server.conf に以下を追加してCRLを有効化 # crl-verify /etc/openvpn/server/crl.pem
退職者や端末紛失時に証明書を失効させることで、旧クライアント証明書を使ったアクセスを遮断できる。CRLは有効期限があるため、cronなどで定期的に再生成する運用が必要だ。
3. 接続元の監視とfail2ban連携
/var/log/openvpn/openvpn.logに接続ログが記録される。認証失敗の多発・短時間の繰り返し接続試行は不正アクセスの兆候だ。fail2ban完全ガイド|ブルートフォース攻撃を自動ブロックするLinuxサーバー不正アクセス対策を参考に、OpenVPNのログをfail2banで監視するフィルターを設定すると、総当たり接続試行を自動ブロックできる。
4. keep-alive設定と再接続挙動の安全化
# server.conf に追加するkeep-alive設定 keepalive 10 120 # 10秒ごとにpingを送り、120秒応答なしで再接続 persist-key # 再接続時に鍵をメモリに保持(権限降格後も動作するため) persist-tun # 再接続時にTUNデバイスを維持
中小企業でも今日からできること
専任のセキュリティ担当が不在な中小企業でも、OpenVPNのセキュリティを高めるために今日から取り組めることがある。
・既存設定の暗号スイート確認: cipher AES-256-GCMとtls-version-min 1.2が設定されているか確認し、なければ追加する
・tls-cryptへの切り替え: tls-authをtls-cryptに変更するだけで追加の保護層が得られる(サーバー・クライアント双方の設定変更が必要)
・圧縮設定の無効化: compressまたはcomp-lzoの記述があれば削除する
・退職者証明書の失効フロー整備: 「退職時には必ずVPN証明書を失効させる」というルールを情シスの業務フローに組み込む
・1ユーザー1証明書の徹底: 複数人で.ovpnを共有している場合は、個別発行に切り替える
Linuxサーバーの全般的なセキュリティ設定については、姉妹サイトLinuxMaster.JPでも詳しく解説している。
よくある誤解と注意点
【注意】「ポートを変えれば安全」ではない
一般的によくある考えとして、「1194番ポートを変えれば攻撃されにくい」という認識がある。ポートの変更は総当たりスキャンの一部を減らす効果はあるが、本質的な対策ではない。証明書ベースの認証・強固な暗号スイート・TLSバージョン制限が揃ってはじめて安全なVPNになる。
【注意】クライアント証明書の共有は危険
「全社員に同じ.ovpnファイルを配布した」というケースはよくあるつまずきだ。証明書を共有すると、誰がVPNに接続しているか特定できなくなり、不要になった証明書の失効も全員に影響する。必ず1ユーザー1証明書の原則を守ること。
【注意】comp-lzo(圧縮)は新規構築で有効にしない
古いOpenVPNのガイドや設定例ではcomp-lzoが記載されていることがある。しかし暗号化されたトラフィックに対して圧縮を組み合わせると、暗号文の長さ変化を利用したサイドチャネル攻撃のリスクが生じる。新規構築では圧縮を有効にしないことを推奨する。

本記事のまとめ
| 設定項目 | 推奨値・方針 | 重要度 |
|---|---|---|
| 暗号スイート | AES-256-GCM / tls-version-min 1.2 | 高(必須) |
| TLS認証 | tls-crypt(tls-authより強固) | 高(必須) |
| 証明書管理 | 1ユーザー1証明書・CRLで失効管理 | 高(必須) |
| 圧縮設定 | 無効(comp-lzo / compress を記述しない) | 高(必須) |
| プロセス権限 | user nobody / group nogroup | 中(推奨) |
| ログ・fail2ban | 接続ログ監視と自動ブロックの連携 | 中(推奨) |
OpenVPNはデフォルト設定のまま使い続けると、現代のセキュリティ要件を満たさない設定になることがある。本記事で紹介した暗号スイートの更新・tls-crypt有効化・証明書失効管理を組み合わせ、安全なリモートアクセス環境を整備してほしい。
PR
OpenVPNを含むLinuxサーバー全般のセキュリティ設定を体系的に解説した一冊。ファイアウォール・SSH・ユーザー管理から証明書運用まで、インフラエンジニアが手元に置きたい実践書だ。
