Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
コンテンツコンテンツ
セキュリティ強化ガイド
  1. 前書き
  2. 1 セキュリティと機密保持
  3. 2 コモンクライテリア (Common Criteria)
  4. I 認証
    1. 3 PAM を利用した認証
    2. 4 NIS の使用
    3. 5 YaST を利用した認証クライアントの設定
    4. 6 389 LDAP ディレクトリサービス
    5. 7 Kerberos を利用したネットワーク認証
    6. 8 Active Directory サポート
    7. 9 FreeRADIUS サーバの構築
  5. II ローカルセキュリティ
    1. 10 物理的なセキュリティ
    2. 11 seccheck を利用した自動的なセキュリティチェック
    3. 12 ソフトウエア管理
    4. 13 ファイルの管理
    5. 14 パーティションやファイルの暗号化
    6. 15 cryptctl を利用したアプリケーション向けのストレージ暗号化
    7. 16 ユーザ管理
    8. 17 Spectre/Meltdown チェッカー
    9. 18 YaST を利用したセキュリティの設定
    10. 19 PolKit による認可制御
    11. 20 Linux でのアクセス制御リスト
    12. 21 証明書ストア
    13. 22 AIDE を利用した侵入検知
  6. III ネットワークセキュリティ
    1. 23 X Window System と X 認証
    2. 24 SSH: 機密を保持するネットワーク操作
    3. 25 マスカレードとファイアウオール
    4. 26 VPN サーバの設定
    5. 27 X Window System で動作する PKI マネージャ XCA による管理
  7. IV AppArmor による権限の制限
    1. 28 AppArmor の紹介
    2. 29 入門
    3. 30 プログラムに対する予防接種
    4. 31 プロファイルのコンポーネントと文法
    5. 32 AppArmor のプロファイルリポジトリ
    6. 33 YaST を利用したプロファイルの構築と管理
    7. 34 コマンドラインからのプロファイル構築
    8. 35 チェンジハット機能による Web アプリケーションのプロファイル作成
    9. 36 pam_apparmor によるユーザの制限
    10. 37 プロファイルを作成したアプリケーションの管理
    11. 38 サポート
    12. 39 AppArmor 用語集
  8. V SELinux
    1. 40 SELinux の設定
  9. VI Linux 監査フレームワーク
    1. 41 Linux 監査システムの概要
    2. 42 Linux 監査フレームワークの設定
    3. 43 監査ルールセットの紹介
    4. 44 その他の情報源
  10. A GNU ライセンス
ナビゲーション
適用先 openSUSE Leap 15.2

26 VPN サーバの設定

概要

今やインターネット接続は安価であり、どこででも使用できるようになっています。しかしながら、全ての接続で機密が守られる保証はありません。この場合、仮想プライベートネットワーク (Virtual Private Network; VPN) を構築することで、インターネットや Wi-Fi などの機密が守られないネットワークを経由して、社内や家庭内などにアクセスすることができるようになります。この VPN には様々な実装があり、様々な目的で使用されます。本章では OpenVPN と呼ばれる、インターネットと社内/家庭内を結ぶ実装について説明しています。

26.1 考え方の概要

本章では VPN に関するいくつかの用語を使用していますので、まずはその説明から行います。

26.1.1 用語

エンドポイント

VPN の接続の 両端 を表わす用語です。 VPN サーバとクライアントの両方を意味しています。

TAP デバイス

TAP デバイスはイーサネットデバイス (イーサネットフレームなどの OSI モデルにおけるレイヤ 2) を疑似するデバイスです。 TAP デバイスはブリッジ型の VPN 接続で使用され、イーサネットのフレームを転送します。

TUN デバイス

TUN デバイスは IP ネットワーク (IP パケットなどの OSI モデルにおけるレイヤ 3) を疑似するデバイスです。 TUN デバイスはルーティング型の VPN で使用され、 IP のフレームを転送します。

トンネル

2 つのエンドポイントを結ぶ通信経路を意味する用語です。もっと技術的な観点で言うと、クライアント側のデバイスとサーバ側のデバイスの接続を意味します。通常、トンネルは暗号化されていますが、暗号化されていなくてもトンネルと表現します。

26.1.2 VPN のシナリオ

VPN で接続を行うと、 IP パケットは トンネル を介して伝送されるようになります。トンネルは TUN または TAP のいずれかを使用します。 TUN/TAP は仮想ネットワークに対応するカーネルドライバで、イーサネットや IP フレーム (パケット) の伝送を行います。

ユーザスペース側のプログラム (OpenVPN) では、 TUN/TAP のデバイスに接続して、オペレーティングシステムとの間でパケットの送受信を行います。

一般的に言うと、 VPN には様々なソリューションが存在し、構成も様々なものが存在しています。本章では OpenVPN パッケージを利用した場合の説明を行っています。 OpenVPN では、他の VPN ソフトウエアとは異なり、下記に示す 2 種類のモードに対応しています:

ルーティング型 VPN

ルーティング型 VPN は構築が簡単な方式です。ブリッジ型 VPN よりも効率的で大規模環境にも向きます。それに加えて、さらに効率を高めるために MTU (最大伝送単位; Maximum Transfer Unit) を調整することもできます。しかしながら、ゲートウエイ側で Samba サーバを動作させない限り、 NetBIOS ブロードキャストが動作しないという仕様上の問題があり、異種混合型の環境では都合が悪いことがあります。なお、 IPv6 を必要とする場合は、双方のエンドポイントで TUN デバイスに対して明示的に設定を行う必要があります。この方式の構成は 図26.1「ルーティング型 VPN」 のようになります。

ルーティング型 VPN
図 26.1: ルーティング型 VPN
ブリッジ型 VPN

ブリッジ型は少し複雑な方式です。 Samba や WINS サーバなどの設定を行うことなく、 VPN を介して Windows のファイル共有を参照できるようにしたい場合は、お勧めの方式です。ブリッジ型の VPN は IP プロトコル以外 (IPX など) を環境でも利用できるほか、ブロードキャストパケットを使用する様々なアプリケーションでも利用することができます。しかしながら、ルーティング型 VPN と比べると効率は悪く、大規模環境にも向きません。この方式の構成を下記の図に示します。

ブリッジ型 VPN - シナリオ 1
図 26.2: ブリッジ型 VPN - シナリオ 1
ブリッジ型 VPN - シナリオ 2
図 26.3: ブリッジ型 VPN - シナリオ 2
ブリッジ型 VPN - シナリオ 3
図 26.4: ブリッジ型 VPN - シナリオ 3

ブリッジ型とルーティング型の大きな違いは、ルーティング型の場合は IP ブロードキャストを通すことができないのに対して、ブリッジ型の場合はそれができるという点があります。

26.2 シンプルな構成の構築例

下記の例では、一対一の VPN トンネルを作成します。この例を読むことで、クライアントとサーバとの間で、どのようにして VPN トンネルが作られるのかを知ることができます。なお、 VPN サーバ側のアドレスは サーバの_IP 、 VPN クライアント側のアドレスは クライアントの_IP として、いずれもプライベート IP アドレスを使用しているものとします。なお、実際の構築にあたっては、他の IP アドレスと重複しないものを選んでください。

警告
警告: セキュリティ面の考慮について

下記のシナリオは VPN 技術の仕組みを説明するために用意しているものであります。 VPN 技術はその仕組み上、社外からのアクセスを受け入れる仕組みであるため、誤った設定を行ってしまうと、家庭内や社内のネットワークを危険にさらすことにも繋がります。実際に使用するにあたっては、よくご確認のうえ実施してください。

ヒント
ヒント: 設定ファイルの名前について

OpenVPN の設定ファイルを簡単に扱うことができるようにするため、下記のような構成をお勧めします:

  • OpenVPN の設定ファイルは、 /etc/openvpn 以下に配置してください。

  • 1 つのファイル内に全ての設定を書き込む場合は、 MY_CONFIGURATION.conf のようなファイルを作成して書き込んでください。

  • 複数のファイルを利用して 1 つの構成を作り上げる場合は、 /etc/openvpn/MY_CONFIGURATION のようなサブディレクトリを作成して、その中にファイルを置いてください。

26.2.1 VPN サーバの設定

VPN サーバの構築は下記のようにして行います:

手順 26.1: VPN サーバの設定
  1. VPN サーバとして動作させたいマシンに、 openvpn パッケージをインストールします。

  2. シェルを開いて root になり、下記のように実行して VPN の機密鍵を作成します:

    root # openvpn --genkey --secret /etc/openvpn/secret.key
  3. 機密鍵をクライアントにコピーします:

    root # scp /etc/openvpn/secret.key root@クライアントの_IP:/etc/openvpn/
  4. 下記のような内容で、サーバ側の設定ファイル /etc/openvpn/server.conf を作成します:

    dev tun
    ifconfig サーバの_IP クライアントの_IP
    secret secret.key
  5. /etc/sysconfig/network/ifcfg-tun0 というファイル名のファイル (TUN デバイスの設定) を作成して、下記の内容を記述します:

    STARTMODE='manual'
    BOOTPROTO='static'
    TUNNEL='tun'
    TUNNEL_SET_OWNER='nobody'
    TUNNEL_SET_GROUP='nobody'
    LINK_REQUIRED=no
    PRE_UP_SCRIPT='systemd:openvpn@server'
    PRE_DOWN_SCRIPT='systemd:openvpn@service'

    途中、 openvpn@server という記述がありますが、これは OpenVPN 内のサーバ設定 /etc/openvpn/server.conf を参照するための設定です。詳しい情報については、 /usr/share/doc/packages/openvpn/README.SUSE をお読みください。

  6. ファイアウオールを使用している場合は、 YaST を開いて セキュリティとユーザ › ファイアウオール › サービス を選び、 UDP ポート 1194 を開くように設定します。

  7. TUN デバイスを起動して、 OpenVPN のサービスを開始します:

    tux > sudo wicked ifup tun0

    下記のように表示されれば成功です:

    tun0            up

26.2.2 VPN クライアントの設定

VPN クライアントの構築は下記のようにして行います:

手順 26.2: VPN クライアントの設定
  1. VPN クライアントとして動作させたいマシンに、 openvpn パッケージをインストールします。

  2. 下記のような内容で、クライアント側の設定ファイル /etc/openvpn/client.conf を作成します:

    remote サーバのグローバル_IP_もしくはドメイン名
    dev tun
    ifconfig クライアントの_IP サーバの_IP
    secret secret.key

    サーバのグローバル_IP_もしくはドメイン名 の箇所には、サーバのグローバル IP アドレス、もしくはドメイン名とホスト名を入力します。

  3. /etc/sysconfig/network/ifcfg-tun0 というファイル名のファイル (TUN デバイスの設定) を作成して、下記の内容を記述します:

    STARTMODE='manual'
    BOOTPROTO='static'
    TUNNEL='tun'
    TUNNEL_SET_OWNER='nobody'
    TUNNEL_SET_GROUP='nobody'
    LINK_REQUIRED=no
    PRE_UP_SCRIPT='systemd:openvpn@client'
    PRE_DOWN_SCRIPT='systemd:openvpn@client'
  4. ファイアウオールを使用している場合は、 手順26.1「VPN サーバの設定」 内の ステップ 6 で説明している手順に従って、 UDP ポート 1194 を開くように設定します。

  5. TUN デバイスを起動して、 OpenVPN のサービスを開始します:

    tux > sudo wicked ifup tun0

    下記のように表示されれば成功です:

    tun0            up

26.2.3 シンプルな構成のテスト

OpenVPN のサービスを正常に動作させることができたら、あとは下記のコマンドを利用して TUN デバイスが正常に動作しているかどうかを確認します:

ip addr show tun0

VPN の接続を確認するには、クライアントとサーバの両方で ping コマンドを使用し、互いに通信ができていることを確認します。サーバからクライアントに ping を行いたい場合は、下記のように実行します:

ping -I tun0 サーバの_IP

逆に、クライアントからサーバに対して ping を行いたい場合は、下記のように実行します:

ping -I tun0 クライアントの_IP

26.3 証明機関を利用した VPN サーバの構築

26.2項 で説明している構築例はテストには便利であるものの、本格的な使用に耐えるものではありません。本章では、同時に複数の接続を受け入れることのできる VPN サーバを構築する方法について、説明を行っています。これは公開鍵基盤 (PKI; Public Key Infrastructure) を利用して実現するもので、それぞれのサーバやクライアントに別々の鍵対 (公開鍵と機密鍵) を発行して、それを証明機関 (CA; Certificate Authority) で署名してもらうことによって、正当性を設定する方法です。

この構成で設定を行うには、下記の手順を実施する必要があります:

26.3.1 証明機関の作成

VPN の接続を確立する前に、クライアントはサーバが提示する証明書を認証し、サーバはクライアントが提示する証明書を認証しなければなりません。これを 相互認証 と呼びます。

証明書の作成を行うための直接的な機能は、 openSUSE Leap には用意されていません。下記の手順では CA の証明書とサーバの証明書、そしてクライアントの証明書を他のシステムで作成したものとして説明しています。

サーバの証明書は PEM 形式で保存し、それに対応する機密鍵も暗号化することなく PEM 形式で保存しておきます。証明書は VPN サーバ内の /etc/openvpn/server_crt.pem に、 (暗号化していない) 機密鍵は /etc/openvpn/server_key.pem にそれぞれ置いておきます。

クライアント証明書は PKCS12 (推奨) 形式、もしくは PEM 形式で保存しておきます。 PKCS12 形式の場合は、その中に CA の証明書を含めておく必要があるほか、ファイルは /etc/openvpn/クライアント名.p12 というファイル名で保存しておきます。 PEM 形式で、 CA の証明書が含まれているものの場合は、 /etc/openvpn/クライアント名.pem というファイル名で保存しておきます。 PEM 形式でクライアント証明書 ( *.ca ) とクライアント鍵 ( *.key ) 、そして CA の証明書 ( *.ca ) をそれぞれ別々に分割している場合は、それぞれのクライアント内の /etc/openvpn/ ディレクトリにそれらを保存します。

また、 CA の証明書は、サーバおよびクライアント内の /etc/openvpn/vpn_ca.pem にコピーしておく必要があります。

重要
重要: クライアント証明書を分割した場合について

クライアント証明書と対応する機密鍵、そして CA の証明書をそれぞれ別々のファイルに分割している場合は、それらのファイル名を各クライアント内の OpenVPN の設定ファイルで指定する必要があります (詳しくは 例26.1「VPN サーバの設定ファイル」 をお読みください) 。

26.3.2 VPN サーバの設定

サーバ側の設定に際しては、 /usr/share/doc/packages/openvpn/sample-config-files/server.conf にある雛形を /etc/openvpn/ にコピーしたあと、必要に応じて修正を行うことをお勧めします。

例 26.1: VPN サーバの設定ファイル
# /etc/openvpn/server.conf
port 1194 1
proto udp 2
dev tun0 3

# Security 4

ca    vpn_ca.pem
cert  server_crt.pem
key   server_key.pem

# ns-cert-type server 
remote-cert-tls client 5
dh   server/dh2048.pem 6

server 192.168.1.0 255.255.255.0 7
ifconfig-pool-persist /var/run/openvpn/ipp.txt 8

# Privileges 9
user nobody
group nobody

# Other configuration 10
keepalive 10 120
comp-lzo
persist-key
persist-tun
# status      /var/log/openvpn-status.tun0.log 11
# log-append  /var/log/openvpn-server.log 12
verb 4

1

OpenVPN が待ち受ける TCP/UDP ポートを指定します。なお、ここで指定するポートは、ファイアウオール側で開いておく必要があります。ファイアウオールに関する詳細は 第25章 「マスカレードとファイアウオール をお読みください。標準ではポート 1194 を使用しますが、今回はそのまま使用するものとします。

2

プロトコルを指定します。 UDP もしくは TCP のいずれかを指定します。

3

デバイスの種類を TUN もしくは TAP から選択して指定します。これらの違いについての詳細は 26.1.1項 「用語」 をお読みください。

4

これ以降の行には、証明機関の証明書 ( ca ) と サーバ証明書 ( cert ) 、そしてサーバ証明書の鍵 ( key ) をそれぞれ指定しています。これらのファイルは 26.3.1項 「証明機関の作成」 で生成したものです。

5

相手側に要求する証明書の種類を指定しています。この場合、 RFC3280 TLS rules で規定されている key usage と extended key usage (鍵の用途) について、明確な署名のある証明書のみを受け入れる設定です。

6

Diffie-Hellman パラメータを指定します。ここで指定するファイルは、下記のコマンドで生成することができます:

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

7

VPN サブネットを指定します。サーバ自身は 192.168.1.1 を使用します。

8

クライアントと仮想 IP アドレスの対応付けに関する情報を、指定したファイルに記録する指定です。これは特に、サーバ側を再起動するような場合、再起動後もクライアントに対して同じアドレスを割り当てたい場合に有用です。

9

セキュリティ上の理由から、 OpenVPN に対する権限は制限しておくことをお勧めします。権限を制限するには、ユーザおよびグループを nobody に設定します。

10

その他の設定です。詳しくは /usr/share/doc/packages/openvpn/sample-config-files にあるサンプル設定ファイル内のコメント (英語) をお読みください。

11

このオプションを有効にすることで、指定したファイルに状態に関する概要情報と統計情報 ( operational status dump ) を出力するようになります。既定では有効化されていません。

全ての出力は、 journalctl で表示することのできるシステムジャーナルに書き込まれます。複数の設定ファイルが存在するような場合 (たとえば一方は自宅用、他方は仕事用など) は、ファイル名にデバイス名を入れておくことをお勧めします。これにより、不用意にファイルが上書きされてしまうことが無くなります。この例の場合は dev に書かれているとおり、 tun0 がデバイス名となります。詳しくは 3 をお読みください。

12

既定では、ログメッセージは syslog に出力されます。この動作を変更したい場合は、この行にあるコメント文字 (#) を削除してください。コメント文字を削除すると、全てのメッセージが /var/log/openvpn-server.log に書き込まれるようになります。なお、 logrotate サービスの設定を忘れずに実施するようにしてください。詳しくは man 8 logrotate をお読みください。

設定作業が終わったら、 OpenVPN サーバのログが /var/log/openvpn.log に出力されます。初回の起動時には、下記のように出力されるはずです:

... Initialization Sequence Completed

上記のようなメッセージが表示されない場合は、ログファイルをよく読んで、設定ファイル内のどの箇所が誤っているのかをご確認ください。

26.3.3 VPN クライアントの設定

クライアント側の設定に際しては、 /usr/share/doc/packages/openvpn/sample-config-files/client.conf にある雛形を /etc/openvpn/ にコピーしたあと、必要に応じて修正を行うことをお勧めします。

例 26.2: VPN クライアントの設定ファイル
# /etc/openvpn/client.conf
client 1
dev tun 2
proto udp 3
remote IP_OR_HOST_NAME 1194 4
resolv-retry infinite
nobind

remote-cert-tls server 5

# Privileges 6
user nobody
group nobody

# Try to preserve some state across restarts.
persist-key
persist-tun

# Security 7
pkcs12 client1.p12

comp-lzo 8

1

このマシンをクライアントとして動作させる宣言です。

2

ネットワークデバイスを指定します。クライアントとサーバの両方で、同じデバイスを使用しなければなりません。

3

プロトコルを指定します。こちらもクライアントとサーバの両方で、同じプロトコルを設定しなければなりません。

5

こちらはクライアント向けのセキュリティオプションで、接続先のコンピュータが目的のサーバかどうかを確認することができます。

4

IP_OR_HOST_NAME の箇所を OpenVPN サーバのホスト名もしくは IP アドレスに置き換えてください。ホスト名もしくは IP アドレスの後ろには、サーバ側のポート番号を指定します。複数の VPN サーバのうちのいずれかを選択して接続したい場合は、 remote を複数行指定してもかまいません。この場合、複数の VPN サーバを負荷分散として使用することになります。

6

セキュリティ上の理由から、 OpenVPN に対する権限は制限しておくことをお勧めします。権限を制限するには、ユーザおよびグループを nobody に設定します。

7

クライアント向けに発行された鍵を指定します。セキュリティ上の理由から、クライアントごとに異なる鍵を使用してください。

8

圧縮を有効化しています。このパラメータは、サーバ側でも有効化しておかなければなりません。

26.4 YaST を利用した VPN サーバおよびクライアントの設定

YaST を使用することで、 VPN サーバの設定を行うことができます。ただし、残念ながら YaST のモジュールは OpenVPN に対応していません。その代わり、 IPsec プロトコル (StrongSwan ソフトウエアで実装されています) を使用することができます。 OpenVPN と同様に、 IPsec は幅広く使用されている VPN 方式です。

手順 26.3: IPsec サーバの設定
  1. YaST の VPN モジュールを起動するには、 ネットワークサービス › VPN ゲートウエイとクライアント を選択します。

  2. まずは グローバル設定 内にある VPN デーモンの有効化 を選択します。

  3. 新しく VPN を作成するには、 新しい VPN を押して、接続に対して設定する名前を入力します。

  4. 種類 では ゲートウエイ (サーバ) を選択します。

  5. あとは用途に合わせて下記を実施します:

    • Linux クライアントを接続する場合は、 事前共有鍵による機密通信証明書による機密通信 が最適な選択となります。

    • Android, iOS, macOS などの新しいバージョンでネイティブに対応している設定を行いたい場合は、 Android, iOS, MacOS X クライアントに対してアクセスを提供する を選択します。この設定では、事前共有鍵をベースにした設定となり、必要であればユーザ名/パスワードによる認証も行うことができます。

    • Windows や BlackBerry デバイスでネイティブに対応する設定を行いたい場合は、 Windows 7, Windows 8 クライアントに対してアクセスを提供する を選択します。こちらは証明書をベースにした設定となり、必要であればユーザ名/パスワードによる認証も行うことができます。

    この例では、 事前共有鍵による機密通信 を選択したものとします。

  6. 鍵を指定するには、 認証情報の編集 を押します。あとは 鍵の表示 を押してから、共有鍵を入力します。入力が終わったら OK を押します。

  7. VPN クライアントのアクセス方法 では、 VPN を利用した場合のアクセス制限を設定することができます。特定の IP 範囲のみを許可したい場合は、 カンマ区切りでのアドレス制限 内に、 CIDR 形式かつカンマ区切りで指定します。 CIDR 形式に関する詳細は、 https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing をお読みください。

  8. クライアントのアドレスプール では、 VPN サーバからクライアントに対して提供する、 IP アドレスを指定します。

  9. 設定を完了するには、 OK を押します。これにより、 YaST VPN モジュールは自動的にファイアウオールのルールを追加して有効化し、クライアント側から接続できるように設定します。

    接続の状態を確認したい場合は、表示される確認ウインドウで はい を押します。これにより、お使いの VPN 接続に対する systemctl status が表示され、 VPN が有効化されているかと正しく設定されているかを確認することができます。

26.5 さらなる情報

NetworkManager を利用した VPN 接続の設定方法については、 28.3.4項 「NetworkManager と VPN」 をお読みください。

一般的な VPN に関する情報をご希望の場合は、下記をご覧ください:

  • https://openvpn.net : OpenVPN の Web ページ

  • man openvpn

  • /usr/share/doc/packages/openvpn/sample-config-files/ : 様々な用途に対応した設定ファイルの例があります。

  • /usr/src/linux/Documentation/networking/tuntap.txt : TUN/TAP インターフェイスの説明 (英語) です。なお、このファイルは kernel-source パッケージ内に含まれています。