使用 Raspberry Pi 防火墙保护您的家庭网络

还没有读者喜欢这个。
bees network

Opensource.com

尽管 树莓派 3 最近发布了,但 树莓派 2 仍然具有充足的生命力,并且非常适合许多有趣且有用的任务。

我有一些树莓派闲置着,我一直在探索其他有趣的项目,其中之一是是否有可能替换我网络边缘使用的非常旧的单核 64 位 Intel 机架式服务器,它主要用作防火墙和路由器。但在我中断网络的主要防火墙和网关之前,我想先测试一下树莓派,看看实现这个目标需要什么。

替换塔式机

我还有一台双核 Intel 塔式机,我将其用作防火墙和网络的侧门。对于这项任务来说,这台计算机绝对是性能过剩,我肯定可以在更合适的角色中使用它。因为这台计算机提供对我网络的非关键访问,所以我决定用树莓派 2 Model B 替换它进行测试。

电源

我使用了树莓派 2 Model B,但树莓派 3 也应该可以工作。我使用备用的 Kindle 5V 1.8A USB 电源适配器通过标准的家用延长线为树莓派供电,我将其插入 UPS 以提供稳定的电源。我使用了一根非常短的 USB 转 micro-USB 电缆,从电源适配器连接到树莓派上的电源接口。

KVM 切换器

我的几个基础设施主机都连接到一个带有 VGA 和 PS/2 输入的 16 端口 KVM 切换器。我也想将 KVM 用于树莓派。我使用 USB 转 PS/2 适配器电缆将 KVM 的键盘和鼠标输入连接到树莓派。USB 端插入树莓派,KVM 切换器电缆的连接器插入适配器上的 PS/2 连接器。我过去发现某些品牌的 USB 转 PS/2 适配器效果不佳。

对于视频连接,我最初使用了一个 HDMI 转 VGA 适配器,它是一个单一的固体单元。这个设备产生了很多热量,其中大部分通过 HDMI 连接器传输到树莓派中。后来,我用一个在 HDMI 连接器和 VGA 转换器之间有一段短电缆的适配器替换了单个单元,外加一个产生和传输的热量明显更少的连接器单元。

安装 CentOS

我在我的其他基础设施服务器上使用 CentOS,所以我也想在树莓派上使用它。使用我的主 Linux 工作站,我从 CentOS wiki 站点 下载了适用于树莓派 2 的 CentOS Userland 7 32 位 ARM 发行版,该站点还包含其他小型单板计算机的镜像。如果您使用的是树莓派 3,则应使用该镜像。

请注意,镜像名称可能会随着新镜像的发布而更改。您应该始终使用最新的镜像。我解压缩了下载的 xz 镜像文件(使用 unxz),然后使用 dd 命令将镜像安装到 8GB microSD 卡上。

dd if=CentOS-Userland-7-armv7hl-Minimal-1511-RaspberryPi2.img of=/dev/sdx

请务必指定您的 microSD 驱动器在您机器上的正确位置。

无需其他步骤即可使 microSD 卡可启动。我将卡插入树莓派板上的 microSD 卡插槽。然后,我将电源的 micro-USB 连接器插入树莓派上的电源接口,以启动到命令行界面登录提示符。

初始配置

我使用默认密码“centos”(不带引号)以 root 用户身份登录,并立即更改了 root 密码。我在 /etc/hostname 中更改了主机名,并按照 /root/README 中的说明扩展了根分区以填充 microSD 卡上的所有可用空间。这包括重启。

此时,我将板载网络适配器连接到我的内部网络,以便我可以安装更多软件并测试网络功能。我安装了各种我认为有用的实用程序,包括 which、screen、vim、rwhois、mlocate、Midnight Commander (mc)、mailx、bind-utils、chrony 和 wget。

我的一些其他收藏夹,例如 atop 和 htop,尚未从 CentOS 存储库中获得。我没有一次性安装所有这些,因为我不知道哪些丢失了。相反,我不得不遇到需要某个工具但未安装的问题,然后在继续此过程的其他步骤时安装它。希望这个列表能让您更轻松一些。当然,您可能会使用一些我不使用的工具,它们也可能丢失。

我使用 SSH 密钥从我的网络登录,所以我使用 ssh-copy-id 将我的主内部工作站的 SSH 公钥复制到树莓派。

第二个网络接口

因为这个树莓派将用作防火墙,所以我需要另一个网络适配器。在关闭 eth0 后,我添加了一个 ASIX AX88178 USB 千兆以太网适配器。我断开了内部网络与板载网络适配器的连接,并将其连接到适配器。我将适配器配置为 eth1,在我的内部网络上使用静态地址,并将板载以太网配置为静态外部地址,并将其连接到我的 ISP 的路由器。请务必在接口配置文件中使用 HWADDR= 行来设置配置文件所属的 MAC 地址。我还为内部适配器的接口配置文件添加了网关 IP 地址和至少两个名称服务器。

我启动了两个网络适配器,并使用 ifconfig 和几个 ping 命令来验证网络适配器是否绑定到正确的 IP 地址并且工作正常。现在我可以从我的主工作站上的终端会话登录到树莓派并从那里继续工作。

更新和更多配置

现在是时候安装所有更新并重启了——我这样做了。我发现有趣的是,当前版本的 CentOS for ARM 都使用 firewalld 和 systemd 之类的东西,但仍然使用 yum 而不是 dnf 进行高级软件包管理。

我有一些别名和启动命令,我总是在安装新主机时添加到我的环境中。这些命令可以添加到 /etc/bashrc 中,或者更好的是,作为一个单独的文件 /etc/profile.d/mybash.sh/etc/profile.d 中任何带有 .sh 文件扩展名的文件都会在登录期间被 /etc/bashrc 引用。

日期和时间

此版本的 CentOS 默认未安装任何类型的时钟同步,因此我安装了 chrony 并使用我的本地 NTP 时间服务器配置了 chrony.conf。我启动了 chronyd,并将 systemctl 配置为在启动时启动 chronyd。我还设置了 /etc/localtime 符号链接以指向所需的时区数据文件。

防火墙

新的 firewalld 对于我的环境来说确实是性能过剩,所以我安装了 iptables-services 和 iptables-utils。我配置了一个默认的 /etc/sysconfig/iptables 文件,然后,在关闭外部网络连接后,我停止了 firewalld 并将 systemd 配置为在启动时不启动它。我启动了 iptables 并将 systemd 配置为在启动时启动它。然后我重新启动了外部网络连接。

瞧!

一旦您到达这一点,树莓派就完全可以作为防火墙和侧门使用了。

再走两步就可以很容易地将其变成路由器。首先,将文件 /proc/sys/net/ipv4/ip_forward 的内容设置为“1”,然后在 /etc/sysctl.conf 中添加或设置以下行 “net.ipv4.ip_forward = 1”,这将使您的计算机成为路由器。然后为 iptables 防火墙添加适当的源 NAT 和转发行。

我昨天刚收到三台新的树莓派 3 计算机。我已经安装了一台带有 CentOS-Userland-7-armv7hl-Minimal-1602-RaspberryPi3.img 镜像的计算机,并将在未来几天完成配置,使其成为我的主要防火墙和路由器。

 

IPTables 规则

有人在评论中要求查看我用于此项目的 IPTables 规则,我怀疑其他人也感兴趣,所以这里是它们。这是一个相当标准的最小集合,只允许入站 SSH。

# Generated by iptables-save v1.4.16.2 on Thu Feb 21 14:51:28 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Feb 21 14:51:28 2013

 

标签
David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。他自 1996 年以来一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员 Linux 哲学”的坚定拥护者和传播者。

11 条评论

很高兴听到这个消息。我一直想把树莓派设置为防火墙,但不确定 USB 以太网适配器是否足够快。

我目前只有第一代(Model B),我不知道它是否性能不足。也许我应该看看 RPi 2?!

我也有第一代树莓派 B 型号,但我想使用树莓派 2 B 型号,它不是更快,但有更多的 USB 端口,并且运行 CentOS for Pi;树莓派 1 不运行 CentOS,所以您应该使用树莓派 2B。

请记住,我不是将此树莓派用于流量,只是将其用作防火墙,我可以用来远程登录我的网络。但是,我现在有一台树莓派 3B 设置为我的防火墙/路由器,它确实处理了我三个网站和一个电子邮件服务器的所有外部流量。使用 SAR - 请参阅我在本网站上关于 SAR 的文章“使用 sar 和 /proc 文件系统进行系统统计”,网址为 https://open-source.net.cn/business/16/3/system-statistics-sar-and-proc-fil… - 表明即使在我的夜间备份期间,2B 或 3B 的 CPU 功率也从未使用超过 5%。

此外,非常主观地说,当我远程登录时,树莓派防火墙实际上似乎更快。

我每天收到大约 1500 封电子邮件(主要是垃圾邮件)和 150 次网站点击,所以我的网络流量非常低。我真的很想听听有人尝试在流量更大的网络上使用树莓派,看看它的表现如何。

如果您愿意,我可以告诉您我为此使用了哪个 USB 适配器。我现在没有这些信息,因为我正在旅行。

感谢您的评论。

回复 作者: dragonbite

过去一年我一直在运行 pi2 作为我的家庭路由器/防火墙,我非常喜欢它。我使用了 Arch,所以我很高兴阅读您使用 CentOS 的情况。非常高兴看到 pi 生态系统在短短几年内取得了如此大的进步!
但是,我最近升级到了 TWC Maxx,它给了我 300Mb 的下行速度。这意味着我的 pi2 现在成为了瓶颈,因为 pi 的以太网被限制为 100Mb。哎呀!即使您添加两个千兆适配器并且不使用内置以太网,pi2 和 pi3 也只有 USB2,USB2 在所有 USB 之间共享,因此总带宽限制为理论最大值 480Mbit,并且我在实际测试中从未见过超过约 280Mbit 的速度。
此外,作为路由器,它必须将数据拉入公共接口并将其发送到私有接口,因此有效吞吐量是总线容量的一半。我的 300Mbit 速度被我的 pi2 限制在只有约 140Mbit 左右。:(
如果您的互联网连接速度为 100Mbit 或更低,那么 pi 是一个不错的选择。如果您的带宽超过 100Mbit,但仍然喜欢小型 RM 路由器的想法,那么 odroid-xu4 是您的首选:原生千兆以太网和 USB3,因此您的千兆适配器也可以全速运行。这就是我现在正在使用的,在用被动散热器替换了响亮的库存风扇后,我对它作为我的新互联网路由器/防火墙非常满意。

回复 作者: dboth

很棒的文章,David。我的 PI2 主要用于媒体服务器,但我确实有一个充当文件共享服务器。到目前为止,我一直在普通台式机上使用 IPFire 作为我的防火墙软件。我可能会尝试看看 IPFire 是否可以在 PI2 或 PI3 上运行,因为我从未真正将 PI 视为防火墙之类的东西。

再次感谢 David 的见解和一篇很棒的文章。

我在几个 RPi 上使用 IPFire,根据我的经验,它运行良好。IPFire 非常容易设置,并且非常可靠。有适用于 RPi 的 IPFire ARM 镜像,可以随时运行。我主要将 IPFire 用作“公共 WLAN 到私有 LAN 的桥梁”,我的意思是将 IPFire“红色”接口(外部)连接到公共 WLAN,并将 ETH 接口(绿色)连接到带有内置 WLAN 的普通 ADSL 路由器的 WAN 端口(换句话说,是标准的家用路由器),然后将其分配给我的“本地”客户端。这主要有两个目的,1) 避免直接连接到公共 WLAN(加上我可以为所有“本地”客户端应用 VPN 功能,如果我想“隐藏”我在当前连接的公共 WLAN 上的流量),2) 能够拉下公共 WLAN 信号,由于某种原因,该信号对于平板电脑等来说太弱,并将其分配到更靠近我的客户端的位置,信号更好。当我和家人度假时,酒店信号很弱,孩子们在流媒体时会发疯,我就会使用这个。在这种情况下,我可以将 IPFire RPi 放在某个最佳位置,并拥有更强大的 NIC/天线,可以比更小的、功率更低的设备更好地拉下信号。当我在某个地方工作较长时间时,我也使用这种“设置”。我建议尝试在 RPi 上使用 IPFire。

回复 作者: bmaynard

非常好的文章!
我不知道 CentOS 有 Pi 版本(我目前正在使用 fedora 版本),您在哪里找到 CentOS-Userland-7-armv7hl-Minimal-1602-RaspberryPi3.img 镜像的?
如果您可以分享您的 iptable 设置和规则,那就太好了,因为我正在考虑使用我的新树莓派 3 之一作为防火墙。

您可能会发现第二个 USB 网络接口比 Pi 的板载 NIC 更快。即使仅限于 USB 接口,USB 3 网卡也可能提供更高的性能。强大的供电集线器可以驱动 Pi 和配件。带有充电端口的集线器可以限制完整 Pi 系统所需的电源数量。看看 Pi 3 的板载 WiFi 在无线路由器/接入点应用中的工作效果将会很有趣。感谢您提供更多关于 PI 不受支持的用途的信息。随着路由器的锁定,Pi 提供了一个开源替代方案。

我已经将 IPTables 规则添加到文章底部。感谢 Tinsjourney 的建议。

您使用此解决方案看到的吞吐量是多少?

我还没有真正为防火墙设置有效的速度测试,无法将其推到最大,但使用 speedtest-cli 从我的网络内部,我获得了 17.49 Mb 的下载速度和 2.35Mb 的上传速度,这超过了我的 TWBC 应该给我的 15/2。所以我得到了我的 ISP 准备给我的最好的速度。

回复 作者: zenmaster24 (未验证)

Creative Commons 许可本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.