知らないところから SSH にいっぱいアクセスしてくるので fail2ban で身を守る

# 概要
公式：http://www.fail2ban.org/wiki/index.php/Main_Page

SSHに限らず、指定したサービスのログを監視し、大量アクセスなど攻撃の兆候を検知したら自動的に対象IPからのアクセスを拒否してくれる。
更新途絶えて久しいが、簡単に設定できること、効果が目に見えて分かるので導入する。
設定前にブロックIPの解除方法などを調べておくこと。

# 設定前の状況
SSHに対してどのくらいお客様が来ているの確認してみる…

```console
[root@bnsk ~]# date
Thu Aug 22 10:20:19 JST 2019
[root@bnsk ~]# grep "Invalid user" /var/log/secure |wc -l
19776
[root@bnsk ~]# grep "Invalid user" /var/log/secure 
Aug 18 04:02:04 bnsk sshd[2380]: Invalid user simple from 183.98.5.113 port 43746
Aug 18 04:02:42 bnsk sshd[2384]: Invalid user efms from 5.249.149.174 port 37596
Aug 18 04:03:54 bnsk sshd[2389]: Invalid user stuart from 54.37.204.154 port 42456
Aug 18 04:04:04 bnsk sshd[2393]: Invalid user clamav from 51.83.76.36 port 45706
Aug 18 04:04:27 bnsk sshd[2399]: Invalid user celia from 89.109.53.65 port 47972
Aug 18 04:04:43 bnsk sshd[2407]: Invalid user servercsgo from 123.126.34.54 port 48525
Aug 18 04:04:51 bnsk sshd[2411]: Invalid user roman from 123.207.140.248 port 57112
Aug 18 04:05:04 bnsk sshd[2422]: Invalid user team from 202.78.197.197 port 58206
Aug 18 04:05:13 bnsk sshd[2426]: Invalid user vnc from 218.102.211.235 port 25386
Aug 18 04:05:28 bnsk sshd[2432]: Invalid user user from 128.199.123.170 port 59878
Aug 18 04:05:59 bnsk sshd[2436]: Invalid user ct from 79.7.217.174 port 58819
Aug 18 04:06:18 bnsk sshd[2438]: Invalid user bsnl from 5.249.149.174 port 52070
Aug 18 04:06:32 bnsk sshd[2442]: Invalid user kayten from 128.134.30.40 port 17527
Aug 18 04:06:55 bnsk sshd[2444]: Invalid user discordbot from 183.98.5.113 port 32832
Aug 18 04:07:48 bnsk sshd[2448]: Invalid user eberhard from 54.37.204.154 port 60650
Aug 18 04:07:59 bnsk sshd[2450]: Invalid user training from 123.126.34.54 port 34104
Aug 18 04:08:03 bnsk sshd[2452]: Invalid user steam from 51.83.76.36 port 35976
Aug 18 04:08:15 bnsk sshd[2457]: Invalid user password123 from 181.49.150.45 port 58566
Aug 18 04:08:34 bnsk sshd[2459]: Invalid user musicbot from 89.109.53.65 port 37296
Aug 18 04:09:17 bnsk sshd[2463]: Invalid user iceuser from 148.70.1.210 port 57050  
Aug 18 04:09:18 bnsk sshd[2465]: Invalid user development from 68.183.155.33 port 50010  
Aug 18 04:09:30 bnsk sshd[2469]: Invalid user bank from 49.212.148.139 port 53326  
Aug 18 04:09:30 bnsk sshd[2467]: Invalid user beagleindex from 123.207.140.248 port 51733  
Aug 18 04:09:36 bnsk sshd[2471]: Invalid user ghost from 70.49.236.26 port 54360  
・・・
```

結果を見るに、`19776`名のお客様が`ssh`接続を希望しているらしい。
知らない人を家に入れたくないので鍵を閉める。  

# インストール
```console
[root@bnsk ~]# yum install fail2ban
```
# 設定
## 一般設定
一般的な設定は`fail2ban.conf`を編集して設定するが、新規に`/etc/fail2ban/fail2ban.d/fail2ban.local`を新規作成して必要な個所のみオーバーライドする。
あんまりログは見る必要ない(見る気にならない)のでログレベルを`INFO`から `NOTICE`へ下げる。

```config
[Definition]
loglevel = NOTICE
```

##  監視対象や条件
これは`jail.conf`が設定ファイルだが、前項と同様に新規に`/etc/fail2ban/jail.d/jail.local`を新規作成して必要な個所のみオーバーライドする。

```config
[DEFAULT]
# 24時間以内に3回不審なアクセスがあったら24時間BAN
bantime  = 86400
findtime  = 86400
maxretry = 3
# CentOS7なのでsystemd
backend = systemd
# SSHのアクセスに対する設定
[sshd]
enabled = true
banaction = firewallcmd-ipset
```

## アクションの設定
`/etc/fail2ban/action.d/iptables-common.conf`を編集し、規定回数の攻撃を検知した後は、対象のIPからのパケットを`REJECT(拒否)`ではなく`DROP(破棄)`する。
理由は`REJECT`だと攻撃者にエラーメッセージを返してしまうため。

```config
blocktype = DROP
```

## 起動設定
起動して、自動起動も有効にする。

```console
[root@bnsk ~]# systemctl start fail2ban 
[root@bnsk ~]# systemctl enable fail2ban 
```

# 動作確認
ブロックされた方々を確認。

```console
[root@bnsk fail2ban]# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 22
|  |- Total failed:     13052
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 124
   |- Total banned:     124
   `- Banned IP list:   213.32.69.98 49.234.58.213 111.230.237.219 106.12.120.155 165.227.69.39 34.80.215.54 149.56.142.220 45.55.187.39 139.199.48.217 62.234.133.230 67.69.134.66 218.248.11.167 49.88.112.85 59.52.97.130 213.234.26.179 45.67.14.179 3.88.34.129 114.34.109.184 218.92.0.191 104.236.131.54 36.156.24.79 49.88.112.80 192.144.187.10 49.88.112.78 151.80.146.228 62.4.16.33 222.186.15.197 153.36.242.143 222.186.52.124
--- 省略 ---
```

```console
[root@bnsk fail2ban]# ipset list fail2ban-sshd
Name: fail2ban-sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
Size in memory: 11256
References: 1
Number of entries: 124
Members:
1.71.129.49 timeout 84854
58.175.144.110 timeout 84265
122.195.200.148 timeout 83779
67.69.134.66 timeout 83123
159.65.92.3 timeout 83924
2.238.193.59 timeout 83671
154.8.232.230 timeout 85962
--- 省略 ---
```

設定して全然時間が経っていないのに大量にブロックされていて驚き。

# 参考情報
多謝。
- [アタック対策 fail2ban (2016.1)](http://kuragane.jp/index.html?id=209)
- [fail2banをインストールしてサーバへの不正攻撃を防ぐ](http://blog.jicoman.info/2014/03/fail2ban_install/)
- [https://gtrt7.com/blog/linux/fail2ban](https://gtrt7.com/blog/linux/fail2ban)