这里要介绍的内容很多,所以让我们深入了解...
正如 Marc B 所提到的,如果您在未防火墙的public IP 上设置 Web 服务器,互联网上的每个人都可以访问它。这并不是说你处于这种情况——你说你在大学网络上,你很可能会发现他们实现了某种形式的本地网络,在你的电脑和互联网。但是,您可能仍然会发现大学网络中的每个人(或至少您的网段 - 请参阅 subnetting 和 VLANs)都可以访问您的网络服务器。
您能做些什么来防止这种情况发生?
这绝不是一个详尽的列表,但这里有一些更常用的控制 Web 服务器安全性的方法。
将您的 Web 服务器设置为仅在 localhost 上侦听(Mark B 已经对此进行了介绍,但需要澄清一下):
主 Apache 配置文件 httpd.conf 使用名为 Listen 的指令来确定在启动时创建和绑定到哪些侦听套接字。默认值通常为Listen 80,这意味着服务器将在机器上注册的每个IP 地址上的TCP 端口80 上进行侦听。这些 IP 地址将是 127.0.0.1、loopback address,以及与您已安装的任何网络接口关联的任何 IP 地址,例如上面的 220.81.184.12 示例。
您可以修改此指令以使其更具限制性。例如,如果您只想接受来自本地计算机的连接,您可以将其更改为Listen 127.0.0.1 80。通过这样做,您将能够从本地计算机访问您的 Web 服务器,地址为 http://127.0.0.1/、http://localhost/、 和 http://220.81.184.12/ - 是的,您仍然可以使用与该计算机关联的任何地址,因为回送的工作方式 - 但世界上任何地方都没有其他机器能够使用任何地址直接访问它。
配置防火墙以阻止来自其他机器的连接:
默认情况下,几乎所有防火墙都会阻止每个传入请求,并且您必须明确允许打开的端口和/或应用程序接受传入连接。如果您不希望其他机器能够访问您的服务器,请不要打开允许该应用程序的端口。许多防火墙允许您对这些规则更有选择性,允许来自某些 IP 地址但不允许来自其他 IP 地址的传入请求。
如果您想阻止其他人访问您计算机托管的网络资源,防火墙通常是一个不错的起点。 You should find that your Ubuntu installation comes with iptables included.
限制可以访问 Apache 配置文件中目录的远程客户端:
请注意:此信息描述了 Apache 指令的使用,这些指令是现在已弃用。请参阅脚注 #1
您可能已经知道,为了让 Apache 为目录提供服务,您必须在 httpd.conf 中为其创建一个 <Directory> 部分。在默认配置文件中,您会发现一个预先配置为服务DocumentRoot 的部分,其中包含一些如下所示的行:
Order allow,deny
Allow from all
这允许来自每个客户端的所有请求。如您所见,那里有两个指令 - Order 和 Allow(有一个互补指令 Deny)。如果要管理 Apache 服务器,了解这些指令的作用以及它们的工作方式至关重要。链接的手册页中对它们进行了详细说明,因此我不会在此处详细介绍 - 让我们举个例子:
Order deny,allow
Deny from all
Allow from 127.0.0.1
将默认值更改为此会导致每个请求都被拒绝,除非它来自 127.0.0.1 - 您的本地计算机。现在假设您想允许您的 IP 地址为 172.32.64.218 的朋友也访问该页面 - 我们在上述配置的末尾添加一个用于他的 IP 地址的 Allow 指令:
Allow from 172.32.64.218
设置完成后,您的朋友告诉您他拥有172.32.64.216 和172.32.64.223 之间的所有 IP 地址,并希望能够使用其中任何一个来访问您的服务器。我们可以将其定义为一个,而不是创建 8 个单独的 Allow 指令:使用 CIDR 简写,我们可以将此子网表示为 172.32.64.216/29,我们可以在 Allow 指令中使用它:
Allow from 172.32.64.216/29
<Directory> 部分定义目录及其所有子目录的规则,因此如果您将规则应用于/myDir,同样的规则也将应用于/myDir/subDir 和/myDir/subDir/subSubDir。但是,您可以在树的下方覆盖这些规则 - 因此您可以使用不同的规则为 /myDir/subDir/subSubDir 创建一个 <Directory> 部分。您也可以使用.htaccess 文件来定义规则,只要您使用AllowOveride 指令启用它们即可。
如您所见,这种控制谁可以访问您的站点的方法配置起来相对简单,并且可以提供强大而灵活的规则控制。
回答您的问题If other person installed PHP in his PC, what would happen? - 没有。 PHP 是一种服务器端脚本语言,不能直接影响任何其他计算机上的任何内容,尤其是在控制对远程计算机的访问方面。
脚注 #1 06/2012
简单说明一下 Order、Allow 和 Deny 指令在 Apache 2.4 中已被弃用。这种类型的访问控制现已与标准身份验证过程合并,现在使用mod_authz_host 支持的Require ip、Require host 和Require local 指令提供。
Order、Allow 和 Deny 仍通过 mod_access_compat 提供支持以实现向后兼容性,但 2.4 分支及更高版本的新配置应使用适当的 Require 结构,旧配置应转换迁移后立即使用新机制。 旧的控制机制将在 Apache 的未来版本中被移除。
here 提供了介绍新指令用法的文档。