我想维护一个文件,其中包含被阻止使用站点的 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文件不存在会报错。