QA@IT

Postfix に外部から接続できない件

12790 PV

CentOS 6に Postfix + Dovcot でメールサーバーを構築しています。
双方、サーバーからは送受信できるのですが、外部から送信サーバーに接続することができません。

例えば、Outlookであれば、アカウント設定からアカウント情報を追加してテストを行うと受信メールサーバー(POP3)へは接続が「OK」となりますが、「テスト電子メールメッセージの送信」に失敗して「送信(SMTP)メールサーバーに接続できません。」というエラーメッセージが出ます。

環境は次の通りです。

  • サーバーのサイト: さくらのVPS
  • OS: CentOS6.2
  • SMTP: Postfix 2.6.6-2.2.el6_1.x86_64
  • POP3: Dovcot

主な設定は次の通りです。

inet_interfaces = all
inet_protocols = ipv4
mail_name = Postfix
mail_owner = postfix
mail_version = 2.6.6
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, $myhostname.$mydomain
mydomain = 【ドメイン名】
myhostname = mail.【ドメイン名】
mynetworks = ***.***.0.0/16, ***.***.0.0/16, 127.0.0.0/8
mynetworks_style = subnet
myorigin = $mydomain

mynetworks_stylesubnet になっていますが、mynetworks にプロバイダのIPを先頭16bitで指定した為、mynetworks が優先適用されて、外部からもプロバイダ経由で接続できるはず、と思っていますが…全く接続できません。

以下を試してもだめでした。

  • SMTP AUTHを有効にして接続
  • 送信25番ポート⇒587番ポート
  • iptablesをストップ

サーバーから mail コマンドで外部にテストメールを送信することはできます。
テストメールに返信するとPOP3で受信することもできます。
外部からOutlookなどのメーラで接続して送信することがだけできません。
Thunderbird だと以下のエラーが /var/log/maillog にでます。

ホスト名 dovecot: pop3-login: Aborted login (auth failed, 1 attempts):

これは以下のサイトによると Postfix 側の問題なので、上記の通り、mynetworks に設定しています。
http://greenleaf.sakuraweb.com/index.php?Dovecot%20-Debian-

気になることとして、サーバ上でtelnetで25番ポートに接続すると
telnet localhost 25 では接続できますが、telnet 【FQDN】25 だと接続できません。
(プロンプトが帰ってきません)

どなたか有識者の方に、解決の糸口をご教示頂きたいと思います。
よろしくお願いします。

  • > 気になることとして、サーバ上でtelnetで25番ポートに接続すると
    > telnet localhost 25 では接続できますが、telnet 【FQDN】25 だと接続できません。
    > (プロンプトが帰ってきません)

    SMTPサーバ上で `telnet 【IPアドレス】25` とした場合はどのようになるでしょうか?
    -

回答

「外部」とは、サーバがあるネットワーク以外(サブネット以外)からのサイトという意味です。つまり、社外にパソコンを持ち出して、公衆LANや客先LANから自社SMTPを通してメールを送信するような場合を指しています。
※もっとも、実際には社内LANにSMTPサーバを構築しているのではなく、さくらインターネットのVPSを借りて、SMTPサーバを構築しています。

FQDN から索かれた IP アドレスはあっています。

netstat -ln の結果は以下の通りで、LISTENしています。
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN

netstat -lutの結果は以下の通りですが、
tcp 0 0 :smtp *: LISTEN

例えば、DNSの場合は、localhostと同時に【ホスト名】もポートを待ち受けているようなので、postfixがlocalhostから以外に待ち受けていないのではないか?と疑問をもっています。

udp 0 0 【ホスト名】:domain :
udp 0 0 localhost:domain :

なにか調べるところがあれば教えて頂ければと思います。どうぞよろしくお願い致します。

P.S.パッチ有難うございました。受け入れさせて頂きました。

編集 履歴 (0)
  • 「0.0.0.0:25」で両方でリッスンしています。
    また、リッスンしていないだけであれば、同一ホスト内からの telnet には RST で refuse されてプロンプトは即返ってくると思います。
    telnet が「Trying x.x.x.x...」で固まるのは、サーバが RST すら返していないということなので。
    -
  • 質問に対する質問や回答に対する返信や質問は「ノート」(この文章もノートです)に書きましょう(私もたまに間違えますがw)。 -
  • ノートに書くのですね。失礼しました。以後、ノートに書かせて頂きます。 -
  • telnetはrefuseされてかえってくることがないのです。ずっと固まっています。 -

「外部」とは具体的にどこでしょうか。ISP が自社送信用(SMTP)メールサーバー以外の 25/TCP (587/TCP) への接続を拒否しているということはありませんか。

http://ja.wikipedia.org/wiki/Outbound_Port_25_Blocking

iptables を無効にしたとのことですが、念の為 iptables -n -L で確認を。

なお、Postfix 自身には SMTP サービスへの接続を拒否する機能はありません。mynetworks は、smtpd_recipient_restrictionspermit_mynetworks などから参照するために利用するものであって、接続を拒否するものではありません。

参考にしたという http://greenleaf.sakuraweb.com/index.php?Dovecot%20-Debian- のページに Dovecot の POP サービスへのログイン失敗原因が Postfix にあるかのような記述がありますが、これは誤りです。 Postfix は Dovecot の POP/IMAP ユーザー認証サービスとまったく関係ありません。
Postfix の SMTP 認証の SASL バックエンドとして Dovecot を利用することはできますが、いずれにせよ、inet_interfacesmynetworks とは無関係です。

telnet FQDN 25 が応答がない件はよくわかりません。実行するとすぐに Trying IPアドレス... と表示されると思いますが、FQDN から索かれた IP アドレスはあっていますか?

編集 履歴 (4)
  • すいません、FQDNが応答がない件は、/etc/hostsにサーバIPアドレスをlocalhostに紐づけていたからでした。なぜこのような設定になっているのか…不明でしたが、FQDNを追加することで解決しました。 -
  • 合わせて、さきほど自己解決しました。iptablesのINPUTに587番がないことが原因でした。587番をINPUTに追加して、メーラ側を587で送信したら成功しました。iptablesは停止をして送信テストしたつもりだったのですが、私の設定ミスかもしれません。
    結果として、25番ポートブロックが原因でした。いろいろ教えて頂きましてありがとうございました。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。