Postfixのリレーホストで無限ループを起こしていたなんて

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

原因不明のSMTP認証失敗に苦戦」という記事でメール送信できない問題が解決されたと述べたが、実際には解決できず、エラーメッセージも表示されないのに送信できないという不可解な問題に直面した。さらに調査を行った結果、今度こそやっと問題を解決できた。ここまで行くのにかなり時間がかかったと感じる。

原因と対処

リレーホスト無限ループ問題

今回の問題の一番の原因で、なおかつハマった部分としてPostfixのリレーホストがなぜか自分自身を指してしまっており、無限ループに陥っていた点である。Debianでは/etc/postfix/main.cfであるが、その場合、以下の記述があるとメールが正常に送信できなくなってしまう。

relayhost = $mydomain

これが含まれてしまうと、自分自身を永久にリレーしまくることになってしまい、結果としてメールの送信が不可能になってしまう。もしこの記述があった場合は、

#relayhost = $mydomain

のようにコメントアウトして無効化するか、あるいは記述そのものを削除してしまって構わない。

saslauthdの設定

個人的にはこの部分でもかなり面倒に感じた。saslauthdはPostfixにおけるSMTP認証でも連携して使用するが、この設定が正しくなされていないと認証に失敗してしまう。

Debianにおいては、以下のファイルの設定を確認する必要がある。

  • /etc/postfix/master.cf
  • /etc/default/saslauthd

まずは/etc/postfix/master.cfを確認する。主に以下の部分を確認しよう。

# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd

このうち、chrootの部分(左から5番目、右から4番目)を確認する。前のコードのように「-」になっていればPostfixはchroot環境で動いていることになる(「n」になっていればchroot環境ではない)。

これを確認したら、/etc/default/saslauthdを開く。終わりの部分に以下のコードが確認できるだろう。

# Other options (default: -c -m /var/run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
#
# WARNING: DO NOT SPECIFY THE -d OPTION.
# The -d option will cause saslauthd to run in the foreground instead of as
# a daemon. This will PREVENT YOUR SYSTEM FROM BOOTING PROPERLY. If you wish
# to run saslauthd in debug mode, please run it by hand to be safe.
#
# See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information.
# See the saslauthd man page and the output of 'saslauthd -h' for general
# information about these options.
#
# Example for chroot Postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Example for non-chroot Postfix users: "-c -m /var/run/saslauthd"
#
# To know if your Postfix is running chroot, check /etc/postfix/master.cf.
# If it has the line "smtp inet n - y - - smtpd" or "smtp inet n - - - - smtpd"
# then your Postfix is running in a chroot.
# If it has the line "smtp inet n - n - - smtpd" then your Postfix is NOT
# running in a chroot.
# OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

chroot環境で動いているのなら、そのままで問題ないが、そうでない場合(非chroot環境で動いている場合は、OPTIONSを以下のように変更する。

OPTIONS="-c -m /var/run/saslauthd"

ちなみに私の場合はchroot環境だったため、

OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

のままとした。

おわりに

今回のメール送信不能問題については、まずインターネット上で検索してもなかなかヒントが得られなかった上に、そのヒントがなかなかうまく使えていなかった面がある。私もサーバーの運用についてはまだまだこなせていない部分があるとはいえ、いつ問題が起きても対処できるようにしたいところである。

なお、もしサーバーを運用していて、私が経験したような問題に直面した際は、当方のブログが参考人なればと考えている。

タイトルとURLをコピーしました