postfixで複数ドメインを受信する設定したらSPAMまみれで結局fail2banもいれるまでの巻

postfixでバーチャルドメイン設定をせず複数ドメインのメールを受信

割と今更感がありますが「postfixで複数ドメインを受信する」が簡単なので設定してみます。
なんで？って言われるとメール専用のドメインを使っていたのですが、VPSが先に切れてしまい余分なお金出したくないなーって思ってのことなのです（素直にバーチャルドメインで設定すればいいのだが）。
あと「複数ドメインを受信する」だけでは、もったいないので SPAMメール対策、fail2ban で BAN する方法も書いておきます。

OS入れ替える前は、一応色々と設定してました。
・[Postfixの設定の巻](http://www.sea-bird.org/pukiwiki_utf/index.php?Postfix%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AE%E5%B7%BB)


# postfixで複数ドメインを受信する
とりあえず下記のサイトを参考にしてみる。同じことやっているので突っ込みはなしでお願いしたい。
・[postfixでバーチャルドメイン設定をせず複数ドメインのメールを受信](https://qiita.com/shimano_equipped/items/4fd68ec2e63b17fc25ab)
・[postfixで複数ドメインを受信する](https://blog.goo.ne.jp/takawaguchi/e/fac490cce3d6e78229e8c496d01d8f89)

postfixの設定は既に終わっているということを前提で、`domain.com` という追加するドメインを追加したい場合は、`/etc/postfix/main.cf` の mydestination に `domain.com` と追加すればよい。あと postfix の再起動を忘れずに。

```/etc/postfix/main.cf
mydestination = $myhostname, localhost.$mydomain, localhost, domain.com
```

とりあえずこれで `admin@domain.com` ⇒ 元ドメインの `admin@xxxxxx.com` にも配送されるって寸法。
postfixのバーチャルメールボックスについて詳しく知りたい場合は、下記サイトが詳しく説明している。
・[Postfix + dovecot バーチャルメールボックスの設定を深堀する](https://web-creators-hub.com/linux/postfix3/)

# メールサーバーの第三者中継チェック
気になりだすと気になるメールの中継。これ自分が加害者になるので洒落にならないので一度は確認しておいた方がよい。
チェックできるサイトがあるのでそこで確認する。
・[第三者中継をチェックする](http://px1.xaffy.net/%E7%AC%AC%E4%B8%89%E8%80%85%E4%B8%AD%E7%B6%99%E3%82%92%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%81%99%E3%82%8B) ★おすすめ
・[open relay checker](http://check.jippg.org/)

# SPAMまみれになっていた…
とりあえずSPAMメール対策として `smtpd_client_restrictions` と `smtpd_sender_restrictions` を設定しておく。
これだけでもだいぶマシになるが、あまりにウザイSPAMさんは ドメイン or IPアドレスで拒否するといいが…（これ以上にうざうざさん対応が必要だった）。

```/etc/postfix/main.cf
smtpd_client_restrictions = permit_mynetworks,
                              reject_rbl_client spamcop.net,
                              reject_rbl_client dynablock.wirehub.net,
                              reject_rbl_client opm.blitzed.org,
                              reject_rbl_client relays.visi.com,
                              reject_rbl_client sbl.spamhaus.org,
                              permit

smtpd_sender_restrictions = reject_unknown_sender_domain
```
ドメイン or IPアドレスで拒否の方法は下記を参照
・[Postfixでspamメール送信元・送信者による制限の巻](http://www.sea-bird.org/pukiwiki_utf/index.php?Postfix%E3%81%A7spam%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E5%85%83%E3%83%BB%E9%80%81%E4%BF%A1%E8%80%85%E3%81%AB%E3%82%88%E3%82%8B%E5%88%B6%E9%99%90%E3%81%AE%E5%B7%BB)

# unknown さんが消えない事例（発生編）
`/var/log/maillog` をみているとなんだか怪しいログが…しかも相当アタックがある。

```text
Mar 22 11:08:43 ns postfix/smtpd[7001]: connect from unknown[92.118.38.42]
Mar 23 11:09:00 ns postfix/smtpd[7001]: warning: unknown[92.118.38.42]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
```

この `connect from unknown` ですが、どうやら `smtpd_client_restrictions` に `reject_unknown_client`(逆引きができないホストからのメール送信は許可しない)を指定するといいらしい。
・[スパムメールを転送しないようにする](https://blog.jicoman.info/2015/11/postfix_not_send_spam_mail/)

```/etc/postfix/main.cf
smtpd_client_restrictions = permit_mynetworks,
                              reject_rbl_client spamcop.net,
                              reject_rbl_client dynablock.wirehub.net,
                              reject_rbl_client opm.blitzed.org,
                              reject_rbl_client relays.visi.com,
                              reject_rbl_client sbl.spamhaus.org,
                              reject_unknown_client,　　★これ
                              permit
```

結果、相変わらず…発生している。ブロックされないのかい！！と叫んでみる。

# fail2ban を入れて不正アクセス対策してみる ※unknown さんが消えた（解決編）
どうやら unknown さんというか postfixに対してのアタック「SASL LOGIN authentication failed: authentication failure」ですが `fail2ban` 使うと楽に対応できるらしいので導入してみます。
CentOS8 では、まだ `fail2ban` は標準でインスコできないので EPEL を先に使えるようにしておく。

```cmd
# dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf -y install fail2ban
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# vi /etc/fail2ban/jail.local
```

設定ファイルを編集する。とりあえず今回 postfix だけなのでそこを追加＆修正していく。

```/etc/fail2ban/jail.local
[postfix-sasl]
enabled = true
filter   = postfix[mode=auth]
port     = smtp,465,submission,imap,imaps,pop3,pop3s
action = iptables-multiport[name=postfix-sasl, port="smtp,smtps", protocol=tcp]
logpath  = /var/log/maillog
bantime  = 604800
findtime = 86400
maxretry = 2
```

`fail2ban` を再起動し問題の unknown さんが `/var/log/maillog` に表示されないことを確認する。

# fail2ban で BAN されていることを確認（確認編）
`fail2ban` は、 `iptable` で問題のアタック元を弾いているようです。恒久的に設定されるのかと思ったら `fail2ban` を停止すれば消えるらしい。

こんな感じで設定されるのね。

```text
# fail2ban-client status postfix-sasl
Status for the jail: postfix-sasl
|- Filter
|  |- Currently failed: 3
|  |- Total failed:     1611
|  `- Journal matches:  _SYSTEMD_UNIT=postfix.service
`- Actions
   |- Currently banned: 7
   |- Total banned:     26
   `- Banned IP list:   92.118.38.66 92.118.38.82 213.251.5.208 91.134.145.129 193.56.28.130 78.128.113.94 45.142.195.2
```

特にハマることは無かったですが `fail2ban` は、外にも設定できるサービスがあるので都度設定していくといいかも。

`fail2ban` 参考にしたサイト様
・[fail2banをCentOS8にインストールする](https://north.thco.mp/2019/10/08/fail2ban-nftables-centos8/)
・[fail2banでpostfixの認証失敗回数に応じて恒久的に送信元IPアドレスをbanする](https://qiita.com/ume3_/items/e3af13ef29d561728e4d)
・[【CentOS7】ssh&postfixへの不正アクセス対策-fail2ban](http://www.matsubarasystems.com/centos/fail2ban-postfix)
・[アタック対策fail2ban](https://kuragane.jp/fail2ban.htm)