【linux】fail2banで不正アクセスを止めよう!

レンタルサーバーや自宅サーバーで良いサーバーライフを送っていますか?
サーバーを借りてwebサイト運用したり、bot実行したり・・・
ファイルサーバーとして運用したり、ゲームサーバーとして運用したり・・・

楽しいことはモリ!モリ!ですが、そこにつきものなのは、
海外からのポートスキャンなどによる不正アクセスを試みる
不埒なYAKARAばかりです。

fail2ban以外にもそもそもsshのポート番号を変更するなど
やることはモリ!モリ!ですが今回はfail2banでの不正アクセスしてくる
YAKARAに対して、お仕置きする方法をご紹介。

自身のサーバーOSはCentOS7.xの為CentOS7.xを利用しているもので、
SSHへのアタックを防ぐ設定を今回は説明します。

0.参考にしたウェブサイト様達

CentOS7での fail2banのインストールと設定方法(with firewalld)

アタック対策 fail2ban

fail2banで何度BANしてもしつこく再犯してくるグローバルIPに対しより長時間BANをする

CentOS7 fail2banでSSH, SMTPへの攻撃からサーバを守る

yumでEPELを使う

1.fail2banって何?

fail2banとは、ssh等のログインを監視し、規定回数失敗した場合
規定回数失敗したIPを一定時間アクセスを弾くことができます。

一定時間弾くだけだと、結局解除されたらまたbot攻撃してくるじゃん
とか、根本的に攻撃してこなくならないじゃんとか思うかもしれません。

一定時間弾いたけどしつこく攻撃してくるbotは長時間banを設定することもできます。もしくは、firewalldないしiptableで永久banをかけることも可能です。(cronなどで合わせることでできます)

一定期間弾くだけでも案外攻撃してこなくなるbotもいますが、
まあしつこいのも居ますので、そういうのは恒久的にbanしてきましょ。
特にCN,FR,RUオメーらだよ。

ちなみにこれが自分のサーバーで現在動いているfail2banのステータスです。一時期は2万とか行きました。控えめにいってfxxxyou.ですね。

よく見るとStatus for the jail というグループが3つあります。
これは、ssh接続の他にも2項目fail2banで監視しているということです。

ちなみにwordpressでの不正ログイン対策としてfail2banも使えます。
これはこの記事が書き終わった時に書こうと思います。

Totalbannedと出ているところは実際にbanしている数です。
ざまあみろ。ちなみに恒久的にbanしてるものはココには加算されてないので、もっとあります。

前置きはこれぐらいにして実際にインストールと設定するところまで
説明して行きます。

2.fail2banを使ってみる

■ この項目で参考にした記事 :
・CentOS7でのfail2banのインストールと設定方法(with firewall)

・CentOS7 fail2banでSSH, SMTPへの攻撃からサーバを守る

・yumでEPELを使う

fail2banは公式に配布されているものではなく、有志が作ったサードパーティ製のソフトなので、EPELレポジトリ(リポジトリ?)からインストールできるようにしないといけません。

EPELレポジトリって何?という方はこちらの記事を参考にどうぞ。

2.1EPELのインストール

# yum install epel-release

これをすることでepelレポジトリからインストールができますが、
デフォルトでepelからのインストールだけになりますので、

# vim /etc/yum.repos.d/epel.repo
[epel] enabled=0

とすることで、基本はEPELからではなく公式からのインストールのみになり、必要な時に

# yum --enablerepo=epel install 特定のアプリケーション

とすることで epelからのインストールができます。こちらのほうが基本は良いかと。

epelのインストールが終わったら次はいよいよfail2banのインストールです。

2.2 fail2banのインストール

# yum install --enablerepo=epel fail2ban

これでfail2banをインストールできます。
インストールが終わったらfail2banの設定ファイルをいじります。

/etc/fail2ban/jail.conf

ココにjail.confという設定ファイルがあります。
これを jail.dディレクトリにコピーしつつ、名前を変更します。

# cp -p /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/jail.local

jail.localを作成することで、jail.confの設定を
オーバーライドできます。
では早速設定ファイルをいじりましょう。

[sshd]                              <-コメントを削除
enabled = true <-コメントを削除
#banaction = iptables-multiport <-コメント化(存在すれば)
banaction = firewallcmd-ipset <-追加

CentOS7での fail2banのインストールと設定方法(with firewalld)
様のサイトより引用

上記のように設定を変更します。これはsshの不正ログインに対して
banを設定しています。

その他に設定で、bantime,findtime,maxretry等あります。
例えば自分の場合だと

[sshd]
enabled = true
port = ssh
bantime = 604800 ;一週間
findtime = 86400 ;一日
maxretry = 5

のような感じです。
bantimeはbanされたら一週間アクセスできないということです。
findtimeはどの期間内でbanするかということです。
maxretryを5回に設定しているので一日に5回間違えたら
banです。

これとは別に、アクセスを拒否したときの挙動を設定します。

/etc/fail2ban/action.d/iptables-common.conf

この iptables-common.confを vim or vi で編集します。

# Option : blocktype
...

という項目があるかと思いますそこに

blocktype = 

という記述があるでしょうか?
なければ blocktype = を追加してください。
blocktypeの種類は REJECT と DROPがあります。

REJECTは拒否で攻撃者側に拒否されたというメッセージが行ってしまいます。これはよくない

DROPは攻撃者側には何も伝えず拒否します。
いいですね。

なので、blocktypeはDROPにしましょう。

blocktype = DROP

以上の設定が終わったら、自動起動設定と、fail2banの起動をしましょう。

# systemctl start fail2ban
# systemctl status fail2ban ;無事に起動できているかの確認
# systemctl enable fail2ban
# systemctl is-enabled fail2ban ;自動起動設定がされているかの確認

fail2banの設定ごとの状態確認

# fail2ban-client status sshd ;sshのban状況が見れます。

banされたIPの確認

ipset --list

以上です。他にも設定をいろいろいじることで
banした時にメールで確認する方法などいろいろあります。

3.終わりに

ガッツリ引用で記事を構成しましたが、記事によっては言ってることが違ったり、やり方が違ったりします。なんでもそうですが、
一つの情報だけを鵜呑みにするのではなく、様々な情報を
見た上で判断するのがベターだと思いますのと、
理解するためには自分にとってわかりやすい記事を見つけることと、
比較して見ること。そのうえで理解していくのが重要です