《The BOOK Of PF》中文版 —— 7. 进入真实的世界
发表于 : 2010-07-13 9:08
OpenBSD的防火墙PF —— 7. 进入真实的世界
前言
一个简单的网关, 和NAT
现在我们将开始建立大家心目中的防火墙了: 一台主机为至少一台其它机器担当网关的角色。 除了为不同的网络间转发数据包, 这台机器的任务还有在其处理的通讯中提高信噪比。 这也是我们要配置PF的目的。
然后, 在我们讨论实际配置的细节前, 我们需要先了解一些理论知识。 请大家保持耐心; 掌握这些理论知识有助于在实际应用里解决令人头痛的问题,我已经在邮件列表和新闻组里经常看到有关这些问题的讨论。
网关及in, out, 和on的陷阱
在单台主机的设置相对简单一些。由本机建立的通讯要么允许出站要么被过滤规则阻止,
而且你可以设定那些进站通讯可以放行。
当你设置一个网关时, 你考虑问题的角度就不一样了。你必须要规划好整个网络,你是网络的唯一主宰,只有你有权利确认哪些网络通讯可以通过。你的网络将有至少两台以上的主机, 网络接口, 每个连接着各自的网络。
现在, 我们假设你想将来自re1连接的网络通讯传送到re0连接的网络, 你需要像这样的规则
这个规则可以很好地保持连接状态。详说明1。
但是, 一个最常见也是防火墙配置里人们抱怨最多的错误是这里的关键字 to 并不能使通讯抵达最终的目的地。
上面的规则仅放行通讯到网关里的指定接口。
要让这些通讯到达下一个网络, 你需要一个像这样的规则
这个规则可行, 但是它并不是必须的。
事实上, 这条规则仅允许有目的地的数据包直接抵达re0并通过, 并没有其它的作用。
如果你有很充分的理由应用这些规则, 你肯定知道你需要这些规则以及原因。从现在开始到本书结束 (也可能更早一些), 你必须有能力精确地制定需要的规则。 不管怎样, 对处理本章中这个简单的网关来说, 很可能你不需要指定特定的接口。实际默认情况下也无需指定通讯的方向。 真正你想用的规则可能是
要让本地网络访问Internet并将侦测的工作留给antispoof和scrub代码。 (它们全非常的棒,我们会在后面进行讨论。) 现在, 为了简单设置起见请先接受这个事实,绑定接口的in和 out规则给你增加的疑惑可能比它们在规则集里的作用还多。
管理一个繁忙的网络时, 一个易读的规则才是一个安全的规则。
为了读者更好地理解代码,在本书的后面, 除了一些例外我们将尽可能地使用简单的规则。 一些需要指定方向和接口的情况我们将在后面描述。
前言
前面一章我们演示了在一台独立主机上配置基本的包过滤。本章我们将讨论更趋于真实环境的基本设置: 包过滤网关。尽管本章的多数讨论对于您在单台主机上设置有帮助, 但是现在我们的侧重点已经转向了如何设置一个网关以处理公共网络服务。
一个简单的网关, 和NAT
现在我们将开始建立大家心目中的防火墙了: 一台主机为至少一台其它机器担当网关的角色。 除了为不同的网络间转发数据包, 这台机器的任务还有在其处理的通讯中提高信噪比。 这也是我们要配置PF的目的。
然后, 在我们讨论实际配置的细节前, 我们需要先了解一些理论知识。 请大家保持耐心; 掌握这些理论知识有助于在实际应用里解决令人头痛的问题,我已经在邮件列表和新闻组里经常看到有关这些问题的讨论。
网关及in, out, 和on的陷阱
在单台主机的设置相对简单一些。由本机建立的通讯要么允许出站要么被过滤规则阻止,
而且你可以设定那些进站通讯可以放行。
当你设置一个网关时, 你考虑问题的角度就不一样了。你必须要规划好整个网络,你是网络的唯一主宰,只有你有权利确认哪些网络通讯可以通过。你的网络将有至少两台以上的主机, 网络接口, 每个连接着各自的网络。
现在, 我们假设你想将来自re1连接的网络通讯传送到re0连接的网络, 你需要像这样的规则
代码: 全选
pass in proto tcp on re1 from re1:network to re0:network port $ports keep state
但是, 一个最常见也是防火墙配置里人们抱怨最多的错误是这里的关键字 to 并不能使通讯抵达最终的目的地。
上面的规则仅放行通讯到网关里的指定接口。
要让这些通讯到达下一个网络, 你需要一个像这样的规则
代码: 全选
pass out proto tcp on re0 from re1:network to re0:network port $ports keep state
事实上, 这条规则仅允许有目的地的数据包直接抵达re0并通过, 并没有其它的作用。
如果你有很充分的理由应用这些规则, 你肯定知道你需要这些规则以及原因。从现在开始到本书结束 (也可能更早一些), 你必须有能力精确地制定需要的规则。 不管怎样, 对处理本章中这个简单的网关来说, 很可能你不需要指定特定的接口。实际默认情况下也无需指定通讯的方向。 真正你想用的规则可能是
代码: 全选
pass proto tcp from re1:network to any port $ports keep state
说明1
实际尽管keep state部分表示了过滤器默认的行为,但是如果你使用的是OpenBSD4.1或等效的PF版本, 升级规则时一般也没有必要移除这个原版本带有的指定保持状态规则。 为了过度方便, 本书中的这些例子将在适当的时候给予区分
要让本地网络访问Internet并将侦测的工作留给antispoof和scrub代码。 (它们全非常的棒,我们会在后面进行讨论。) 现在, 为了简单设置起见请先接受这个事实,绑定接口的in和 out规则给你增加的疑惑可能比它们在规则集里的作用还多。
管理一个繁忙的网络时, 一个易读的规则才是一个安全的规则。
为了读者更好地理解代码,在本书的后面, 除了一些例外我们将尽可能地使用简单的规则。 一些需要指定方向和接口的情况我们将在后面描述。