Postfix で別のパッケージをアップデートすると急にメールが受信できなるエラーが発生した事がある。そしてその原因が、あまりにも意外な事だったので、今回は特別に記事にしてみようと思う。

※ この問題は Fedora 26 や CentOS 7 でも発生する様です。

 

原因の調査

状況は、メールがユーザー(バーチャルユーザー)に配信されず、ペンディング(一時的に棚上げ)状態になっている事。

※ メールのバーチャルユーザーとは、サーバーマシンにログインアカウントを持っていない(つまり「/home」にスペースを有していない)ユーザーの事。

そこで、メール配信の状態を以下のコマンドで確認した。

sudo journalctl -u postfix -f

この状態でメールを流してみる。

するとログメッセージに以下の警告メッセージを発見した。

warning: error looking up passwd info for postmaster: Connection reset by peer

この警告を起点としてメールがペンディングされている様だった。

ただしコレはパスワードの入力ミスなどではなく、それまで正常に動作していたクライアント(Thunderbird)を利用して行ったテストである。

 

つまりは、サーバー側でのパスワード認証に問題が発生している事が、原因と思われる。

しかし「/etc/postfix/main.cf」などには問題は発見出来なかった。 当然である。 それまで正常に動作していたのだから。

 

そこで注目したのが「passwd」の文字。「password」ではなく「passwd」。 コレはもしかして「/etc/passwd」を指しているのではないだろうか?

更にログを細かく観察すると「local_recipient_maps (メールの受信可能者リスト)」を見る前にエラーを起こしている。

一体、何が起こっているのだろう。

 

 

原因の判明

原因はバーチャルユーザーであるにもかかわらず、「/etc/passwd」で間違いないらしい。

原因は判った。 でも理由が理解出来ない。

そこで根性を入れて英語もページを見まくると次のページを発見した。

postfix error looking up passwd info (catch-all)

要するに NSS(Network Service Switch)ライブラリのセイらしい。

つまり今回の原因は、Postfix に組み込まれた NSS ライブラリがバーチャルユーザーにもかかわらず、「passwd」を見に行こうとして失敗したって事らしい。

 

バーチャルユーザーなら見つからないのは当然であるし、そもそも「passwd」を見に行こうとする理由や必要性が無い。

 

しかし「passwd」を見に行かない事を強制する設定方法が見つからなかった。

そこで「/etc/nsswitch.conf」を修正する方法で解決する事に決めた。

 

「/etc/nsswitch.conf」の項目で「passwd:」の項目に「systemd」や「sss」が含まれている場合は「files」のみに変更する必要がある。

 

修正前 修正後
passwd: sss files systemd
passwd: files systemd
passwd: sss files
passwd: files

 

勿論、「sssd-client」パッケージをインストールしてある場合は、注意が必要である。

特に利用してないのであれば「sssd-client」パッケージを削除する必要はないが、Postfix との共存を考えているなら別の解決方法を模索する必要がある。