stunnelでSMTP/POP3 over SSLを実現する
2007/04/14に紹介したstunnelをZaurus用にパッケージ化したので掲載する。
ビルド/実行環境
ビルド時や実行時に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