AdobeStock_290791443.jpg
2020.01.05

SSH、ApacheへのDoS攻撃、DDoS攻撃からVPSサーバーを守る【fail2banの導入】

前回までで、

  • VPSサーバーのSSH接続でポート番号22を閉じて別のポート番号を開ける
  • ConoHa VPSのfirewallを設定する
  • サーバーのSSH接続でパスワード認証を禁止して鍵認証でのみアクセス可能にする【ConoHa VPS】

という三つの対策をしました。それぞれの詳しい説明はこちらをご覧ください。

それでも総当たり攻撃(DoS攻撃、DDoS攻撃)を繰り返されるとサーバーに負荷がかかってしまいます。

そこで、今回は同じIPアドレスから繰り返しログインを失敗したら一定期間アクセスを禁止する、それでもしつこくログインを試みるアクセスは長期間アクセスできなくする方法(banする方法)を紹介したいと思います。

サーバーにfail2banをインストールする

環境はcentos7.xで話を進めます。

まずターミナルやコンソールでサーバーにSSH接続します。

epel-releaseリポジトリをインストール先にインストールしておく

# yum install epel-release

fail2banをインンストールする

# yum install fail2ban fail2ban-systemd firewalld

fail2banの設定をする。

fail2banのインストールが完了したら設定用のファイルを作成していきます。

まずインストールしたfail2banにjail.confというファイルがあることを確認してください。

# ls /etc/fail2ban/

このjail.confが設定ファイルの一つですが、これをjail.localという名前でコピーします。jail.localというファイルを作るとjail.confをjail.localでオーバーライドしてくれる仕組みになっています。
このファイルを作らずjail.confを直接編集してしまうと、アップデートした際に設定内容が上書きされてしまいます。

# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

SSHへの総当たり攻撃対策

コピーができたらjail.localを編集していきます。

# vi /etc/fail2ban/jail.local
[DEFAULT]
#ホワイトリスト。ご自身のPCのIPアドレスなどを記入
ignorecommand =
#banされる時間
bantime  = 10m
#期間内に何回失敗したらbanされるか
findtime  = 10m
maxretry = 5
#centosなのでsystemdに変更
backend = systemd
#firewallにfirewalldを使用しているのでfirewallcmdに変更
banaction = firewallcmd-ipset
banaction_allports = firewallcmd-allports

[sshd]
#enable = trueを追記しsshのportを変更している場合はそのポート番号
enabled = true
port = 45678
logpath = %(sshd_log)s
blocktype = DROP

Apacheへの総当たり攻撃対策

apache用のフィルター設定ファイルapache-ddos.confを作成する。

# vi /etc/fail2ban/filter.d/apache-ddos.conf

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*
ignoreregex = \.(?i)(jpe?g|gif|png|bmp|pdf|js|css|woff|eot|ttf|ico|txt|xml|swf|xlsx?|docx?|pptx?)

先ほど作成したjail.localに設定を追記

# vi /etc/fail2ban/jail.local

・
・
・
#apacheへのddos対策
[apache-ddos]
enabled = true
port = http,https
filter = apache-ddos
logpath = /var/log/apacheのアクセスログ
maxretry = 10
findtime = 5
bantime = 3600
action = %(action_mwl)s
destemail = admin@example.com

fail2banを起動する

サーバー起動時にfail2banを自動で起動するようにする

# systemctl enable fail2ban

fail2banを起動

# systemctl start fail2ban

fail2banのステータス確認

# systemctl status fail2ban

ちゃんと作動しているか確認

実際にログインをわざと失敗してfail2banが作動しているか確認してみます。
[DEFAULT]のmaxretryの回数失敗したらアクセスができなくなるはずです。

banされている間はその端末でアクセスできないのでコンソールなどで確認してください。

# fail2ban-client status sshd

# fail2ban-client status apache-ddos

ActionsのCurrently bannedの数字が0から1に増えていたら成功です。

まとめ

今回はSSHとapacheの接続だけ設定しましたが、メール、ftpなども設定できます。