Shorewall - 用于配置Linux服务器的高级防火墙
对于新手或对iptables不太熟悉的人来说,在 Linux 中设置防火墙可能非常困难。幸运的是, Shorewall中有一个非常易于使用的解决方案。
在这个多部分教程中,我将帮助您开始使用Shorewall,并带您了解这个出色的防火墙系统的一些更高级的主题。
什么是 Shorewall?
Shorewall本质上是iptables 的前端,但它是一个命令行环境前端,利用大量文本文件进行配置。虽然Shorewall是一个强大的防火墙系统,可以在为众多机器提供服务的大型网络上扩展,但我们将从基本的双接口配置开始,并确定基础知识。
双接口配置由一台具有两个以太网端口的机器组成,一个端口接入本地网络,一个端口传出本地网络。
在Linux中安装Shorewall
可以使用 apt-get 和 yum 包管理工具安装Shorewall 。
在 Debian/Ubuntu/Linux Mint 上
$ sudo apt-get install shorewall6
在 RHEL/CentOS/Fedora 上
$ sudo yum install shorewall6
安装后,我们需要从“ /usr/share/doc/shorewall ”目录复制示例配置到 Shorewall 的默认目录“ /etc/shorewal ”。
$ sudo cp /usr/share/doc/shorewall/example/two-interfaces/* /etc/shorewall
然后 cd 到 /etc/shorewall。
$ cd /etc/shorewall
如果我们查看此目录,我们会看到一堆文件和shorewall.conf文件。Shorewall 将网络视为一组不同的区域,因此我们要查看的第一个文件是“ /etc/shorewall/zones ”文件。
在这里,我们看到默认定义了三个区域:net、loc和all。值得注意的是,Shorewall将防火墙机器本身视为自己的区域,并将其存储在名为$FW的变量中。您将在其余配置文件中看到此变量。
“ /etc/shorewall/zones ” 文件非常直观。它包含net 区域(面向 Internet 的接口)、loc 区域(面向 LAN 的接口)以及all,即所有内容。
此设置放弃了以下内容:
- 它允许从loc 区域(LAN)到net 区域(Internet )的所有连接请求。
- 丢弃(忽略)从网络区域到防火墙和LAN 的所有连接请求。
- 拒绝并记录所有其他请求。
LOG LEVEL位对于任何使用过Apache、MySQL或任何其他FOSS程序进行管理的人来说都应该很熟悉。在本例中,我们告诉Shorewall使用信息级别的日志记录。
如果您希望从 LAN 管理防火墙,则可以将以下行添加到“ /etc/shorewall/policy ”文件中。
#SOURCE DEST POLICY LOG LEVEL LIMIT:BURST loc $FW ACCEPT $FW loc ACCEPT
现在我们的区域和策略已设置完毕,我们必须配置接口。您可以通过编辑“ /etc/shorewall/interfaces ”文件来执行此操作。
在这里,我们将面向互联网的接口设置为net区域的eth0。在我们的 LAN 端,我们将另一个接口eth1设置为loc 区域。请调整此文件以适合您的配置。
您可以为这两个接口设置多种选项,手册页中有详细的说明。
$ man shorewall-interfaces
其中一些的简要概述如下:
- nosmurfs – 过滤以广播地址为源的数据包。
- logmartians – 记录具有不可能源地址的数据包。
- routefilter——用于防欺骗的内核路由过滤。
当然,既然我们的系统已设置防火墙,我们将需要允许某些连接通过,以便完成我们需要做的事情。您可以在“ /etc/shorewall/rules ” 规则文件中定义这些连接。
该文件乍一看令人困惑,主要是因为列重叠,但标题非常直观。首先,您有ACTION 列,它描述了您想要执行的操作。
接下来,您将获得一个SOURCE标头,其中定义了数据包的来源区域。然后,您将获得DEST或目的地,即目的地的区域或IP 地址。让我们举个例子。
假设你想在 IP 地址为192.168.1.25的机器上运行防火墙后面的SSH服务器。你不仅要在防火墙上打开一个端口,而且还要告诉防火墙,任何来自端口22的流量都需要路由到IP 地址为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 内核”。
参考链接
在下一篇文章中,我们将介绍一些更高级的主题,但目前这里应该有足够的内容供您入门。与往常一样,请查看手册页以获得更深入的了解。