使用htaccess从文本文件中禁用IP

时间:2012-10-22 09:18:13

标签: .htaccess ip text-files block

我阅读并了解如何使用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吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:18)

您可以尝试使用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 文件。如果IP在文件中,则输出“拒绝”,否则输出“允许”。然后你就像这样创建地图:

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

根据地图检查的重写规则也不例外。