Fail2banは、ブルートフォースログイン攻撃からサーバーを保護する無料のオープンソース侵入防止ソフトウェアソリューションです。 SSHやその他のWebアプリケーションのさまざまなログファイルを監視し、認証の失敗が検出されて最大数に達すると、Fail2BanはFirewalldのiptablesを使用してIPアドレスを自動的にブロックします。 Fail2Banはシンプルで、便利で、設定が簡単で、柔軟性があります。
このガイドでは、RockyLinux8にfirewalldを使用してFail2Banをインストールする方法を説明します。
前提条件
- Atlantic.NetクラウドプラットフォームでRockyLinux8を実行しているサーバー
- サーバーで構成されているrootパスワード
ステップ1-Atlantic.Netクラウドサーバーを作成する
まず、Atlantic.Netクラウドサーバーにログインします。 2GB以上のRAMを搭載したオペレーティングシステムとしてRockyLinux8を選択して、新しいサーバーを作成します。 SSH経由でクラウドサーバーに接続し、ページの上部で強調表示されているクレデンシャルを使用してログインします。
サーバーにログインしたら、次のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。
dnf update -y
ステップ2–Firewalldを設定する
dnf info firewalld
がインストールされている場合、次の出力が得られます。
Last metadata expiration check: 0:34:46 ago on Wednesday 17 November 2021 09:52:51 AM UTC. Installed Packages Name : firewalld Version : 0.8.2 Release : 7.el8_4 Architecture : noarch Size : 1.9 M Source : firewalld-0.8.2-7.el8_4.src.rpm Repository : @System From repo : baseos Summary : A firewall daemon with D-Bus interface providing a dynamic firewall URL : http://www.firewalld.org License : GPLv2+ Description : firewalld is a firewall service daemon that provides a dynamic customizable : firewall with a D-Bus interface. Available Packages Name : firewalld Version : 0.9.3 Release : 7.el8 Architecture : noarch Size : 501 k Source : firewalld-0.9.3-7.el8.src.rpm Repository : baseos Summary : A firewall daemon with D-Bus interface providing a dynamic firewall URL : http://www.firewalld.org License : GPLv2+ Description : firewalld is a firewall service daemon that provides a dynamic customizable : firewall with a D-Bus interface.
次に、Firewalldが実行されているかどうかを確認します。
systemctl status firewalld
Firewalldサービスがマスクされていることを確認する必要があります:
● firewalld.service Loaded: masked (Reason: Unit firewalld.service is masked.) Active: inactive (dead)
そのため、Firewalldサービスのマスクを解除する必要があります。次のコマンドを使用してマスクを解除できます:
systemctl unmask firewalld
次に、Firewalldサービスを開始し、システムの再起動時に開始できるようにします。
systemctl start firewalld systemctl enable firewalld
この時点で、Firewalldがシステムにインストールされ、実行されています。これで、次のステップに進むことができます。
ステップ3–Fail2Banをインストールする
dnf install epel-release -y
次に、次のコマンドを使用してFail2Banパッケージをインストールします。
dnf install fail2ban fail2ban-firewalld -y
Fail2Banをインストールしたら、次のコマンドを使用して、Fail2Banサービスを開始して有効にします。
systemctl start fail2ban systemctl enable fail2ban
次のコマンドを使用して、Fail2Banのバージョンを確認できます。
fail2ban-client --version
サンプル出力:
Fail2Ban v0.11.2
ステップ4–Fail2Banを構成する
まず、次のコマンドを使用して、Fail2BanのFirewalld構成ファイルの名前を変更します。
mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
次に、Fail2Banのデフォルト構成ファイルをコピーします。
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
次に、jail.localファイルを編集します:
nano /etc/fail2ban/jail.local
次の行を見つけます:
banaction = iptables-multiport banaction_allports = iptables-allports
そして、それらを次の行に置き換えます。
banaction = firewallcmd-rich-rules[actiontype=] banaction_allports = firewallcmd-rich-rules[actiontype=]
ファイルを保存して閉じ、Fail2Banを再起動して変更を適用します。
systemctl restart fail2ban
この時点で、Fail2BanはFirewalldで動作するように構成されています。
ステップ5–Fail2Banを使用したSSHサービスの保護
SSHDサービスを保護するには、jail.localファイルを編集します。
nano /etc/fail2ban/jail.local
[sshd]セクションを見つけて、次の行を追加して有効にします。
[sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s bantime = 10m findtime = 10m maxretry = 5
ファイルを保存して閉じ、Fail2Banを再起動して変更を適用します。
systemctl restart fail2ban
次のコマンドを使用して、Fail2Banのステータスを確認できるようになりました。
systemctl status fail2ban
次の出力が得られます:
● fail2ban.service - Fail2Ban Service Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2021-11-17 10:34:49 UTC; 2s ago Docs: man:fail2ban(1) Process: 21154 ExecStop=/usr/bin/fail2ban-client stop (code=exited, status=0/SUCCESS) Process: 21185 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS) Main PID: 21186 (fail2ban-server) Tasks: 5 (limit: 11411) Memory: 14.6M CGroup: /system.slice/fail2ban.service └─21186 /usr/bin/python3.6 -s /usr/bin/fail2ban-server -xf start Nov 17 10:34:49 rockylinux systemd[1]: Starting Fail2Ban Service... Nov 17 10:34:49 rockylinux systemd[1]: Started Fail2Ban Service. Nov 17 10:34:49 rockylinux fail2ban-server[21186]: Server ready
ステップ6–Fail2Banファイアウォールを確認する
この時点で、Fail2BanはSSHサービスを保護するように構成されています。次に、Fail2Banが機能しているかどうかを確認します。
まず、次のコマンドを使用してjailの構成を確認します。
fail2ban-client status
次の出力が表示されます。
Status |- Number of jail: 1 `- Jail list: sshd
次に、リモートマシンに移動し、間違ったパスワードでSSHサーバーに接続してみます。最大再試行回数(5回)に達すると、IPアドレスはFail2Banによってブロックされます。
次に、次のコマンドを使用して、Fail2BanによってブロックされたIPアドレスを確認します。
fail2ban-client status sshd
次の出力が得られるはずです:
Status for the jail: sshd |- Filter | |- Currently failed: 1 | |- Total failed: 6 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 27.61.171.115
次のコマンドを使用して、Firewalldによって追加されたルールを確認できます。
firewall-cmd --list-rich-rules
次の出力が得られます:
rule family="ipv4" source address="27.61.171.115" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"
詳細については、Fail2Banログを確認することもできます:
tail -f /var/log/fail2ban.log
サンプル出力:
2021-11-17 10:37:21,837 fail2ban.filter [21186]: INFO [sshd] Found 27.61.171.115 - 2021-11-17 10:37:21 2021-11-17 10:37:21,859 fail2ban.actions [21186]: NOTICE [sshd] Ban 27.61.171.115 2021-11-17 10:37:27,220 fail2ban.filter [21186]: INFO [sshd] Found 27.61.171.115 - 2021-11-17 10:37:27
結論
おめでとう!これで、Fail2BanとFirewalldが正常にインストールされました。サーバーにFail2Banを実装して、ブルートフォースログイン攻撃からサーバーを保護できるようになりました。 Atlantic.NetのVPSホスティングアカウントで試してみてください!