0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

logwatchの送信元アドレスを変更する

Last updated at Posted at 2020-01-21

logwatchの送信元アドレスを変更する方法です。
標準の設定項目では実現できなかったため、メール送信は標準機能に頼らず、sendmailコマンドに頼りました。
環境:RHEL7.5、logwatch-7.4.0-35.20130522svn140.el7_5.noarch

以下、私がトライした順に記載します。

logwatchの送信元アドレス設定

/etc/logwatch/conf/logwatch.conf に、MailFrom = メールアドレス といった形式で記載するようです。
なお、@は特別な意味に解釈されてしまうようですので、@のようにエスケープが必要です。
※どのファイルに設定するべきかは多くの方が記事を書かれているので割愛。

私の環境では自サーバ内のPostfixを経由してメール送信しているのですが、MailFromの設定をおこなっても、Postfixのログ上はずっとFromがrootのままで、意図した変更にはなりませんでした。

logwatchのメール送信部分を読み解く

どうもlogwatchは、メール本文中にあるFromにセットしているようで(1154行目)、EnveropeFromは何も指定していない。このため、Postfixで見るとFromは実行ユーザであるrootになってしまうのだと思いました。

# cat -n /usr/share/logwatch/scripts/logwatch.pl
  (中略)
  1143     #fixme mailto
  1144        if (($Config{'hostformat'} eq "splitmail") || ($emailopen eq "")) {
  1145           #Use mailer = in logwatch.conf to set options. Default should be "sendmail -t"
  1146           #In theory this should be able to handle many different mailers. I might need to add
  1147           #some filter code on $Config{'mailer'} to make it more robust. -mgt
  1148           open(OUTFILE,"|$Config{'mailer'}") or die "Can't execute $Config{'mailer'}: $!\n";
  1149           my $mailto = $Config{"mailto_$Config{'hostname'}"};
  1150           $mailto = $Config{'mailto'} unless $mailto;
  1151           for my $to (split(/ /, $mailto)) {
  1152              print OUTFILE "To: $to\n";
  1153           }
  1154           print OUTFILE "From: $Config{'mailfrom'}\n";
  1155           #If $Config{'subject'} exists lets use it.
  1156           #This does not allow for variable expansion as the default below does -mgt
  1157           if ($Config{'subject'}) {
  1158              print OUTFILE "Subject: $Config{'subject'}\n";
  1159           } else {
  1160              print OUTFILE "Subject: Logwatch for $Config{'hostname'} (${OStitle})\n";
  1161           }

対処方法

方法は下記3つが思いつきましたが、簡単な案2にしました。

  1. logwatch改造する
  2. メール送信をlogwatchに任せず自作する
  3. Postfixでメール送信時にEnvelopeFromを書き換える

以下、案2の具体的な実現方法について。

logwatchをインストールすると、何も設定せずとも、毎日メール通知してくれるようになっています。
これは、/etc/cron.daily/0logwatch スクリプトによって実行されています。
このスクリプトでは、メール通知を行うオプションを指定してlogwatchを実行しています。

logwatchはオプションを指定しないと、標準出力にそのまま出力してきます。ですので、この内容をひろってメールすればよいだけです。
0logwatchスクリプトの中身を下記のように書き換えます。これでEnvelopeFromが書き換わります。

#!/bin/sh
echo -e "To: root\nSubject: Logwatch for [${HOSTNAME}] (Linux)\n\n`logwatch`" | sendmail -i -t -f 送信元メールアドレス
exit 0

背景

なぜEnvelopeFromを変更しないといけなくなったか、ですが、
メール中継サーバが、プライベートドメインのメールアドレスだと拒否するためです。
logwatchの標準だと、Fromアドレスが root@locahost.localdomain のようになってしまいます。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?