仅允许从本地网络访问Apache虚拟主机


19

我在运行Apache 2.2的Linux服务器上有一个网页。对于某些其他服务,该服务器对于外界是可见的。

我想配置Apache,使给定的虚拟主机仅在本地网络内部可见,因此我可以部署Web应用程序以获取组织中其他人的反馈。我认为这与Allow指令有关,但是我的实验进行得并不顺利。

如何更改我的配置文件来实现?我也应该更改防火墙配置吗?


您是否正在使用服务器的私有(不可路由)IP地址(例如10.0.0.100)或公共(可路由)IP地址?
closetnoc

该服务器具有公共IP地址,我可以从工作网络外部(例如,在家中)连接到该服务器。同事的计算机都具有10。*。*。*类型的本地IP地址。
Btz 2014年

Answers:


12

简单。只需在您的主配置或虚拟配置中设置以下内容:

<Directory /var/www/path/to/your/web/documents>

  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 ::1
  Allow from localhost
  Allow from 192.168
  Allow from 10
  Satisfy Any

</Directory>

<Directory></Directory>语句基本上说:“将此规则用于此目录中的任何内容。并通过“此目录”指代/var/www/path/to/your/web/documents我在本示例中设置的目录,但应更改为与您站点的本地目录路径匹配。

接下来,在该<Directory></Directory>区域中,您将更改默认的Apache行为,Allow默认情况下全部更改为Order Deny,Allow。接下来,您设置Deny from all为拒绝所有人的访问。以下是Allow from允许从127.0.0.1 ::1(本地主机IP地址)localhost(本地主机本身)访问的语句。这就是所有标准的东西。由于localhost许多内部系统进程都需要从中进行访问。

接下来是对您重要的内容。

所述Allow from用于192.168以及10将允许从任何存取/由这些数字前缀网络范围内的所有网络地址。

因此,通过指出192.168这一点基本上意味着用户是否拥有类似于的地址,192.168.59.27否则192.168.1.123他们将能够看到该网站。

并且类似地使用前缀Allow from作为10前缀,以确保某人的IP地址为10.0.1.2,甚至10.90.2.3可以看到内容。

世界上几乎所有内部​​网络都使用192.168范围或范围内的某些内容10。没有外在的东西。因此,使用此组合将实现您阻止访问外部世界的目标,但仅允许从本地网络内部进行访问。


什么是Satisfy Any应该在这种情况下怎么办?我对这一切一无所知,但是当它出现在我的场景中时,我可以<Location /path>从外部网络访问该页面(我使用过)。删除它,但是解决了我的问题。很高兴理解为什么会这样,因为我有点担心即使规则到位我也可以访问该页面。
liamnichols

@liamnichols如此处所解释:“如果满足任何要求(身份验证或访问),则允许请求。”
JakeGould

14

寻求此答案的人们请注意,这是特定于Apache 2.2的。

Apache 2.4已弃用了这些指令。

新方法是使用模块mod_authz_hostRequire指令。(链接

在Apache 2.4中,您应该

<Directory /var/www/ncp-web/>
  Require host localhost
  Require ip 127.0.0.1
  Require ip 192.168
  Require ip 10
</Directory>

,然后删除所有Allow指令。


5

在虚拟主机指令中添加此部分:

<Location /mypathurl>
    Order deny,allow
    Deny from all
    Allow from 192.168.1.10
</Location>

替换上面的IP。仅供参考,这不应用于财务级别的安全性。


-1

我不知道您如何进行网络设置,但是,我正在尝试尝试一些更好的答案。

假设您有一个带有DSL连接的小型办公室。您将有一个静态的公共IP地址或分配给线路,DSL调制解调器和防火墙的地址块。在不详细介绍如何发生的情况下,我将介绍重要的部分。

您应该使用NAT(网络地址转换)。这允许公用IP地址驻留在网络的WAN(Internet)侧,并在LAN侧的网络内使用私有IP地址(如10.0.0.100)。这是标准操作程序。如果您在网络中托管Web服务器,则可以使用端口转发或其他类似机制将任何Web流量指向您的Web服务器。

在这种标准情况下,您的内部计算机将全部使用私有IP地址。

假设您具有类似的标准网络设置,则可以将计算机IP地址从公用IP地址更改为专用IP地址。您的网络可能具有DHCP设置,您的计算机可以在其中请求可用的IP地址。这意味着您无需选择IP地址,而是选择使用DHCP,并且将分配IP地址。如果DHCP不可用,那么您将不得不在其他一些计算机上检查可能使用的私有IP地址空间,并在未使用的空间中选择一个IP地址。您可以在网络设置中指定此未使用的IP地址。这样可以防止您的系统出现在Internet上。


我考虑过了,但这不是一个实际的解决方案。该机器上的某些服务必须对外部保持可见,无论如何,我计划在几天之内使该Web应用程序再次可见-仅几天之久就不会改变网络布局。但是,我可以处理的是Apache配置之类的东西。
Btz 2014年

如果您有防火墙,则可以关闭该IP地址的某些端口。
closetnoc 2014年

可以使用防火墙设置,但这实在是太过分了。Apache内置了基于IP地址和其他相关条件拒绝或允许的功能。请参阅我的答案以获取更多详细信息。
JakeGould 2014年

@JakeGould防火墙不一定是一种过大的解决方案。我确实非常了解Apache。但是,大多数优秀的防火墙中都有HTTP筛选选项,可以在不增加服务器本身负担的情况下提供帮助。同样,尽管Apache非常出色,但并非没有缺陷。同样,可以使用防火墙对端口访问(包括备用端口访问)进行操作,以使某些Web服务保持公共状态,而其他Web服务只能在LAN内访问。
closetnoc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.