接尾辞で、不明なローカルアカウントのキャッチオールアドレスを設定しようとしています。ローカルユーザーに配信できるメールはすべて、ローカルメールボックスに配信する必要があります(ローカルエイリアスとメールを外部に転送するエイリアスの両方について、/etc/aliases
のエイリアスを尊重します)。 /etc/aliases
または/etc/passwd
に存在しないユーザー宛てのメールは、root
にリダイレクトする必要があります。 root
の場合、/etc/aliases
にエイリアスを設定して、別のメールアドレス[email protected]
(ローカルサーバー上ではない)にリダイレクトします。
これを達成するために、私はmain.cf
で設定しました。
luser_relay = root
local_recipient_maps =
luser_relay
に対して試したその他の設定は次のとおりです。
[email protected]
root@localhost
[email protected]
root@--server hostname--
root@$local
--other user with no alias--
--other user with no alias--@localhost
--other user with no [email protected]
--other user with no alias--@--server hostname--
--other user with no alias--@$local
しかし、ユーザールックアップエラーが発生し続けます(mail -s test test
を使用して存在しないテストユーザーにメールを送信する場合):
Jan 4 14:08:03 test postfix/pickup[28595]: A4E3382454: uid=--uid-- from=<--local user-->
Jan 4 14:08:03 test postfix/cleanup[29192]: A4E3382454: message-id=<20150104140803.A4E3382454@--server hostname-->
Jan 4 14:08:03 test postfix/qmgr[28596]: A4E3382454: from=<--local user--@--server hostname-->, size=456, nrcpt=1 (queue active)
Jan 4 14:08:03 test postfix/local[29194]: warning: error looking up passwd info for test: No such file or directory
Jan 4 14:08:03 test postfix/local[29194]: A4E3382454: to=<test@--server hostname-->, orig_to=<test>, relay=local, delay=0.02, delays=0.01/0/0/0, dsn=4.0.0, status=deferred (user lookup error)
キャッチオールアドレスが[email protected]
に設定されているソリューションがある場合は問題ありませんが、root
にリダイレクトし、/etc/aliaseses
を尊重することをお勧めします。 [email protected]
を変更します。/etc/aliases
で行うだけで、別の接尾辞構成ファイルでも行う必要はありません。
私のpostfixバージョンは2.10.1(CentOS 7)で、上記のluser_relay
とlocal_recipient_maps
の他に、recipient_bcc_maps
とtransport_maps
を追加しました。
おそらく私の路線図はluser_relay
に干渉しますか?
/.*@localhost(\.localdomain)?$/ local:
/.*@--the server's hostname--/ local:
/.*@--company domain-- relay:
/.*/ discard:
トランスポートマップの目的は、ローカルメールを配信し、メールを会社のドメインに送信できるようにすることですが、その他のメールは破棄します。 recipient_bcc_maps
は、トランスポートマップで破棄されたすべてのメールをデバッグアドレスにbccするように設定されています。また、/etc/aliases
のroot
のエイリアスは--other domain to not discard--
に分類されます。これは開発サーバーに関係するため、ローカルメールをそのまま配信し、会社のドメイン宛てのメールも配信しますが、他のメールが外部に送信されないようにします。
postconf -n
の出力:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = localhost
inet_protocols = all
local_recipient_maps =
luser_relay = root
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
recipient_bcc_maps = pcre:/etc/postfix/recipient_bcc
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
transport_maps = pcre:/etc/postfix/transport
unknown_local_recipient_reject_code = 550
私の構成のエラーを見つけることができる人はいますか?
ありがとうございました!
長い時間がかかりましたが、ようやく問題を見つけることができました。 NSS構成/etc/nsswitch.conf
にあります。私のRackspaceCloudServerにはデフォルトでyumパッケージsssd-client
がインストールされており、/etc/nsswitch.conf
にはpasswd
およびsss
を使用するその他のファイルのデフォルトエントリがあります。
基本的に、デフォルトの/etc/nsswitch.conf
があり、sssd-client
パッケージをインストールすると、CentOS7でNo such file or directory
の問題が発生します。これは/var/lib/sss/mc/passwd
を検索しようとするためです(最終的にはこれがわかりました) strace
の助けを借りて、これも適切に機能させるのに大きな手間でした)。ただし、sssd
を設定していない場合、そのファイルは存在しません。 CentOSWebサイトからCentOS7 DVDをダウンロードし、VMに最小限のインストールをインストールすることで、これをテストしました。次に、正常に機能するPostfix構成にluser_relay
を追加しました。その後、sssd-client
をインストールするだけで、「魔法のように」機能しなくなりました。
修正1:/etc/nsswitch.conf
からsss
を削除します。
次のような行が表示されます。
passwd: files sss
これを次のように変更します。
passwd: files
デフォルトでは、sss
はshadow
、group
、services
、およびnetgroup
に対しても有効になっていますが、これらについても削除する必要があります。 libnss
がそれらにアクセスしようとするとそこで問題が発生します。
修正2:sssd-client
パッケージを削除します。
sssd-client
パッケージを削除すると、問題も修正されます。クライアントがないと、libnss
は/etc/nsswitch.conf
のsss
ディレクティブを無視するためです。不要な場合は、yum remove sssd-client
で削除することをお勧めします。