ある日、業務開始前のいつもの朝、Thunderbird を開いて、管理用メールのチェックをしてみると・・

Postfix SMTP server: errors from localhost

Postfix SMTP server: errors from localhost

なんじゃこりゃー

 

 

 

・・というわけで・・、

あけましておめでとうございます、というのにはもう遅すぎる気もしますが、今年の初投稿となります。

昨年は、動画を初めたりしてブログ投稿のインターバルが長くなってしまいがちになりましたが、果たして今年はどうなることやら・・

 

Postfix SMTP server: errors from localhost

そしてその肝心のメールの内容は以下の通り。

Transcript of session follows.

 Out: 220 mail.mydomain.com ESMTP
 In:  ehlo myhost.mydomain.com
 Out: 250-mail.mydomain.com
 Out: 250-PIPELINING
 Out: 250-SIZE 20971530
 Out: 250-ETRN
 Out: 250-STARTTLS
 Out: 250-AUTH PLAIN LOGIN
 Out: 250-ENHANCEDSTATUSCODES
 Out: 250-8BITMIME
 Out: 250 DSN
 In:  mail FROM:<nobody@localhost> size=286
 Out: 250 2.1.0 Ok
 In:  rcpt TO:<root@localhost>
 Out: 550 5.1.1 <root@localhost>: Recipient address rejected: User unknown in
     local recipient table
 In:  rset
 Out: 250 2.0.0 Ok
 In:  quit
 Out: 221 2.0.0 Bye

For other details, see the local mail logfile

 

この mail.mydomain.commyhost.mydomain.com は同一のホストになっており、この例の場合は、nobody@localhost から root@localhost 宛のメールが、

Recipient address rejected: user unknown in local recipient table

ということで、root@localhost がローカル受信者テーブルに無いからメール配送を拒否しているみたいです1

また、送信側の myhost.mydomain.commail.mydomain.com は同一ホスト (mail.mydomain.commyhost.mydomain.com の MX レコード) なので、少なくとも外部からの攻撃というわけでもなさそう。

また、/etc/crontab にも root@localhost 宛に送るような CRON を登録していないので、CRON の仕業でもないということもわかっています。

 

エイリアスマップにパターンを追加してみる

このメールサーバーは、このブログの過去記事に嗅いてある方法にほぼ準じて設定しています。

設定は次のようになっており、メール配送には「仮想アカウントを利用した配信エージェント」を利用しています。

    :
    :
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = /etc/postfix/virtual_domains
virtual_mailbox_maps = /etc/postfix/virtual_maps
    :
    :

 

ある受信者の宛先を別の宛先に書き換えるためにエイリアスマップというものを使います。Postfix 標準の「ローカル配送エージェント」を使用するときは、エイリアスマップは /etc/aliases を利用するのですが、仮想アカウントを利用した配信エージェント では、virtual_alias_maps で指定されているエイリアスマップを利用するようになるので、/etc/aliases にエイリアスを設定しても反映されません。

ちなみに、私の仮想エイリアスマップには、下のように定義していて、root@mydomain.compostadmin@mydomain.com 宛に来たメッセージは、管理者である hoge@mydomain.com に送信されるようにしています。

root@mydomain.com       hoge@mydomain.com
postadmin@mydomain.com   hoge@mydomain.com

 

おそらく、root@localhost に対するエイリアスがないから、エラーを吐いているんでしょうね。

なにぶんこのままだと、何のプログラムによって大量にメールが送信されているのかわからないので、/etc/postfix/virtual を編集してエイリアスを追加してみたいと思います。

root    hoge@mydomain.com
root@mydomain.com       hoge@mydomain.com
postadmin@mydomain.com   hoge@mydomain.com

 

virtual を保存したら、postmap を実行してデータベースを更新します。

sudo postmap /etc/postfix/virtual

 

その後、postfix を再起動します。

sudo systemctl restart postfix

 

念の為、エイリアスが有効になっているか確認するには、次のコマンドで確認します。

sudo echo "hello world" | swaks -4 --server localhost --from hogehoge@onotherdomain.com -to root@localhost -h-subject "Test Message" --body -

 

次のような応答があれば、成功です。

=== Trying localhost:25...
=== Connected to localhost.
<-  220 mail.mydomain.com ESMTP
 -> EHLO myhost.mydomain.com
<-  250-mail.mydomain.com
<-  250-PIPELINING
<-  250-SIZE 10485760
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-AUTH CRAM-MD5 PLAIN LOGIN
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250-DSN
<-  250 SMTPUTF8
 -> MAIL FROM:<hogehoge@onotherdomain.com>
<-  250 2.1.0 Ok
 -> RCPT TO:<root@localhost>
<-  250 2.1.5 Ok
 -> DATA
<-  354 End data with <CR><LF>.<CR><LF>
 -> Date: Fri, 29 Jan 2021 19:24:35 +0900
 -> To: root@localhost
 -> From: hogehoge@onotherdomain.com
 -> Subject: test Fri, 29 Jan 2021 19:24:35 +0900
 -> Message-Id: <20210129192435.023880@myhost.mydomain.com>
 -> X-Mailer: swaks v20170101.0 jetmore.org/john/code/swaks/
 -> subject: Test Message
 ->
 -> hello world
 ->
 ->
 -> .
<-  250 2.0.0 Ok: queued as A438C186C09
 -> QUIT
<-  221 2.0.0 Bye
=== Connection closed with remote host.

 

ちなみに、エイリアスを追加する前か、あるいは設定を間違えている場合は、こんな感じの応答になります。途中 RCPT_TO の後で 550 User unknown を返して受信したメッセージを拒否 (Reject) しているのがわかりますね。

=== Trying localhost:25...
=== Connected to localhost.
<-  220 mail.mydomain.com ESMTP
 -> EHLO myhost.mydomain.com
<-  250-mail.mydomain.com
<-  250-PIPELINING
<-  250-SIZE 10485760
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-AUTH CRAM-MD5 PLAIN LOGIN
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250-DSN
<-  250 SMTPUTF8
 -> MAIL FROM:<hogehoge@onotherdomain.com>
<-  250 2.1.0 Ok
 -> RCPT TO:<root@localhost>
<** 550 5.1.1 <root@localhost>: Recipient address rejected: User unknown in virtual mailbox table
 -> QUIT
<-  221 2.0.0 Bye
=== Connection closed with remote host.

 

実は、先のエイリアスマップはもっとシンプルにすることができます。

root    hoge@mydomain.com
postadmin@mydomain.com   hoge@mydomain.com

なにが違うのかというと、2行目にあった、

root@mydomain.com       hoge@mydomain.com

の行を削除しました。

詳細は man 5 virtual を参照してほしいですが、

user  address, address, ...

の場合は、user の後ろにつくアドレスの部分が main.cf の $myorigin に一致するか、あるいは $mydestination$inet_interfaces$proxy_interfaces に一致した場合に、アドレスの書き換えが実行されます。

私の環境の場合、root の後ろが localhost であれば $mydestination にリストアップされたサイトに一致し、mydomain.com の場合は、$myorigin に一致するので、どちらも hoge@mydomain.com にアドレスが書き換わるということなんです。

 

犯人は DenyHosts

DenyHosts からのメールががが

DenyHosts からのメールががが

 

仮想エイリアスマップを変更して Postfix を再起動すると、来るわ来るわ、大量のメールが・・

内容は以下の通り。

From: nobody@localhost
Subject: DnyHosts Report
To: root@localhost
Message:
Added the following hosts to /etc/hosts.deny
XXX.XXX.XXX.XXX (unknown)

 

こんな感じで特定の IP アドレスを /etc/hosts.deny に追加したという旨のメールが大量にやってきていたのでした。要するに、インターネット上から私のサーバーに対して SSH ログインを試みて失敗したためにブロックしたということですね。

/var/log/auth.log にも、このメール(とエラー通知のメール)と呼応するかのように、SSH のエラーログが大量に・・

auth.log ががが

auth.log ががが

 

もうあえて IPアドレス晒しちゃいますよ。

これでようやく、大量のエラーメールの原因がわかったのですが、そもそも SSH のポートは標準のポート (22番)から変更していたのですが、割れてしまったのかもしれませんね。

DenyHosts の動作に関しては、/etc/denyhosts.conf をイジることで変更することが可能です。

主な設定は下の通り。

DENY_THRESHLD_INVALID
ログイン試行に失敗した回数がこの値を超えた後、ホストをブロックします。この値は、存在しないユーザーに対するログイン試行に対して適用されます。
DENY_THRESHOLD_VALID
システムに存在しているユーザーが、この回数を超えてログイン試行に失敗すると、ホストをブロックします。
ADMIN_EMAIL
管理者へのメールアドレス。メールを受信したくない場合は、ここをブランクにすると良いみたい。

なるほど、ADMIN_EMAILroot@localhost となっており適切な値に設定していなかったんで、大量の Postfix のエラー通知メールが送信されてたわけですね。

 

まとめ

メールサーバーの設定を変更して、正しく DenyHosts のメールを受信できるようにしたのですが、その後も1時間あたり十数件の DenyHosts メールがやってきます。

あまりにしつこいようなら、ポート番号を変更するか、メールを送信しないようにするかしないといけないですね。

当分、様子を見たいと思います。


  1. 折しも、その前日に Postfix の設定をイジっていたのもあって、その設定ミスと思い色々調べてみたんですが、どうやらそういうわけではなさそう。 


 

 
カテゴリー: postfix

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です