Apache2 访问仅限于本地 LAN
Posted
技术标签:
【中文标题】Apache2 访问仅限于本地 LAN【英文标题】:Apache2 access restricted to local LAN 【发布时间】:2010-11-03 09:09:33 【问题描述】:直到最近,我还建立了一堆这样的虚拟网站:
<VirtualHost 127.0.0.1:1234>
...
这适用于在我使用 Linux 桌面的本地机器上进行测试。为了测试 MS 和资源管理器如何从我的 Windows 笔记本电脑显示我的页面,我将其更改为
<VirtualHost *:1234>
...
这也很好用,在我的笔记本电脑的 IE 上从http://[mylinuxservername]:1234 调用该站点。但是,我想将该通配符限制为本地局域网。插入任何 ip,如 192.nnn.nnn.nnn 或 192.*.*.* 上面通配符会导致 Windows 机器上的 403 Forbidden。本地服务器在我的 Linux 机器上仍然可以正常工作:
<VirtualHost 127.0.0.1:1234 192.*.*.*:1234>
...
或
<VirtualHost 127.0.0.1:1234 192.nnn.nnn.nnn:1234> #exact IP of laptop
...
无论如何,我不喜欢上面第二个配置示例中的通配符。提示任何人?
【问题讨论】:
这可能应该在 ServerFault 上 - 尽管 IIRC,您的问题是您没有将请求 IP 放在 VirtualHost 标记中 - 它位于位置或目录片段中。 【参考方案1】:VirtualHost
的参数是您收听的本地地址,而不是远程地址。
在 Apache 2.4 和更新版本中,使用 Require
指令:
Require ip 127.0.0.0/8
Require ip 192.0.0.0/8
如果您使用的是 Apache 2.2 或更早版本,请使用 authz_host 配置:
Order Allow,Deny
Allow from 127.0.0.0/8
Allow from 192.168.0.0/16
这可能也适用于 Apache 2.4,但 Order
and Allow
have been deprecated。
【讨论】:
谢谢!效果很好。正斜杠后ip末尾的数字是什么意思? Jack,/8 和 /16 是子网掩码的长度。这是CIDR Notation 这么多奥秘,这么少时间 :-) 谢谢! @~jack-laplante 已由 Ted 回答:CIDR 表示法(不变位数) 这已被弃用,取而代之的是 'require'。请对此投反对票,并为 apachenoob 的回答投赞成票【参考方案2】:请注意,以防像我这样的菜鸟来这里:)
Apache HTTP Server 是通过以纯文本形式放置指令来配置的 配置文件。主配置文件通常称为 httpd.conf。 Main Configuration Files
对于 2.4 版
由 mod_access_compat 提供的 Allow、Deny 和 Order 指令, 已弃用,并将在未来的版本中消失。你应该避免 使用它们,并避免过时的教程推荐使用它们。 Access Control
Require ip 127.0.0.0/8
Require ip 192.0.0.0/8
或(不完全相同)
Require ip 127.0
Require ip 192.168
【讨论】:
【参考方案3】:使用 iptables 限制对机器本身的访问。第一个命令将允许来自 192 范围内的任何网络的 HTTP 流量(请注意,我认为您需要 192.168 才能真正成为本地但我可能错了)。第二个命令只是简单地丢弃来自端口 80 的其他来源的数据包
iptables -I 1 INPUT -s 192.0.0.0/8 -p tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -I 2 INPUT -p tcp --dport 80 -m state --state NEW -j DROP
然后在你的虚拟主机中你可以做<VirtualHost *:80>
【讨论】:
以上是关于Apache2 访问仅限于本地 LAN的主要内容,如果未能解决你的问题,请参考以下文章
360浏览器弹出不能访问本地资源,只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源