OpenBSD路由器指南

2020-11-09 21:51:36

网络分段防火墙、DHCP、带未绑定的DNS、域拦截和更多OpenBSD:3.8.发布时间:2020-11-05·更新时间:2020-11-09·版本:1.1.3。

几乎无论您是从家里还是办公室通过何种方式连接到Internet,您都需要在您与您的ISP提供的调制解调器或路由器之间建立一个真正的防火墙。

消费级调制解调器或路由器很少获得固件更新,而且它们经常容易受到网络攻击,这些攻击会将这些设备变成僵尸网络,比如Mirai恶意软件。许多消费级调制解调器和路由器是一些最大的分布式拒绝服务(DDoS)攻击的罪魁祸首。

您和您的ISP调制解调器或路由器之间的防火墙不能保护您的调制解调器或路由器设备免受攻击,但它可以保护您的计算机和网络内部的设备,并且可以帮助您监视和控制进出本地网络的通信。

如果您的本地网络和ISP调制解调器或路由器之间没有防火墙,您基本上可以认为这是一种开放的策略,就像让您家的门大开一样,因为您不能信任来自您的ISP的设备。

在你的本地网络和互联网之间设置一个真正的防火墙总是一个非常好的主意,有了OpenBSD,你就可以得到一个非常可靠的解决方案。

你不必购买昂贵的硬件来为你的家或办公室购买有效的路由器和防火墙。即使使用廉价的低端硬件,您也可以获得非常可靠的解决方案。

我已经使用配备英特尔四核赛扬处理器的ASRock Q1900DC-ITX主板构建了多种解决方案。

我得承认,这是一块相当糟糕的主板,但它完成了任务,而且我有几款主板已经在千兆网络上运行了多年,已经完全饱和,防火墙、DNS等都在超时工作,CPU几乎没有出过汗。

华硕Q1900DC-ITX主板的优势在于,它配备了一个与9~19V电源适配器兼容的DC-In插孔,非常省电。不幸的是,华硕Q1900DC-ITX主板已经不再生产了,但我只是拿它做个例子,我也用过其他几块便宜的主板。

我还使用了华硕Q1900-ITX(它没有DC输入插孔)和一个PicoPSU。

你可以找到不同品牌和版本的PicoPSU,有些比另一些质量更好。我有两个不同的品牌,原版和更便宜的仿冒品,性能都很好,与正常电源运行相比,它们节省了相当多的电力。

最后,我使用的是在eBay上找到的廉价英特尔仿冒四端口网卡,如下所示:

我知道使用高质量的硬件更好,尤其是在你关心的网络上,但这篇教程是关于如何在不使用相当便宜的硬件的情况下,仍然获得一个非常有用的产品,它将继续为你提供良好的服务-至少这是我的经验。

我建议您寻找具有OpenBSD支持的硬件的低功耗迷你ITX主板,例如英特尔赛扬或英特尔i3处理器。这些主板通常价格便宜,耗电量较少,而且不占用太多空间。如果您的网络是千兆位的,我不建议您使用Intel Atom CPU,因为它们通常会阻塞网络,因为它们无法处理流量,但您的里程数可能会有所不同。

对于分段的本地网络,您可能还需要几台廉价的千兆位交换机,至少在您有多台计算机要连接到同一个LAN的情况下是这样:)

事实上,您可以使用其他BSD版本或许多不同的Linux发行版中的一个获得类似的设置,但是OpenBSD特别适合并设计成非常适合于这类任务。它不仅在基本安装中附带了所有需要的软件,而且它还具有明显更好的安全性,并且在操作系统中已经内置了大量改进的缓解措施。对于这类任务,我强烈推荐OpenBSD胜过任何其他操作系统。

本指南不会向您展示如何安装OpenBSD。如果你还没有做到这一点,我建议你启动某种类型的虚拟机,或者看看你周围是否有一些未使用的和受支持的硬件可以使用。OpenBSD是安装最简单、速度最快的操作系统之一。不要害怕非图形用户界面的方法,一旦你试过了,你就会真正体会到它的简单性。如果有疑问,请使用默认设置。

在开始这段旅程之前,请务必参考OpenBSD文档!不仅每件事都有很好的文档记录,而且你很可能会在那里找到你需要的所有答案。阅读OpenBSD常见问题解答,看看我们将要使用的软件的不同手册页面。

查找有关OpenBSD的一般信息的另一个真正有用的地方是OpenBSD邮件列表存档。此外,请务必通过订阅公告和安全建议邮件列表来了解最新的相关信息。

最后,但同样重要的是,请考虑支持OpenBSD!即使您不是每天都使用OpenBSD,但可能会在Linux上使用OpenSSH,那么您实际上是在使用OpenBSD项目中的软件。考虑做一笔小额但稳定的捐款,以支持OpenBSD开发人员制作的所有伟大软件的进一步开发!

路由器基本上是控制两个或多个独立网络之间的网络流量的设备。路由器将确保发往本地网络的网络流量不会在Internet上流出,而不发往您的本地网络的Internet上的流量则留在Internet上。

在本教程中,我们正在构建一台路由器,我们有4个相同类型的网络可供使用。一个是Internet,另外三个是内部分段的局域网(LAN)。有些人更喜欢使用虚拟局域网,但在本教程中,我们将使用上图中的四端口网卡。如果您愿意,使用多个单端口网卡也可以达到同样的效果,您只需确保主板上有足够的空间和空闲的PCI插槽即可。您也可以使用主板本身的以太网端口,但这取决于设备的驱动程序和支持。虽然我推荐英特尔而不是Realtek,但我使用Realtek PCI千兆位以太网控制器并没有遇到任何问题。Realtek PCI千兆位以太网控制器通常会随许多主板一起提供。

当然,如果你不需要的话,你不必把网络分成几个部分,而且从本指南中更改设置也很容易,但我决定使用这种方法来向你展示如何保护你的孩子,方法是将他们的网络分割成一个单独的局域网,不仅可以使用DNS拦截来拦截广告和色情(所有的网段都会被屏蔽),而且你甚至可以将你想让他们访问的互联网部分列入白名单。关于列入白名单的最后一部分很难,通常不推荐,除非你的孩子只需要非常有限的访问权限,但通过一些工作是可行的,指南将向你展示一种可以做到这一点的方法。

互联网|xxx.xxx ISP调制解调器(WAN)10.24.0.23|OpenBSD 10.24.0.50(路由器/防火墙)|-|NIC1 NIC2 NIC2 NIC3192.168.1.1 192.168.2.1 192.168.3.1LAN1交换机LAN2交换机LAN3交换机||--192.168.1.1。.x--192.168.2.x--192.168.3.2|成人PC|儿童PC1|公共Web服务器|--192.168.2.x|儿童PC2。

以10.24.0开头的IP地址是您的ISP路由器或调制解调器提供给您的IP地址,它可能是非常不同的地址。以192.168开头的IP地址是我们将在局域网指南中使用的IP地址。

本指南不涉及任何类型的无线连接。无线芯片固件是出了名的漏洞和可利用的,我建议你不要使用任何形式的无线连接,如果你可以没有。如果您确实需要无线连接,我强烈建议您完全禁用来自ISP调制解调器或路由器的无线访问(如果可能),然后购买您能找到的最好的无线路由器,并将其放在隔离网段的防火墙后面。这样,如果您的无线设备遭到破坏,您可以更好地控制结果并限制损害。您可以进一步设置无线路由器,使与其连接的任何设备都拥有自己的IP,这些IP直接通过无线路由器,但同时阻止直接来自无线路由器本身的流量。这样你就可以防止无线路由器给家里打电话。您还可以获得一个受OpenBSD支持的无线适配器,并将您的OpenBSD路由器作为实际的接入点运行,但是我更喜欢将无线部分分割到单独的无线路由器或另一台OpenBSD机器上,作为防火墙本身后面的无线接入点。

我们首先要设置的是OpenBSD路由器上的不同网卡。在我的特定机器上,我已经禁用了通过BIOS内置到主板中的网卡,我只打算使用四端口的英特尔仿冒网卡。

如果你正在学习本教程,并且只想要一个基本的防火墙,那么你至少需要两个独立的网卡。

在我们开始之前,请确保您已经阅读并理解了hostname.if手册页中的不同选项。

由于我使用的是英特尔,所以em驱动程序是OpenBSD加载的驱动程序,网卡上的每个端口都作为单独的卡列出。这意味着每个卡都与EMX一起列出,其中X是给定卡上的实际端口号。

#dmesg em0 at pci2 dev 0 Function 0";Intel I350";rev 0x01:msi,地址a0:36:9f:a1:66:b8em1 at pci2 dev 0 Function 1";Intel I350";rev 0x01:msi,地址a0:36:9f:a1:66:b9em2 at pci2 dev 0 Function 2";Intel I350";rev。版本0x01:MSI,地址a0:36:9f:a1:66:bb

这表明我的卡被识别为英特尔I350-T4 PCI Express四端口千兆网卡。

下一步是找出哪个端口在物理上与上面列出的数字匹配。您可以通过手动将来自活动(打开的)交换机、调制解调器或路由器的以太网线插入每个端口,一次一个,以查看哪个端口被激活,然后记下某个地方。

您可以使用ifconfig命令检查活动状态。没有以太网电缆的端口将在Status(状态)字段中列为无运营商,而连接了电缆的端口将被列为Active(活动)。就像这样:

#ifconfig EM1:标志=8843;启动,广播,运行,单工,组播&>MTU 1500 lladdr a0:36:9f:a1:66:b9索引2优先级0 llprio 3媒体:以太网自动选择(无)状态:activeem2:标志=8843;启动,广播,运行,单工,组播&>MTU 1500 lladdr a0:36:9f:a1:66:BA索引3优先级0 llprir(无)状态:活动em2:标志=8843;启动,广播,运行,单工,组播&>MTU 1500 lladdr a0:36:9f:a1:66:BA索引3优先级0 llprir。

我们将使用em0端口作为从ISP(即Internet)连接到调制解调器或路由器的端口。在我的具体情况下,我有一个来自我的ISP的公共IP地址,如果你想在家里运行像网络服务器这样的东西,但如果你不需要的话,你可以用DHCP设置网卡,你会需要这个地址的。

在我的例子中,我需要为em0输入一个特定的固定IP地址,然后它会从我的公共IP获取由我的ISP转发的流量。为此,我使用以下信息设置em0卡:

如果您不需要公共IP地址,并且通过DHCP从您的ISP获取IP,则只需输入dhcp即可:

然后,我将使用前面说明的IP地址设置其余的NIC端口。

#ECHO';NET 192.168.1.1 255.255.254.0 None';>;/etc/hostname.em1#ECHO';>;net 192.168.2.1 255.255.254.0 None';>;/etc/hostname.em2#Echo';Net 192.168.3.1 255.255.254.0 None';>;/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的特定情况一样,从一个端口到另一个端口。如果您需要IPv6,请查看手册页。

现在,我们已经准备好设置动态主机配置协议(DHCP)服务,我们将为连接到不同局域网的不同PC和设备运行该服务。在我们开始之前,请确保您已经阅读并理解了dhcpd.conf手册页中的不同选项。

我们可以选择将特定IP地址绑定到连接到不同LAN端口的特定PC或设备。如果我们想要将任何流量从Internet转发到Web服务器之类的设备,这是必需的。我们可以通过相关机器网卡上的MAC地址将特定的IP地址绑定到特定的PC上。

在这种情况下,我将为DHCP保留从10到254的所有IP地址,同时将剩余的几个地址留给我可能需要的任何可能的固定地址。

使用您最喜欢的文本编辑器编辑/etc/dhcpd.conf,并对其进行设置以满足您的需要。

子网192.168.1.0网络掩码255.255.255.0{可选域名服务器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服务器。

此外,如果您不想将网络划分为不同的部分,而只想拥有一个局域网,那么您可以省略其他子网,这样您就可以拥有以下内容:

数据包过滤防火墙会检查通过防火墙的每个数据包,并根据您指定的一组规则,基于检查数据包的IP和协议标头中的字段来决定是接受还是拒绝单个数据包。

数据包过滤器的工作原理是检查每个传输控制协议/网际协议(TCP/IP)数据包中包含的源和目的IP以及端口地址。TCP/IP端口是分配给特定服务的编号,用于标识每个数据包要用于哪个服务。

简单数据包过滤防火墙的一个常见弱点是,防火墙孤立地检查每个数据包,而不考虑哪些数据包以前已通过防火墙,以及哪些数据包可能会跟随。这被称为无状态防火墙。利用无状态数据包过滤器相当容易。来自OpenBSD的PF不是无状态防火墙,而是有状态防火墙。

状态防火墙跟踪打开的连接,只允许与现有连接匹配或打开新的允许连接的流量。当在匹配规则上指定状态时,防火墙会为会话期间交换的每个预期数据包动态生成内部规则。它具有足够的匹配能力来确定数据包对于会话是否有效。任何不适合会话模板的数据包都会被自动拒绝。

状态过滤的一个优点是速度非常快。它允许您专注于阻止或传递新会话。如果通过了新会话,则会自动允许其所有后续数据包,并自动拒绝任何冒名顶替者数据包。如果新会话被阻止,则不允许其后续数据包。状态过滤还提供高级匹配功能,能够抵御攻击者使用的大量不同攻击方法。

网络地址转换(NAT)使防火墙后的专用网络能够共享单个公共IP地址。NAT允许专用网络中的每台计算机访问Internet,而不需要多个Internet帐户或多个公共IP地址。当数据包离开防火墙前往Internet时,NAT会自动将网络上计算机或设备的私有网络IP地址转换为单个公共IP地址。NAT还对返回的数据包执行反向转换。使用NAT,您可以将从Internet通过公有IP地址传入的特定流量(通常由端口号或端口号范围确定)重定向到位于本地网络某处的一台或多台特定服务器。

数据包过滤器(PF)是OpenBSD的防火墙系统,用于过滤TCP/IP流量和执行NAT。PF还能够标准化和调节TCP/IP流量,以及提供带宽控制和分组优先级。

在开始之前,我假设您已经阅读了pf-user指南和pf.conf手册页,特别是手册页非常重要。即使您不了解所有不同的选项,也要确保您阅读了文档!要完整而深入地了解pf可以做什么,请查看pf手册页。

另外,让我先说一句,尽管pf的语法非常易读,但在编写防火墙规则时很容易出错。即使是经验丰富的高级系统管理员在编写防火墙规则时也会出错。

写防火墙规则需要你仔细计划你的目标,了解如何执行不同的规则以达到预期的结果,同时采取预防措施,防止犯错而不小心注销:)我认为我们都曾经这样做过,无论是仓促、疲惫,还是仅仅是误入歧途。

首先,我想澄清一下pf中一些常见的默认设置和关键字。

快速如果数据包与通过、阻止或匹配规则匹配,则使用快速修饰符,不检查后续过滤规则即可通过数据包。带有快速修饰符的规则将成为最后一个匹配规则。

保持状态您不需要为特定的传球或拦网规则指定保持状态修饰符。当数据包首次匹配通过或阻止规则时,默认情况下会创建一个状态条目。

仅当没有与数据包匹配的规则时,默认操作是在不创建状态的情况下传递数据包。

在接口/任何接口上此规则仅适用于通过此特定接口或接口组传入或传出的数据包。

Inet/inet6内和inet6修饰符意味着此规则仅适用于通过此特定路由域(即IPv4或IPv6)传入或传出的数据包。

您可以将规则应用于特定的路由域,而无需指定NIC。在这种情况下,规则将匹配所有NIC上该特定性质的所有流量。通过指定inet,您只需显式寻址IPv4流量。

使用PROTO修改器完成PROTO协议限制。

.