17

htaccess を使用して IP をブロックする方法を読んで理解しました。

order deny,allow
deny from 111.222.33.44
deny from 55.66.77.88
...
allow from all

しかし、ブラック IP のリストには何千もの IP が含まれています。すべての IP をblacklist.txtファイルに保存します。

htaccess を使用してblacklist.txtを呼び出し、このファイルに保存されているすべての IP をブロックできますか? もしそうなら、どのように?

4

1 に答える 1

23

RewriteMapのバリエーションを試すことができます。そのディレクティブはそこでのみ機能するため、server/vhost 構成へのアクセスが必要になります。その後、htaccess ファイル内でマップを使用できます。

blacklist.txtファイルが次のようになっているとします

111.222.33.44  deny
55.66.77.88    deny
192.168.0.1    allow

次のようにマップを定義できます。

RewriteEngine On
RewriteMap access txt:/path/to/blacklist.txt

次に、htaccess でマップを呼び出すことができます。

RewriteEngine On 
RewriteCond ${access:%{REMOTE_ADDR}} deny [NC]
RewriteRule ^ - [L,F]

条件はマップを呼び出し、リモート アドレスが「deny」という単語にマップされているかどうかを確認します。マップされている場合は、書き換えルールによってアクセスが完全に禁止されます。

blacklist.txtが IPのリストのみで、各 IP の後に「拒否」を追加したくない場合は、プログラム マップ タイプを呼び出して、次のようなスクリプトを記述する必要があります。

#!/bin/bash

while true
do
    read INPUT
    MATCH=`grep $INPUT /path/to/blacklist.txt`
    if [ -z "$MATCH"  ]; then
        echo "allow"
    else
        echo "deny"
    fi
done

どの無限ループが入力を読み取り、blacklist.txtファイルを grep します。IP がファイルにある場合は「拒否」を出力し、そうでない場合は「許可」を出力します。次に、次のようにマップを作成します。

RewriteEngine On
RewriteMap access prg:/path/to/blacklist.txt

そして、マップに対してチェックする書き換えルールも例外ではありません。

于 2012-10-22T10:12:35.893 に答える