postfix 2.4.1 と freebsd 6.2 の環境ですが、
送信メールがプロバイダの中継サーバを経由して送信できません。
プロバイダはplalaで、中継サーバはmmr.plala.or.jpとなります。
原因はどこにあるかご教授頂けませんでしょうか。
主な設定は下記の通りです。
[main.cf]
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = example.jp
myhostname = hoge.example.jp
mynetworks = 192.168.11.0/24, 127.0.0.0/8
mynetworks_style = subnet
myorigin = $mydomain
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
relayhost = mmr.plala.or.jp
[maillog]
hoge postfix/qmgr[2391]: warning: connect to transport smtp: No such file or directory
hoge postfix/error[2459]: 27A30B864: to=<hoge@hotmail.com>, relay=none,delay=1184, delays=1184/0.01/0/0.01, dsn=4.3.0, status=deferred (mail transport unavailable)
ちなみにmydestinationにplala.or.jpを追加した場合、
hoge@plala.or.jp等のplala.or.jpに対してはmmr.plala.or.jpを
経由して送信できました。
宜しくお願いします。
トラブル解決の基本は、ログに始まりログに終わる?です。
> postfix 2.4.1 と freebsd 6.2 の環境ですが、
> 送信メールがプロバイダの中継サーバを経由して送信できません。
> プロバイダはplalaで、中継サーバはmmr.plala.or.jpとなります。
> 原因はどこにあるかご教授頂けませんでしょうか。
>
> 主な設定は下記の通りです。
> [main.cf]
> mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
> mydomain = example.jp
> myhostname = hoge.example.jp
> mynetworks = 192.168.11.0/24, 127.0.0.0/8
> mynetworks_style = subnet
> myorigin = $mydomain
> alias_database = hash:/etc/mail/aliases
> alias_maps = hash:/etc/mail/aliases
> relayhost = mmr.plala.or.jp
>
> [maillog]
> hoge postfix/qmgr[2391]: warning: connect to transport smtp: No such file or directory
ログのとおりで、transport or transportファイルがないだけでは?
postconf -n としたときに transport_maps が出てきませんか?
なお、relayhost = mmr.plala.or.jp は、relayhost = [mmr.plala.or.jp] としたほうがいいです。[] で囲まれた形式は DNS MX 検索を行わないようになります。
> hoge postfix/error[2459]: 27A30B864: to=<hoge@hotmail.com>, relay=none,delay=1184, delays=1184/0.01/0/0.01, dsn=4.3.0, status=deferred (mail transport unavailable)
>
> ちなみにmydestinationにplala.or.jpを追加した場合、
> hoge@plala.or.jp等のplala.or.jpに対してはmmr.plala.or.jpを
> 経由して送信できました。
これは何をしているかお分かりですよね。この設定がしてるなら直ちにやめることです。あて先限定ですが、plala.or.jpに対してオープンリレーになっています。メールサーバの設定は意味を理解しないで不用意に触るのはまずいと思います。
一瞬の隙をついてやられてしまいますよ。ブラックリストに乗ったら面倒ですし、他の方にも迷惑です。
早速のご回答ありがとうございます。
> postconf -n としたときに transport_maps が出てきませんか?
postconf -n を実行しましたが transport_maps の項目はありませんでした。
明示的に transport_maps = と main.cf に記載しても改善されませんでした。
> なお、relayhost = mmr.plala.or.jp は、relayhost = [mmr.plala.or.jp] としたほうがいいです。[] で囲まれた形式は DNS MX 検索を行わないようになります。
ご教授ありがとうございます。
relayhostは[]で括るよう変更しました。
> 一瞬の隙をついてやられてしまいますよ。ブラックリストに乗ったら面倒ですし、他の方にも迷惑です。
お気遣いありがとうございます。
この設定は試験の為、一時的に設定していただけです。
正常に動作するまではpostfix自体は停止しています。
以上です。
他に考えられる部分はありますでしょうか。
> 明示的に transport_maps = と main.cf に記載しても改善されませんでし
設定しないのと同じ
> 他に考えられる部分はありますでしょうか。
postfix transport_maps でgoogle検索しましょう
transport_mapsを列記したファイルを自分で作成し
postmapでdbファイルを作成します
それをmain.cfで指定します
dbファイルは Berkeley DB database libraryを利用したバイナリファイル
返信ありがとうございます。
> postfix transport_maps でgoogle検索しましょう
transport_maps は特定の宛先に対して転送設定をするものと認識しております。
プロバイダのOB25Bにひっかからないよう全てのメールの転送をプロバイダの
中継サーバを経由するように設定したく思っております。
検索しましたが、全てのメールを中継させるには relayhost を設定するとの記載があり、
特定の宛先に対しての中継は transport_maps を利用するような記載がありました。
今回の場合は transport_maps に自分宛以外の宛先を transport_maps に記載する事で、
取り合えず回避できるものなのでしょうか。
# "自分宛以外"という設定方法はわかりませんが...
何かお気づきの点がありましたらご教授下さい。
宜しくお願い致します。
> transport_maps は特定の宛先に対して転送設定をするものと認識しております。
> プロバイダのOB25Bにひっかからないよう全てのメールの転送をプロバイダの
> 中継サーバを経由するように設定したく思っております。
>
> 検索しましたが、全てのメールを中継させるには relayhost を設定するとの記載があり、
> 特定の宛先に対しての中継は transport_maps を利用するような記載がありました。
この認識であってます。
で、元の
connect to transport smtp: No such file or directory
というエラーですが、これはtransportが無いという意味ではなく、smtpが無いということのようです。
まず、
# ls -l /var/spool/postfix/private
で、smtpというソケットがあるか確認してください。恐らく存在しないと思います。これが、無いといっている原因です。
存在しないなら、
# cat /etc/postfix/master.cf | grep smtp
で、
smtp unix - - n - - smtp
という行があるか確認してください。
unixの次が "n" になっていたら "-" に変更してください。"-" なら、postfixをreloadではなく、一旦停止して再度起動してみてください。
ご回答ありがとうございます。
結果から言いますと無事復旧致しました。
ありがとうございます。
> # ls -l /var/spool/postfix/private
==> おやじさんが仰る通りsmtpは存在しませんでした。
> # cat /etc/postfix/master.cf | grep smtp
> smtp unix - - n - - smtp
==> smtp unix の項目(private)を n から - に変更し、
postfix を再起動しました。
メール送信のテストを実施し無事に送付できる事を
確認致しました。
その後、- から n に戻したところ、ログに Connection refused と
出力され、拒否されているようです。
private の項目を - にする事で許可しているのかなと思っています。
ちなみに、今回変更した master.cf の部分は、インストール後に
みなさん実施されているのでしょうか。
master.cf の private 項目の意味や、smtp が無くなってしまった
事象については追々調べていこうと思います。
誠にありがとうございました。
久々に、ちょっと興奮してしまいましたw
> private の項目を - にする事で許可しているのかなと思っています。
> ちなみに、今回変更した master.cf の部分は、インストール後に
> みなさん実施されているのでしょうか。
postfix2.5.2をCentOS5.2でsourceからmakeしています
master.cfで
smtp unix - - n - - smtp
はデフォルトの状態です
man 5 master によれば
unix The service listens on a UNIX-domain socket
and is accessible for local clients only.
Private (default: y)
Whether or not access is restricted to the mail system.
Internet (type inet) services can't be private.
返信ありがとうございます。
私もデフォルト設定を見てみたら - になっていました。
恐らく自分のミスで n にしてしまったのでしょう。
ネットで private の意味を調べてみたら「メールシステムへのアクセスを制限するかどうか」
という記載がありました。
制限の設定で、smtpのソケットが作成するしないとなるのは、ちょっと良くわからないですね。
そこは仕様として覚えておこうかと思います。
今回のハマリで、いろいろ調べていくうちに postfix の奥深さがわかり、
ちょっといろいろ触ってみようかと思っています。
また、解らないことがあった際には、質問するかもしれませんが、
その際は宜しくお願いします。
> 私もデフォルト設定を見てみたら - になっていました。
> 恐らく自分のミスで n にしてしまったのでしょう。
もしそうなら、一回も起動していない状態で書き換えたのでしょう。
既に実験されているので分かると思いますが、最初から"n"になっていたためprivateフォルダ内にsmtpというファイルがなかったので、「smtp: No such file or directory」となっていた。一回、"-"にして起動するとこの時点でsmtpというファイルが作成されPostfixを停止してもこれは残るので、以降は、"n"にすると今度はファイルがあるがソケットとしては動いていないので、繋がらずに「Connection refused」となったのです。
> ネットで private の意味を調べてみたら「メールシステムへのアクセスを制限するかどうか」
> という記載がありました。
>
> 制限の設定で、smtpのソケットが作成するしないとなるのは、ちょっと良くわからないですね。
> そこは仕様として覚えておこうかと思います。
制限ありきではなく、smtpのサービスの内容(smtpクライアントとして他のSMTPサーバに配送)やサービス種別(unix)からして、privateでソケットを作成するというのは普通の考え方と思います。今回はqmgrがソケットを使ってsmtp経由で外部のSMTPサーバに送信しようとしているところでsmtpがprivateで見つからなかったエラーです。smtpをinetで動かす理由は動作上はないと思います。
ご説明ありがとう御座います。
smtpが無い状態でも、ローカルのアカウントに対しては、
メールが送信できた事と、mydestinationにplala.or.jpを追加した時に
hoge@hoge.plala.or.jpにだけは送信できたのって、なぜなんでしょうかね。
そもそもsmtpが無い状態だと送信できない感じがするのですが...
あと、今となっては調べられない事ですが、postfixをインストールして、
基本的な動作確認を行ったのが、かなり昔なので、master.cfを起動前に
変更したかどうかは不明です。でも普通に使うのにmaster.cfっていじらないですよね..
submissionのコメントが外れているので変更したにはしたのですが..
それで今回、こんな事象が発生して、ここにお世話になる前に、
日本語のサイトには同じ事象の例が無かったので、海外のサイトで、
いろいろ見てたら、rm -rf /var/spool/postfix/* して復旧したよって
書き込みがあって同じく試してみたことがあります。
その影響でsmtpが無くなってしまったんでしょうね。
そもそも無かったかどうかは不明なので、調べようがありませんが...
解決したのでログ消してしまいました。
> smtpが無い状態でも、ローカルのアカウントに対しては、
> メールが送信できた事と、mydestinationにplala.or.jpを追加した時に
> hoge@hoge.plala.or.jpにだけは送信できたのって、なぜなんでしょうかね。
> そもそもsmtpが無い状態だと送信できない感じがするのですが...
配送エージェントはいろいろあります。若干smtpに関して意識して書いたつもりですが、smtpは他のSMTPサーバへ配送するためのSMTPクライアントであって、ローカルアカウントへの配送では、localが使われます。また、mydestinationの書かれたあて先への配送は$local_transportが使用されるので、これもデフォルトのままならlocalなのでsmtpがなくても配送できてしまいます。何もおかしなことではありません。
http://www.postfix-jp.info/trans-2.0/jhtml/delivering.html
> あと、今となっては調べられない事ですが、postfixをインストールして、
> 基本的な動作確認を行ったのが、かなり昔なので、master.cfを起動前に
> 変更したかどうかは不明です。でも普通に使うのにmaster.cfっていじらないですよね..
> submissionのコメントが外れているので変更したにはしたのですが..
> それで今回、こんな事象が発生して、ここにお世話になる前に、
> 日本語のサイトには同じ事象の例が無かったので、海外のサイトで、
> いろいろ見てたら、rm -rf /var/spool/postfix/* して復旧したよって
> 書き込みがあって同じく試してみたことがあります。
> その影響でsmtpが無くなってしまったんでしょうね。
実験した結果からわかると思いますが、smtpがあったのなら、「smtp: No such file or directory」とはならず、「Connection refused」なので、そもそもこの問題にはならなかったのでは?
文脈としては、過去動いていたシステムがおかしくなったようにも見えますが、最初からうまく動いていないのですよね。
パッケージのmaster.cfが"-"なら、誰かが書き換えるようなものではないので、自分で触ったとしか思えませんが?
早速のご返信ありがとうございます。
> 配送エージェントはいろいろあります。若干smtpに関して意識して書いたつもりですが
なるほど、たしかにログに local と記載されていました。
ご丁寧にご説明ありがとうございます。スッキリしました。
> 実験した結果からわかると思いますが、smtpがあったのなら、「smtp: No such file or directory」とはならず...
仰るとおりだと思います。
ちゃんと変更部分はメモしとかないとダメですね。
UNIXドメインのソケットは他のマシン上のプロセスとは通信できないので
同じマシン内で動作しているプロセス同士で安全に通信することができる
INETドメインにしたら、継っているネットワークのマシンと通信できてしまう
なるほど。わかりやすいご説明ありがとうございます。
そもそも n にする事なんてありえないですね。
> UNIXドメインのソケットは他のマシン上のプロセスとは通信できないので
> 同じマシン内で動作しているプロセス同士で安全に通信することができる
> INETドメインにしたら、継っているネットワークのマシンと通信できてしまう