タグ:sendmail ( 2 ) タグの人気記事
sendmailのメールキューを確認、削除する方法
sendmailでメールキューを確認するには mailq コマンドで出来るようです。

# mailq
/var/spool/mqueue (2 requests)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
pB1NdWZh000853 5462 Fri Dec 2 08:50 MAILER-DAEMON
(Deferred: Connection timed out with smtp.hoge.jp.)
admin@hoge.jp
pB1NdWZk000853 6910 Fri Dec 2 08:50 MAILER-DAEMON
(Deferred: Connection timed out with smtp.hoge.jp.)
admin@hoge.jp
Total requests: 2



メールキューに溜まっているメールは /var/spool/mqueue にファイルとして存在するようです。

# ls /var/spool/mqueue
pB1NdWZh000853 pB1NdWZk000853


ファイル名とメールのQ-IDは一致しているようです。
このファイルを直接消してやればいいようです。
キュー全体を消したいときは、/var/spool/mqueue の中身をすべて消せばいいようです。

# rm -f /var/spool/mqueue/*


参考:
Linux:sendmailのメールキューを削除するには? KAKIMASS
[PR]
by Jehoshaphat | 2013-04-03 23:15 | サーバがらみ | Trackback | Comments(0)
OP25B対策Part2 メールサーバを構築し別メールサーバに全転送【sendmail編】
OP25B対策Part1 Linuxルータでポート変換(非推奨)でOP25Bされている環境で、ポート25をポート587に変換して送る方法を書きました。
これはかなり強引で非推奨な実験的環境です。


ということで、より一般的で推奨できるOP25B対策は、LAN内にメールサーバを立てて、プロバイダもしくはレンタルしてるメールサーバに丸投げする方法です。
LAN内の送信ポート変更できないソフト,機器はこのLAN内のメールサーバに送信メールを投げます。

イメージとしては以下のような感じです。
上段がプロバイダのメールサーバを経由させる方法、下段がレンタルしてるメールサーバを経由させる方法です。
e0091163_2344727.jpg


プロバイダのメールサーバを使うにしろ、別のレンタルしているメールサーバを使うにしろ、どちらの方法でも sendmail の設定は変わりません。(設定としては(Linux)LogwatchのログメールをGmailに送りたいに書いている内容と似ています。)
今回使った sendmail は 8.13.8 で、CentOS5.6上で動かしています。
また、プロバイダはNTT-MEの wakwak を使っています。

まず、以下のようにsendmail.mcを編集します。(sendmail.mcでは dnl がコメントアウト)


# vi /etc/mail/sendmail.mc

dnl define(`SMART_HOST', `smtp.your.provider')dnl の下に以下を追加。
define(`SMART_HOST', `[am.wakwak.com]') dnl 丸投げするメールサーバを指定。プロバイダのメールサーバに丸投げ。 [ ]の意味ついては後ほど。これを指定しない場合kの値のMXレコードにアクセスする。
define(`ESMTP_MAILER_ARGS', `TCP $h 587') dnl 宛先を587ポートにする設定
define(`RELAY_MAILER_ARGS', `TCP $h 587') dnl 宛先を587ポートにする設定
FEATURE(authinfo, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`authinfo') dnl SMTP認証で使うファイルの指定。
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl SMTP認証の認証方式
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl SMTP認証の認証方式


DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
↓ コメントアウトする。自信以外からのアクセスも許可。これをしないとLAN内の別端末からのメール受け取れない
dnl ####DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

sendmail.mcで設定が書き終わったら、以下コマンドで実際の設定ファイル sendmail.cf を作成します。


m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

sendmailをリロードもしくは、再起動します。

service sendmail reload
OR
service sendmail restart



自身宛かどうか
sendmailでは、/etc/mail/local-host-names に設定してあるドメイン名が送られてきたメールのドメイン名と一致すれば自分のサーバ宛と判断し保存します。
それ以外は外部の MTA に転送します。なので、OP25B対策での専用サーバではこのファイル内に設定はしません。


転送制限設定
sendamilでは、/etc/mail/access.db ファイルで、メールを受け入れるかどうかのアクセス制御をしています。
以下のようにファイルを編集し、LAN内の他の端末からのメールを受け入れるようにします。
RELAYは許可、REJECTは拒否、OK(もしくは無指定時)は自身宛と判断し保存します。


# vi /etc/mail/access

Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
# ↓192.168.0から始まるIPアドレスのホストからのメールリレーを認める
Connect:192.168.0 RELAY
# ↓10.0.1.1のIPアドレスのホストからのメールリレーを認めない
Connect:10.0.1.1 REJECT
# ↓10.0.1.2のIPアドレスのホストからは自身宛と判断し、宛先が/etc/mail/local-host-namesにあれば保存、なければ受信拒否。
Connect:10.0.1.2 OK

以下コマンドで、/etc/mail/accessから、設定ファイル(/etc/mail/access.db)を作成します。
このコマンドで設定ファイルを作成した場合、sendmailを再起動させることなく即時反映ができるようです。

makemap hash /etc/mail/access.db < /etc/mail/access

(もし、インターネット側からこのsendmailサーバにメールが届くようにFWやNATで設定しているのであれば、スパムの踏み台にされる可能性がありますので、/etc/mail/access の設定を慎重にしましょう)


SMTP AUTH設定
このsendmailサーバが、プロバイダ、レンタル等丸投げにするメールサーバとのSMTP認証できるように設定を行います。
/etc/mail/authinfo に以下のように設定を書きます。

# vi /etc/mail/authinfo

AuthInfo:am.wakwak.com "U:user" "P:passwd" "M:DIGEST-MD5 CRAM-MD5 LOGIN PLAIN"
(Uは認証に使うメールアドレスの@より前、Pはパスワードを入れ、Mで認証方式を設定します)

上記では、認証方式を DIGEST-MD5 CRAM-MD5 LOGIN PLAIN の4つに設定してますが、送信メールサーバがどの認証に対応しているかは、telnetでわかります。

%gt;telnet am.wakwak.com 587
220 am.wakwak.com ESMTP Sendmail 8.14.3/8.14.3/2011-11-15; Sat, 3 Dec 2011 20:40:19 +0900 (JST)
ehlo localhost ←このコマンドを入力すると、↓のように各種情報でてくる。
250-am.wakwak.com Hello xxxxxx.ppp.wakwak.ne.jp [xxx.xxx.xxx.xxx], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 20971520
250-AUTH DIGEST-MD5 CRAM-MD5 LOGIN PLAIN ←対応しているSMTP認証方式がこれでわかる。
250-DELIVERBY
250 HELP
quit ←認証方式わかったのでオサラバ
221 2.0.0 am.wakwak.com closing connection


ホストとの接続が切断されました。

authinfoファイルが作成できたらauthinfo.dbファイルを作成します。
makemapコマンドでsendmail用のデータベースマップを作成できます。る

makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo


これで、設定は終了です。
後は、LAN内の送信したい端末のSMTPサーバ欄に、このsendmailサーバのアドレスを入れてやります。
クライアント~sendmailサーバ間はポートは25でOKですし、SMTP認証も掛ける必要はありません。
(クライアント~sendmailサーバ間のポートも587にしたいときは DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea') を書きます。“a”はESMTPでの認証を必須とする指定、“E”はETRNコマンドを禁止する指定です。MPT認証を有効しに、クライアント側でその設定しないと、530 5.7.0 Authentication required になってしまいます。)

クライアントからメールを送信して、/var/log/maillog に以下のように正常に終わった旨が残り、相手先に届いていればOKです。

Dec 3 20:51:09 localhost sendmail[3088]: pB3Bp8NU003088: from=<hoge@hogepiyo.info>, size=334, class=0, nrcpts=1, msgid=<20111203205107.6FA1.CA40460F@hogepiyo.info>, proto=ESMTP, daemon=MTA, relay=[192.168.0.9]
Dec 3 20:51:09 localhost sendmail[3090]: pB3Bp8NU003088: to=<third.rate.pg@gmail.com>, delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=120334, relay=am.wakwak.com. [211.9.230.130], dsn=2.0.0, stat=Sent (pB3BpAYN018000 Message accepted for delivery)



今回はまった点はMXレコード
さて、今回ハマった点が、丸投げ先のメールサーバの指定です。
当初、丸投げするメールサーバを以下のように指定していました。

define(`SMART_HOST', `am.wakwak.com')

しかし、この設定では、メールキューにメールがずっと残ったままで、/var/log/maillog に以下のようなログが出ていました。

Dec 3 18:21:43 localhost sendmail[2319]: pB39LhqT002319: from=<hoge@hogepiyo.info>, size=382, class=0, nrcpts=1, msgid=<20111203182143.6F69.B01E2D28@am.wakwak.com>, proto=ESMTP, daemon=MTA, relay=[192.168.0.11]
Dec 3 18:22:43 localhost sendmail[2326]: pB39LhqT002319: to=<third.rate.pg@gmail.com>, delay=00:01:00, xdelay=00:01:00, mailer=relay, pri=120382, relay=am.mds.wakwak.com. [211.9.230.163], dsn=4.0.0, stat=Deferred: Connection timed out with am.mds.wakwak.com.

Connection timed out しているようです。
なんで? と思いました。ポートをサブミッションポートを使わず、25で送るようにしたら、タイムアウトすることはなくなったんですが、以下のようなエラーメールが帰ってきます。

----- The following addresses had permanent fatal errors -----
<third.rate.pg@gmail.com>
(reason: 550 5.7.1 <third.rate.pg@gmail.com>... Relaying denied)

----- Transcript of session follows -----
... while talking to am.mds.wakwak.com.:
>>> DATA
<<< 550 5.7.1 <third.rate.pg@gmail.com>... Relaying denied
550 5.1.1 <third.rate.pg@gmail.com>... User unknown
<<< 503 5.0.0 Need RCPT (recipient)

このメールログと、エラーメールでふと気付いたのが、am.mds.wakwak.com につなぎに行っていることでした。
丸投げ先のプロバイダのメールサーバは am.wakwak.com です。
じゃぁ am.mds.wakwak.com ってなんだ?と思って思いついたのがMXレコードです。

案の定 nslookup で確認したら、am.mds.wakwak.com は am.wakwak.com のMXレコードの値でした。

> nsloolup
> set type=MX
> am.wakwak.com
権限のない回答:
am.wakwak.com MX preference = 10, mail exchanger = am.mds.wakwak.com
↑MXレコードのサーバ名

> set type=A
> am.wakwak.com
権限のない回答:
名前: am.wakwak.com
Address: 211.9.230.130
↑AレコードのサーバのIP


つまり、本来 am.wakwak.com(211.9.230.130)に接続しないといけないのに、sendmailは am.wakwak.com のMXレコードである am.mds.wakwak.com を見に行っていたわけです。
では、どうすれば DNS のMXレコードを引かずに、Aレコードを参照するようになるかというのは、UNIX/SendMail - 1円切手のメモに書いてるようにホスト名を [ ] でくくることが必要みたいでした。

define(`SMART_HOST', `am.wakwak.com')
  ↓ [ ] でくくる
define(`SMART_HOST', `[am.wakwak.com]')
define(`SMART_HOST', `[10.0.0.1]') dnl ←IPで指定したい場合も [ ] でくくる

sendmailの設定はなかなかクセが強いので、苦労しました。
ただ、前回は設定の意味もよくわかっていないままでしたが、今回はだいぶsendmailの挙動について理解できるようになりました。

なお、Postfixでの方法もOP25B対策Part2 メールサーバを構築し別メールサーバに全転送【Postfix編】で書いています。

参考:
sendmailですべてのメールを中継サーバーのSubmission portに送る
◇sendmail.mcの編集と設定◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆
◇受信/転送に関する設定◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆
◇サブミッションポートの設定◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆
sendmailをSMTPクライアントにしてWAKWAKからメール送信する。 - hosonya blog
OP25B(Outbound Port 25 Blocking)対策 - CentOSで自宅サーバー構築
SMTP/POP3 プロトコルエラー応答一覧
[PR]
by Jehoshaphat | 2013-04-01 23:04 | ネットワーク | Trackback | Comments(0)