Shorewall - 适用于 Linux 服务器的高级防火墙
对于新手或不太熟悉 iptables 的人来说,在 Linux 中设置防火墙可能会非常困难。幸运的是,Shorewall 中有一个非常易于使用的解决方案。
在这个由多个部分组成的教程中,我将带您开始使用 Shorewall,并引导您了解这个出色的防火墙系统的一些更高级的主题。
什么是海岸墙?
Shorewall 本质上是 iptables 的前端,但它是一个命令行环境前端,利用多个文本文件进行配置。虽然 Shorewall 是一个强大的防火墙系统,可以扩展到为众多机器提供服务的大型网络,但我们将从基本的双接口配置开始,并确定基础知识。
双接口配置由一台具有两个以太网端口的计算机组成,一个进入本地网络,一个出站到本地网络。
在 Linux 中安装 Shorewall 防火墙
Shorewall 可以使用 apt 和 yum 包管理器工具安装。
sudo apt install shorewall [On Debian-based Sysems]
sudo yum install shorewall [On RHEL-based Sysems]
安装后,我们需要将示例配置从“/usr/share/doc/shorewall”目录复制到Shorewall的默认目录“/etc/shorewall”。
sudo cp /usr/share/doc/shorewall/example/two-interfaces/* /etc/shorewall
cd /etc/shorewall
如果我们查看这个目录,我们会看到一堆文件和 shorewall.conf 文件。
Shorewall 将网络视为一组不同的区域,因此我们要查看的第一个文件是“/etc/shorewall/zones”文件。
sudo nano /etc/shorewall/zones
在这里,我们看到默认定义了三个区域:fw、net 和 loc。需要注意的是,Shorewall 将防火墙计算机本身视为自己的区域,并将其存储在名为 $fw 的变量中。
“/etc/shorewall/zones”文件非常不言自明。您有net zone(面向互联网的接口)、loc zone(面向 LAN 的接口)和fw,这就是一切。
此设置放弃了以下内容:
- 它允许从loc 区域 (LAN) 到net 区域 (Internet) 的所有连接请求。
- 丢弃(忽略)从网络区域到防火墙和LAN的所有连接请求。
- 拒绝并记录所有其他请求。
LOG LEVEL 位对于任何使用过 Apache、MySQL 或任何其他数量的其他 FOSS 程序进行管理的人来说都应该很熟悉。在本例中,我们告诉 Shorewall 使用日志记录的信息级别。
现在我们的区域和策略已经设置,我们必须配置我们的接口。您可以通过编辑“/etc/shorewall/interfaces”文件来完成此操作。
sudo nano /etc/shorewall/interfaces
在这里,我们将面向互联网的接口设置为 net zone 的 eth0。在 LAN 端,我们将另一个接口 eth1 设置为 loc 区域。请调整此文件以正确适合您的配置。
您可以为这些界面放置的各种选项非常广泛,并且在手册页上有最好的详细解释。
man shorewall-interfaces
其中一些的简要概述如下:
- nosmurfs – 过滤以广播地址为源的数据包。
- logmartians – 记录具有不可能源地址的数据包。
- routefilter – 用于反欺骗的内核路由过滤。
当然,现在我们的系统已设置防火墙,我们将需要允许某些连接通过才能完成我们需要做的事情。您可以在“/etc/shorewall/rules”的规则文件中定义这些内容。
sudo nano /etc/shorewall/rules
这个文件乍一看很混乱,主要是因为列重叠,但标题非常不言自明。首先,您有ACTION 列,它描述了您想要执行的操作。
接下来,您有一个 SOURCE 标头,您可以在其中定义数据包来源的区域。然后,您就有了DEST或目的地,即目的地的区域或IP地址。让我们举个例子。
假设您想在 IP 地址为 192.168.1.25 的计算机上的防火墙后面运行 SSH 服务器。您不仅需要在防火墙中打开一个端口,而且还必须告诉防火墙,来自端口 22 的任何流量都需要路由到位于 22 的计算机。 >192.168.1.25。
这称为端口转发。这是大多数防火墙/路由器的常见功能。在“/etc/shorewall/rules”中,您可以通过添加如下行来完成此操作:
SSH(DNAT) net loc:192.168.1.25
上面,我们定义了从网络区域到防火墙的任何以 SSH 为目的地的数据包都必须路由 (DNAT))到地址为 192.168.1.25 的计算机上的端口 22。
这称为网络地址转换或NAT。 “D”只是告诉Shorewall这是目标地址的NAT。
为此,您必须在内核中启用 NAT 支持。如果您需要NAT但没有,请参阅我的重新编译 Debian 内核教程。
在下一篇文章中,我们将探讨各种 Shorewall 配置和选项。然而,这里应该有足够的信息来帮助您现在开始。与往常一样,请参阅手册页以获得更深入的理解。