stunnelでSMTP/POP3 over SSLを実現する

2007/04/14に紹介したstunnelをZaurus用にパッケージ化したので掲載する。

ダウンロード

ソースはここからダウンロードし、dev-img-1.3でセルフコンパイルした。

download:stunnel_4.20-1_arm.ipk

ビルド/実行環境

ビルド時や実行時にOpenSSLが必要であるため、以下のパッケージを予めインストールした。

download:http://www.focv.com/feed/openssl_0.9.8e-1_arm.ipk

また、ビルドにはOpenSSLのヘッダファイルが必要であるため、以下のファイルを展開して「include/openssl」ディレクトリを丸ごと「/opt/QtPalmtop/include」にコピーして置いた。

source:http://www.openssl.org/source/openssl-0.9.8e.tar.gz

ビルド時のconfigureコマンドのオプションは以下の通りである。

$ ./configure --prefix=/opt/QtPalmtop --enable-dh \
    --enable-ipv6 --with-ssl=/opt/QtPalmtop

オリジナルに追加したファイル

stunnel_4.20-1_arm.ipkにはオリジナルのインストール時には存在しないファイルが幾つか含まれている。

  • /etc/rc.d/init.d/stunnel
    OS起動時に実行するためのシェルスクリプト本体。
  • /etc/rc.d/rc5.d/K88stunnel
    OS起動時に実行するためのシェルスクリプトへのシンボリックリンク
    S88stunnelにリネームすることで有効になる。
  • /opt/QtPalmtop/etc/stunnel/mkstpem
    stunnel.pemやstunnel.rndを作成し直すためのシェルスクリプト
    mkstpem --helpで使用方法を表示できる。
  • /opt/QtPalmtop/etc/stunnel/stunnel.conf
    デフォルトの設定ファイル。
    内容はstunnel.conf-sampleのコピー。
  • /opt/QtPalmtop/etc/stunnel/stunnel.rnd
    stunnel.confで指定されている乱数ファイル。

設定ファイル

以下の設定ファイルについて概要を説明する。

  • /opt/QtPalmtop/etc/stunnel/stunnel.conf
  • /opt/QtPalmtop/etc/stunnel/stunnel.conf-sample(初期内容)

動作環境がZaurusの場合は、クライアントとして使用することが多いだろうと勝手に憶測し、デフォルトの動作モードをクライアントモードに設定した。

client = yes

クライアントモードはstunnelが待ち受けのために開くポート(acceptで指定)に対して非暗号通信を行う。
Zaurus上で動作するSSL未対応のクライアントソフトが待ち受けポートに接続することで、stunnelが接続して来たソフトの代わりにSSLのサーバポート(connectで指定)に接続し暗号通信を行う。

; 例)メーラのPOP3受信先ホストをlocalhostにするのみの場合
[pop3]
accept  = 110 ; 待ち受けポート(標準ポート番号)
connect = pop3s.example.jp:995 ; 代理接続先ホストとポート

; 例)使用済みの25番ポートの代わりに別のポートを使う場合
[smtp]
accept  = 8025 ; 待ち受けポート(代替ポート番号)
connect = smtps.example.jp:465 ; 代理接続先ホストとポート

サーバモード(client = noで指定)では待ち受けポートで暗号通信を、接続先ポートで非暗号通信を行う。
SSL未対応のサーバソフトはstunnelの代理接続先ポートで待ち受ける。
SSL対応のクライアントソフトがstunnelの待ち受けポートに接続することで、stunnelはSSL未対応のサーバソフトに中継で接続する。

; 例)SSL未対応のPOP3サーバをPOP3Sに対応させる場合
[pop3s]
accept  = 995 ; 待ち受けポート(標準ポート番号)
connect = 110 ; 代理接続先ローカルポート

stunnelを実行するためには、上記の設定例を参考に1つ以上の接続設定を行う必要がある。
また、stunnel.confはrootユーザで編集する必要がある。

実行方法

stunnel.confの設定が完了した後は以下のコマンドでstunnelを実行する。

# /etc/rc.d/init.d/stunnel start

stunnelを終了させたい場合は以下のコマンドを入力する。

# /etc/rc.d/init.d/stunnel stop

余談

私はメール受信にはfetchmail、メール送信にはNomail、メール表示にはMuttを利用している。
この環境を一切変更したくなかったのでstunnelを利用してSMTP/POP3 over SSLを実現した。

参考:http://kimux.org/liza/mutt.shtml