我在负载均衡器后面有多个服务器,我试图拒绝访问某些文件,除非你来自我们的建筑IP地址。我尝试了很多不同的东西,但我似乎无法做到这一点。服务器是Rackspace负载均衡器后面的Rackspace云服务器。我正在使用.htaccess网站,并尝试了以下。
<Files myfile.php>
Order Allow,Deny
Deny from all
SetEnvIF X-Forwarded-For "x.x.x.x" AllowIP
SetEnvIF X-Forwarded-For "y.y.y.y" AllowIP
Allow from env=AllowIP
</Files>
来自 https://www.experts-exchange.com/questions/28491708/servers-behind-load-balancer-need-to-allow-access-based-on-x-forwarded-for.html
Apache拒绝来自x-forwarded-for的IP地址(使用SetEnvIF)
我已经看到很多方法能够基于Apache的X-Forwarded-For(XFF)头来阻止或拒绝特定的IP地址,大多数方法都使用Apache的SetEnvIF指令或创建mod_rewrite规则。当XFF头包含多个IP(允许按照RFC的指示发生)时,我无法找到覆盖此问题的任何地方,并且我觉得允许请求到达需要是正确的执行Apache mod_rewrite规则。
当您缺少深度数据包检测防火墙时,这将成为一个更深层次的要求,但仍然希望能够拒绝特定IP地址,而无需进一步高于Web堆栈的应用程序层。当我们的服务器在Elastic Load Balancers(ELB)后面的AWS EC2上运行时,我们就遇到了这个问题。ELB没有任何功能(在撰写本文时)对服务器的传入流量设置拒绝规则,因此您需要在应用程序层中处理此问题。
我们在Apache配置中实现了以下内容:
CustomLog ${APACHE_LOG_DIR}/DenyIP_access.log combinedPlus env=DenyIP
<Directory />
#Example..
SetEnvIF X-Forwarded-For "(,| |^)192\.168\.1\.1(,| |$)" DenyIP
SetEnvIF X-Forwarded-For "(,| |^)10\.1\.1\.1(,| |$)" DenyIP
Order allow,deny
Deny from env=DenyIP
Allow from all
</Directory>
这使我们能够阻止请求,如果IP地址192.168.1.1或10.1.1.1出现在X-Forwarded-For标头内的任何地方,如果你想阻止更多的IP地址,那么只需添加另一个SetEnvIF指令,因为我已经在上面的例子中完成。此方法还允许在XFF标头内存在多个IP(并且仍然具有正确匹配的能力),并使一个IP非常具体; 我们试图否认的是唯一被拒绝的IP地址。然而,如果您将RegEx设置为类似“1.1.1.1”的东西,您可以轻松地匹配111.1.1.111以及许多其他变体,因此您可以看到它的重要性,以实现这一点。以上代码还将跟踪并存储此配置阻止的任何请求的日志文件,允许您确切地检查请求被拒绝访问的时间。您可能还需要修改LogFormat以帮助进一步诊断Apache接收的XFF标头,您可以执行此操作,如下例所示:
LogFormat "\"%{X-Forwarded-For}i\" %h %l %u %t %D \"%{Host}i\" \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combinedPlus
这允许您在访问日志中查看其他信息,例如XFF标头的内容,User-Agent标头,%D(Apache处理请求所花费的时间)等。从那里你可以更多地利用Apache正在收集的日志并将数据转换成一个简单的跟踪/监控工具。
请注意,当然XFF标头可能是欺骗性的,当然不是100%可靠,但是这确实可以让你获得一些控制权并且有时会派上用场。
我希望你觉得这很有用,请随时发表评论或提问。
来自 http://tech.holidayextras.co.uk/ops/2012/09/19/apache-deny-ip-addresses-from-x-forwarded-for-using-setenvif/
允许或阻止特定IP地址访问您的Cloud Hosting网站
由于我们的云托管具有独特的托管环境,因此需要对用于允许/拒绝 功能的代码进行轻微添加 。
在云托管中,进入服务器的请求IP地址是我们的负载平衡服务器的IP地址,而不是访问者的IP地址。这意味着通过.htaccess文件限制IP地址访问会出现问题。为解决此问题,我们提供了一个名为X-Cluster-Client-Ip的环境变量 ,其中包含访问者的IP地址。
在包含规则的.htaccess文件中,插入以下代码。
仅允许某些IP地址
order deny,allow
deny from all
allow from env=allowclient
SetEnvIf X-Cluster-Client-Ip 000.000.000.000 allowclient
当您的站点使用SSL时,仅允许某个IP地址
order deny,allow
deny from all
allow from env=allowclient
SetEnvIf X-FORWARDED-FOR ^000.000.000.000$ allowclient
您还可以使用环境变量 HTTP:X-Forwarded-For 用于通过SSL的“ 仅允许” 功能。
仅允许使用HTTP的某个IP地址 :X-Forwarded-For
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-For} 000\.000\.000\.000
RewriteRule .* - [F]
将000.000.000.000替换 为您的IP地址,该地址仅允许您的IP地址访问您的站点。然后,您可以无限制地开发您的网站。 您可以重复第1行以允许多个IP地址。
拒绝一个或多个IP地址
Order Allow,Deny
Deny from env=DenyAccess
Allow from all
SetEnvIf X-Cluster-Client-Ip "^000\.000\.000\.000" DenyAccess
在您的站点使用SSL时拒绝一个或多个IP地址
Order Allow,Deny
Deny from env=DenyAccess
Allow from all
SetEnvIf X-FORWARDED-FOR "^000\.000\.000\.000" DenyAccess
将 000 \ .000 \ .000 \ .000 替换为您要拒绝的IP地址。这会拒绝访问您网站的IP地址或地址。 您可以重复第1行以拒绝多个IP地址。
重要提示: 实施此代码可能会阻止在您的网站上加载图片。要解决此问题,您可以添加以下代码执行.htaccess文件:
<FilesMatch "\.(gif|jpe?p|png)$">
order deny,allow
allow from env=allowclient
</FilesMatch>
来自 https://practicalhost.zendesk.com/hc/en-us/articles/205564753-Allow-or-block-specific-IP-addresses-f...
如何限制网站访问多个IP地址
如果要将网站实例的访问权限限制为少量IP地址,例如在正式启动之前,通常在.htaccess
文件中使用以下行(使用Apache 2.2):
Order allow,deny
Deny from All
Allow from 1.2.3.4
Allow from 2.3.4.5
这是Apache 2.4的等效配置:
<RequireAny>
Require ip 1.2.3.4 2.3.4.5
</RequireAny>
但是,由于您的应用程序框不是直接从访问者那里获得请求,而是通过我们的边缘路由器和内容缓存/负载均衡器,这不起作用。发件人将始终显示为Load Balancer节点之一。
您可以从X-Forwarded-For
我们的边缘路由器设置的HTTP标头中获取实际的访客IP地址。通过评估此标头,Apache可以将此信息考虑在内。这是一个适用于Apache 2.4和Apache 2.2的完整配置代码段:
SetEnvIf X-Forwarded-For "1.2.3.4" AllowIP
SetEnvIf X-Forwarded-For "2.3.4.5" AllowIP
<IfModule mod_authz_core.c>
<RequireAny>
Require env AllowIP
Require ip 1.2.3.4 2.3.4.5
</RequireAny>
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from All
Allow from env=AllowIP
Allow from 1.2.3.4
Allow from 2.3.4.5
</IfModule>
来自 https://www.freistilbox.com/docs/access_by_ip/
How to block IP address via .htaccess file?
Apache 2.4 – block specific IP addresses
| <RequireAll> Require all granted Require not ip 1.1.1.1 Require not ip 2.2.2.2 </RequireAll> |
Apache older than 2.4 – block specific IP addresses
| Order allow,deny Deny from 1.1.1.1 Deny from 2.2.2.2 Allow from all |
How to allow specific IP addresses to access the site via .htaccess file?
Apache 2.4 – allow specific IP addresses only
| <RequireAny> Require ip 1.1.1.1 Require ip 2.2.2.2 </RequireAny> |
Apache older than 2.4 – allow specific IP addresses only
| Order deny,allow Deny from all Allow from 1.1.1.1 Allow from 2.2.2.2 |
How to allow specific IP addresses behind CDN or CloudFlare via .htaccess file?
Apache 2.4 – allow specific IP addresses behind CDN or CloudFlare
| SetEnvIF X-Forwarded-For "1.1.1.1" AllowIP SetEnvIF X-Forwarded-For "2.2.2.2" AllowIP <RequireAny> Require env AllowIP </RequireAny> |
Apache older than 2.4 – allow specific IP addresses behind CDN or CloudFlare
| SetEnvIf X-FORWARDED-FOR 1.1.1.1 allow SetEnvIf X-FORWARDED-FOR 2.2.2.2 allow Order deny,allow Deny from all Allow from env=allow |
This is very basic guide and in some cases you will need to use Virtual Host configuration instead of .htaccess file. More details in official Apache2 documentation.
来自 https://dryja.info/apache2-block-allow-ip-simple-guide/