Ubuntu14.04でFail2Banを使用してNginxサーバーを保護する方法
序章
Webサーバーを運用する場合は、サイトとユーザーを保護するためのセキュリティ対策を講じることが重要です。 ファイアウォールポリシーを使用してWebサイトとアプリケーションを保護し、パスワード認証を使用して特定の領域へのアクセスを制限することは、システムを保護するための優れた出発点です。 ただし、公的にアクセス可能なパスワードプロンプトは、悪意のあるユーザーやボットからのブルートフォースの試みを引き付ける可能性があります。
セットアップ fail2ban
この問題を軽減するのに役立ちます。 ユーザーがサービスへの認証に繰り返し失敗した場合(または他の疑わしいアクティビティに従事した場合)、 fail2ban
実行中のファイアウォールポリシーを動的に変更することにより、問題のあるIPアドレスを一時的に禁止することができます。 各 fail2ban
「jail」は、失敗した試行を示すパターンについてサービスによって書き込まれたログをチェックすることによって動作します。 セットアップ fail2ban
含まれている構成フィルターのいくつかと、自分で作成するいくつかの構成フィルターを使用すると、Nginxログを監視するのはかなり簡単です。
このガイドでは、インストール方法を示します fail2ban
侵入の試みについてNginxログを監視するように構成します。 Ubuntu14.04サーバーを使用します。
前提条件
始める前に、root以外のアカウントでUbuntu14.04サーバーをセットアップする必要があります。 このアカウントは次のように構成する必要があります sudo
管理コマンドを発行するための特権。 でユーザーを設定する方法を学ぶには sudo
特権については、Ubuntu14.04の初期サーバーセットアップガイドに従ってください。
Nginxのインストールとパスワード認証の構成
Nginxサーバーを保護することに興味がある場合 fail2ban
、すでにサーバーをセットアップして実行している可能性があります。 そうでない場合は、UbuntuのデフォルトリポジトリからNginxをインストールできます。 apt
.
ローカルパッケージインデックスを更新し、次のように入力してインストールします。
- sudo apt-get update
- sudo apt-get install nginx
The fail2ban
サービスは、ログインエントリポイントを保護するのに役立ちます。 これがNginxのインストールに役立つようにするには、サーバー上のコンテンツの少なくともサブセットに対してパスワード認証を実装する必要があります。 このガイドに従って、Nginxサーバーのパスワード保護を構成できます。
Fail2Banをインストールします
Nginxサーバーが実行され、パスワード認証が有効になったら、先に進んでインストールできます fail2ban
(前の手順ですでにNginxを設定している場合に備えて、ここに別のリポジトリの再フェッチを含めます):
- sudo apt-get update
- sudo apt-get install fail2ban
これにより、ソフトウェアがインストールされます。 デフォルトでは、 fail2ban
失敗したSSHログイン試行のみを禁止するように構成されています。 悪意のあるアクティビティを示すパターンがないかNginxログをチェックするように構成するいくつかのルールを有効にする必要があります。
Fail2Ban内の一般設定の調整
開始するには、構成ファイルを調整する必要があります。 fail2ban
を使用して、監視するアプリケーションログと、問題のあるエントリが見つかったときに実行するアクションを決定します。 付属 /etc/fail2ban/jail.conf
ファイルは、このために提供される主なリソースです。
変更するには、このファイルをにコピーする必要があります /etc/fail2ban/jail.local
. これにより、パッケージの更新で新しいデフォルトファイルが提供された場合に、変更が上書きされるのを防ぐことができます。
- sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
新しくコピーしたファイルを開いて、Nginxログモニタリングを設定できるようにします。
- sudo nano /etc/fail2ban/jail.local
デフォルトの変更
まず、ファイル内に設定されているデフォルトを評価して、ニーズに合っているかどうかを確認する必要があります。 これらは下にあります [DEFAULT]
ファイル内のセクション。 これらの項目は一般的なポリシーを設定し、特定の刑務所でそれぞれオーバーライドできます。
最初に確認する項目の1つは、対象外のクライアントのリストです。 fail2ban
ポリシー。 これはによって設定されます ignoreip
指令。 ロックアウトを回避するために、例外のリストに独自のIPアドレスまたはネットワークを追加することをお勧めします。 シェルアクセスを維持できる場合は、いつでも手動で禁止を取り消すことができるため、これはWebサーバーのログインではそれほど問題にはなりません。 既存のリストに、スペースで区切られたIPアドレスまたはネットワークを追加できます。
[DEFAULT]
. . .
ignoreip = 127.0.0.1/8 your_home_IP
あなたが調整したいと思うかもしれないもう一つの項目は bantime
、違反しているメンバーが禁止される秒数を制御します。 これを、悪意のあるアクターの努力を妨害するのに十分な長さに設定し、正当なユーザーが間違いを修正できるように十分に短く設定するのが理想的です。 デフォルトでは、これは600秒(10分)に設定されています。 適切と思われる場合は、この値を増減します。
[DEFAULT]
. . .
bantime = 3600
次の2つの項目は、問題のあるクライアントを特定するために使用されるログ行の範囲を決定します。 The findtime
時間を秒単位で指定し、 maxretry
ディレクティブは、その時間内に許容される試行回数を示します。 クライアントが以上を作る場合 maxretry
によって設定された時間内の試行 findtime
、それらは禁止されます:
[DEFAULT]
. . .
findtime = 3600 # These lines combine to ban clients that fail
maxretry = 6 # to authenticate 6 times within a half hour.
メール通知の設定(オプション)
禁止が行われるたびにメールを受信したい場合は、電子メール通知を有効にすることができます。 そのためには、まずサーバーにMTAを設定して、メールを送信できるようにする必要があります。 このタスクにPostfixを使用する方法については、このガイドに従ってください。
MTAを設定したら、内でいくつかの追加設定を調整する必要があります。 [DEFAULT]
のセクション /etc/fail2ban/jail.local
ファイル。 設定することから始めます mta
指令。 上記のチュートリアルが示すようにPostfixを設定する場合は、この値を「mail」に変更します。
[DEFAULT]
. . .
mta = mail
通知を送信するメールアドレスを選択する必要があります。 を変更します destemail
この値のディレクティブ。 The sendername
ディレクティブを使用して、通知メールの「送信者」フィールドを変更できます。
[DEFAULT]
. . .
destemail = [email protected]
sendername = Fail2BanAlerts
の fail2ban
用語では、「アクション」とは、クライアントが認証に何度も失敗した場合に従う手順です。 デフォルトのアクション( action_
)は、問題のポートからのIPアドレスを単に禁止することです。 ただし、メールを設定している場合に使用できる、他に2つの事前に作成されたアクションがあります。
あなたは使用することができます action_mw
クライアントを禁止し、構成されたアカウントに、問題のあるアドレスに関する「whois」レポートを含む電子メール通知を送信するアクション。 また、を使用することができます action_mwl
アクション。これは同じことを行いますが、禁止をトリガーした問題のあるログ行も含まれます。
[DEFAULT]
. . .
action = %(action_mwl)s
Nginxログを監視するためのFail2Banの構成
今、あなたは一般的なもののいくつかを持っています fail2ban
設定が整ったら、特定の動作パターンについてWebサーバーログを監視するNginx固有のjailを有効にすることに集中できます。
構成ファイル内の各jailは、角かっこで囲まれたjail名を含むヘッダーでマークされます(ただし、 [DEFAULT]
セクションは特定の刑務所の構成を示します)。 デフォルトでは、 [ssh]
刑務所が有効になっています。
Nginxログイン試行のログ監視を有効にするには、 [nginx-http-auth]
刑務所。 編集します enabled
このセクション内のディレクティブで、「true」と表示されます。
[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/error.log
. . .
これは、Ubuntuに含まれている唯一のNginx固有の刑務所です。 fail2ban
パッケージ。 ただし、独自のjailを作成して、機能を追加することはできます。 これらの追加の刑務所のインスピレーションと実装の詳細の一部は、こことここから得られました。
作成できます [nginx-noscript]
実行および悪用するためにWebサイトでスクリプトを検索しているクライアントを禁止するための刑務所。 PHPまたはその他の言語をWebサーバーと組み合わせて使用しない場合は、この刑務所を追加して、これらのタイプのリソースを要求するユーザーを禁止できます。
[nginx-noscript]
enabled = true
port = http,https
filter = nginx-noscript
logpath = /var/log/nginx/access.log
maxretry = 6
. . .
と呼ばれるセクションを追加できます [nginx-badbots]
既知の悪意のあるボットリクエストパターンを停止するには:
[nginx-badbots]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/access.log
maxretry = 2
Nginxを使用してユーザーのホームディレクトリ内のWebコンテンツへのアクセスを提供しない場合は、これらのリソースを要求するユーザーを追加することで禁止できます。 [nginx-nohome]
刑務所:
[nginx-nohome]
enabled = true
port = http,https
filter = nginx-nohome
logpath = /var/log/nginx/access.log
maxretry = 2
Nginxサーバーをオープンプロキシとして使用しようとするクライアントを禁止する必要があります。 追加できます [nginx-noproxy]
これらの要求に一致する刑務所:
[nginx-noproxy]
enabled = true
port = http,https
filter = nginx-noproxy
logpath = /var/log/nginx/access.log
maxretry = 2
必要な変更が完了したら、ファイルを保存して閉じます。 次に、作成した刑務所のフィルターを追加する必要があります。
追加のNginx刑務所用のフィルターの追加
更新しました /etc/fail2ban/jail.local
より広範囲の悪い振る舞いに一致し、禁止するために、いくつかの追加の刑務所仕様をファイルします。 作成したjailのフィルターファイルを作成する必要があります。 これらのフィルターファイルは、Nginxログ内で検索するパターンを指定します。
フィルタディレクトリに移動することから始めます。
- cd /etc/fail2ban/filter.d
実際には、追加の失敗したログインログパターンに一致するように、事前に提供されたNginx認証フィルターを調整することから始めたいと思います。 編集用にファイルを開きます。
- sudo nano nginx-http-auth.conf
下 failregex
仕様、追加のパターンを追加します。 これは、ユーザーがユーザー名またはパスワードを入力していない行と一致します。
[Definition]
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: <HOST>, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
ignoreregex =
終了したら、ファイルを保存して閉じます。
次に、 apache-badbots.conf
Nginxで使用するファイル。 このファイルはそのまま使用できますが、わかりやすくするために新しい名前にコピーします。 これは、jail構成内でフィルターを参照する方法と一致します。
- sudo cp apache-badbots.conf nginx-badbots.conf
次に、フィルターを作成します [nginx-noscript]
刑務所:
- sudo nano nginx-noscript.conf
次の定義を中に貼り付けます。 スクリプトのサフィックスを自由に調整して、サーバーが合法的に使用している言語ファイルを削除するか、サフィックスを追加してください。
[Definition]
failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\.scgi)
ignoreregex =
ファイルを保存して閉じます。
次に、のフィルターを作成します [nginx-nohome]
刑務所:
- sudo nano nginx-nohome.conf
次のフィルター情報をファイルに配置します。
[Definition]
failregex = ^<HOST> -.*GET .*/~.*
ignoreregex =
終了したら、ファイルを保存して閉じます。
最後に、 [nginx-noproxy]
刑務所:
- sudo nano nginx-noproxy.conf
このフィルター定義は、サーバーをプロキシとして使用する試みと一致します。
[Definition]
failregex = ^<HOST> -.*GET http.*
ignoreregex =
終了したら、ファイルを保存して閉じます。
Nginx刑務所をアクティブ化する
構成の変更を実装するには、再起動する必要があります fail2ban
サービス。 次のように入力すると、次のように入力できます。
- sudo service fail2ban restart
サービスが再起動し、構成したさまざまな禁止ポリシーが実装されます。
有効な刑務所に関する情報の取得
を使用すると、有効になっているすべての刑務所を確認できます。 fail2ban-client
指図:
- sudo fail2ban-client status
有効にしたすべての刑務所のリストが表示されます。
OutputStatus
|- Number of jail: 6
`- Jail list: nginx-noproxy, nginx-noscript, nginx-nohome, nginx-http-auth, nginx-badbots, ssh
あなたは見ることができます iptables
それを見るために fail2ban
クライアントを禁止するためのフレームワークを作成するためにファイアウォールルールを変更しました。 以前のファイアウォールルールがなくても、これでフレームワークが有効になり、 fail2ban
クライアントを専用チェーンに追加して選択的に禁止するには、次のようにします。
- sudo iptables -S
Output-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-nginx-badbots
-N fail2ban-nginx-http-auth
-N fail2ban-nginx-nohome
-N fail2ban-nginx-noproxy
-N fail2ban-nginx-noscript
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-noproxy
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-nohome
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-badbots
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-noscript
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-nginx-badbots -j RETURN
-A fail2ban-nginx-http-auth -j RETURN
-A fail2ban-nginx-nohome -j RETURN
-A fail2ban-nginx-noproxy -j RETURN
-A fail2ban-nginx-noscript -j RETURN
-A fail2ban-ssh -j RETURN
いずれかの刑務所によって施行されている禁止の詳細を確認したい場合は、おそらくより簡単に使用できます。 fail2ban-client
また:
- sudo fail2ban-client status nginx-http-auth
OutputStatus for the jail: nginx-http-auth
|- filter
| |- File list: /var/log/nginx/error.log
| |- Currently failed: 0
| `- Total failed: 0
`- action
|- Currently banned: 0
| `- IP list:
`- Total banned: 0
Fail2Banポリシーのテスト
あなたをテストすることが重要です fail2ban
期待どおりにトラフィックをブロックするためのポリシー。 たとえば、Nginx認証プロンプトの場合、誤った資格情報を何度も与える可能性があります。 制限を超えた後は、禁止され、サイトにアクセスできなくなります。 電子メール通知を設定すると、指定した電子メールアカウントに禁止に関するメッセージが表示されます。
ステータスを見ると fail2ban-client
コマンドを実行すると、IPアドレスがサイトから禁止されていることがわかります。
- sudo fail2ban-client status nginx-http-auth
OutputStatus for the jail: nginx-http-auth
|- filter
| |- File list: /var/log/nginx/error.log
| |- Currently failed: 0
| `- Total failed: 12
`- action
|- Currently banned: 1
| `- IP list: 111.111.111.111
`- Total banned: 1
ルールが機能していることを確認したら、手動でIPアドレスの禁止を解除できます。 fail2ban-client
次のように入力します。
- sudo fail2ban-client set nginx-http-auth unbanip 111.111.111.111
これで、認証を再試行できるようになります。
結論
セットアップ fail2ban
Nginxサーバーを保護することは、最も単純なケースではかなり簡単です。 でも、 fail2ban
特定のセキュリティニーズに適合するポリシーを構築するための大きな柔軟性を提供します。 内の変数とパターンを見てみると /etc/fail2ban/jail.local
ファイル、およびそれが依存するファイル /etc/fail2ban/filter.d
と /etc/fail2ban/action.d
ディレクトリでは、ニーズの変化に応じて微調整および変更するための多くの部分を見つけることができます。 サーバーを保護する方法の基本を学ぶ fail2ban
最小限の労力で大量のセキュリティを提供できます。
あなたがについてもっと知りたいなら fail2ban
、次のリンクを確認してください。