質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

firewalld

firewalldは、CentOS7からデフォルトになったパケットフィルタリングです。一時的なルールと永続的なルールが設定でき、通信の許可・拒否をコントロール。バージョン6まで利用されてきた「iptables」における課題をカバーしています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

7840閲覧

【CentOS8】fail2ban設定方法について

Jingles

総合スコア8

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

firewalld

firewalldは、CentOS7からデフォルトになったパケットフィルタリングです。一時的なルールと永続的なルールが設定でき、通信の許可・拒否をコントロール。バージョン6まで利用されてきた「iptables」における課題をカバーしています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2020/04/22 16:26

編集2020/04/23 17:41

###fail2banによりBANされているはずなのにSSH接続できる?
Linux初心者です。
自分でWebサーバーを構築してみようと思い立ち、VPSを契約して環境を整えることから始めました。
まずは最低限のセキュリティを・・・ということで諸々の設定の後にfail2banをインストールし、コピーした[/etc/fail2ban/jail.local]に

[sshd] # To use more aggressive sshd modes set filter parameter "mode" in jail.local: # normal (default), ddos, extra or aggressive (combines all). # See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details. #mode = normal enabled = true #この行だけ追記 port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s

上記だけ追記してreloadしてから、軽く動作確認をしてみることにしました。
SSHクライアントから適当なユーザー名で接続を試みると[/var/log/fail2ban.log]に無事にログが出力されました。
デフォルトの設定のままなので、続けて5回ログインに失敗すると

2020-04-22 20:47:09,503 fail2ban.filter [9563]: INFO [sshd] Found XXX.XXX.XXX.XXX - 2020-04-22 20:47:09 2020-04-22 20:47:21,361 fail2ban.filter [9563]: INFO [sshd] Found XXX.XXX.XXX.XXX - 2020-04-22 20:47:20 2020-04-22 20:47:25,612 fail2ban.filter [9563]: INFO [sshd] Found XXX.XXX.XXX.XXX - 2020-04-22 20:47:25 2020-04-22 20:47:33,361 fail2ban.filter [9563]: INFO [sshd] Found XXX.XXX.XXX.XXX - 2020-04-22 20:47:32 2020-04-22 20:47:38,611 fail2ban.filter [9563]: INFO [sshd] Found XXX.XXX.XXX.XXX - 2020-04-22 20:47:38 2020-04-22 20:47:38,739 fail2ban.actions [9563]: NOTICE [sshd] Ban XXX.XXX.XXX.XXX

このようにしっかりとBANしてくれているようにも見えます。が、BANされていてるはずなのに普通にログインできてしまうのです。
私の認識ではBANされた後に接続しようとすると、接続の拒否等の挙動をしてくれると考えていたのですが・・・

現状のbanactionの記述は以下の通りなのですが

[DEFAULT] banaction = iptables-multiport banaction_allports = iptables-allports

CentOS7より、FW管理ツールが[iptables]から[firewalld]に変更されたということで、この辺りが怪しいと睨んでいるのですが如何でしょうか。
(互換性はあるような記載もどこかで見つけたので見当違いですかね)
学が浅いので原因の追い方もわからず苦労しています。知恵を貸していただきたいです。

補足情報(fail2banインストール前にやったこととか)

■サーバ:ConoHa VPS ■OS:CentOS 8.1.1911 ■クライアント:TeraTerm
systemctl status fail2banActive:active (running)
fail2ban-client statusJail list: sshd
fail2ban.logには特にエラーログは無し

  1. 一般ユーザー追加
  2. ユーザーにsudo権限付与
  3. OS日本語化
  4. パッケージ更新
  5. SSH鍵認証設定
  6. rootログイン禁止
  7. パスワードログイン禁止
  8. SSHポート番号変更
  9. EPELインストール
  10. fail2ban導入

ipsetについて調べてみた結果

回答いただいたヒントを元に、BANされた後にipset listコマンドを実行しても何も出力されませんでした。
そもそもbanactionとは指定された名前の[/etc/fail2ban/action.d/<banaction名>.conf]の内容を実行する。ということが理解できていませんでした。
[DEFAULT]でbansctionに指定されていた[iptables-multiport.conf]と[iptables-allports.conf]のactionstartの内容を確認してみると

actionstart = <iptables> -N f2b-<name> <iptables> -A f2b-<name> -j <returntype> <iptables> -I <chain> -p <protocol> -j f2b-<name>

BANされた時にこのコマンドが実行されるようですが、これでipsetにBANされたIPが登録されるということがいまいち繋がりませんでした。
感覚的にはfirewallcmd-ipset.conf内の

actionstart = ipset create <ipmset> hash:ip timeout <bantime><familyopt> firewall-cmd --direct --add-rule <family> filter <chain> 0 <actiontype> -m set --match-set <ipmset> src -j <blocktype>

此方の方がipsetに登録してくれるような気がしてbanaction = firewallcmd-ipsetに変更した後にBANさせてipset listを実行してみましたが、結局何も出力されず。
firewallcmd-ipsetでは<ipmset>という名前のセットを作成してくれるようですが、そもそも<ipmset>とはどこで定義されているのでしょうか・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2020/04/23 05:15 編集

その設定でいいはずです。 firewalld は起動していますでしょうか。 また、BAN されたときに "ipset list" で BAN された IPアドレスが登録されていますでしょうか。
Jingles

2020/04/23 16:57

解答ありがとうございます。逐一調べつつなので返答が遅くなり申し訳ございません。 firewalldは起動しておりました。お恥ずかしながらipsetというパッケージの存在をここで初めて知りました。ですがお陰様で調べていく内にfail2banの仕様も何となく見えてきました。少し長くなりそうなので質問に追記したいと思います。
guest

回答1

0

ベストアンサー

EPEL リポジトリからインストールすると fail2ban-firewalld もインストールされて、/etc/fail2ban/jail.d/00-firewalld.conffirewallcmd-ipset の設定があると思います。
sshd に対して firewallcmd-ipset が有効になっているかどうか確認ください。

# cat /etc/fail2ban/jail.d/00-firewalld.conf [DEFAULT] banaction = firewallcmd-ipset[actiontype=<multiport>] banaction_allports = firewallcmd-ipset[actiontype=<allports>] # fail2ban-client get sshd actions The jail sshd has the following actions: firewallcmd-ipset

ログレベルを DEBUG にすると、実際に ipset, firewall-cmd --direct コマンドが実行されることが確認できます。

# fail2ban-client set loglevel DEBUG (設定ファイルでもよい) # tail -f /var/log/fail2ban.log fail2ban.actions [747]: NOTICE [sshd] Ban 192.168.122.1 fail2ban.action [747]: DEBUG ipset create f2b-sshd hash:ip timeout 600 firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports ssh -m set --match-set f2b-sshd src -j REJECT --reject-with icmp-port-unreachable fail2ban.utils [747]: DEBUG 7f024b0d6870 -- stdout: 'success' fail2ban.utils [747]: DEBUG 7f024b0d6870 -- returned successfully 0 fail2ban.action [747]: DEBUG ipset add f2b-sshd 192.168.122.1 timeout 600 -exist fail2ban.utils [747]: DEBUG 7f02480cf5e0 -- returned successfully 0 fail2ban.actions [747]: DEBUG Banned 1 / 1, 1 ticket(s) in 'sshd'

うまくいかないようなら、一度、fail2ban のデータベースを削除して OS 再起動するといいかもしれません。

# systemctl stop fail2ban # rm /var/lib/fail2ban/fail2ban.sqlite3 (OS 再起動)

投稿2020/04/24 01:11

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Jingles

2020/04/30 11:47

回答ありがとうございました。 "fail2ban-client get sshd actions"を確認したところ、「no actions」的な出力結果でした(ログを残し忘れました) どうしたものかと思いましたが、とりあえずsqliteを削除してみた所、firewallcmd-ipsetが有効になりました。いまいち納得できておりませんが、そういうものだと考えることにしました。 その後、[DEBUG]ログには"ipset del f2b-sshd XXX.XXX.XXX.XXX -exist"のコマンドが実行されて、ipset listでBAN対象のIPアドレスが表示されるようになりました。 しかし、肝心の動作確認が出来ませんでした。BANされた後にteratermからSSHポートに接続すると通常通りSSH認証画面が立ち上がります。正しいユーザー名と認証鍵を指定するとログインが出来てしまいます。 本来の動作としては新しい接続した時点で"ホストに到達できません"や"接続が拒否されました"のメッセージが出力されるのではないでしょうか?もう少し考えてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問