Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.8. stunnel の使用

stunnel プログラムは、クライアントとサーバー間の暗号化ラッパーです。設定ファイルで指定されたポートでリッスンし、クライアントとの通信を暗号化して、通常のポートでリッスンしている元のデーモンにデータを転送します。こうすることで、それ自体がどのタイプの暗号化もサポートしていないサービスを保護したり、POODLE SSL 脆弱性 (CVE-2014-3566) の影響を受ける SSL バージョン 2 および 3 など、セキュリティー上の理由から避けたいタイプの暗号化を使用しているサービスのセキュリティーを向上させたりすることができます。詳しくは https://access.redhat.com/solutions/1234773 を参照してください。CUPS は、独自の設定で SSL を無効にする方法を提供しないコンポーネントの例です。

4.8.1. stunnel のインストール

root で以下のコマンドを入力して、stunnel パッケージをインストールします。
~]# yum install stunnel

4.8.2. stunnel を TLS Wrapper として設定する

stunnel を設定するには、次の手順に従います。
  1. 使用するサービスに関係なく、stunnel の有効な証明書が必要です。適切な証明書がない場合は、認証局 に申請して取得するか、自己署名証明書を作成することができます。
    警告
    実稼働環境で実行されているサーバーには、常に認証局によって署名された証明書を使用してください。自己署名証明書は、テスト目的またはプライベートネットワークにのみ適しています。
    認証局から付与される証明書の詳細については、「証明書署名要求の作成」 を参照してください。一方、stunnel の自己署名証明書を作成するには、/etc/pki/tls/certs/ ディレクトリーに移動し、root で以下のコマンドを入力します。
    certs]# make stunnel.pem
    すべての質問に答えて、プロセスを完了してください。
  2. 証明書がある場合は、stunnel の設定ファイルを作成します。これは、すべての行がオプションまたはサービス定義の開始を指定するテキストファイルです。コメントと空の行をファイルに残して、コメントがセミコロンで始まる読みやすさを向上させることもできます。
    stunnel RPM パッケージには、設定ファイルを保存できる /etc/stunnel/ ディレクトリーが含まれています。stunnel はファイル名やその拡張子の特別な形式を必要としませんが、/etc/stunnel/stunnel.conf を使用します。以下のコンテンツは、stunnel を TLS ラッパーとして設定します。
    cert = /etc/pki/tls/certs/stunnel.pem
    ; Allow only TLS, thus avoiding SSL
    sslVersion = TLSv1
    chroot = /var/run/stunnel
    setuid = nobody
    setgid = nobody
    pid = /stunnel.pid
    socket = l:TCP_NODELAY=1
    socket = r:TCP_NODELAY=1
    
    [service_name]
    accept = port
    connect = port
    TIMEOUTclose = 0
    または、sslVersion = TLSv1 を含む行を以下の行に置き換えることで、SSL を回避することもできます。
    options = NO_SSLv2
    options = NO_SSLv3
    オプションの目的は、以下のとおりです。
    • cert — 証明書へのパス。
    • sslVersion - SSL のバージョン。SSL と TLS は 2 つの独立した暗号化プロトコルですが、ここでは TLS を使用できることに注意してください。
    • chroot — セキュリティーを強化するために stunnel プロセスが実行される変更された root ディレクトリー
    • setuid, setgid - stunnel プロセスが実行されるユーザーおよびグループ。nobody は制限されたシステムアカウントです。
    • pid - stunnel がプロセス ID を保存するファイル( chrootと相対的)
    • socket — ローカルおよびリモートのソケットオプション。この場合、ネットワーク遅延を改善するために Nagle のアルゴリズム を無効にします。
    • [service_name] : サービス定義の先頭。この行の下で使用されるオプションは指定のサービスのみに適用されますが、上記のオプションは stunnel にグローバルに影響します。
    • accept — リッスンするポート
    • connect — 接続先のポート。これは、セキュリティー保護対象のサービスが使用するポートである必要があります
    • TIMEOUTclose - クライアントからの close_notify アラートを待機する秒数。0stunnel にまったく待機しないように指示します。
    • options — OpenSSL ライブラリーオプション

    例4.3 CUPS のセキュア化

    stunnel を CUPS の TLS ラッパーとして設定するには、以下の値を使用します。
    [cups]
    accept = 632
    connect = 631
    632 の代わりに、任意の空きポートを使用できます。631CUPS が通常使用するポートです。
  3. chroot ディレクトリーを作成し、setuid オプションで指定されたユーザーに、そのディレクトリーへの書き込みアクセス権を付与します。これを行うには、root で以下のコマンドを入力します。
    ~]# mkdir /var/run/stunnel
    ~]# chown nobody:nobody /var/run/stunnel
    これにより、stunnel が PID ファイルを作成できます。
  4. システムが新しいポートへのアクセスを許可しないファイアウォール設定を使用している場合は、それに応じて変更してください。詳細は「GUI を使用してポートを開く」を参照してください。
  5. 設定ファイルと chroot ディレクトリーを作成し、指定したポートにアクセスできることを確認したら、stunnel の使用を開始する準備が整います。

4.8.3. stunnel の起動、停止、再起動

stunnel を起動するには、root で以下のコマンドを入力します。
~]# stunnel /etc/stunnel/stunnel.conf
デフォルトでは、stunnel/var/log/secure を使用して出力をログに記録します。
stunnel を終了するには、root で以下のコマンドを実行してプロセスを強制終了します。
~]# kill `cat /var/run/stunnel/stunnel.pid`
stunnel の実行中に設定ファイルを編集した場合は、stunnel を終了して再度起動し、変更を有効にします。