ほとんどのLinuxサーバーは、リモート管理の目的でポート22を介したSSHログインを提供します。このポートはよく知られているポートであるため、ブルートフォース攻撃によって攻撃されることがよくあります。 Fail2banは、ログファイルをスキャンしてブルートフォースログインの試行をリアルタイムで実行し、firewalldまたはiptablesを使用して攻撃者を禁止するソフトウェアです。 Fail2banは、管理者が設定した時間枠内にサーバーへの不要なアクセスまたはセキュリティ違反の取り組みを認識し、ブルートフォース攻撃または辞書攻撃の兆候を示すIPアドレスをブロックします。このプログラムはバックグラウンドで動作し、ログファイルを継続的にスキャンして、異常なログインパターンやセキュリティ違反の試みがないか調べます。
このチュートリアルでは、CentOS7でfirewalldを使用したFail2Banのインストールと構成を示します。
Fail2Banのインストール
CentOS 7にFail2Banをインストールするには、最初にEPEL(Enterprise Linux用の追加パッケージ)リポジトリをインストールする必要があります。 EPELにはすべてのCentOSバージョンの追加パッケージが含まれています。これらの追加パッケージの1つはFail2Banです。
rootユーザーに切り替えた後、次のコマンドを実行する必要があります。
yum install epel-release
yum install fail2ban fail2ban-systemd
SELinuxがインストールされている場合は、SELinuxポリシーを更新します。
yum update -y selinux-policy*
インストールしたら、jail.local構成ファイルを使用してソフトウェアを構成およびカスタマイズする必要があります。 jail.localファイルはjail.confファイルをオーバーライドし、カスタム構成の更新を安全にするために使用されます。
jail.confファイルのコピーを作成し、jail.localという名前で保存します:
cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
次のコマンドを使用して、Nanoで編集するためにjail.localファイルを開きます。
nano /etc/fail2ban/jail.local
ファイルコードは、1つまたは複数のIPアドレスの禁止を防止したり、禁止期間を設定したりするために実行されるコードの多くの行で構成されている場合があります。一般的なjail構成ファイルには次の行が含まれています。
[DEFAULT]
#
# MISCELLANEOUS OPTIONS
#
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8
# External command that will take an tagged arguments to ignore, e.g. <ip>,
# and return true if the IP is to be ignored. False otherwise.
#
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" is the number of seconds that a host is banned.
bantime = 600
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
無視 禁止されないIPのリストを設定するために使用されます。 IPアドレスのリストは、スペース区切り文字で指定する必要があります。このパラメータは、個人のIPアドレスを設定するために使用されます(固定IPからサーバーにアクセスする場合)。
バンタイム パラメータは、ホストを禁止する必要がある秒数を設定するために使用されます。
検索時間 ホストを禁止する必要があるかどうかを確認するために使用されるパラメーターです。ホストが最後の検索時にmaxretyを生成すると、禁止されます。
Maxretry は、ホストによる再試行回数の制限を設定するために使用されるパラメーターです。この制限を超えると、ホストは禁止されます。
SSHを保護するためにjailファイルを追加します。
Nanoエディターで新しいファイルを作成する
nano /etc/fail2ban/jail.d/sshd.local
上記のファイルに、次のコード行を追加します。
[sshd]
enabled = true
port = ssh
#action = firewallcmd-ipset
logpath = %(sshd_log)s
maxretry = 5
bantime = 86400
パラメータ有効 はtrueに設定され、保護を提供するため、保護を非アクティブ化するために、falseに設定されます。 filterパラメーターは、パス/etc/fail2ban/filter.d/sshd.confにあるsshd構成ファイルをチェックします。
パラメータアクション /etc/fail2ban/action.d/firewallcmd-ipset.confから入手可能なフィルターを使用して禁止する必要のあるIPアドレスを取得するために使用されます。
ポート 場合と同様に、パラメータをport=1212などの新しい値に変更できます。ポート22を使用する場合、このパラメーターを変更する必要はありません。
ログパス ログファイルが保存されるパスを提供します。このログファイルはFail2Banによってスキャンされます。
Maxretry 失敗したログインエントリの上限を設定するために使用されます。
バンタイム パラメータは、ホストを禁止する必要がある秒数を設定するために使用されます。
CentOSファイアウォールをまだ実行していない場合は、開始します。
systemctl enable firewalld
systemctl start firewalld
次のコマンド行を実行して、サーバー上で保護用のFail2Banソフトウェアを実行します。
systemctl enable fail2ban
systemctl start fail2ban
次のコマンドを使用して、sshポート経由でサーバーにログインする試みが失敗したかどうかを確認します。
cat /var/log/secure | grep 'Failed password'
上記のコマンドを実行すると、さまざまなIPアドレスからの失敗したrootパスワードの試行のリストが取得されます。結果の形式は、以下に示すものと同様になります。
Apr 4 17:05:12 htf sshd[4287]: Failed password for root from 108.61.157.25 port 23121 ssh2
Apr 4 17:05:15 htf sshd[3154]: Failed password for root from 108.61.157.25 port 14486 ssh2
Apr 4 17:05:16 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2
Apr 4 17:05:18 htf sshd[3154]: Failed password for root from 108.61.157.25 port 24157 ssh2
Fail2Banによる禁止されたIPの確認
次のコマンドは、ブルートフォースの脅威として認識された禁止IPアドレスのリストを取得するために使用されます。
iptables -L -n
Fal2Banステータスを確認する
次のコマンドを使用して、Fail2Ban刑務所のステータスを確認します。
fail2ban-client status
結果は次のようになります:
[[email protected] ]# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
IPアドレスの禁止を解除する
禁止リストからIPアドレスを削除するために、パラメータIPADDRESSは、禁止を解除する必要がある適切なIPに設定されます。 「sshd」という名前は刑務所の名前です。この場合は、上記で構成した「sshd」刑務所です。次のコマンドがその役割を果たします。
fail2ban-client set sshd unbanip IPADDRESS