Fail2banを使ってLinuxサーバを保護する方法


Linuxサーバーの管理に関しては、サーバーのセキュリティを向上させることが最優先事項の1つです。サーバーのログを確認することで、ブルートフォースログイン、Webフラッド、エクスプロイトシークなど、さまざまな試みが見つかる可能性があります。

fail2ban などの侵入防止ソフトウェアを使用すると、サーバーのログを調べたり、問題のあるIPアドレスをブロックするためのiptablesルールを追加したりできます。

このチュートリアルでは、Linuxシステムを総当たり攻撃から保護するための fail2ban のインストール方法と基本的な設定方法を説明します。

Fail2banはpythonで書かれており、唯一の要件はpythonをインストールすることです。

  • Fail2ban branch 0.9.x requires Python >=2.6 or Python >=3.2
  • Fail2ban branch 0.8.x requires Python >=2.4
  • Root access to your system
  • Optinally, iptables or showewall and sendmail

LinuxシステムにFail2Banをインストールする方法

fail2ban のインストールは比較的簡単です。

最初にパッケージを更新し、 Epel リポジトリを有効にして、 fail2ban をインストールします。

# yum update
# yum install epel-release
# yum install fail2ban

最初にあなたのパッケージを更新し、表示されているように fail2ban をインストールしてください。

# apt-get update && apt-get upgrade -y
# apt-get install fail2ban

メールサポート(メール通知用)を有効にしたい場合は、sendmailをインストールすることもできます。

# yum install sendmail                   [On CentOS/RHEL]
# apt-get install sendmail-bin sendmail  [On Debian/Ubuntu]

fail2ban sendmail を有効にするには、次のコマンドを使用します。

# systemctl start fail2ban
# systemctl enable fail2ban
# systemctl start sendmail
# systemctl enable sendmail

LinuxシステムでFail2banを構成する方法

デフォルトでは、 fail2ban /etc/fail2ban/にある .conf ファイルを使用します。ただし、それらは同じディレクトリにある .local ファイルで上書きすることができます。

したがって、 .local ファイルには .conf ファイルのすべての設定を含める必要はありませんが、上書きする設定のみを含める必要があります。変更は .conf ではなく .local ファイルで行います。 fail2banパケットをアップグレードするとき、これは上書き変更を防ぎます。

このチュートリアルでは、既存の fail2ban.conf ファイルを fail2ban.local にコピーします。

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

お気に入りのテキストエディタを使って、 .local ファイルを変更できます。編集できる値は次のとおりです。

  • loglevel – this is the level of detail to be logged. Possible options are:
    • CRITICAL
    • ERROR
    • WARNING
    • NOTICE
    • INFO
    • DEBUG
    • STDOUT – output any data
    • STDERR – otuput any errors
    • SYSLOG – message based logging
    • File – output to a file

    fail2banで最も重要なファイルの1つは、あなたのjailを定義する jail.conf です。ここで、fail2banを有効にするサービスを定義します。

    先に述べたように、 .conf ファイルはアップグレード中に変更される可能性があるため、変更を適用できる jail.local ファイルを作成する必要があります。

    これを行う別の方法は、単に .conf ファイルを次のようにコピーすることです。

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

    CentOS または Fedora を使用している場合、 jail.local バックエンドを<から変更する必要がありますstrong> "auto" から "systemd" へ。

    Ubuntu/Debian を使用している場合は、 systemd を使用している場合でも、この変更を加える必要はありません。

    jailファイルは、 Debian Ubuntu に対してデフォルトでSSHを有効にしますが、 CentOS では無効にします。有効にしたい場合は、 /etc/fail2ban/jail.local の次の行を変更してください。

    [sshd]
    enabled = true
    

    IPアドレスがブロックされた後の状況を設定できます。そのために、 fail2ban bantime findtime maxretry を使用します。

    • bantime – this is the number of seconds that an IP address will remain banned (default 10 min).
    • findtime – the amount of time between login attempts, before the host is banned. (default 10 min). In other words, if fail2ban is set to block an IP address after 3 failed login attempts, those 3 attempts, must be done within the findtime period (10 mins).
    • maxretry – number of attempts to be made before a ban is applied. (default 3).

    もちろん、特定のIPアドレスをホワイトリストに登録することをお勧めします。このようなIPアドレスを設定するには、お気に入りのテキストエディタで /etc/fail2ban/jail.local を開き、次の行のコメントを外します。

    ignoreip = 127.0.0.1/8  ::1
    

    次に、無視したいIPアドレスを入力します。 IPアドレスはスペースまたはカンマで区切る必要があります。

    イベント発生時にメールアラートを受信したい場合は、 /etc/fail2ban/jail.local で次の設定を構成する必要があります。

    • destemail – mail address, where you will receive the notificatoin.
    • Sendername – the sender that you will see when receiving the message.
    • sender – email address from which fail2ban will send the emails.

    デフォルトの[ mta ]([メール転送エージェント])は[ sendmail ]に設定されています。

    メール通知を受け取るには、「アクション」設定を次から変更する必要があります。

    Action = %(action_)s
    

    これらのうちの1つに:

    action = %(action_mw)s
    action = %(action_mwl)s
    
    • %(action_mw)s – will ban the host and send mail with a whois report.
    • %(action_mwl)s – will ban the host, provide whois info and all relevant information from the log file.

    Fail2ban刑務所の追加設定

    これまで、基本的な設定オプションについて見てきました。 jailを設定したい場合は、 jail.local ファイルで有効にする必要があります。構文はとても簡単です。

    [jail_to_enable]
    . . .
    enabled = true
    

    jail_to_enable を実際のjailに置き換える必要がある場所(“ sshd”など)。 jail.local ファイルでは、sshサービスに対して次の値が事前定義されています。

    [sshd]
    
    port = ssh
    logpath = %(sshd_log)s
    

    ログ内の行が失敗した行であるかどうかを識別するのに役立つフィルタを有効にできます。フィルタ値は、実際にはサービス名とそれに続く .conf を持つファイルへの参照です。たとえば、 /etc/fail2ban/filter.d/sshd.conf です。

    構文は次のとおりです。

    filter = service
    

    例えば:

    filter = sshd
    

    /etc/fail2ban/filter.d/ ディレクトリにある既存のフィルタを確認できます。

    Fail2banには、現在の設定を確認および変更するために使用できるクライアントが付属しています。それは多くのオプションを提供するので、あなたはそのマニュアルをたどることができます:

    # man fail2ban-client 
    

    ここでは、使用できる基本的なコマンドのいくつかがわかります。 fail2ban の現在のステータスを確認するために、または特定の刑務所について、あなたは使うことができます:

    # fail2ban-client status
    

    結果は次のようになります。

    個々の刑務所では、あなたは実行することができます:

    # fail2ban-client status sshd
    

    下のスクリーンショットでは、私が意図的に複数のログインに失敗したので、fail2banは私が接続しようとしていたIPアドレスをブロックすることができることがわかります。

    Fail2ban は、優れた文書化された侵入防止システムで、Linuxシステムにさらなるセキュリティを提供します。その設定と構文に慣れるのに時間がかかりますが、慣れてしまえば、その規則を変更して拡張することができます。