Submission Portを使えるようにする


さて、POP3とIMAP4でメールを受信することまでは出来た。
次は何をしようかと思いを巡らせていたが、よくよく考えるとまだ自分からメールを送ることが出来ない状況だ。
と言うことで、送信のための環境整備を行うことにしよう。

通常メールの送信にはSMTPを使う。
SMTPはTCPの25番ポートでサーバとクライアントの間で通信を行うが、数年前から多くのISPがスパムメール対策の一環としてOutbound Port25 Blocking(OP25B)という施策をとっている。
これは25番ポートで外部のSMTPサーバと通信させないというモノ。
スパムメールの多くは送信者が自ら相手先のSMTPサーバと通信してメールを送るか、設定の甘いどこかのSMTPサーバを踏み台にして、そこから大量のメールを送信していたり、ウイルス感染したPCを踏み台にし、そこからメールをばらまいている。
いずれの場合も25番ポートを使ってISPのネットワーク外にあるSMTPサーバと通信を行うのが特徴なので25番ポートで外部と通信することを遮断してしまえばいい。

一般的なユーザーであれば回線接続先のISPのメールを使っているのが普通なので、ISPが用意したSMTPサーバへ接続してメールを送信し、あとはISPのサーバに任せてしまえばメールが送られるので全く問題ない。

しかし、社用のメールなので会社のメールサーバから送信したいとか、レンタルサーバを使っていて借りているサーバを送信サーバに設定したい場合などは困ってしまう。
多くの場合、回線接続先のSMTPサーバを送信サーバの設定してメールを送信すれば問題なくメールは送れるが、ノートPCを使って出先からメールを送信したい場合は一々接続先ISPのメールサーバに設定変更しなければいけなくなったりして不便だ。

その不便さに対応するためのモノがSubmission Portと呼ばれるモノだ。
これはTCPの587番ポートを使ってSMTP通信を行う。
但しSubmission Portを使って送信する場合は送信者の認証を必要とし、これをSMTP AUTH(SMTP認証)と呼んでいる。
すなわち、IDとパスワードで認証された人しか使えないSMTP用ポートなのだ。
従来の25番ポートではクライアントから送信のために接続されるだけでなく、不特定多数の外部サーバから自サイト宛のメールが届けられるので認証機能を付けてしまうと、他から届くはずのメールも受け取れなくなるので、クライアントからの送信専用ポートを用意して認証機能を設けたという次第である。

で、PostfixをSubmission Portに対応させてやるのだが、PostfixでSMTP認証を行うためにはSASLという認証機構を使って実現することになる。
PostfixでSASLを使うためには外部ライブラリーが必要で、Postfixが対応しているのはCyrusのSASL機能かDovecotのSASL機能らしい。
Dovecotは既にインストールしているの、こいつのSASL機能を使ってSMTP認証を行うのが手っ取り早いので、Postfix+DovecotでSMTP認証を実現することにする。

まずはPostfixをDovecotのSASLに対応させなければいけない。
makeのやり直しだ・・・
# make tidy
 
# make -f Makefile.init makefiles 'CCARGS=-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" -DHAS_PGSQL -I/usr/local/pgsql/include' 'AUXLIBS=-L/usr/local/pgsql/lib -lpq'
 
# make
 
# make upgrade

Makefileの初期化を行う際にSASLを有効にし、SASLのタイプとしてDovecotを指定している。
最後はmake installではなくmake upgradeにする事で設定情報などは上書きされることなく、今回のmakeで更新されたファイルだけがインストールされるという優れ物機能。
Postfix本体のバージョンアップの際にも使用する。
バージョンアップの際は設定情報に追加された値などがある場合は、それらもマージしてくれるのでバージョンアップが簡単にできるらしい。

続いてPostfixの設定変更。
まずは /etc/postfix/main.cf の変更
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

SASL機能を使うための設定と、SMTP接続してきたクライアントの許容条件に permit_sasl_authenticated を追加し、SASLで認証が通った接続を許容することにしてやる。

続いて /etc/postfix/master.cf を書き換えて Submission Port を有効にする。
submission inet n - n - - smtpd
# -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING

もともと設定情報は書かれているのでコメントアウトされているのを解除してやるだけ。
今回は3カ所のコメントアウトを解除している。
併せて /etc/services に
submission 587/tcp
submission 587/udp

が書かれていることを確認する。
無い場合は /etc/services に追加するか、 /etc/postfix/master.cf の submission と書かれている部分を 587 に書き換えてやる。

続いてDovecotの設定を書き換える。
/usr/local/etc/dovecot.conf の認証に関する設定を
auth default {
 mechanisms = plain login
 socket listen {
  client {
   path = /var/spool/postfix/private/auth
   mode = 0660
   user = postfix
   group = postfix
  }
 }
}
と言った感じにしてやる。(コメント等は端折ってます)
あとはPostfixとDovecotを再起動してやるだけ。

再起動が終わったらSubmission PortでSMTP認証が有効になっているかをテストする。
まずはtelnetを使って確認。
% telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 *****.*****.*** ESMTP Postfix
EHLO localhost
250-*****.*****.***
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
 
% telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 *****.*****.*** ESMTP Postfix
EHLO localhost
250-*****.*****.***
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

ちゃんと587番ポートでつないだ時に 250-AUTH PLAIN LOGIN と出てSMTP認証が有効になっている。

続いてPCの方から送信テストを行う。
SMTPを25番ポートのままにして外部のメールアドレス宛に送信をすると送信を拒否される。
25番ポートのままSMTP認証を有効にするが結果は同じ。
次にSMTPを587番ポートにして外部のメールアドレス宛に送信をすると、またまた送信を拒否される。
587番ポートでSMTP認証を有効にすると、ようやく送信できた。
これでメール送信のための環境も設定完了!

コメント

コメントを残す

メールアドレスが公開されることはありません。