怒りのfail2ban導入

$ sudo yum install fail2ban
No match for argument: fail2ban
Error: Unable to find a match: fail2ban

$ sudo dnf -y install epel-release

$ sudo yum install fail2ban

# cd /etc/fail2ban
# vi jail.local

# systemctl enable fail2ban
# systemctl start fail2ban

# fail2ban-client status sshd


VPSで接続状況を見たら、ssh接続ポートにESTABLISHEDが複数居た

# netstat -an | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
$ netstat -an | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:MySSH           0.0.0.0:*               LISTEN     
tcp        0      0 aaa.bbb.ccc.ddd:443     47.128.120.53:43214     TIME_WAIT  
tcp        0      0 aaa.bbb.ccc.ddd:443     47.128.26.8:35302       TIME_WAIT  
tcp        0      0 aaa.bbb.ccc.ddd:443     74.7.227.183:47322      ESTABLISHED
tcp        0   2042 aaa.bbb.ccc.ddd:443     54.197.82.195:14502     FIN_WAIT1  
tcp        0      0 aaa.bbb.ccc.ddd:MySSH   130.12.181.102:29358    ESTABLISHED
tcp        0      0 aaa.bbb.ccc.ddd:MySSH   130.12.181.103:56798    ESTABLISHED
tcp        0      0 aaa.bbb.ccc.ddd:MySSH   130.12.181.107:11958    ESTABLISHED
tcp        0      0 aaa.bbb.ccc.ddd:MySSH   77.83.39.217:46258      ESTABLISHED
tcp        0      0 aaa.bbb.ccc.ddd:MySSH   77.83.39.235:36338      ESTABLISHED
tcp        0     21 aaa.bbb.ccc.ddd:MySSH   eee.ff.ggg.hhh:19614    ESTABLISHED
tcp        0     52 aaa.bbb.ccc.ddd:MySSH   iii.jjj.kkk.mmm:54735   ESTABLISHED

whoコマンドには自分以外表示されないし、sshは公開鍵認証だけ有効にしていて、パスワード認証禁止してるから、そこまで心配しなくともいいのだが

journalctlで確認しろとの指示

# journalctl -u sshd -n 100
Jun 17 21:56:32 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484889]: Connection closed by invalid user chenboqiang 130.>
Jun 17 21:56:35 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484893]: Invalid user wenjfu from 77.83.39.237 port 37570
Jun 17 21:56:36 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484893]: Connection closed by invalid user wenjfu 77.83.39.>
Jun 17 21:56:37 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484898]: Invalid user sadmin from 20.153.204.5 port 52298
Jun 17 21:56:37 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484898]: Received disconnect from 20.153.204.5 port 52298:1>
Jun 17 21:56:37 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484898]: Disconnected from invalid user sadmin 20.153.204.5>
Jun 17 21:56:45 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484900]: Invalid user danyang from 77.83.39.154 port 11142
Jun 17 21:56:47 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484900]: Connection closed by invalid user danyang 77.83.39>
Jun 17 21:56:48 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484904]: Invalid user assadmin from 77.83.39.217 port 25944
Jun 17 21:56:49 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484906]: Invalid user wwwgit from 45.144.212.75 port 35692
Jun 17 21:56:50 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484904]: Connection closed by invalid user assadmin 77.83.3>
Jun 17 21:56:51 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484906]: Connection closed by invalid user wwwgit 45.144.21>
Jun 17 21:56:58 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484908]: Invalid user zhangzijing from 130.12.181.105 port >
Jun 17 21:56:58 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484909]: Invalid user unisound from 77.83.39.147 port 17032
Jun 17 21:56:59 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484909]: Connection closed by invalid user unisound 77.83.3>
Jun 17 21:57:00 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484908]: Connection closed by invalid user zhangzijing 130.>
Jun 17 21:57:15 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484916]: Invalid user barsha from 130.12.181.104 port 15758
Jun 17 21:57:16 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484953]: Invalid user tester from 77.83.39.235 port 14616
Jun 17 21:57:16 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484917]: Connection closed by authenticating user root 77.8>
Jun 17 21:57:17 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484916]: Connection closed by invalid user barsha 130.12.18>
Jun 17 21:57:17 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484953]: Connection closed by invalid user tester 77.83.39.>
Jun 17 21:57:19 xxx-yyy-zzzzz.aa.bbbbbb.cc.dd sshd-session[1484955]: Invalid user dianzhong from 130.12.181.101 port 40>

keepaliveも確認しろと指示

# ss -tno | grep MySSH
ESTAB 0      0      aaa.bbb.ccc.ddd:MySSH   45.144.212.75:38658 timer:(keepalive,119min,0)  
ESTAB 0      52     aaa.bbb.ccc.ddd:MySSH eee.fff.ggg.hhh:50854 timer:(on,269ms,0)          
ESTAB 0      0      aaa.bbb.ccc.ddd:MySSH    77.83.39.226:58822 timer:(keepalive,119min,0)  

119分とか怖すぎだよ

fail2banをインストールして、/etc/fail2ban/jail.local を作ってサービス起動まで進める

# cat jail.local
[DEFAULT]

bantime  = 24h
findtime = 10m
maxretry = 3

backend = systemd

[sshd]

enabled = true
port    = MySSH
filter  = sshd
journalmatch = _SYSTEMD_UNIT=sshd.service

10分以内に3回失敗したら、24時間 BAN という設定

ステータスを確認したら、すぐ Banned IP list が埋まっていく。直近の journalctl を遡ってくれたのかもしれない。

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 19
|  |- Total failed:     134
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service
`- Actions
   |- Currently banned: 15
   |- Total banned:     15
   `- Banned IP list:   45.144.212.75 77.83.39.217 77.83.39.227 77.83.39.235 77.83.39.154 77.83.39.237 77.83.39.147 77.8
3.39.95 77.83.39.226 77.83.39.240 130.12.181.99 130.12.181.97 130.12.181.107 130.12.181.109 130.12.181.102

ツール名に fail で、設定ファイル名が jail なの、イケてる