sendmailのmaillogの ctladdr 。
Nov 9 11:30:03 hostname sm-mta[20227]: pA92U2St020227: from=<user@hostname.domain.com>, size=314,, nrcpts=1, msgid=<201111090230.pA92U2qY020226@hostname.domain.com>, proto=ESMTP, daemon=MTA-v4, relay=localhost.localdomain [127.0.0.1] Nov 9 11:30:03 hostname sm-mta[20228]: pA92U2St020227: to=<user@hostname.domain.com>, ctladdr=<user@hostname.domain.com> (502/502), delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30633, dsn=2.0.0, stat=Sent
「ctladdr」とは、メール配信をコントロールしているメールアドレスとUID/GIDを記述します。
Web上のメールフォームからメールを送ったりすると、ctladdrはApacheになったりします。その場合はメール送信に利用するコマンド「sendmail」にオプション「-f 送信元にしたいメールアドレス」を追加すれば解決できます。ってこれは蛇足です。
この「ctladdr」がどのように設定されているかを確認していたところ、まず分かったのはenvelop-fromアドレスがctladdrとして利用されることです。Fromに指定したものが「ctladdr」に表示され、そしてそのメールアドレスのローカル部分(ここ@domain.com)と同じIDでユーザが存在する場合は、該当ユーザのUIDとGIDも記述するようです。
さて、私が「ctladdrのログが無い」のを経験したSendmail環境にはvirtusertableを利用する設定が組み込まれておりました。
このvirtusertableの設定状況によって、ctladdrの表示が変わったり、ctladdrの記録すらなくなったりしました。原因はvirtusertableに有りましたので、以下
・ctladdrを確認できたvirtusertableの設定 と
・ctladdrを確認できなかったvirtusertableの設定 を書いておきます。
VirtuserTableの記述その1:メールアドレスの@前と配信先が同じ場合
user@hostname.domain.com user
使用したFrom:「user@hostname.domain.com 」
結果: ctladdr=<user@hostname.domain.com> (userのUID/userのGID)
VirtuserTableの記述その2:メールアドレスの@前と配信先が異なる場合
user100@hostname.domain.com user2
使用したFrom:「user100@hostname.domain.com」
結果: ctladdr=<user100@hostname.domain.com> (user2のUID/user2のGID)
VirtuserTableの記述その3:メールアドレスの@前を指定せずCatchAll設定の場合
@hostname.domain.com admin
使用したFrom:「tetetetekitou@hostname.domain.com」
結果: ctladdr=<tetetetekitou@hostname.domain.com>(adminのUID/adminのGID)
VirtuserTableの記述その4:配信先が外部メールアドレスの場合
user4@hostname.domain.com user4@other.com
使用したFrom:「user4@hostname.domain.com」
結果: なし
VirtuserTableの記述その5:配信先がエイリアスを向いている
user5@hotname.domain.com user5~aliases
使用したFrom:「user5@hotname.domain.com」
結果: なし
なので、ctladdrの表示がおかしい場合は、/etc/mail/virtusertableも疑ってみましょうね。
以上
コメント