.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がたくさんある場合


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

Source: https://habr.com/ru/post/J321110/


All Articles