我想维护一个文件,其中包含被阻止使用站点的 ip 列表。我知道可以使用拒绝来实现这一点(例如拒绝来自 127.0.0.1 10.0.0.1 some.other.ip.address)。
但是,我想要一个外部文件,以便无权访问配置的个人可以使用 ip 更新 txt 文件,然后将其包含在拒绝中。
有没有人对如何实现这一点有任何建议?非常感谢任何帮助。
我想维护一个文件,其中包含被阻止使用站点的 ip 列表。我知道可以使用拒绝来实现这一点(例如拒绝来自 127.0.0.1 10.0.0.1 some.other.ip.address)。
但是,我想要一个外部文件,以便无权访问配置的个人可以使用 ip 更新 txt 文件,然后将其包含在拒绝中。
有没有人对如何实现这一点有任何建议?非常感谢任何帮助。
查看 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
使用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 地址映射到 value 1
,并将所有其他 IP 地址映射到空字符串。
在地图中RewriteCond
查找REMOTE_ADDR
,如果是,1
则设置环境变量。UnsetEnv
确保变量绝对未设置,否则。
然后Allow from
仅在设置了该环境变量时才允许访问。
外部映射文件可以具有与您的 Apache 配置不同的文件系统权限,并且对它的更改会立即生效,而无需重新启动 Apache。
这不是真正的安全方法,但您可以将此 txt 文件放在共享目录中,并使用 cron 作业更新 apache 配置...
另一种方法是使用 htaccess ..
order allow,deny
deny from 10.0.0.1
allow from all
'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'
我使用.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 我们自己的跟踪器。
请在评论中告诉我您对这种方法在可扩展性和/或安全性方面的看法。
从 Apache httpd 版本 2.3.6 及更高版本,您可以使用该指令
IncludeOptional /etc/myfilewithrequireip.conf
请参阅https://httpd.apache.org/docs/2.4/mod/core.html#includeoptional
使用Include也是可以的,但是如果conf文件不存在会报错。