ここでは、Postfix + Dovecot + Postfix Adminでマルチドメインのメールサーバ(PostgreSQL)で設定したメールサーバの動作確認を行っていきます。
動作確認前の下準備
動作確認では、実際にメール送信ししますので、Postfix Adminで
- サーバのhostnameのドメインを、Postfix Adminを使ってドメインを追加
- そのドメインにユーザを追加
- そのドメインの「root」ユーザを先程追加したユーザに転送設定
を行ってください。Postfix Adminの操作はこちらのページが参考になります(私も書こうとしたのですが、挫折しました…)。ここではドメインが「example.com」、作成したユーザが「test@example.comとして仮定して説明しますので、実際のドメインやユーザに置き換えてご確認ください。
Dovecotの動作確認
サーバにはTera Temなどのターミナルエミュレータで接続していると思いますが、ターミナルエミュレータを2つ立ち上げ、一方では
tail -f /var/log/maillog
と実行し、ログを監視します。もう一方で操作を行ってください。
PostfixはDovecotに依存しているため、最初にDovecotの動作確認を行います。コマンドラインから、telnetでDovecotに接続します。
telnet localhost 143
接続でき、下記のような応答があることを確認してください。
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN] IMAP Server ready.
telnetの接続が拒否される場合、Dovecotのdaemonが起動していません。接続されるけれど応答がない場合、Dovecotがトラブルを起こしています。
もし
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ LOGINDISABLED] IMAP Server ready.
と「LOGINDISABLED」と表示されていたら、ログインできません。うまくいかない場合は、ログの出力を見ながら
service dovecot restart
を実行してみてください。
次に、IMAPのコマンドを発行してログインを試みます。
A10 LOGIN test@example.com password
「password」は実際のパスワードに置き換えてください。ログインできることを確認してください。ログインできなければ、Postfix AdminとDovecotの連携がうまく行っていません。設定ファイルを見直してみて下さい。(認証関係ですので、「conf.d/10-auth.conf」や「dovecot-sql.conf.ext」などが中心だと思います)
ログインできると、次のような応答があるはずです。
A10 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY METADATA SPECIAL-USE IMAPSIEVE=sieve://host.example.com FILTER=SIEVE QUOTA ACL RIGHTS=texk] Logged in
最後に「Logged in」がでればOKです。「CAPABILITY」にはIMAPサーバがサポートしている機能が列挙されています。(私の環境では、別途設定して機能を有効化していますので、CAPABILITYがこの例より少なくても大丈夫です)
ここまでくれば、Dovecotの動作は(一応)確認できました。telnetコマンドを終了してください。
Postfixの動作確認(SMTP TCP/25)
次に、Postfixの動作を確認していきます。サーバ間の転送に用いられるSMTP(TCP/25)を確認します。「/var/log/maillog」の監視は続けながら
telnet locahost 25
とPostfixに接続して下さい。接続ができたら、Postfixから応答があります。
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 host.example.com ESMTP
応答があれば、SMTPコマンドを送信します。
EHLO localhost
これを送信すると、Postfixから次のような応答があるはずです。
250-host.example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
最初の行は、Postfixが動いているホスト名です。では、SMTPのコマンドでメールを送信してみます。まずは送信元を指定します。
MAIL FROM: <test@example.com>
Postfixからの応答は、次のようなはずです。
250 2.1.0 Ok
続けて宛先を指定します。
RCPT TO: <test@example.com>
応答が返ってきたら続けメールの本体を送ります。
DATA
「DATA」コマンドを送ると、サーバから応答があります。
354 End data with <CR><LF>.<CR><LF>
この応答を確認してから、メールの本体を送ります。
Hello, World!
.
送信がうまくいくと、Postfixから次の反応が返ってきます。
250 2.0.0 Ok: queued as A8D173A55C
キューの番号はその時その時で変わります。このあとPostfixはDovecotが待ち受けているLMTPにメール配信を依頼します。
では、続けてセキュリティ関係の設定(の一部)がうまく行っているかどうか確認します。一度SMTPをリセットします。
RSET
応答を待って、存在しないドメインのユーザからメールを送ってみます。
MAIL FROM: <test@noexistent.test>
この時点では、まだ応答があります。
250 2.1.0 Ok
続けて宛先を指定します。
RCPT TO: <test@exmaple.com>
この時点で、セキュリティチェックが働き、次の反応が返ってきます。
450 4.1.8 <test@noexistent.test>: Sender address rejected: Domain not found
存在しないドメインからのメールを拒否していることがわかります。次に、自分が受取先ではないメールアドレスを拒否するかどうか、確認します。SMTPコマンドを送信します。
RSET
応答が返ってきたら、送信者は実在のものを指定します。
MAIL FROM: <test@example.com>
応答が返ってきたら、「自分が受け付けないドメイン」を宛先に指定します。
RCPT TO: <test@nonexistent.test>
Postfixが次の反応を返してくれば、大丈夫です。
554 5.7.1 <test@nonexistent.test>: Relay access denied
もし受け付けるなら、Postfixの設定を見直す必要があります。
では、「VRFT」コマンドの無効化ができているかどうか確認します。SMTPの状態をリセットします。
RSET
応答が返ってきたら、VRFYコマンドを送信します。
VRFY test@example.com
次のような応答があれば、正常です。
502 5.5.1 VRFY command is disabled
もし、
252 2.0.0 test@example.com
と返ってきたら、設定ファイルにミスがあります。要確認です。
さて、ここまでの確認で「test@example.com」にメールが1通送信されています。「/var/spool/vmail/example.com/test/」フォルダが作成されているかどうか、それにそこにメールがあるかどうかを確認してみましょう。まずtelnetを抜けてシェルで
cd /var/spool/vmail
ls
と実行すると「example.com」ディレクトリがあるはずです。このディレクトリに入ってフォルダを確認してみます。
cd example.com
ls
「test」ディレクトリがあるはずです。更に確認してみましょう。
cd test
ls
ここに「new」フォルダがあるはずです。更に潜ってみます。
cd new
ls
すると、ファイルが1個あるはずです。これがテスト送信したファイルになります(ファイル名はその時その時で変わります)。これを見ると、メールの内容を確認することができます。ここまで成功すると、Postfixがメールを受け付け、DovecotのLMTPにそれを引き渡し、指定されたフォルダにメールを格納する、とういう一連の流れを確認することができます。
Postfixの動作確認(Submission TCP/587)
では、/var/log/maillogの監視は続けたまま、telnetでSubmissionポートに接続します。
telnet localhost 587
接続が成功したら、Postfixから応答があります。
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 garnet.topazium.site ESMTP
最初に「EHLO」を送ります。
EHLO localhost
このコマンドを送ると、Postfixから応答があります。
250-host.example.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
Submissionでは認証を必須化してあるので、わざと認証無しでメール送信を試みます。SMTPコマンドを送ります。試しに、自分から自分にメール送信を試みます。
MAIL FROM: <test@example.com>
応答があります。
250 2.1.0 Ok
続けて、受信アドレスを指定します。
RCPT TO: <test@example.com>
この時点で、次のエラーメッセージが返ってくるはずです。
554 5.7.1 <test@example.com>: Recipient address rejected: Access denied
では、SMTP認証をしてどうなるかを確認してみます。一度telnetを抜けから、シェルで次のコマンドを実行します。
printf "%s\0%s\0%s" test@example.com test@example.com password | base64
「printf」にわたすのは、固定の文字列「"%s\0%s\0%s"」と、自分のメールアドレス2回、それにパスワードです。それをパイプでbase64コマンドに渡しBASE64エンコードします。次のような文字列が返ってくるはずです。
dGVzdEBleGFtcGxlLmNvbQB0ZXN0QGV4YW1wbGUuY29tAHBhc3N3b3Jk
これをコピーしておきます。次にtelnetでSubmissionポートに接続します。
telnet localhost 587
応答が返ってきたら、まずは「EHLO」を送信します。
EHLO localhost
更に、応答が返ってきたら、SMTP認証を行います。
AUTH PLAIN
これは「PLAIN認証を行う」というSMTPのコマンドです。応答があります。
334
数字が返ってきたら、先程コピーしたBASE64エンコードされた文字列を貼り付けて、ENTERキーを押します。
dGVzdEBleGFtcGxlLmNvbQB0ZXN0QGV4YW1wbGUuY29tAHBhc3N3b3Jk
次のような応答があれば、認証成功です。
235 2.7.0 Authentication successful
では、認証が通ったところで、自分から自分にメールを送信してみます。
MAIL FROM: <test@example.com>
応答があれば
RCPT TO: <test@example.com>
先程は「Access denied」でしたが、今回は受け付けられるはずです。
250 2.1.5 Ok
ここで確認完了です。telnetを抜けてください。