[Posftix]25番ポートに接続しようとして"Connection refused"の対処法

個人的にメールサーバが苦手なのですが、表題の件を無事解決したのでメモ。

サーバAで外部からのメールを受信するため、iptablesで25番ポートを空けたのですが、外部から25番ポートに接続できませんでした。

サーバBで、
[foo@b.example.coml ~]$ telnet  a.example.com 25
Trying xx.xx.xx.xx...
telnet: connect to address xx.xx.xx.xx: Connection refused
telnet: Unable to connect to remote host: Connection refused
ぐぬぬ。
iptablesでポート空けるだけではダメっぽい。

サーバA で ポートリスンの状況を調査するべく、
サーバAでnestat
[hoge@a.example.com ~]$ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN
お?
25番ポートだけ、ローカルアドレスが"127.0.0.1"になってる!
これはもしかして、Postfixが外部からの通信をListenしておらず、ループバックアドレスからの通信だけをListenしているからだろうと推測。

サーバAの/etc/postfix/main.cf を見ると、
inet_interfaces = localhost
となっていた。
やはり!
inet_interfaces = all
に変更して、
sudo service postfix restart
して、 サーバBからtelnetしてみたら、
[foo@b.example.coml ~]$ telnet a.example.com 25
Trying xx.xx.xx.xx...
Connected to a.example.com (xx.xx.xx.xx).
Escape character is '^]'.
220 a.example.com ESMTP Postfix
いけました!!

ちなみに、途中 restartのところをreload してたらうまく行きませんでした。 たぶんPostfixのプロセスにおける、システムコールのソケット通信の確立(bindとかlisten)のところをやり直さないといけないので、reloadではダメなんだろうな、と推測。
カテゴリ: