Apache拒绝外部文件中的ip列表

时间:2012-05-24 13:19:46

标签: apache

我想维护一个文件,其中包含阻止使用网站的ip列表。 我理解deny from可以用来实现这一点(例如Deny from 127.0.0.1 10.0.0.1 some.other.ip.address)。

但是,我想要一个外部文件,以便无权访问该配置的个人可以使用ip更新txt文件,然后将其包含在deny中。

有没有人对如何实现这一目标有任何建议?任何帮助都很受欢迎。

5 个答案:

答案 0 :(得分:7)

查看Apache Include指令:

http://httpd.apache.org/docs/2.2/mod/core.html#include

您可以创建一个包含拒绝列表的单独配置文件,并包含在任何其他配置文件中,即站点中可用的站点。以下示例用法:

在/etc/apache2/sites-enabled/yoursite.conf

<VirtualHost *:80>
...

Include /etc/apache2/sites-access/yoursite.conf

...
</VirtualHost>

在/etc/apache2/sites-access/yoursite.conf

order allow,deny
deny from 10.0.0.1
allow from all

答案 1 :(得分:2)

这不是一个真正的安全方法,但您可以将此txt文件放在共享目录中并使用cron作业更新apache config ...

另一种方法是使用htaccess ..

order allow,deny
deny from 10.0.0.1
allow from all

答案 2 :(得分:2)

使用RewriteMap映射作为外部IP地址文件可用于单个IP地址列表:

RewriteEngine on
RewriteMap allowed "txt:${site_dir}/etc/allowed_ip_addresses"

UnsetEnv ALLOWED

RewriteCond ${allowed:%{REMOTE_ADDR}} 1
RewriteRule ^ - [E=ALLOWED]

<Location />
  Deny  from all
  Allow from env=ALLOWED
</Location>

然后allowed_ip_addresses包含以下行:

10.42.1.123      1
192.168.100.456  1

该操作将允许的IP地址映射为值1,将所有其他IP地址映射为空字符串。

RewriteCond在地图中查找REMOTE_ADDR,如果它是1,则设置一个环境变量。 UnsetEnv确保在其他情况下绝对未设置该变量。

然后Allow from仅在设置了该环境变量后才允许访问。

外部映射文件可以具有与Apache配置不同的文件系统权限,并且对其进行的更改将立即生效,而无需重新启动Apache。

答案 3 :(得分:0)

'In windows httpd.conf'
'<Directory />'
'Include "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/deny.txt"'
'</Directory>'
'deny.txt contain'
'Deny from xxx.xxx.xxx.xxx'
'etc'

答案 4 :(得分:0)

我可以使用.htaccess,一个文件夹和一个以被禁止的ip作为标题的文件列表来逛逛。

如果banned_ips中的IP文件存在,则返回禁止标志:

RewriteCond "%{DOCUMENT_ROOT}/banned_ips/%{HTTP:X-FORWARDED-FOR}" -f
RewriteRule .* - [F]

我的示例适用于AWS Cloudfront,但是您可以将HTTP:X-FORWARDED-FOR替换为REMOTE_ADDR或任何包含访问者ip的变量。

或者,您可以使用HTTP_HOST通过以下站点保存目录:

RewriteCond "%{DOCUMENT_ROOT}/banned_ips/%{HTTP_HOST}/%{HTTP:REMOTE_ADDR}" -f
RewriteRule .* - [F]

通过这种方式,您无需更新htaccess文件,甚至可以通过程序从蜜罐列表中添加ips作为我们自己的跟踪器。

请在评论中让我知道您对可伸缩性和/或安全性的看法。