Linux 上的防火墙在保护计算机系统方面起着至关重要的作用。它充当屏障,控制和过滤网络流量,以保护系统免受未经授权的访问、攻击和其他威胁。如果没有正确配置的防火墙,服务器可能容易受到各种类型的网络攻击,从而对数据安全和机密性造成严重后果。
在本文中,我们将介绍两种配置 Linux 防火墙的主要工具:firewalld 和 iptables。我们将对它们的特性、功能和优势进行比较分析。此外,我们将提供设置和使用每种工具的详细说明,并讨论在 Linux 平台上使用防火墙保护系统的最佳实践。所有操作都将在 虚拟服务器 具有root访问权限。
在 Linux 上配置 firewalld
Firewalld (防火墙守护进程)是用于管理 Linux 操作系统中的防火墙的程序。它提供用户界面来配置防火墙规则,允许或阻止网络应用程序的连接。它在大多数服务器发行版中默认预安装。如果未预安装 Firewalld,则可以独立于发行版的官方存储库进行安装。
对于 Red Hat 系统(例如 RHEL、CentOS、Fedora),安装使用以下命令执行:
yum install firewalld
对于 Debian/Ubuntu:
apt-get install firewalld
安装后,可以使用以下命令立即启动并激活:
systemctl start firewalld
接下来,需要将服务添加到启动:
systemctl enable firewalld
此时,我们建议禁用 ufw,因为不建议同时使用此工具与firewalld或iptables。检查状态:
systemctl status ufw
要停止它,请输入命令:
systemctl stop ufw
要完全停用:
ufw disable
完成这些操作后,您就可以继续配置firewalld了。
首先,需要定义信任区域。Firewalld 使用区域概念来确定网络接口的信任级别。每个接口分配一个区域,并根据区域应用防火墙规则。使用以下命令打开所有可用区域的列表:
firewall-cmd --get-zones
通常使用 4 个主要区域:
- 公共:此区域适用于您认为不安全的网络;
- 私做:适用于家庭网络或其他可信任的网络连接;
- 全内走线 :用于内部网络,例如组织或企业网络内部的网络;
- DMZ:此区域通常放置可从互联网访问的服务器。
但是,这只是一个例子。您可以使用以下命令添加自己的区域:
firewall-cmd --permanent --new-zone=nameyourzone
添加后,需要重新加载:
firewall-cmd --reload
要删除区域,可以使用类似的方法
firewall-cmd --permanent --delete-zone=nameyourzone
定义区域后,需要允许所需服务和端口的流量。要允许某项服务,请使用以下命令:
firewall-cmd --zone=public --add-service=name
其中 姓名 是服务的名称。例如,要允许 Apache 的流量:
firewall-cmd --zone=public --add-service=http
要定义允许的端口,请使用以下命令:
firewall-cmd --zone=public --add-port=number/protocol
例如,SSH 的标准 22 端口如下所示:
firewall-cmd --zone=public --add-port=22/tcp
在此阶段,主要规则已创建。接下来,根据源、目标、端口和其他条件确定如何处理流量。要添加规则(使用 国家 区域为例):
firewall-cmd --zone=public rule
例如,允许来自任何来源的传入流量到端口 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
要删除规则:
firewall-cmd --permanent --remove-rule=rule_specification
其中 排除 是规则的类型(例如,端口、服务、rich-rule 等),以及 规则规范 是规则本身的规范。
对 Firewalld 配置进行更改后,需要保存并应用这些更改。要保存更改,请使用以下命令:
firewall-cmd --runtime-to-permanent
要应用更改:
firewall-cmd --reload
完成设置后,您可以通过打开所有规则列表来验证所选参数:
firewall-cmd --list-all
如果出现任何问题,请使用以下命令检查 Firewalld 日志:
journalctl -u firewalld
注意:我们仅介绍了建立连接的一般算法。该工具具有广泛的功能。有关所有可用选项的完整信息,您可以使用 官方文件 或打开帮助:
firewall-cmd --help
在 Linux 上配置 iptables
与 Firewalld 不同,iptables 是 Linux 中用于管理防火墙的较旧但仍广泛使用的工具。它在 Linux 内核级别提供了一种更直接、更灵活的数据包过滤规则方法。但是,与 Firewalld 相比,iptables 需要更高级的知识和经验,因此初学者不太容易上手。使用以下命令检查该工具的预安装版本:
iptables -V
如果未安装该工具,则需要安装。在 Ubuntu、Debian 上安装的命令为:
apt install iptables
对于 Red Hat 系统(例如 CentOS、Fedora):
yum install iptables
安装后激活命令:
systemctl start iptables
要添加到启动,请执行:
systemctl enable iptables
在开始 iptables 配置之前,了解它的工作原理非常重要。程序的语法对此很有帮助。它如下所示:
iptables -t table action chain additional_parameters
让我们更深入地研究每一个项目。
Iptables 有四个主要表: filter、nat、mangle 和 raw每种方法都旨在处理特定类型的数据包,并具有自己的规则链:
- 过滤:这是最常用的表,包含数据包过滤规则。它用于决定是否允许或拒绝数据包。
- NAT:该表用于修改数据包中的网络地址和端口。通常用于设置伪装(NAT)。
- 失踪:此表可以修改数据包头,用于进行一些特殊的数据包操作,比如标记等。
- 原:此表用于配置在通过连接跟踪系统之前适用的规则。它通常用于设置不应被跟踪系统修改的规则,例如丢弃来自某些地址的数据包。
每个表包含一组链。链是按顺序检查的一系列规则。有三种预定义的链:
- 输入(传入)。此链中的规则决定如何处理传入的数据包。
- 输出(传出)。此链适用于您的计算机向网络上的其他设备或计算机发送的所有数据包。
- FORWARD(转发)。此链中的规则指定了如何处理转发的数据包。
最后,每个链条都具有一些动作(目标)。在实践中,主要使用 5 种动作:
- 接受:允许数据包通过防火墙。
- 下降:拒绝数据包并且将其丢弃,不做任何回应。
- 拒绝:拒绝数据包并向发送者发送 ICMP 错误消息。
- 登录:将数据包记录在系统日志中并执行其他操作(例如,接受或丢弃)。
- 返回:停止检查当前链中的规则并返回到调用链(如果适用)。
要开始设置,请使用以下命令打开现有规则列表:
iptables -L
作为配置 Iptables 的指南,让我们看一下最常用命令的实际示例。为方便起见,我们将示例分为 3 组,具体取决于特定的链。
链条类型 INPUT:
- 允许通过端口 80 上的 TCP 协议传入流量:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. 允许通过端口 22 上的 UDP 协议传入流量:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. 阻止来自特定 IP 地址的传入流量:
iptables -A INPUT -s 192.168.1.100 -j DROP
链条类型 OUTPUT:
- 允许通过端口 443 上的 TCP 协议传出流量:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. 允许通过端口 80 上的 UDP 协议传出流量:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. 阻止到特定端口(例如 21)的传出流量:
iptables -A OUTPUT -p tcp --dport 21 -j DROP
链条类型 前锋:
- 阻止来自特定范围的 IP 地址的转发流量:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2.阻止从特定网络接口转发数据包:
iptables -A FORWARD -i eth1 -j DROP
3. 限制特定端口的同时连接数(本例中为端口 10 每分钟 80 个连接):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
如您所见,在每个单独的案例中,都使用了一个附加参数(命令)。要获取可能的参数的完整列表以及对该工具功能的整体支持,请输入:
iptables -h
为了确保设置正确,重新输入命令查看规则列表:
iptables -L
要删除特定规则,请使用以下命令:
iptables -D chain rule_number
例如,如果您想从 INPUT 链中删除规则编号 1,命令将如下所示:
iptables -D INPUT 1
要使用一个命令删除所有规则:
iptables -F
重要的注意事项:重启系统或服务后,iptables 规则不会自动保存。要保存规则,需要将其添加到配置文件中,并在重启后恢复。 iptables-保存 和 iptables-恢复 实用程序可以帮助解决此问题。要保存规则,请输入命令:
iptables-save > /etc/iptables/rules.v4
这会将当前的 iptables 规则保存在 rules.v4 文件中。要在重启后恢复,请输入:
iptables-restore < /etc/iptables/rules.v4
此命令从 rules.v4 文件中恢复规则。
结语
使用firewalld或iptables在Linux上配置防火墙是确保服务器安全的重要方面。这两种工具都提供了管理网络流量和保护系统免受未经授权的访问和网络攻击的可靠方法。考虑到它们不同的功能和优势,在firewalld和iptables之间进行选择取决于用户的特定需求和偏好。