Запретить IP-адреса из текстового файла с помощью htaccess - программирование
Подтвердить что ты не робот

Запретить 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-адреса, которые хранятся в этом файле? Если да, то как?

4b9b3361

Ответ 1

Вы можете попробовать использовать варианты 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-адресов, и вы не хотите добавлять "deny" после каждого из них, вам нужно будет вызвать тип карты программы и написать a script, что-то вроде этого:

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

И правило перезаписи для проверки на карте не будет отличаться.