网站搜索

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

在这里,我们看到默认定义了三个区域:fwnetloc。需要注意的是,Shorewall 将防火墙计算机本身视为自己的区域,并将其存储在名为 $fw 的变量中。

/etc/shorewall/zones”文件非常不言自明。您有net zone(面向互联网的接口)、loc zone(面向 LAN 的接口)和fw,这就是一切。

此设置放弃了以下内容:

  • 它允许从loc 区域 (LAN) 到net 区域 (Internet) 的所有连接请求。
  • 丢弃(忽略)从网络区域到防火墙LAN的所有连接请求。
  • 拒绝并记录所有其他请求。

LOG LEVEL 位对于任何使用过 ApacheMySQL 或任何其他数量的其他 FOSS 程序进行管理的人来说都应该很熟悉。在本例中,我们告诉 Shorewall 使用日志记录的信息级别

现在我们的区域和策略已经设置,我们必须配置我们的接口。您可以通过编辑“/etc/shorewall/interfaces”文件来完成此操作。

sudo nano /etc/shorewall/interfaces

在这里,我们将面向互联网的接口设置为 net zoneeth0。在 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 配置和选项。然而,这里应该有足够的信息来帮助您现在开始。与往常一样,请参阅手册页以获得更深入的理解。