2016-08-27 5 views
1

シンプルなddos攻撃を防止する(防止しないで効果を減らす)小さなスクリプトを作成しようとしています。現時点では、私は自分のサーバー上のすべてのページに自分のddosprotection.phpファイルを含めています。誰かがウェブサイトで大量のリクエストを送信しようとすると、スクリプトはこれを検出し、攻撃者のIPをhtaccessファイルに書き込みます。htaccessを使用してip temporaryからのアクセスを拒否する

Deny from 1.2.3.4 

攻撃者がWebサイト自体にアクセスしないため、DDoS攻撃の影響を軽減する必要があります。 (はい、私はまだサーバーがいくつかのデータを処理する必要があることを知っていますが、まだDDoS攻撃の影響を減らしています)

私の質問は今です:いくつかの合法的なユーザーが私のウェブサイトを取得し、正当なユーザーとして、彼は永久に禁止されます。 htaccessのIPアドレスを一時的に禁止する方法はありますか?例えば、接続されているすべてのデータベースがあってはならないも任意のPHPスクリプトは、ユーザーがWebサイトに接続しようとすると(これはナンセンスだろう、攻撃がより効果的であろう)、要求があるはずです:

Deny from 1.2.3.4 before TIMESTAMP 
+1

あなたがしようとしていることはまさに[fail2ban](http://www.fail2ban.org/wiki/index.php/Main_Page)のためです。 – billynoah

+0

@billynoahはい、私はPHPとhtaccessだけで解決策を探します –

+0

私は理解しています。あなたが気づいていなかった場合のための示唆に過ぎませんでした。私は投稿します。htaccessの解決策はすぐに – billynoah

答えて

1

あなたはmod_rewriteをして、サーバの環境変数を使用するため、これをワークアップ:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REMOTE_ADDR} ^1\.2\.3\.4 
    RewriteCond %{TIME} <20160827085500 
    RewriteRule ^(.*)$ - [F,L] 
</IfModule> 

説明:

  • をmod_rewriteのがインストールされ、有効になっていることを確認します。
  • ipアドレスが1.2.3.4で、サーバー時間が2016-08-27 8:55:00より前の場合は、禁止ページにリダイレクトします。

禁止時間を計算するためにサーバーの時間を知っている必要があります。ちょうど5分またはその他のものを追加してください。あなたがわからない場合、あなたはこのようにその形式でPHPを使用して、サーバーの時間を取得することができます。

echo date('Ymdhis'); 

は今、あなたはあなたができる5分間のIPを禁止するとします。

date('Ymdhis', strtotime('+5 minutes')) 

.htaccessで出力を使用します。

詳細はTime-Dependent Rewritingです。

2

データベースはありませんこれを管理する最も便利な方法と思われます。

しかし、PHPスクリプトを実行する必要はなく、リクエストごとにデータベースを照会する必要はありません。データベースをブロックして定期的にphpスクリプトを実行すると(たとえばLinuxのcronを使用して)、データベースにエントリを追加できます。期限切れのエントリをクリーンアップし、.htaccessファイルを再生成します。それはまた、重複したIPアドレスを持つ.htaccessファイルが増え続けるのを避けるでしょう。

それ以外に、.htaccessファイルではなくファイアウォールに直接ルールを書き込むことで、ブロックされたエントリに対してWebサーバーを完全に回避しようとする必要があります。

+0

私はこれに完全に同意し、以下に投稿したものより優れた解決策です。しかし、私はそれがルールとして時間を使用することさえ可能であるかどうかを知ることに興味を持ち、残りは歴史です;-) – billynoah

関連する問題