iku8log

Webエンジニアのタダのメモ。

fail2banについてssh周りだけ調べてみた。

fail2banはsshとかの不正アクセスを検知して、自動的に攻撃元IPを遮断してくれるもの。

僕は、さくらVPSのcentos7を使用していますがデフォルトで入っているっぽいですね。

ない場合はyumとかで入れちゃいましょう。

ですが、デーモン見るとfail2ban動いていませんでした。 初期のままでは動作していない?っぽいので、

sudo systemctl start fail2ban

して、起動させました。

設定ファイル

動作確認をと思って、設定ファイルを以下のように編集しました。

/etc/fail2ban/jail.conf

bantime  = 60 # どのくらいの時間banするか
findtime  = 10 # どのくらいの期間中に失敗したらbanするか
maxretry = 1   # どのくらい失敗したらbanするか

bantimeはその名の通り、1度banしてどのくらいの間banし続けるかという設定。 今回は60。秒単位なので1分間はbanします。

findtimeとmaxretryですが、これはどのくらいの期間中に何回ssh接続が失敗したらbanするという設定。 例えば、findtimeが60でmaxretryが10なら、 1分間の間に10回失敗したら、banするよって感じ。

今回はmaxretryを1に設定しているので、一回でも失敗したら問答無用でbanされます。これならfindtimeを設定する意味はないですが。

初期は以下の様になってましたよ。

bantime  = 600
findtime  = 600
maxretry = 10

10分間の間で10回失敗したら、10分間banするって感じですね。割と厳しめ。

ban出来なかった

sshの接続ユーザを存在しないものにしてテストしてみましたが、banされませんでした。

コマンドでban状況を見るとたしかにバンされている。

sudo fail2ban-client status sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 1
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned: 1
   `- Banned IP list:   xxx.xxx.xxx.xxx #IPはヒミツ。

なぜ??と思ったら、実はちゃんとbanされていました。ssh。そう22番ポートがね。 僕はsshのポートを変えているのですり抜けれてました。

/etc/fail2ban/jail.conf

[sshd]
port    = 22222

こんな感じでサービス毎にポートが指定できます。

再起動もお忘れなく。

sudo systemctl restart fail2ban

※firewalldと連携して遮断してるっぽいので、firewalldも起動していないと、ban出来ませんでした。

余談

fail2banはメールとかも送れるっぽいので、結構良いですよ。

暇な時にいじってみよう。