StunnelによるメールサーバのSSL化
(セキュリティ強化 & Outbound Port 25 Blocking対策)
おやじの所では、Windows ベースのメールサーバとして Xmail や MercuryMail のほかいくつか紹介していますが、いずれもデーモンとしては
SSL 対応していないか、対応していても STARTSSL での対応のため、使用できるクライアント(メーラ)が限られるといった問題があります。従って、外部から自宅サーバを使用するとなると、どうしてもセキュリティが甘くなってしまいます。一方、最近、多くのプロバイダが
Outbound Port 25 Blocking を導入してきたため、自宅SMTPサーバを利用した外部への配送は契約プロバイダのSMTPサーバ経由にせざるを得なくなってきており、自宅SMTPサーバでの対策が必要になってきています。しかしながら、
Outbound Port 25 Blocking 対策はこれだけではすみません。 それは、外部から自宅サーバ(SMTP)を使用してメールを送信しようとする場合に、クライアントのプロバイダで
Outbound Port 25 Blocking が導入されていると、25番ポートを使ったアクセスができなくなってしまいます。これに対応する方法の一つが、サブミッションポート(587)の利用ですが、これをサポートしているのは
MercuryMail ぐらいであり、残念ながらSSL化もSTARTSSLしか対応できません。
これらの問題を解決するのが、 Stunnel による SMTP over SSL(SMTPS : 465番ポート利用)の導入です。 Stunnel
は汎用の SSL Warpper であり、SMTP/POP/IMAP/HTTP/LDAP 等のSSL化に対応できます。今回は、メールサーバに導入して、SMTPS(465)、POP3S(995)、IMAPS(993)をサポートできるようにします。これがサポートできれば、ほとんどのメーラでSSLを使ったアクセスが可能になります。もちろん、Outlook
Express も問題ありません。
特に、MercuryMail と組み合わせると IMAP や ML も使用できますので、機能レベルではほとんどは不満のないレベルになるのではないかと思います。
■事前準備
SSL化なので、ここで改めて記述はしませんが、
こちらを参考に server.key と server.crt を予め作成しておいてください。気をつけるポイントのみ、以下に示します。
- 既に、 Apache 用などで証明書を作成済みでそれをそのまま使用するなら特に作業は不要である。
- 上記で作成したサーバ名(CNに設定。ex. www.aconus.com)がメールサーバ名と異なる(ex. mail.aconus.com)と、毎回メーラ起動時にサーバ名が異なるというエラーがでるので、Stunnel
用に新規に作成する。そのまま、既存の作成環境で作成してしまうと上書きされてしまうので、Apache用の server.key と server.crt
をバックアップしてから行うこと。
既存の作成環境がなくなってしまった場合は、CA証明書が異なるとメーラでアクセスしたときにエラーがでるので、両方とも作成しなおしたほうが良いと思われる。
■Stunnel のインストールと設定
■Stunnel の設定
設定もいたって簡単であり、以下により作業します。
- スタートメニューから、「stunnel 」->「Edit stunnel.conf」を起動すると、エディタで stunnel.conf
が開くので環境に合わせて修正する。
デフォルトがサーバモードになっているので、変更箇所はほとんどない。クライアントモードは、SSL非対応のメーラをSSL化して使用する場合のモードである。(クライアントモードで動作させるには、「;client
= yes」 をコメントアウトすればよい。)
- サーバ証明書関係の設定を行う。デフォルトでは、cert で stunnel.pem が指定されているので、コメントアウト(行頭に ; 付加)し、自分で作成した証明書と鍵を指定する。(赤字:追加)
;cert = stunnel.pem
;key = stunnel.pem
cert = c:/etc/server.crt
key = c:/etc/server.key |
- 後は、使用するプロトコル以外をコメントアウトする。デフォルトでは、POP3S/IMAPS/SSMTP(SMTPS) が全てにインタフェースで有効になっている。
「accept/connect」は以下の形式で設定するが、今回はサーバモードなのでアドレス設定は不要なためデフォルトのままでよい。「accept」は stunnel の待ち受け、「concect」は接続するサーバに関する設定である。
[形式]
accept = [stunnelが待ち受けるホスト名またはIPアドレス:] ポート番号 (ex. accept = localhost:465)
connect = [stunnelが接続するサーバのホストまたはIPアドレス:] ポート番号 (ex. connect = localhost:25)
[pop3s]
accept = 995
connect = 110
[imaps]
accept = 993
connect = 143
[ssmtp]
accept = 465
connect = 25
;[https]
;accept = 443
;connect = 80 |
- ログの出力レベル(debug)とログファイル(output)を指定する。デフォルトではコメントアウトされており、出力されない。
debug = 7
output = stunnel.log
|
[出力レベル: debug]
ログの出力レベルは、ファシリティまたはレベルで設定する。デフォルトは「7(debug)」になっているので、実用時には修正しないと膨大なログが出てしまうので、注意が必要である。設定できるのは、emerg(0),
alert (1), crit (2), err (3), warning (4), notice (5), info (6), or debug
(7) であり、実用時は4か5で十分と思われる。
[ログファイル: output]
ログの出力ファイルは、デフォルトではstunnelをインストールしたディレクトリにstunnel.log という名称で出力される。必要なら適宜変更する。
■動作確認
まずは、ここで簡単に動作確認しておきます。メールサーバは動作しているものとします。
- スタートメニューから、「stunnel 」->「Run stunnel」で Stunnel を起動する。正常に起動すれば、タスクトレイにアイコンが表示される。
- コマンドプロンプトで動作を確認する。待ち受けポートにサーバのポートと、「accept」で設定したポートがあるか確認する。
C:\Documents and Settings\oyaji>netstat -p tcp -an
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:25 0.0.0.0:0 LISTENING
TCP 0.0.0.0:110 0.0.0.0:0 LISTENING
TCP 0.0.0.0:143 0.0.0.0:0 LISTENING
TCP 0.0.0.0:465 0.0.0.0:0 LISTENING
TCP 0.0.0.0:993 0.0.0.0:0 LISTENING
TCP 0.0.0.0:995 0.0.0.0:0 LISTENING |
- 上記で問題がなければ、実際にメーラで試験を行い問題がないことを確認する。
試験は、通常のポート(25,110,143)とSSL化のポート(465,993,995)、及びそれぞれでのSMTP-AUTHなどで行う。
ファイヤウォールやルータの設定を忘れないこと。
■stunnel のサービス化
このままではサービスとして動作できず運用上不便なので、サービス化を行います。
サービス化は、スタートメニューから、「stunnel 」->「Service install」で サービス化し、「Service start」で Stunnel をサービス起動するだけです。
Top Pageへ