「Stunnel」の版間の差分
(翻訳) |
(Update Category) |
||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category: Transport Layer Security]] |
[[en:Stunnel]] |
[[en:Stunnel]] |
||
[https://www.stunnel.org stunnel] (“Secure Tunnel”) とは: |
[https://www.stunnel.org stunnel] (“Secure Tunnel”) とは: |
2020年9月15日 (火) 23:38時点における版
stunnel (“Secure Tunnel”) とは:
- 普遍的な TLS/SSL トンネリングサービスを提供するマルチプラットフォームのアプリケーション。一種のプロキシとして、プログラムのコードに変更を加えることなく既存のクライアントとサーバーに TLS 暗号機能を追加します。セキュリティ・ポータビリティ・スケーラビリティ (ロードバランス含む) を考えて作られており、大規模なシステムでも使えます。OpenSSL を使用しており、ライセンスは GNU GPL バージョン 2 以降で OpenSSL だけ例外です。
トンネリングできるのは TCP パケットだけです。FAQ には UDP に関する記載があります。WireGuard は UDP もトンネリング可能です。
認証を使うことで許可したクライアントだけサーバーにアクセスできるようになります。
目次
インストール
使い方によってはユニットファイルを編集することで依存関係を適切に扱えます。システムの起動時に stunnel を立ち上げたい場合は有効化してください。
設定
メインの設定ファイルは /etc/stunnel/stunnel.conf
です。ini 形式のファイルとなっています。グローバルセクションとそれぞれのサービスのセクションに分かれています。
クライアントは TLS で暗号化されていないデータを受け取ります。Stunnel は TLS でデータを暗号化して stunnel サーバーに接続します。stunnel サーバーは TLS で暗号化されたデータを受け取って解凍します。それから、データが送られるべきところに接続します。
デフォルトの debug
値は 5 ですが、出力が多すぎるかもしれません。設定に問題がないと確認できたら、設定ファイルで値を低くすると良いでしょう:
/etc/stunnel/stunnel.conf
debug = 3
セキュリティを高めるために、グローバルセクションとサービスごとのセクションで、root 以外の適切な uid と gid を明示的に設定することが推奨されます。setuid
と setgid
で設定することが可能です。
バイトオーダーマーク (BOM)
設定ファイルには UTF-8 バイトオーダーマーク (BOM) がファイルの冒頭に必要です。BOM はユニコード文字 U+FEFF です。UTF-8 表現は (16進数の) バイト順で 0xEF, 0xBB, 0xBF となります。以下のコマンドを実行することでこれらのバイトを書き込んでファイルを作成できます:
# echo -e '\xef\xbb\xbf; BOM composed of non printable characters. It is here, before the semicolon!' > /etc/stunnel/stunnel.conf
バイトオーダーマークを確認するには次のコマンドを実行:
% od --address-radix=n --format=x1c --read-bytes=8 /etc/stunnel/stunnel.conf ef bb bf 3b 20 42 4f 4d 357 273 277 ; B O M
cat
を使ったりテキストエディタでファイルの中身を確認しても、基本的に BOM バイトは表示されません。そのため、上記の od
コマンドなどで確認する必要があります。
認証
クライアントのサーバーのどちらか、あるいは両方を認証するようにしてください。事前共有鍵、もしくは鍵と証明書のペアを使うことができます。事前共有鍵は SCP と SFTP など他の方法を使って必要なマシンに転送してください。転送が可能な場合、事前共有鍵が最速です。事前共有鍵を使用する場合の設定例:
クライアント:/etc/stunnel/stunnel.conf
; BOM composed of non printable characters. It is here, before the semicolon! setuid = stunnel setgid = stunnel [trivial client] client = yes accept = 127.0.0.1:<src_port> connect = <server_host>:<server_port> debug = 3 PSKsecrets = /etc/stunnel/psk.txt setuid = stunnel setgid = stunnel
サーバー:/etc/stunnel/stunnel.conf
; BOM composed of non printable characters. It is here, before the semicolon! setuid = stunnel setgid = stunnel [trivial server] accept = <server_port> connect = <dst_port> ciphers = PSK debug = 3 PSKsecrets = /etc/stunnel/psk.txt setuid = stunnel setgid = stunnel
/etc/stunnel/psk.txt
は以下のコマンドで作成できます:
# openssl rand -base64 -out /etc/stunnel/psk.txt 180 # sed --in-place '1s/^/psk:/' /etc/stunnel/psk.txt
どちらか片方のマシンで作成したら別のマシンにコピーしてください。psk.txt
ファイルのパーミッションは適切に設定してください。sed
コマンドの psk は例としてあげている適当な文字列です。stunnel(8) を読んでください。
ヒントとテクニック
DNS over TLS
BIND には問い合わせと回答を暗号化する機能が組み込まれていません。Bind のナレッジベースでは stunnel の使用が提案されています。https://kb.isc.org/docs/aa-01386 を見てください。ページの下部では Unbound について触れられています。クライアントとサーバーの両方でシェルアカウントしか持っていないユーザーで、リゾルバとネームサーバーが DNS over TLS をサポートしていなくても DNS 通信をトンネル化可能です。
Stunnel TLS で NFSv4 を暗号化
Encrypting NFSv4 with Stunnel TLS を見てください。