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 を設定するには、次の手順に従います。
- 使用するサービスに関係なく、stunnel の有効な証明書が必要です。適切な証明書がない場合は、認証局 に申請して取得するか、自己署名証明書を作成することができます。警告実稼働環境で実行されているサーバーには、常に認証局によって署名された証明書を使用してください。自己署名証明書は、テスト目的またはプライベートネットワークにのみ適しています。認証局から付与される証明書の詳細については、「証明書署名要求の作成」 を参照してください。一方、stunnel の自己署名証明書を作成するには、
/etc/pki/tls/certs/
ディレクトリーに移動し、root
で以下のコマンドを入力します。certs]# make stunnel.pem
すべての質問に答えて、プロセスを完了してください。 - 証明書がある場合は、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 アラートを待機する秒数。0
は stunnel にまったく待機しないように指示します。options
— OpenSSL ライブラリーオプション
例4.3 CUPS のセキュア化
stunnel を CUPS の TLS ラッパーとして設定するには、以下の値を使用します。[cups] accept = 632 connect = 631
632
の代わりに、任意の空きポートを使用できます。631
は CUPS が通常使用するポートです。 chroot
ディレクトリーを作成し、setuid
オプションで指定されたユーザーに、そのディレクトリーへの書き込みアクセス権を付与します。これを行うには、root
で以下のコマンドを入力します。~]# mkdir /var/run/stunnel ~]# chown nobody:nobody /var/run/stunnel
これにより、stunnel が PID ファイルを作成できます。- システムが新しいポートへのアクセスを許可しないファイアウォール設定を使用している場合は、それに応じて変更してください。詳細は「GUI を使用してポートを開く」を参照してください。
- 設定ファイルと
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 を終了して再度起動し、変更を有効にします。