Забранете IP адреси от текстов файл с помощта на htaccess

Прочетох и разбирам как да блокирам IP чрез htaccess:

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 адреси, които се съхраняват в този файл? Ако е така, как?


person Miss Phuong    schedule 22.10.2012    source източник


Отговори (1)


Можете да опитате да използвате варианти на RewriteMap. Ще ви трябва достъп до конфигурацията на сървъра/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 адреси и не искате да добавяте „отказ“ след всеки от тях, ще трябва да извикате тип програмна карта и да напишете скрипт, нещо като това:

#!/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

които безкрайни цикли четат входа и greps на файла blacklist.txt. Ако IP е във файла, изведете "deny", в противен случай извежда "allow". След това ще създадете картата така:

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

И правилото за пренаписване за проверка спрямо картата не би било по-различно.

person Jon Lin    schedule 22.10.2012