Linux

SSHへの攻撃対策 [fail2ban]

サーバーを建てると攻撃がたくさん飛んでくる

近年遊びでサーバーを建てることが多かったのですが、外部ネットワークに公開しているサーバーのsshやRDPのデフォルトポートには例外なく大量の不正ログイン試行が飛んできています。

狙われがちなログイン名

自分がどのように攻撃されているかと言うのは、下記のコマンドを実行することで概ね確認できます。

lastb

私のサーバーは以下のような攻撃が来ていました。

root、pi、testといったユーザー名が非常に良く狙われている傾向があります。

自分のユーザー名とは関係なくても、このような不正なログイン試行が飛んできているというのは気味が悪いものです。

ちなみに攻撃元は大体が中国でした。

付録

セキュリティログをチェックする方法もある。sudoの実行履歴とかも残るので、grepを使ってフィルタリングしながら使うのが良い。こちらのチェック方法を使うと、攻撃されているポートも表示される。

Debian系列ならば /var/log/auth.log

RedHat系列ならば /var/log/secure を確認する。

sudo cat /var/log/auth.log | grep "Failed password"

SSHのポート番号を変更する

狙われる22番のSSHポートを変更することで多くの攻撃を防げます。

なんだかんだで、ポート番号の変更が一番効果的なセキュリティ対策だったりします。

ただ、22番を使わざるを得ない場合もあるらしい(?)ので下記のfail2banを紹介します。

当サイトでは、sshのポート変更と同時にfail2banを併用することを推奨します。

fail2banの利用

fail2banとは、連続でログイン試行してくる不正なアクセス元のIPの接続を遮断してくれるスグレモノです。

sshのログイン試行に失敗した場合に記録されるログを監視し、自動でアクセス制限を書けてくれます。

インストール

下記のコマンドを実行します。

sudo apt install fail2ban

サービスの開始・停止

サービスの開始・及び停止は下記のコマンドで行なえます。

#サービスの開始
sudo fail2ban-client start

#サービスの停止
sudo fail2ban-client stop

fail2banの設定

fail2banの設定を行います。下記のコマンドを入力し、jail.localを新規作成します。

sudo vim /etc/fail2ban/jail.local

次に、以下の設定を書き加えます。

[sshd]
enabled = true
bantime  = 3600
findtime  = 20
maxretry = 3

ここでは、20秒のうちに3回のログイン試行に失敗した場合に1時間アクセスを拒否する設定となっています。

設定ファイルを保存したら、下記のコマンドでサービスの再起動を行います。

sudo fail2ban-client restart

以上で設定は完了です。