|||||||||||||||||||||

なんぶ電子

- 更新: 

stunnel 5.58をDebianで設定する

stunnel

以前メールプロキシ替わりに使っていたstunnelを久しぶりに動かそうと思ったらうまく接続できなくなっていたので、設定を再確認しました。

stunnel

stunnelは、プログラムコードを変更することなく既存のクライアントやサーバーにTLS暗号通信を加えるプロキシです。

かつてメール送信時の暗号化が普及していなかった時代によく使われていました。

メールだけでなく、stunnelサーバーに来たデータを、アドレスやポートを変更して転送することができます。

筆者はかつてDebianでstunnelを使用していたのですが、aptで確認したら現行のバージョンは5.50でした。さらに公式ページにある最新版は5.58でした。

ビルド

セキュリティ関連のパッケージはなるべく新しい方がいいと思いますので、最新バージョンをダウンロードしてビルドします。

先の公式ページのdownloadページから「stunnel-5.58.tar.gz」をダウンロードしました。

Debian環境でビルドをしていきます。もし開発環境が整っていない場合は「apt install build-essentiail」を先に実行してください。ビルドが面倒だという方は読み飛ばしてください。

「configure -h」で確認したら--disable-ipv6というIPv6を使わないオプションがあったので、設定してみました。stunnelでIPv6は今のところ使う予定がないですし、存在を忘れたりすると思わぬ不具合に悩まされかねません。

また、configureの途中で、一度次のようなエラーで止まりました。これはlibssl-devをインストールすることで解決しました。

Could not find your TLS library installation dir...

# cd /usr/local/src
# wget https://www.stunnel.org/downloads/stunnel-5.58.tar.gz
...
# tar vzxf stunnel-5.58.tar.gz
...
# cd stunel-5.58
# ./confiure --disable-ipv6
# make
...
# make install

ビルドしインストールすると設定ファイルは/usr/local/etc/stunnelディレクトリ、バイナリは/usr/local/bin/stunnelに配置されます。

これは以前にaptでインストールした/usr/bin/stunnelと競合するので設定を変更します。aptでインストールしてあるものは、stunnelに対してstunnel4にリンクを張っているようです。このリンクを新しく作成した方に変更します。


# ls -l /usr/bin | grep stunnel
lrwxrwxrwx 1 root   root          8  1月  9  2017 stunnel -> stunnel4
-rwxr-xr-x 1 root   root       2788  1月  9  2017 stunnel3
-rwxr-xr-x 1 root   root     199432  1月  9  2017 stunnel4

# rm /usr/bin/stunnel
# ln -s /usr/local/bin/stunnel /usr/bin/stunnel

もうひとつ修正箇所があります。stunnelはinit経由でサービスに登録されているので、その記述を変えます。スクリプト内の前半にDAEMONという変数があり、バイナリへのパスが記述されているので、そちらを/usr/local/bin/stunnelにします。

修正がおわったらupdate-rc.dで更新します。


# vim /etc/init.d/stuunel4
...
DAEMON=/usr/local/bin/stunnel
...
# update-rc.d stunnel4 defaults

新しい設定ファイル

以前の設定ファイルは次のようになっていたと思います。

old-stunnel.conf

...
; Certificate/key is needed in server mode and optional in client mode
cert = /etc/stunnel/stunnel.pem
key = /etc/stunnel/stunnel.pem

[gmail-pop3]
client = yes
accept = 110
connect = pop3.gmail.com:995

[gmail-smtp]
client = yes
accept = 25
connect = smtp.gmail.com:465
protocol = smtp
...

これが次のように変わりました。

new-stunnel.conf

...
[gmail-pop3]
client = yes
accept = 110
connect = pop.gmail.com:995
verifyChain = yes
CApath = @sysconfdir/ssl/certs
checkHost = pop.gmail.com
OCSPaia = yes
protocol=pop3

[gmail-smtp]
client = yes
accept = 25
connect = smtp.gmail.com:465
verifyChain = yes
CApath = @sysconfdir/ssl/certs
checkHost = smtp.gmail.com
OCSPaia = yes
protocol=smtp
...

過去から存在したものを含め項目を順に説明していきます。

  • client

    以これをyesにすることで非SSL通信をSSL通信化できるようになります。noにするとサーバモードとなり、SSLを解いて通信する機能となります。

  • accept

    待ち受けるポートです。ポートの前に「IPアドレス:」をつけることでIPの制限もできます。

  • connect

    接続先です。こちらもaccept同様にドメインの部分が省略できます。省略した場合はlocalhostになります。

  • verifyChain

    ルートCAからのチェーンで接続先を照合します。

  • CApath

    CAファイルのあるディレクトリを指定します。以前cert、keyとしてしてしていたエントリーの代わりです。もし特定のファイルをしていしたい場合はCAfileというエントリーもあります。

    @sysconfdirには/etcディレクトリが入ると思いますが、うまくいかない場合は/etcと直接記述してしまっても問題ありません。

  • checkHost

    証明書のsubjectと照合する文字列指定します。

  • OCSPaia

    証明書の失効情報をAIAをもとにOCSPサーバーから取得してチェックします。AIAとはAuthority Information Accessの略で、証明書に書かれている、証明書が公開されている場所を示すものです。

  • protocol

    プロトコル固有のTLSネゴシエーションを有効にします。サンプルの設定ファイルには記述はありませんでしたが、これをつけないとうまく動かないサーバーがありました。

設定ファイルの場所は/etc/stunnelディレクトリのままでいいようです。

ちなみにここでは110番や25番ポートを待ち受けポートにしていますが、既存のサービスがそのポートで待ち受けているとエラーになります。確認するためには「lsof -i」コマンドを使います。

これで設定はすべてですが、restartでプロセスが停止できない現象が起きました。aptでインストールしたバイナリを消すことでこれに対応しました。この時、設定ファイルは消されることはありませんが、init.d内のスクリプトは消されてしまうので退避させておきましょう。

purgeが終わったら、起動ファイルをinit.dディレクトリに再度移動させ、update-rc.dを実行します。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告