.htaccessファイルでブロックする再帰的な複数IPの追加

チャレンジ。 Webサーバーのホームフォルダー〜/ public_htmlに、通常の方法でさまざまなサイトのディレクトリが配置されます。 同じように、サイトの各ディレクトリには.htaccessファイルがあります。 このファイルの使用、特にIPアクセスが制限されていることが知られています。 私の場合、このファイルは次のようになります。



Order Allow,Deny Allow from all Deny from 194.87.147.196
      
      





このレコード(ブロック)は、public_htmlフォルダー内の各サイトの各.htaccessファイルで1回だけ見つかります。 そして、たとえば194.165.16.76のようにIPによるすべてのサイトへのアクセスをブロックする場合、各ファイルで、「すべてから許可」行の後に新しい行が追加されます。



 Deny from 194.165.16.76
      
      





質問:サーバー上に2つまたは3つのサイトではなく、さらに多くのサイトがある場合はどうすればよいですか?

これが私がこの問題を解決しようとした方法です。



検索コマンド



findコマンドは、どこからでも以下を実行する場合、指定されたフォルダーから開始して、すべての.htaccessファイルを再帰的に検索するのに役立ちます。



 find ~/public_html -type f -name .htaccess
      
      





–Execパラメーター



次に、ファイルに対していくつかの操作を実行する必要があります。



  1. 「すべてから許可」という行を見つけます
  2. 「194.165.16.76から拒否」という行をその後に挿入します


findコマンドの-execオプションは、これに役立ちます。 特に、 ストリームエディターsedを使用しました。 つまり、特別な場合、特定の.htaccessファイルの場合、コマンドは私を助けます:



 sed -i "/Allow from all/a Deny from 194.165.16.76" .htaccess
      
      





次に、findとsedを接続します:



 find ~/public_html -type f -name .htaccess –exec sed -i "/Allow from all/a Deny from 194.165.16.76" {} \;
      
      





このコマンドを実行すると、bashはすべての.haccessファイルを検索し、「すべてからの許可」の直後に194.165.16.76からの拒否を挿入します。



Bashスクリプト



ルーチンの一部を削減しましたが、毎回同じ長いチームを募集しないように努めています。 次の内容で〜/ addblacklistipファイルをホームフォルダーに作成します。



 #!/bin/bash me=`basename $0` if [[ $# -lt 2 ]]; then echo "Usage $me <start_path> <IP_address>" exit fi find $1 -type f -name .htaccess -exec sed -i "/Allow from all/a Deny from $2" {} \;
      
      





次に、コマンドを実行します。



 chmod +x ~/addblacklistip
      
      





スクリプトを使用する準備ができました。 たとえば、IP 7.7.7.7のすべての.htaccessファイルをブロックするには、次のコマンドを実行します。



 ~/addblacklistip ~/public_html 7.7.7.7
      
      





備考と追加



あなたがすること-あなた自身とリスクで行う!



まず、実行するすべてのコマンドとスクリプトを何度も確認します。 特に.htaccessファイルに関しては。 第二に、サブフォルダーと.htaccessファイルを含むテストフォルダーを作成してすべてをチェックするのが面倒ではありません。



ロックセクションが異なって見える場合...



新しいブロッキングエントリを作成する場所に、キーワードを追加します(たとえば、#Add next IP here)。 次のようになります。



 Order Allow,Deny Allow from all Deny from 194.87.147.196 #Add next IP here Deny from 194.87.147.196
      
      





そして、スクリプト行で:



 find $1 -type f -name .htaccess -exec sed -i "/Allow from all/a Deny from $2" {} \;
      
      





文字列に置き換えます:



 find $1 -type f -name .htaccess -exec sed -i "/#Add next IP here/a Deny from $2" {} \;
      
      





これで、キーエントリ#Add next IP here hereの後に新しいブロックエントリが表示されます。



すべてのサイトが〜/ public_htmlフォルダーではなく、〜/ wwwにある場合



次のパラメーターを使用してスクリプトを実行するだけです。



 ~/addblacklistip ~/www 7.7.7.7
      
      





ここで、7.7.7.7はブロックされたIPです。



追加するIPがたくさんある場合



いくら? 問題の分析と自動化のための別のトピックがあります。



All Articles