Open2

Open VPN

ひでひで

OpenVPNとは

OpenVPNは、「インターネット上に安全な専用トンネルを作る技術」です。

身近な例で説明

普通のインターネット通信

あなたの家 ━━━ インターネット(誰でも見れる公道) ━━━ 会社

VPN通信

あなたの家 ━━━ 暗号化トンネル(専用の地下通路) ━━━ 会社

外から見ると「何をやっているかわからない」状態になります。

VPNの主な用途

1. リモートアクセス

自宅 → VPN → 社内ネットワーク

在宅勤務で社内システムにアクセス

2. 拠点間接続

東京オフィス ← VPN → 大阪オフィス

離れた場所にある拠点を安全に接続

3. プライバシー保護

あなた → VPN → インターネット

ISPや盗聴者から通信内容を隠す

OpenVPNの仕組み

基本的な構成

サーバー側(VPNサーバー)

  • OpenVPNサーバープロセス
  • 証明書と秘密鍵
  • 設定ファイル

クライアント側(VPNクライアント)

  • OpenVPNクライアントソフト
  • クライアント証明書
  • 設定ファイル

暗号化の流れ

  1. 証明書で相互認証
  2. 共通鍵を生成
  3. 全ての通信を暗号化

OpenVPNの特徴

  1. オープンソース:無料で使える
  2. SSL/TLS暗号化:非常に強固なセキュリティ
  3. 柔軟な設定:様々な用途に対応
  4. クロスプラットフォーム:Windows、Mac、Linux、スマホで使用可能

OpenVPNの動作モード

OpenVPNには2つの主要な動作モードがあります:

1. サーバー・クライアントモード

用途:リモートアクセス

複数のクライアント → OpenVPNサーバー → 内部ネットワーク

  • 在宅勤務で会社ネットワークにアクセス
  • 外出先から自宅のNASにアクセス

2. サイト間接続モード

用途:拠点間接続

本社ネットワーク ←→ OpenVPN ←→ 支社ネットワーク

  • 本社と支社のネットワークを統合
  • データセンター間の接続

OpenVPNのインストールと基本設定

インストール

# Ubuntu/Debian
apt update
apt install openvpn easy-rsa

# CentOS/RHEL
yum install epel-release
yum install openvpn easy-rsa

ディレクトリ構造

/etc/openvpn/
├── server/          # サーバー設定
├── client/          # クライアント設定  
└── easy-rsa/        # 証明書管理ツール

証明書認証の仕組み(重要!)

OpenVPNは**PKI(公開鍵基盤)**を使用します:

証明書の種類

  1. CA証明書:認証局(Certificate Authority)
  2. サーバー証明書:OpenVPNサーバー用
  3. クライアント証明書:各クライアント用
  4. DH鍵:暗号化強化用

信頼の連鎖

CA(認証局) → サーバー証明書を署名
CA(認証局) → クライアント証明書を署名
↓
サーバーとクライアントが相互に認証可能

証明書の作成手順

1. 認証局(CA)の作成

# easy-rsa環境をセットアップ
cd /etc/openvpn/easy-rsa
./easyrsa init-pki

# CA証明書を作成
./easyrsa build-ca

実行すると:

Enter New CA Key Passphrase: [CAの秘密鍵パスワードを入力]
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: MyCompany-CA

2. サーバー証明書の作成

# サーバーの証明書要求を作成
./easyrsa gen-req server nopass

# CA証明書でサーバー証明書に署名
./easyrsa sign-req server server

3. クライアント証明書の作成

# クライアント証明書要求を作成
./easyrsa gen-req client1 nopass

# CA証明書でクライアント証明書に署名
./easyrsa sign-req client client1

4. DH鍵の生成

# Diffie-Hellman鍵を生成(時間がかかります)
./easyrsa gen-dh

OpenVPNサーバー設定

サーバー設定ファイル:/etc/openvpn/server/server.conf

# 基本設定
port 1194
proto udp
dev tun

# 証明書設定
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem

# ネットワーク設定
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# クライアントに配布するルート
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"

# セキュリティ設定
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun

# ログ設定
status openvpn-status.log
log openvpn.log
verb 3

各設定の説明

ネットワーク設定

server 10.8.0.0 255.255.255.0
  • VPNクライアントに割り当てるIPアドレス範囲
  • サーバー:10.8.0.1
  • クライアント:10.8.0.2, 10.8.0.3, ...

ルーティング設定

push "route 192.168.1.0 255.255.255.0"
  • クライアントに「192.168.1.0/24にアクセスする時はVPN経由で」と指示

OpenVPNクライアント設定

クライアント設定ファイル:client.ovpn

client
dev tun
proto udp
remote your-server.com 1194

# 証明書設定(ファイル参照形式)
ca ca.crt
cert client1.crt
key client1.key

# セキュリティ設定
cipher AES-256-CBC
verb 3

# 接続維持
keepalive 10 120

ファイアウォール設定

サーバー側のファイアウォール

# OpenVPNポートを開放
iptables -A INPUT -p udp --dport 1194 -j ACCEPT

# VPN内部通信を許可
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT

# NAT設定(インターネットアクセスを許可する場合)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

IPフォワーディング有効化

# 一時的な設定
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永続化
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

OpenVPNサービスの起動

# サービス開始
systemctl start openvpn-server@server

# 自動起動設定
systemctl enable openvpn-server@server

# 状態確認
systemctl status openvpn-server@server

# ログ確認
journalctl -u openvpn-server@server -f

セキュリティ強化設定

追加のセキュリティオプション

# TLS認証を追加
tls-auth ta.key 0  # サーバー側は0
tls-auth ta.key 1  # クライアント側は1

# 証明書の用途を限定
remote-cert-tls client  # サーバー側設定
remote-cert-tls server  # クライアント側設定

# 接続元IPを固定
client-config-dir /etc/openvpn/ccd

TLS認証鍵の生成

# TLS認証用の共有鍵を生成
openvpn --genkey --secret ta.key

トラブルシューティング

よくある問題

1. 接続はできるがインターネットにアクセスできない

# IPフォワーディングとNAT設定を確認
sysctl net.ipv4.ip_forward
iptables -t nat -L

2. 証明書エラー

# 証明書の有効期限確認
openssl x509 -in client1.crt -text -noout | grep "Not After"

3. ファイアウォールでブロック

# ポートが開いているか確認
netstat -tulnp | grep 1194

4. サーバー設定ファイル

/etc/openvpn/server.conf

# 基本設定
port 1194
proto udp
dev tun

# 証明書とキー
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0

# ネットワーク設定
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"
push "dhcp-option DNS 8.8.4.4"

# セキュリティ設定
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun

# ログ設定
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3
ひでひで

OpenVPNのインストールと設定

1. サーバー側のインストール

# CentOS/RHEL
yum install epel-release
yum install openvpn easy-rsa

# Ubuntu/Debian
apt update
apt install openvpn easy-rsa

2. 証明書機関(CA)の構築

Easy-RSAを使用

# Easy-RSAのセットアップ
cp -r /usr/share/easy-rsa /etc/openvpn/
cd /etc/openvpn/easy-rsa

# 環境変数設定
vim vars

vars ファイルの内容例

export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Tokyo"
export KEY_ORG="MyCompany"
export KEY_EMAIL="admin@example.com"
export KEY_OU="IT Department"

3. 証明書の生成

# 環境変数を読み込み
source ./vars

# CAの初期化
./clean-all

# CA証明書を生成
./build-ca

# サーバー証明書を生成
./build-key-server server

# Diffie-Hellman パラメータを生成
./build-dh

# TLS認証キーを生成
openvpn --genkey --secret ta.key

生成されるファイル

ca.crt          ← CA証明書
server.crt      ← サーバー証明書
server.key      ← サーバー秘密鍵
dh2048.pem      ← DH パラメータ
ta.key          ← TLS認証キー

5. ネットワーク設定

IPフォワーディング有効化

echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

iptables設定(NAT)

# VPNクライアントからのトラフィックをNAT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# VPNポートを開放
iptables -A INPUT -p udp --dport 1194 -j ACCEPT

# フォワーディング許可
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT

クライアント設定

1. クライアント証明書の生成

# サーバー側で実行
cd /etc/openvpn/easy-rsa
./build-key client1

2. クライアント設定ファイル

client.ovpn

client
dev tun
proto udp
remote your-server.example.com 1194

# セキュリティ設定
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1

# その他設定
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
verb 3

3. クライアント接続

# Linux/macOS
sudo openvpn --config client.ovpn

# Windows
# OpenVPN GUIを使用

OpenVPNのセキュリティ強化

1. 暗号化の強化

# サーバー設定に追加
cipher AES-256-GCM
auth SHA512
tls-version-min 1.2
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384

2. アクセス制御

クライアント別設定

# クライアント設定ディレクトリ
client-config-dir /etc/openvpn/ccd

# 特定クライアントの固定IP設定
echo "ifconfig-push 10.8.0.100 10.8.0.101" > /etc/openvpn/ccd/client1

接続ログの監視

# 接続状況確認
cat /var/log/openvpn.log

# アクティブな接続確認
cat /etc/openvpn/openvpn-status.log

3. 証明書の失効

# 証明書失効リスト(CRL)の作成
cd /etc/openvpn/easy-rsa
./revoke-full client1

# サーバー設定に追加
crl-verify crl.pem