网络分段防火墙、DHCP、未绑定的 DNS、域阻塞等等 OpenBSD:6.9 · 发布:2020-11-05 · 更新:2021-07-21 · 版本:1.9.4 固定宽度(等宽)字体是用于终端命令、文件名和路径、配置参数等。必须以root 用户身份输入的终端命令以# 磅符号为前缀,命令为粗体文本。可以作为普通用户键入的终端命令以 $ 美元符号为前缀,命令以粗体文本显示。几乎无论您如何从家中或办公室连接到 Internet,您都需要在您与 ISP 为您提供的调制解调器或路由器之间建立真正的防火墙。消费级调制解调器或路由器很少获得固件更新,而且它们通常容易受到将这些设备变成僵尸网络的网络攻击,例如 Mirai 恶意软件。许多消费级调制解调器和路由器是一些最大的分布式拒绝服务 (DDoS) 攻击的罪魁祸首。您和您的 ISP 调制解调器或路由器之间的防火墙无法保护您的调制解调器或路由器设备免受攻击,但它可以保护网络内部的计算机和设备,并且可以帮助您监视和控制进出的流量并从您的本地网络。
如果您的本地网络和 ISP 调制解调器或路由器之间没有防火墙,您基本上可以将其视为开门策略,例如让您家的门大开,因为您不能信任来自 ISP 的设备。在您的本地网络和 Internet 之间放置一个真正的防火墙总是一个非常好的主意,并且使用 OpenBSD 您可以获得一个非常可靠的解决方案。您无需购买昂贵的硬件即可为您的房屋或办公室获得有效的路由器和防火墙。即使使用廉价和“低端”硬件,您也可以获得非常可靠的解决方案。我使用配备英特尔四核赛扬处理器的华擎 Q1900DC-ITX 主板构建了多种解决方案。我承认,这是一个相当“蹩脚”的主板,但它完成了工作,我有几个版本在千兆网络上运行非常稳定,完全饱和,防火墙、DNS 等“加班”工作并且 CPU 几乎不会出汗。华擎 Q1900DC-ITX 主板的优点是自带 DC-In 接口,兼容 9~19V 电源适配器,非常省电。不幸的是,华擎 Q1900DC-ITX 主板不再生产,但我只是以它为例,我也使用了其他几款便宜的主板。我还使用了结合 PicoPSU 的华擎 Q1900-ITX(它不带有 DC-In 插孔)。
您可以找到不同品牌和版本的 PicoPSU,有些质量比其他的好。我有两个不同的品牌,原装的和更便宜的仿冒品,两者都表现得很好,与使用普通电源运行相比,它们节省了相当多的电量。最后,我使用的是在 Ebay 上找到的廉价英特尔仿冒四端口网卡,如下所示:我知道最好使用优质硬件,尤其是在您关心的网络上,但本教程是关于如何避免使用相当便宜的硬件,并且仍然获得非常有用的产品,它将继续为您服务多年——至少这是我的经验。我建议您寻找具有 OpenBSD 支持的硬件的低功耗迷你 ITX 板,例如 Intel Celeron 或 Intel i3 处理器。这些板通常很便宜,耗电少,而且不占用太多空间。如果您有千兆网络,我不建议使用 Intel Atom CPU,因为它们通常会阻塞,因为它们无法处理流量,但您的里程可能会有所不同。您可能还需要几个便宜的千兆交换机用于分段本地网络,至少如果您有不止一台计算机要连接到同一个 LAN :) 事实上,您可以使用其他 BSD 之一进行类似设置风格或许多不同的 Linux 发行版之一,但 OpenBSD 特别非常适合和设计用于此类任务。它不仅在基本安装中附带了所有需要的软件,而且还具有明显更好的安全性和已经内置到操作系统中的大量改进的缓解措施。对于此类任务,我强烈推荐 OpenBSD 而不是任何其他操作系统。本指南不会向您展示如何安装 OpenBSD。如果您之前没有这样做过,我建议您启动某种虚拟机,或者查看是否有一些未使用且受支持的硬件可供您使用。 OpenBSD 是最容易和最快速安装的操作系统之一。不要害怕非 gui 方法,一旦您尝试过它,您就会真正体会到它的简单性。如有疑问,请使用默认设置。
在您踏上这段旅程之前,请务必参考 OpenBSD 文档!不仅所有内容都得到了很好的记录,而且您很可能会在那里找到您需要的所有答案。阅读 OpenBSD FAQ 并查看我们将要使用的软件的不同手册页。另一个可以找到关于 OpenBSD 的一般信息的非常有用的地方是 OpenBSD 邮件列表档案。此外,请订阅公告和安全公告邮件列表,确保及时了解相关信息。路由器基本上是一种调节两个或多个独立网络之间的网络流量的设备。路由器将确保用于本地网络的网络流量不会在 Internet 上肆意运行,并且 Internet 上不用于本地网络的流量会留在 Internet 上。在本教程中,我们正在构建一个路由器,我们有 4 个相同类型的网络可供使用。一个是 Internet,其他三个是内部分段的局域网 (LAN)。有些人更喜欢使用虚拟 LAN,但在本教程中,我们将使用上图中的四端口 NIC。如果您愿意,您可以通过使用多个单端口 NIC 来获得相同的结果,您只需要确保主板上有足够的空间和空闲的 PCI 插槽。您也可以使用主板本身的以太网端口,但这取决于驱动程序和设备支持。我在使用 Realtek PCI 千兆以太网控制器时没有遇到任何问题,尽管我推荐 Intel 而不是 Realtek,该控制器通常随许多主板一起提供。当然,如果您不需要,您不必将网络分割成几个部分,从本指南中更改设置将非常容易,但我决定使用这种方法来向您展示如何您可以通过将您的孩子的网络分割成一个单独的 LAN 来保护您的孩子,该 LAN 不仅可以使用 DNS 拦截来拦截广告和色情内容(所有网段都可以拦截),而且您甚至可以将您希望他们访问的 Internet 部分列入白名单。关于白名单的最后一部分很困难,通常不推荐,除非您的孩子只需要非常有限的访问权限,但通过一些工作是可行的,本指南将向您展示一种可以做到这一点的方法。互联网 | xxx.xxx.xxx.xxx ISP 调制解调器 (WAN) 10.24.0.23 | OpenBSD 10.24.0.50(路由器/防火墙)| ┌──────────────────────+────────────────────┐ | | | NIC1 NIC2 NIC3 (DMZ)192.168.1.1 192.168.2.1 192.168.3.1LAN1 交换机 LAN2 交换机 LAN3 交换机 | | | └─ 192.168.1.x ├─ 192.168.2.x └─ 192.168.3.2 成人电脑 |子 PC1 公共网络服务器 | └─ 192.168.2.x Child PC2 以 10.24.0 开头的 IP 地址是您的 ISP 路由器或调制解调器给您的任何 IP 地址,它可能非常不同。以 192.168 开头的 IP 地址是我们将在我们的局域网 (LAN) 指南中使用的 IP 地址。
本指南不涉及任何类型的无线连接。众所周知,无线芯片固件存在漏洞和可利用性,如果可以的话,我建议您不要使用任何类型的无线连接。如果您确实需要无线连接,我强烈建议您完全禁用 ISP 调制解调器或路由器的无线访问(如果可能),然后购买您能找到的最好的无线路由器,并将其放在防火墙后面的隔离段中。这样,如果您的无线设备受到损害,您就可以更好地控制结果并限制损害。您可以进一步设置无线路由器,以便连接到它的任何设备都有自己的 IP,这些 IP 直接通过无线路由器,但同时阻止直接源自无线路由器本身的流量。这样您就可以防止无线路由器“打电话回家”。你也可以得到一个 OpenBSD 支持的无线适配器,让你的 OpenBSD 路由器作为实际的接入点运行,但是我更喜欢将无线部分分割成一个单独的无线路由器或另一台 OpenBSD 机器作为防火墙后面的无线接入点本身。我们要设置的第一件事是 OpenBSD 路由器上的不同 NIC。在我的特定机器上,我禁用了通过 BIOS 内置到主板中的 NIC,我将只使用四端口 Intel 仿冒 NIC。如果您正在学习本教程并且只想要一个基本的防火墙,那么您至少需要两个独立的 NIC。在我们开始之前,请确保您已阅读并理解 hostname.if 手册页中的不同选项。另请查看 OpenBSD 常见问题中的网络部分。由于我使用的是 Intel,因此 em 驱动程序是 OpenBSD 加载的一个,并且 NIC 上的每个端口都被列为单独的卡。这意味着每张卡都用 emX 列出,其中 X 是给定卡上的实际端口号。 # dmesgem0 at pci2 dev 0 function 0 "Intel I350" rev 0x01: msi, address a0:36:9f:a1:66:b8em1 at pci2 dev 0 function 1 "Intel I350" rev 0x01: msi, address a0:36:9f :a1:66:b9em2 at pci2 dev 0 function 2 "Intel I350" rev 0x01: msi, address a0:36:9f:a1:66:baem3 at pci2 dev 0 function 3 "Intel I350" rev 0x01: msi, address a0 :36:9f:a1:66:bb 这表明我的卡被识别为 Intel I350-T4 PCI Express Quad Port Gigabit NIC。
下一步是找出与上面列出的数字物理匹配的端口。您可以通过手动将来自活动(打开)交换机、调制解调器或路由器的以太网线插入每个端口,一次一个,以查看哪个端口被激活,然后在某处记录下来。您可以使用 ifconfig 命令检查活动状态。没有以太网电缆的端口将在状态字段中列为无载波,而连接了电缆的端口将列为活动状态。像这样:# ifconfigem1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr a0:36:9f:a1:66:b9 index 2 priority 0 llprio 3 media: Ethernet autoselect (none) status: activeem2 : flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 lladdr a0:36:9f:a1:66:ba index 3 priority 0 llprio 3 media: Ethernet autoselect (none) status: nocarrier 我们要去使用 em0 端口作为我们从 ISP(即 Internet)连接到调制解调器或路由器的端口。在我的特定情况下,我有一个来自 ISP 的公共 IP 地址,如果您想在家中运行诸如 Web 服务器之类的东西,您将需要它,但如果您不需要,您可以设置该卡使用 DHCP。在我的情况下,我需要为 em0 输入一个特定的固定 IP 地址,然后我的 ISP 从我的公共 IP 转发流量。为此,我使用以下信息设置 em0 卡:如果您不需要公共 IP 地址并且您通过 DHCP 从您的 ISP 获取您的 IP,那么只需输入 dhcp:然后我将设置其余的 NIC端口与我之前说明的 IP 地址。
# echo 'inet 192.168.1.1 255.255.255.0 NONE' > /etc/hostname.em1 # echo 'inet 192.168.2.1 255.255.255.0 NONE' > /etc/hostname.em2 # echo 'inet.165.052525252525252525252525252525252525252525235 > /etc/hostname.em3 然后我需要设置ISP网关的IP。根据 ISP 的设置,这可能是另一个 IP 地址,而不是来自 ISP 调制解调器或路由器的 IP 地址。如果您不添加 /etc/mygate,则不会将默认网关添加到路由表中。如果您通过 DHCP 从 ISP 调制解调器或路由器获取 IP,则不需要 /etc/mygate。如果您在任何 hostname.ifX 中使用 dhcp 指令,则 /etc/mygate 中的条目将被忽略。这是因为从 DHCP 服务器获取其 IP 地址的卡也将获取提供的网关路由信息。最后但并非最不重要的是,我们需要启用 IP 转发。 IP 转发是使 IP 数据包能够在路由器上的网络接口之间传输的过程。默认情况下,OpenBSD 不会在各种网络接口之间转发 IP 数据包。换句话说,路由功能(也称为网关功能)被禁用。现在 OpenBSD 将能够将 IPv4 数据包从一个 NIC 转发到另一个。或者,在我们使用四端口 NIC 的特定情况下,从一个端口到另一个端口。如果您需要 IPv6,请查看手册页。现在我们已准备好设置动态主机配置协议 (DHCP) 服务,我们将为连接到不同 LAN 的不同 PC 和设备运行。在我们开始之前,请确保您已阅读并理解 dhcpd.conf 手册页中的不同选项。另请查看 dhcp-options 手册页,了解 dhcpd 支持的选项。我们可以选择将特定 IP 地址绑定到连接到我们不同 LAN 端口的特定计算机或设备。如果我们想将来自 Internet 的任何流量转发到诸如 Web 服务器之类的东西,这是必需的。我们可以通过相关机器网卡上的MAC地址,将特定的IP地址绑定到特定的计算机上。在这种情况下,我将为 DHCP 保留 10 到 254 之间的所有 IP 地址,而我将保留一些剩余的地址,用于我可能需要的任何可能的固定地址。
使用您喜欢的文本编辑器编辑 /etc/dhcpd.conf 并对其进行设置以满足您的需要。子网 192.168.1.0 网络掩码 255.255.255.0 { option domain-name-servers 192.168.1.1;选项路由器 192.168.1.1;范围 192.168.1.10 192.168.1.254;}子网 192.168.2.0 网络掩码 255.255.255.0 { 选项域名服务器 192.168.2.1;选项路由器 192.168.2.1;范围 192.168.2.10 192.168.2.254;}子网 192.168.3.0 网络掩码 255.255.255.0 { 选项域名服务器 192.168.3.1;选项路由器 192.168.3.1;范围 192.168.3.10 192.168.3.254;主机 web.example.com { 固定地址 191.168.3.2;硬件以太网 61:20:42:39:61:AF;选项主机名“网络服务器”; }} 选项 domain-name-servers 行指定了我们将在路由器上运行的 DNS 服务器。此外,在公共 LAN 上用作我们 Web 服务器的计算机已获得固定 IP 地址并提供固定主机名。此外,如果您不想将网络分割成不同的部分,而只想拥有一个 LAN,那么您可以忽略其他子网,这样您就可以拥有: 数据包过滤防火墙检查穿过网络的每个数据包防火墙,并根据您指定的规则集,基于检查数据包的 IP 和协议标头中的字段来决定是接受还是拒绝单个数据包。数据包过滤器通过检查包含在每个传输控制协议/互联网协议 (TCP/IP) 数据包中的源和目标 IP 以及端口地址来工作。 TCP/IP 端口是分配给特定服务的编号,用于标识每个数据包针对的服务。
简单包过滤防火墙的一个常见弱点是防火墙孤立地检查每个包,而没有考虑哪些包之前通过了防火墙以及哪些包可能会跟随。这称为“无状态”防火墙。利用无状态数据包过滤器相当容易。 OpenBSD 的 PF 不是无状态防火墙,而是有状态防火墙。有状态防火墙会跟踪打开的连接,并且只允许与现有连接匹配或打开新的允许连接的流量。当在匹配规则上指定状态时,防火墙会为会话期间交换的每个预期数据包动态生成内部规则。它具有足够的匹配能力来确定数据包对于会话是否有效。任何不符合会话模板的数据包都会被自动拒绝。有状态过滤的优点之一是速度非常快。它使您可以专注于阻止或传递新会话。如果通过了新会话,则自动允许其所有后续数据包,并自动拒绝任何冒名顶替数据包。如果新会话被阻止,则不允许其后续数据包。状态过滤还提供高级匹配能力,能够抵御攻击者采用的不同攻击方法的泛滥。网络地址转换 (NAT) 使防火墙后面的专用网络能够共享单个公共 IP 地址。 NAT 允许私有网络中的每台计算机都可以访问 Internet,而无需多个 Internet 帐户或多个公共 IP 地址。 NAT 将自动将网络上计算机或设备的专用网络 IP 地址转换为单个公共 IP 地址,因为数据包离开防火墙绑定到 Internet。 NAT 还对返回的数据包执行反向转换。使用 NAT,您可以将特定流量(通常由端口号或端口号范围确定)从 Internet 进入您的公共 IP 地址重定向到位于本地网络中某处的特定服务器或服务器。 Packet Filter (PF) 是 OpenBSD 的防火墙系统,用于过滤 TCP/IP 流量和执行 NAT。 PF 还能够规范化和调节 TCP/IP 流量,以及提供带宽控制和数据包优先级。在我们开始之前,我假设您已经阅读了 PF - 用户指南和 pf.conf 手册页,尤其是手册页非常重要。即使您不了解所有不同的选项,请务必阅读文档!要全面深入地了解 PF 的功能,请查看 pf 手册页。另外,我首先要说的是,尽管 PF 的语法非常易读,但在编写防火墙规则时也很容易出错。即使是资深和有经验的系统管理员在编写防火墙规则时也会犯错误。
编写防火墙规则需要您仔细规划您的目标,了解如何实施不同的规则以达到预期的结果,同时采取预防措施防止做错和意外注销自己:) 我想我们'我曾多次这样做过,无论是匆忙、疲倦还是错误,我知道我有好几次。最重要的部分是你不要做任何假设。始终彻底测试您的规则。如果某些东西不起作用,请尝试从您的规则中尽可能多地删除,以便您保留非常基本的内容。然后一次引入一个规则,直到达到规则导致问题的程度。然后一步一步地处理设置。真正困难的部分是记住数据包如何到达一个 NIC,然后它们如何转发到另一个 NIC 上的机器,然后将这个“旅程”正确地与术语传入、传出、阻塞、阻塞、从和到。这些术语通常并不完全像我们想象的那样工作。我想首先澄清一些 PF 中常见的默认设置和关键字。当我们谈论我们经过或经过的交通时,记住我们正在处理的问题的一种好方法是......