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 

然后在你的虚拟主机中你可以做&lt;VirtualHost *:80&gt;

【讨论】:

以上是关于Apache2 访问仅限于本地 LAN的主要内容,如果未能解决你的问题,请参考以下文章

360浏览器弹出不能访问本地资源,只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源

如何使 mysql 访问公开,而不仅限于本地主机?

Parse 本地数据存储查询是不是仅限于 1000 个对象?

如何将编译器标志仅限于(我的)本地库?

将Python函数范围仅限于局部变量

为啥大多数 Microsoft Graph 功能仅限于用户访问