全部拒绝,通过 htaccess 只允许一个 IP
Posted
技术标签:
【中文标题】全部拒绝,通过 htaccess 只允许一个 IP【英文标题】:Deny all, allow only one IP through htaccess 【发布时间】:2011-05-22 22:59:53 【问题描述】:我试图拒绝所有,只允许一个 IP。但是,我想让以下 htaccess 为该单个 IP 工作。我没有找到一种同时工作的方法:全部拒绝和只允许一个,以及以下选项:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %REQUEST_URI ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %REQUEST_URI ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]
#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin
ErrorDocument 404 /index.php
</IfModule>
有没有办法让它工作?
【问题讨论】:
【参考方案1】:order deny,allow
deny from all
allow from set your IP
using htaccess to restrict access by ip
【讨论】:
【参考方案2】:除了@David Brown 的回答,如果你想阻止一个 IP,你必须首先允许所有然后阻止这些 IP:
<RequireAll>
Require all granted
Require not ip 10.0.0.0/255.0.0.0
Require not ip 172.16.0.0/12
Require not ip 192.168
</RequireAll>
第一行允许所有
从10.0.0.0
到10.255.255.255
的第二行块
从172.16.0.0
到172.31.255.255
的第三行块
从192.168.0.0
到192.168.255.255
的第四行块
您可以使用上述任何一种符号来满足您的 CIDR 需求。
【讨论】:
谢谢,这是处理 Apache 2.4 的正确方法!【参考方案3】:ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #:#:#:#:#:#
对我来说,这似乎可行(使用 IPv6 而不是 IPv4)我不知道这对于某些网站是否有所不同,但对我来说这可行。
【讨论】:
【参考方案4】:在 .htaccess 文件中添加以下命令。并将该文件放在您的 htdocs 文件夹中。
Order Deny,Allow
Deny from all
Allow from <your ip>
Allow from <another ip>
【讨论】:
【参考方案5】:对之前的答案进行更多改进,当您对网站进行更改时,可以向您的用户显示维护页面:
ErrorDocument 403 /maintenance.html
Order Allow,Deny
Allow from #.#.#.#
地点:
#.#.#.#
是你的 IP:What Is My IP Address?
对于maintenance.html
,这里有一个很好的例子:Simple Maintenance Page
【讨论】:
当我使用 ErrorDocument 403 时,我得到了该 maintenance.html 文件的额外 403 错误,因为它也无法访问该文件。你有解决方案吗?【参考方案6】:您可以拥有多个 IP,甚至可以拥有其他类型的允许,例如用户、主机名……更多信息在这里https://www.askapache.com/htaccess/setenvif/
SetEnvIf remote_addr ^123.123.123.1$ allowedip=1
SetEnvIf remote_addr ^123.123.123.2$ allowedip=1
SetEnvIf remote_addr ^123.123.123.3$ allowedip=1
SetEnvIf remote_addr ^123.123.123.4$ allowedip=1
Order deny,allow
deny from all
allow from env=allowedip
【讨论】:
【参考方案7】:我无法使用 403 方法,因为我希望将维护页面和页面图像放在我服务器上的子文件夹中,因此使用以下方法为除单个 IP 之外的所有人重定向到“维护页面”*
RewriteEngine on
RewriteCond %REMOTE_ADDR !**.**.**.*
RewriteRule !^maintenance/ http://www.website.co.uk/maintenance/ [R=302,L]
来源:Creating a holding page to hide your WordPress blog
【讨论】:
这个解决方案是最简单的——我更喜欢它【参考方案8】:如果您想使用 mod_rewrite 进行访问控制,您可以使用 user agent、http referrer、remote addr 等条件。
例子
RewriteCond %REMOTE_ADDR !=*.*.*.* #you ip address
RewriteRule ^$ - [F]
参考:
https://httpd.apache.org/docs/2.4/rewrite/access.html【讨论】:
【参考方案9】:我知道这个问题已经有一个公认的答案,但Apache documentation 说:
由 mod_access_compat 提供的 Allow、Deny 和 Order 指令, 已弃用,并将在未来的版本中消失。你应该避免 使用它们,并避免过时的教程推荐使用它们。
因此,一个更具前瞻性的答案是:
<RequireAll>
Require ip xx.xx.xx.xx yy.yy.yy.yy
</RequireAll>
希望我已经帮助防止此页面成为那些“过时的教程”之一。 :)
【讨论】:
我们的 IP 放在哪里? 干得好!这应该是被接受的解决方案,因为它不仅有效,而且经得起时间考验。 另一个答案对我的情况没有帮助。但是这个做到了。感谢您更新旧线程。 这个答案的例子允许从两个 IP 访问?那么,要添加多个 IP,我们只需在它们之间放置一个空格?您可以将Require ip
放在多行以使其更具用户可读性,还是所有 IP 都必须放在一行?
如果你使用了这个,你会如何像一些答案那样重定向到一个新的临时页面?【参考方案10】:
您可以在 htaccess 中使用以下内容来允许和拒绝访问您的网站:
SetEnvIf remote_addr ^1\.2\3\.4\.5$ allowedip=1
Order deny,allow
deny from all
allow from env=allowedip
如果客户端IP地址匹配模式,我们首先设置一个环境变量allowedip,如果模式匹配则环境变量allowedip被赋值1 .
在下一步中,我们使用 Allow,deny 指令来允许和拒绝对站点的访问。 Order deny,allow
表示 deny
和 allow
的顺序。 deny from all
这行告诉服务器拒绝所有人。最后一行 allow from env=allowedip
允许访问我们为其设置 env 变量的单个 IP 地址。
将1\.2\.3\.4\.5
替换为您允许的IP 地址。
参考:
https://httpd.apache.org/docs/2.4/mod/mod_setenvif.html
https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html
【讨论】:
使用它而不是只允许来自 324.234.22.1 的优点是什么?【参考方案11】:order deny,allow
deny from all
allow from <your ip>
【讨论】:
注意! Apache 对 htaccess 中的空格很敏感。在拒绝、允许之间不允许有任何空格。即不写命令拒绝,允许。 INFO: - 它也适用于 IPv6!只需添加另一行allow from yourIPv6
在 nginx 中可以吗?
Note on 2.4 docs: mod_access_compat 提供的 Allow、Deny 和 Order 指令已被弃用,并将在未来的版本中消失。您应该避免使用它们,并避免推荐使用过时的教程。
正如@MA-Maddin 指出的那样, - 那么 mod_access_compat 已被弃用。 This post 展示了如何在较新的版本中进行操作。并且还应该考虑,如果服务器正在使用代理,因为那将显示访问者的代理 IP。 This post 提出了解决方案。【参考方案12】:
这可以通过使用为该任务设计的指令来改进。
ErrorDocument 403 /specific_page.html
Order Allow,Deny
Allow from 111.222.333.444
其中 111.222.333.444 是您的静态 IP 地址。
当使用“Order Allow,Deny”指令时,请求必须匹配 Allow 或 Deny,如果两者都不满足,则请求被拒绝。
http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#order
【讨论】:
如何添加自定义网址?【参考方案13】:对上述内容稍作修改,包括向被拒绝访问者显示的自定义页面:
ErrorDocument 403 /specific_page.html
order deny,allow
deny from all
allow from 111.222.333.444
...这样那些不是来自 111.222.333.444 的请求将看到 specific_page.html
(将其作为评论发布看起来很糟糕,因为新行会丢失)
【讨论】:
嗨。我的代码与您在 .htaccess 中的代码完全相同,但我不断收到 500 错误。我指定的页面名为test.html
,与.htaccess
位于同一文件夹中。但是,我看不到日志(服务器不允许)。你知道我为什么会遇到这个问题吗?当我通过 ftp 客户端获取文件的路径时,它会告诉我/test.html
,所以路径应该不是问题,对吧?
此外,即使我将带有错误文档的行注释掉了,也会出现 500 错误。所以这应该不是问题。是否有其他 3 行无法工作的原因?在我的 .htaccess 中,我还有三行,我将非 www 重定向到 www,仅此而已。但是当我只有拒绝、允许等三行时,我也会收到错误消息。
如何添加自定义网址?以上是关于全部拒绝,通过 htaccess 只允许一个 IP的主要内容,如果未能解决你的问题,请参考以下文章