EC2で稼働しているAmazon Linux 2023で、やむを得ずSSHの接続元IPアドレスを制限できないサーバがあり、ブルートフォース攻撃などのリスクがありました。
このような不正アクセスのリスクを緩和するために、むかし利用していた fail2ban をインストールしようと思い立ちました。
Webで検索したところ、EPELリポジトリから fail2ban をインストールするような記事ばかりですが、2025年5月現在、Amazon Linux 2023 の標準リポジトリから、fail2ban のパッケージをインストールすることが可能です。
いろいろ検索していたところ、AWSの re:Post で以下のような記事がありました。
Amazon Linux 2023 (AL2023) は EPEL をサポートしていません。詳細については、「Extra Packages for Enterprise Linux (EPEL)」を参照してください。
そして個人的にもEPELはできるだけ使わないようにしています。
標準のリポジトリを眺めたら、普通に fai2ban パッケージがありました。
|
1 2 3 4 5 6 7 8 9 10 |
# dnf list | grep fail2ban fail2ban.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-firewalld.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-selinux.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-sendmail.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-server.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-all.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-mail.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-systemd.noarch 1.1.0-1.amzn2023.0.1 amazonlinux fail2ban-tests.noarch 1.1.0-1.amzn2023.0.1 amazonlinux |
これをインストールしてみます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# dnf install fail2ban Last metadata expiration check: 23:15:07 ago on Tue May 13 20:37:13 2025. Dependencies resolved. ================================================================================================ Package Architecture Version Repository Size ================================================================================================ Installing: fail2ban noarch 1.1.0-1.amzn2023.0.1 amazonlinux 10 k Installing dependencies: esmtp x86_64 1.2-17.amzn2023.0.2 amazonlinux 53 k fail2ban-firewalld noarch 1.1.0-1.amzn2023.0.1 amazonlinux 11 k fail2ban-selinux noarch 1.1.0-1.amzn2023.0.1 amazonlinux 31 k fail2ban-sendmail noarch 1.1.0-1.amzn2023.0.1 amazonlinux 13 k fail2ban-server noarch 1.1.0-1.amzn2023.0.1 amazonlinux 474 k firewalld noarch 1.2.3-1.amzn2023 amazonlinux 452 k firewalld-filesystem noarch 1.2.3-1.amzn2023 amazonlinux 11 k gobject-introspection x86_64 1.82.0-1.amzn2023 amazonlinux 122 k ipset x86_64 7.11-1.amzn2023.0.3 amazonlinux 40 k ipset-libs x86_64 7.11-1.amzn2023.0.3 amazonlinux 67 k iptables-libs x86_64 1.8.8-3.amzn2023.0.2 amazonlinux 401 k iptables-nft x86_64 1.8.8-3.amzn2023.0.2 amazonlinux 183 k libesmtp x86_64 1.0.6-25.amzn2023.0.2 amazonlinux 67 k liblockfile x86_64 1.14-7.amzn2023.0.2 amazonlinux 29 k libnetfilter_conntrack x86_64 1.0.8-2.amzn2023.0.2 amazonlinux 58 k libnfnetlink x86_64 1.0.1-19.amzn2023.0.2 amazonlinux 30 k libnftnl x86_64 1.2.2-2.amzn2023.0.2 amazonlinux 84 k nftables x86_64 1:1.0.4-3.amzn2023.0.2 amazonlinux 400 k python3-firewall noarch 1.2.3-1.amzn2023 amazonlinux 357 k python3-gobject-base x86_64 3.48.2-3.amzn2023.0.2 amazonlinux 323 k python3-nftables x86_64 1:1.0.4-3.amzn2023.0.2 amazonlinux 18 k Installing weak dependencies: libcap-ng-python3 x86_64 0.8.2-4.amzn2023.0.2 amazonlinux 30 k Transaction Summary ================================================================================================ Install 23 Packages Total download size: 3.2 M Installed size: 13 M Is this ok [y/N]: |
依存関係でたくさんのパッケージがインストールされます。
不正アクセスと思われる接続元を一定期間Ban(接続できないように)するために、firewalld がインストールされます。
最初はこれに気づかずに、公開していたWebサイトが閲覧できなくなって焦りました。
firewalld の使い方は検索するとたくさん出てくるので割愛します。
また、fail2ban もインストールさえできてしまえば、使い方はたくさん出てくるので、今回試した内容だけお伝えします。
設定ファイルは、/etc/fail2ban にあります。
|
1 2 3 4 5 6 7 8 9 10 11 |
# cd /etc/fail2ban/ # ls -tl total 72 drwxr-xr-x. 2 root root 49 May 12 14:50 jail.d drwxr-xr-x. 2 root root 16384 Mar 5 17:52 action.d drwxr-xr-x. 3 root root 16384 Mar 5 17:52 filter.d drwxr-xr-x. 2 root root 6 Sep 5 2024 fail2ban.d -rw-r--r--. 1 root root 25847 Sep 5 2024 jail.conf -rw-r--r--. 1 root root 3017 Apr 26 2024 fail2ban.conf -rw-r--r--. 1 root root 2727 Apr 26 2024 paths-common.conf -rw-r--r--. 1 root root 930 Apr 26 2024 paths-fedora.conf |
fail2ban.conf に基本的な設定がされており、以下のように記載があります。
|
1 2 3 4 5 6 |
# Fail2Ban main configuration file # # Comments: use '#' for comment lines and ';' (following a space) for inline comments # # Changes: in most of the cases you should not modify this # file, but provide customizations in fail2ban.local file, e.g.: |
基本的には、このファイルは変更しないでね、みたいなことが書いてあります。
どうやら、jail.d ディレクトリに、対象にしたいサービスごとのファイルを作成するようです。
今回はSSHのアタックを防ぎたいので、sshd.local というファイルを作成しました。
|
1 2 |
# cd /etc/fail2ban/jail.d/ # vi sshd.local |
ファイルの中身はこんな感じで書いてみました。
|
1 2 3 4 5 6 |
[sshd] enabled = true ignoreself = true findtime = 60m maxretry = 3 bantime = 30m |
sshd を監視対象にして、この設定をenable(有効)にして、ignoreself(自分は除外)して、findtime(カウントする期間)を60分、maxretry(失敗してリトライした回数)を3回、Ban(接続拒否)する時間を30分としてみました。
これは運用していくなかで、見直していく感じかと思います。
で、fail2ban を起動してみます。
|
1 |
# systemctl start fail2ban |
起動して、しばらくして以下のコマンドで確認してみます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# fail2ban-client status --all Status |- Number of jail: 1 |- Jail list: sshd `- Status for the jails: `- Jail: sshd |- Filter | |- Currently failed: 3 | |- Total failed: 48 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 2 `- Banned IP list: xxx.xxx.xxx.xxx |
ちゃんとBanしてくれているようです。(xxxはマスクしています)
動作に問題ないようなら、自動起動するよう設定します。
|
1 |
systemctl enable fail2ban |
以上、Amazon Linux 2023 では EPELリポジトリは使えないことと、標準リポジトリから fail2ban パッケージをインストールして使えることを覚えました。
他にもメールサーバなど、セキュリティグループで接続元IPアドレスを制限できないケースで使えそうです。
ちなみに普段はセキュリティグループでがっちり接続元IDアドレスを制限しているので、EC2でファイアウォールとか気にしたことがなかったのですが、fail2ban 使うと firewalld も起動します。
こいつがデフォルトで、dhcpv6-client 、mdns 、ssh しか許可していないので、気を付けてください。
こちらも詳細な手順は割愛しますが、以下のように確認できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# firewall-cmd --get-default-zone public # firewall-cmd --list-all --zone=public public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client mdns ssh ※以下、省略 |
Webサーバとして公開しているなら、HTTP(80/tcp) と HTTPS(443/tcp) を許可しておきましょう。
