sendmailのメール中継のテスト方法について、telnetを使う方法を簡単に sendmail設定(2)Submissionポート(サブミッション・ポート)& SMTP-AUTH(認証)を使ってみる で紹介していました。
そのtelentを使った方法を備忘録もかねて、1つの記事にしておきます。
- 目次
- 履歴
2011年10月18日 初版
telnetを使ったsendmailのメール中継のテスト方法
早速、いろんなパターンでテストしてみましょう。
対象となるSMTPサーバーのIPアドレスは、12.34.56.78とします。
通常のtcpポート 25 を使ったメール中継を確認する
- telnetで接続するクライアント端末がOP25Bの対象か確認する
まず、tcpポート 25 のtelnetによる動作確認を行う場合は、telnetでアクセスするクライアント側が、OP25Bの規制にひっかかっていないか確認しておきましょう。
ほとんどの国内IPSであれば、自PCに割り当てられたIPアドレスは、OP25Bの対象になっているはずなので、telnetでアクセスしても接続できません。
とりあえず、Googleのメールサーバーへアクセスしてみてくだい。接続できれば、OP25Bの対象になっていないことになります。
[ OP25Bの対象になっている場合 ]
$ telnet alt1.gmail-smtp-in.l.google.com 25 Trying 74.125.113.27... telnet: Unable to connect to remote host: Connection timed out $
[ OP25Bの対象になっていない場合 ]
$ telnet alt1.gmail-smtp-in.l.google.com 25 Trying 74.125.113.27... Connected to alt1.gmail-smtp-in.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP Service ready QUIT 221 Service closing transmission channel Connection closed by foreign host. $
サーバの設定ばかりやっていると、ついつい自分がIPSでログインしていることを忘れていることがあります。それで、えらく悩んでしまったので備忘録として残してます。
OP25Bの対象の端末から確認しようとしてもできませんから、まずは、確認しましょう。
もし、OP25Bの対象でないサーバーがない方は、この方法でのtcp ポート 25 の確認はできません。別の方法を検討しましょう。
- SMTP-AUTH(認証)とメールの中継を確認する
/etc/mail/sendmail.mc が以下のような場合、tcp ポート 25 での認証はしないはずです。
... dnl --- コメントアウトしてあるものを解除します --- dnl dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl ... dnl --- 25portは認証しないように設定します --- dnl dnl DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl DAEMON_OPTIONS(`Port=smtp, Name=MTA, M=A')dnl ...
SMTP-AUTH(認証有り)になっていますが、tcpポート25に関しては、認証しない(M=A)ように設定してあります。
M=A は、認証しない 設定です。
M=a は、認証が必要とする 設定になります。
大文字小文字では、全く意味が違うので注意しましょう。
Postfixなら、以下のように smtpd_sasl_auth_enable が設定してある場合、認証が必要になります。
但し、smtpd_recipient_restrictions での設定が重要で、ここでの設定がメールの中継を許可する条件になります。
permit_sasl_authenticated が認証OKの場合、中継を許可するという設定になります。それ以前に設定されている条件が、 さらに優先的に処理されますので、ここでは、permit_mynetworks(mynetworksで設定されているホストからの中継は、すべて許可します) の設定が優先されます。
... smtpd_sasl_auth_enable = yes ... smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, ... ...
SMTP-AUTH(認証)しない(できない)かチェックしてみます。
$ telnet 12.34.56.78 25 Trying 12.34.56.78... Connected to 12.34.56.78. Escape character is '^]'. 220 host.example.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 13 Oct 2011 14:44:27 +0900 AUTH LOGIN 503 5.3.3 AUTH not available QUIT 221 2.0.0 host.example.com closing connection Connection closed by foreign host. $
AUTH not availableが出力され、ログインできなければOKです。
メールの中継ができないかチェックしてみます。
$ telnet 12.34.56.78 25 Trying 12.34.56.78... Connected to 12.34.56.78. Escape character is '^]'. 220 host.example.com ESMTP Sendmail 8.13.8/8.13.8; Thu, 13 Oct 2011 14:44:27 +0900 mail from:hoge@example.com 250 2.1.0 hoge@example.com... Sender ok rcpt to:test-user@yahoo.co.jp 550 5.7.1 test-user@yahoo.co.jp... Relaying denied. Proper authentication required. data 503 5.0.0 Need RCPT (recipient) QUIT 221 2.0.0 host.example.com closing connection Connection closed by foreign host. $
Relaying deniedが出力され、メールの中継ができなければOKです。
簡単にコマンドの解説をしておきます。
mail from:hoge@example.comhoge@example.comからのメールを送信要求しています。
rcpt to:test-user@yahoo.co.jptest-user@yahoo.co.jpへのメールを配信要求しています。
ここで、自サーバーの管轄外なので、Relaying deniedで受付拒否というのが正しい動作です。
dataメールの配信情報をいまから送ります・・・という宣言です。
ここで、配信先が決定していない(Need RCPT (recipient)) というエラーで受付拒否となります。
先のrcpt to:test-user@yahoo.co.jp が受け付けられていないので、エラーとなります。
QUITtelnet終了。
上記のように、ちゃんとメールの中継を拒否できればOKです。もし、何でもメールの中継を受け付けてしまうとスパムの踏み台にされかねません。注意しましょう。
Submission Port(587) + SMTP-AUTH (認証)を確認する
/etc/mail/sendmail.mc が以下のような場合、tcp ポート 587 では必ず認証が必要となるはずです。
|
SMTP-AUTH(認証)が必ず必要なことをチェックしてみます。
|
認証していない状態では、Authentication requiredが出力され、メールの中継ができなければOKです。
簡単にコマンドの解説をしておきます。
ここでは、まで認証手続きを終えていないので、Authentication requiredで受付拒否というのが正しい動作です。
ここでは、先のmailコマンドが受け付けられていないので、Need MAIL before RCPTでmailコマンドを先に必要というエラーで正しい動作です。
SMTP-AUTH(認証)後は、メールの中継ができることをチェックしてみます。
|
上記では、Message accepted for deliveryで、メールが正しく受け付けられたのでOKです。
簡単にコマンドの解説をしておきます。
以降、SMTP-AUTH(認証)を終えるまで、Base64によるエンコードされた文字列でやり取りします。
- VXNlcm5hbWU6 → Username: ( Base64 Encode前 )
ユーザ名を促すプロンプト表示です。次行に、 ( Base64 Encodeされた )ユーザ名を入力します。
例)hoge@example.com → aG9nZUBleGFtcGxlLmNvbQ== ( Base64 Encode後 )
- UGFzc3dvcmQ6 → Password: ( Base64 Encode前 )
パスワードを促すプロンプト表示です。次行に、 ( Base64 Encodeされた )パスワードを入力します。
例)pppwww → cHBwd3d3 ( Base64 Encode後 )
メール内容をここで入力します。最後は、’.‘(ピリオド)で終了となります。
最後にSubmission Portから送信したメールが正しく届いたか確認できたらOKです。
前半部分は、tcp ポート 25 を使った確認なので、しっかりやっておく必要があります。
後半部分は、sendmail設定(2)Submissionポート(サブミッション・ポート)& SMTP-AUTH(認証)を使ってみる でも同じようなことを記載しているので、詳しい説明もいらないと思います。
上記のような方法に限らず、少なくとも、sendmailの設定を変更したら、スパマーの踏む台サーバーにならないようにしっかり確認しておきましょう。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :