注:本文防火墙命令教程仅适用于 Ubuntu、Debian 系统。

一、安装 UFW 防火墙

在开始使用 UFW 防火墙之前,需要先确保它已安装在系统中。如果未安装,可以使用以下命令进行安装:

sudo apt update
sudo apt install ufw

sudo apt update命令用于更新软件包列表,确保系统能够获取到最新的软件包信息。这对于安装最新版本的 UFW 防火墙至关重要。接下来,sudo apt install ufw命令将实际安装 UFW 防火墙软件包。安装完成后,就可以开始配置和使用 UFW 防火墙的各项功能了。

二、查看防火墙状态

了解防火墙的当前状态对于管理网络安全性至关重要。通过查看防火墙状态,可以确定哪些端口是开放的,哪些服务是被允许或被拒绝的,以及是否有特定的 IP 地址或网络被特别授权或拒绝访问。

1. 基本状态查看

sudo ufw status

该命令将显示防火墙的当前状态,包括是否已启用,以及已配置的规则列表。如果防火墙已启用,将显示为active,并列出所有已添加的规则,包括允许和拒绝的规则。

2. 详细状态查看

sudo ufw status verbose

此命令不仅显示基本的防火墙状态和规则列表,还会提供更详细的配置信息,如默认策略、日志级别等。这对于深入分析防火墙配置和进行故障排查非常有用。

三、开启防火墙

确保防火墙处于启用状态是保护系统安全的第一步。启用防火墙后,它将根据配置的规则来过滤进出系统的网络流量。

sudo ufw enable

执行上述命令后,系统会提示Firewall is active,表示防火墙已成功启用。此时,防火墙将按照设定的规则对网络连接进行管控,阻止未授权的访问,保护系统免受潜在的网络威胁。

四、关闭防火墙

在某些情况下,可能需要临时关闭防火墙,例如在进行网络故障排查时,或者在受信任的网络环境中暂时不需要防火墙的保护。

sudo ufw disable

执行此命令后,防火墙将被禁用,所有之前配置的规则将不再生效,系统将不再对网络流量进行过滤。需要注意的是,关闭防火墙会使系统暴露在潜在的网络风险中,因此应谨慎使用此命令,并在完成相关操作后及时重新启用防火墙。

五、放行指定端口

为了允许特定的服务或应用程序通过防火墙,需要放行相应的端口。根据不同的协议类型(TCP 或 UDP),可以使用以下命令来放行指定端口。

1. 放行 TCP 端口

sudo ufw allow 80/tcp

此命令将允许所有来自 TCP 协议的 80 端口的流量通过防火墙。80 端口通常用于 HTTP 服务,因此该命令适用于放行 Web 服务器的访问。

2. 放行 UDP 端口

sudo ufw allow 53/udp

该命令允许所有来自 UDP 协议的 53 端口的流量通过防火墙。53 端口主要用于 DNS 服务,确保域名解析请求能够正常通过防火墙。

3. 放行端口范围

sudo ufw allow 1000:2000/tcp

如果需要放行一个连续的端口范围,可以使用上述命令。该命令将允许所有来自 TCP 协议的 1000 到 2000 端口的流量通过防火墙。这对于某些需要多个连续端口的应用程序(如某些游戏服务器或集群服务)非常有用。

六、关闭指定端口

当不再需要某个已放行的端口,或者发现某个端口存在安全隐患时,可以使用以下命令来关闭该端口,阻止相应的流量通过防火墙。

sudo ufw delete allow 80

执行此命令后,之前放行的 80 端口将被关闭,所有来自该端口的流量都将被防火墙阻止。需要注意的是,关闭端口可能会影响依赖该端口的服务或应用程序的正常运行,因此在执行此操作前应确保已做好相应的准备和调整。

七、查看防火墙现有规则

定期查看防火墙的现有规则有助于了解当前的网络访问控制情况,确保规则的准确性和安全性,并及时发现可能存在的配置错误或不必要的规则。

1. 查看已添加的规则

sudo ufw show added

该命令将列出所有已添加到防火墙中的规则,包括允许和拒绝的规则。通过查看这些规则,可以清楚地了解哪些端口、服务或 IP 地址被特别授权或拒绝访问。

2. 以编号形式查看规则

sudo ufw status numbered

此命令将以编号的形式显示防火墙规则列表,每个规则前都有一个唯一的编号。这在需要删除特定规则时非常有用,因为可以使用编号来准确指定要删除的规则,避免误操作。

八、重置防火墙规则

如果需要清除所有已配置的防火墙规则,并将防火墙恢复到初始状态,可以使用以下命令来重置防火墙规则。

sudo ufw reset

执行此命令后,所有之前添加的规则都将被清除,防火墙将恢复到刚安装时的默认状态。这意味着所有端口都将被关闭,所有自定义的访问控制规则都将被移除。在重置防火墙后,需要重新配置所需的规则以确保系统的网络安全。

九、设置默认策略

默认策略决定了防火墙对未明确允许或拒绝的流量的处理方式。合理设置默认策略是确保系统安全的重要一步。

1. 默认拒绝所有入站连接

sudo ufw default deny incoming

执行该命令后,防火墙将默认拒绝所有入站连接,除非 explicitly 允许特定的端口或服务。这遵循了最小特权原则,即只允许必要的流量通过,其他一切流量都将被阻止,从而提高了系统的安全性。

2. 默认允许所有出站连接

sudo ufw default allow outgoing

此命令设置防火墙默认允许所有出站连接。这意味着系统内的应用程序可以自由地访问外部网络资源,除非有特定的规则限制。这种设置在大多数情况下是合理的,但在某些高安全性要求的环境中,可能需要进一步限制出站流量。

十、允许特定 IP 访问

在某些场景下,可能需要允许特定的 IP 地址访问系统,而拒绝其他 IP 地址的访问。这可以通过以下命令来实现。

1. 允许某个 IP 访问所有端口

sudo ufw allow from 192.168.1.1

该命令允许 IP 地址为 192.168.1.1 的设备访问系统的所有端口。这对于信任的设备(如本地网络中的管理计算机)非常有用,可以确保其能够正常访问系统资源。

2. 允许某个 IP 访问特定端口

sudo ufw allow from 192.168.1.1 to any port 22

如果只需要允许特定 IP 地址访问某个特定端口(如 SSH 服务的 22 端口),可以使用上述命令。这在允许外部管理员通过特定 IP 地址进行远程管理时非常有用,同时限制了其他 IP 地址对 SSH 服务的访问,提高了系统的安全性。

十一、拒绝特定 IP 访问

与允许特定 IP 访问相对,有时需要拒绝某些 IP 地址的访问,以防止潜在的恶意攻击或未经授权的访问。

1. 拒绝某个 IP 访问所有端口

sudo ufw deny from 192.168.1.2

执行此命令后,IP 地址为 192.168.1.2 的设备将无法访问系统的所有端口。这对于已知的恶意 IP 地址或不需要访问系统资源的设备非常有效,可以防止其对系统进行任何访问尝试。

2. 拒绝某个 IP 访问特定端口

sudo ufw deny from 192.168.1.2 to any port 80

如果需要拒绝某个 IP 地址访问特定端口(如 Web 服务器的 80 端口),可以使用上述命令。这在防止某个 IP 地址对特定服务进行访问时非常有用,例如阻止某个 IP 地址对 Web 服务器的访问,同时允许其他 IP 地址正常访问。

十二、允许特定网络访问

除了针对单个 IP 地址的访问控制,还可以根据 IP 地址段(子网)来设置访问规则,允许整个网络访问系统。

sudo ufw allow from 10.0.0.0/8
sudo ufw allow from 172.16.0.0/12
sudo ufw allow from 192.168.0.0/16

上述命令分别允许 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16 这三个常见的私有网络地址段访问系统。这意味着来自这些子网内的所有 IP 地址都可以访问系统,而其他网络地址的访问将根据默认策略或特定规则进行处理。这种设置在企业内部网络或可信网络环境中非常有用,可以简化访问控制配置。

十三、使用服务名放行

为了方便记忆和管理,UFW 防火墙支持使用服务名来放行相应的端口,而无需记住具体的端口号。

1. 允许 SSH 服务

sudo ufw allow ssh

该命令允许 SSH 服务的默认端口(22 端口)通过防火墙,使远程用户能够通过 SSH 协议连接到系统。这对于系统管理、远程维护等操作非常必要。

2. 允许 HTTP 服务

sudo ufw allow http

此命令允许 HTTP 服务的默认端口(80 端口)通过防火墙,使系统能够作为 Web 服务器对外提供服务。这对于运行网站、Web 应用程序等场景非常有用。

3. 允许 HTTPS 服务

sudo ufw allow https

执行该命令后,HTTPS 服务的默认端口(443 端口)将被允许通过防火墙,支持加密的 Web 通信。这对于保障网站数据传输的安全性、防止信息泄露和中间人攻击非常重要。

十四、删除规则

在防火墙规则管理过程中,可能需要删除不再需要的规则,以保持规则列表的简洁和有效性。

1. 使用规则编号删除

sudo ufw delete 1

如果通过sudo ufw status numbered命令查看规则列表,并发现编号为 1 的规则需要删除,可以使用上述命令。这种方式适用于规则较多且编号明确的情况,可以快速准确地删除指定规则。

2. 直接删除特定规则

sudo ufw delete allow 80

如果已知要删除的规则是允许 80 端口的规则,可以直接使用上述命令进行删除。这种方式在规则较少或规则描述明确时非常方便,可以快速找到并删除相应的规则。

十五、重启防火墙

在对防火墙规则进行修改后,可能需要重新加载规则以使更改生效。此外,在某些情况下(如规则配置出现错误导致网络连接异常),可能需要重新启动防火墙服务。

sudo ufw reload

执行此命令后,防火墙将重新加载所有配置的规则,并根据新的规则设置来过滤网络流量。这确保了最近所做的更改生效,同时不会中断现有的网络连接。如果需要完全重新启动防火墙服务,可以使用sudo service ufw restart命令,但通常情况下sudo ufw reload已足够。

## 十六、使用 iptables 的情况(适用于更复杂的规则配置)

1. 安装 iptables

sudo apt-get update
sudo apt-get install iptables

在使用 iptables 之前,需要确保它已安装在系统中。sudo apt-get update命令用于更新软件包列表,确保获取到最新的软件包信息。然后,sudo apt-get install iptables命令将安装 iptables 软件包,使其可用。

2. 放行指定端口

# 放行 80 端口
sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
# 放行 22 端口
sudo iptables -I INPUT -p tcp --dport 22 -j ACCEPT

上述命令分别放行了 80 端口(HTTP 服务)和 22 端口(SSH 服务)。-I INPUT表示在 INPUT 链(用于处理入站流量)的开头插入规则,-p tcp指定协议为 TCP,--dport指定目标端口号,-j ACCEPT表示接受(放行)符合条件的流量。

3. 保存规则

sudo iptables-save

执行此命令后,当前配置的 iptables 规则将被保存到默认的规则文件中。这样,在系统重启后,这些规则仍然有效,不会丢失。

4. 设置规则持续生效

sudo apt-get install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

为了确保 iptables 规则在系统重启后仍然有效,需要安装iptables-persistent包。sudo netfilter-persistent save命令将当前规则保存到配置文件中,而sudo netfilter-persistent reload命令则重新加载这些规则,使它们在当前会话中生效。

5. 查看防火墙规则

sudo iptables -L

该命令将列出当前配置的所有 iptables 规则,包括 INPUT、OUTPUT 和 FORWARD 等链中的规则。通过查看这些规则,可以了解当前的网络流量过滤策略,帮助进行故障排查和安全审计。

通过以上命令,可以全面管理 Ubuntu 和 Debian 系统中的防火墙设置,包括安装、开启、关闭、规则管理等操作。这些命令为系统管理员提供了强大的工具,用于控制和保护系统的网络访问,确保系统的安全性。