セキュリティ · 3 min read · Dec 03, 2025
Mandriva 2008.1でFail2banを使用してブルートフォース攻撃を防ぐ
Mandriva 2008.1でFail2banを使用してブルートフォース攻撃を防ぐ
Version 1.0
Author: Falko Timme
この記事では、Mandriva 2008.1システムにfail2banをインストールおよび構成する方法を示します。Fail2banは、SSH、FTP、SMTP、Apacheなどのさまざまなサービスへのログイン試行を監視するツールであり、同じIPアドレスまたはホストからの失敗したログイン試行が繰り返されると、fail2banはそのIPアドレス/ホストからのさらなるログイン試行をiptablesファイアウォールルールでブロックします。
この文書には、いかなる種類の保証もありません!これは、そのようなシステムを設定する唯一の方法ではないことを言いたいです。この目標を達成する方法はたくさんありますが、これは私が取る方法です。これがあなたにとって機能することを保証するものではありません!
1 予備ノート
Fail2banは、私がこのチュートリアルで取り上げたDenyHostsに似ています: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts、しかしSSHに焦点を当てたDenyHostsとは異なり、fail2banはログファイルにログイン試行を書き込む任意のサービスを監視するように構成できます。また、IPアドレス/ホストをブロックするために/etc/hosts.denyのみを使用するのではなく、fail2banはiptablesと/etc/hosts.denyを使用できます。
この例では、fail2banをSSHサーバー、Proftpdサーバー、.htaccess/.htpasswdで保護されたウェブサイトへのログイン試行、Courier POP3およびCourier IMAP、SASL(メール送信用)を監視するように構成します。Mandriva 2008.1用に利用可能なfail2banパッケージをインストールします。デフォルトの構成が付属していますが、残念ながらその構成は前述のほとんどのサービスにはうまく機能しません。したがって、私がテストして機能するカスタマイズされたfail2ban構成を作成します。
2 fail2banのインストール
パッケージをインストールする前に、main、main_updates、contrib、およびcontrib_updatesリポジトリを有効にする必要があります。http://easyurpmi.zarb.org/にアクセスしてください - これにより、これらのリポジトリを有効にするために実行する必要のあるコマンドが提供されるはずです。私の場合、次のコマンドを実行しました。
urpmi.addmedia contrib ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/release with media_info/hdlist.czurpmi.addmedia --update contrib_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/contrib/updates with media_info/hdlist.czurpmi.addmedia main ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/release with media_info/hdlist.czurpmi.addmedia --update main_updates ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/MandrivaLinux/official/2008.1/i586/media/main/updates with media_info/hdlist.czFail2banは次のようにインストールできます。
urpmi fail2ban次に、fail2banを起動します。
/etc/init.d/fail2ban startすべてのfail2ban構成ファイルは/etc/fail2banディレクトリにあります。
3 fail2banの構成
fail2banのデフォルトの動作は、/etc/fail2ban/jail.confファイルで構成されています。それを見てみてください、理解するのは難しくありません。[DEFAULT]セクションがあり、これは他のセクションに適用されますが、他のセクションでデフォルトオプションが上書きされている場合は除きます。
ここでいくつかの構成オプションを説明します:
- ignoreip: fail2banによってブロックされないIPアドレスのスペース区切りリストです。たとえば、サーバーに接続しているコンピュータが静的IPアドレスを持っている場合、ここにリストすることをお勧めします。
- bantime: fail2banによって捕捉された場合、ホストがブロックされる時間(秒単位)(600秒 = 10分)。
- maxretry: fail2banによってホストがブロックされる前の最大失敗したログイン試行の数。
- filter: /etc/fail2ban/filter.d内の適切なフィルタファイルを指します。
- action: /etc/fail2ban/action.d内の適切なアクションファイルを指します。
- logpath: fail2banが失敗したログイン試行をチェックするログファイルです。
私の/etc/fail2ban/jail.confファイルは次のようになります:
vi /etc/fail2ban/jail.conf| # Fail2Ban configuration file # # Author: Cyril Jaquier # # $Revision: 617 $ # # The DEFAULT allows a global definition of the options. They can be override # in each jail afterwards. [DEFAULT] # "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 192.168.0.99 # "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 = 3 # "backend" specifies the backend used to get files modification. Available # options are "gamin", "polling" and "auto". This option can be overridden in # each jail too (use "gamin" for a jail and "polling" for another). # # gamin: requires Gamin (a file alteration monitor) to be installed. If Gamin # is not installed, Fail2ban will use polling. # polling: uses a polling algorithm which does not require external libraries. # auto: will choose Gamin if available and polling otherwise. backend = auto # This jail corresponds to the standard configuration in Fail2ban 0.6. # The mail-whois action send a notification e-mail with a whois request # in the body. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected]] logpath = /var/log/auth.log maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/proftpd/proftpd.log maxretry = 6 [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail/info.log [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/httpd/*error_log maxretry = 6 [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail/info.log bantime = 300 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail/info.log maxretry = 5 [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/auth.log [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/vsftpd.log maxretry = 5 bantime = 1800 [apache-badbots] enabled = false filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/www/*/logs/access_log bantime = 172800 maxretry = 1 [apache-shorewall] enabled = false filter = apache-noscript action = shorewall sendmail[name=Postfix, [email protected]] logpath = /var/log/apache2/error_log [ssh-ipfw] enabled = false filter = sshd action = ipfw[localhost=192.168.0.1] sendmail-whois[name="SSH,IPFW", [email protected]] logpath = /var/log/auth.log ignoreip = 168.192.0.1 [named-refused-udp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=udp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 [named-refused-tcp] enabled = false filter = named-refused action = iptables-multiport[name=Named, port="domain,953", protocol=tcp] sendmail-whois[name=Named, [email protected]] logpath = /var/log/named/security.log ignoreip = 168.192.0.1 |
私のクライアントコンピュータの静的IPアドレスは192.168.0.99であり、ロックアウトされたくないので、ignoreipリストに追加しました。
SSH、Apache、Proftpd、Courier-POP3、Courier-IMAP、およびSaslへのログイン試行を制御したいので、これらのサービスのenabledをtrueに設定し、他のすべてのサービスをfalseに設定しました。SSHなどの一部のサービスは、iptablesまたはTCPWrappers(/etc/hosts.deny)によってブロックできます。どの方法を好むかは自分で決めてください。
fail2banによって誰かがブロックされたときに通知を受け取るために、メールアドレス[email protected]を自分のメールアドレスに置き換えることを忘れないでください。
ファイルをデフォルトの/etc/fail2ban/jail.confと比較すると、Mandriva 2008.1に対してデフォルトの/etc/fail2ban/jail.confのログファイルが正しくないため、いくつかのログファイルを変更したことにも気づくでしょう。
fail2banの構成を変更するたびに、fail2banを再起動する必要がありますので、今からこれを行います:
/etc/init.d/fail2ban restartこれで完了です。Fail2banは/var/log/fail2ban.logにログを記録するので、そのファイルを確認して、どのホストがブロックされたかを確認できます。ホストがfail2banによってブロックされた場合は、次のようになります:
2008-08-12 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4
2008-08-12 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4
2008-08-12 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2008-08-12 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4現在ブロックされているホストがあるかどうかを確認するには、ファイアウォールを確認することもできます。単に次のコマンドを実行します。
iptables -LホストをブロックするためにTCPWrappersを使用するサービスについては、/etc/hosts.denyを確認してください。
リンク
- Fail2ban: http://www.fail2ban.org
- Mandriva: http://www.mandriva.com
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。