由于计算机的网络互联,相关服务正在迅速发展,例如电子邮件、社交媒体、网上购物、聊天和网络会议等。然而,这种网络连接是一把双刃剑,因为它也为恶意活动打开了大门,包括病毒传播、有害软件和木马应用程序,这些都可能损害计算机。
互联网作为最大的计算机网络,并不总是充满好人;因此,为了确保我们的计算机和服务器的安全,需要对其进行保护。保护计算机或服务器的一个关键组成部分是防火墙。
Iptables是一款广泛使用的服务器防火墙,它基于一组规则管理传入和传出流量,仅允许受信任的网络连接。然而,IPTables以命令行模式运行,对于初学者来说可能较为复杂。
UFW:IPTables更简单替代方案
为了降低IPTables配置的复杂度,许多前端工具应运而生。如果你使用的是Ubuntu或Debian系统,默认的防火墙工具便是UFW(Uncomplicated Firewall)。
UFW是对广泛使用的IPTables防火墙的前端包装,它提供一个管理netfilter的框架,并包含用于控制防火墙的命令行界面。UFW专为初学者设计,使他们能够轻松使用防火墙;同时也允许高级用户通过命令行界面配置复杂的规则。
UFW能够在Debian、Ubuntu和Linux Mint等发行版中使用,功能也是相当的强大,下面将进行简单介绍,一起来看看吧。
一、安装UFW防火墙
在使用UFW之前,需要使用以下命令检查它是否已安装在你的Linux系统上,该命令会列出所有已安装的软件包并过滤结果,以显示是否安装了UFW:
sudo dpkg --get-selections | grep ufw
如果未安装UFW,可以通过运行以下命令轻松安装它:
sudo apt install ufw
安装UFW之后,需要检查其当前状态,以确定防火墙是已启用还是已禁用:
sudo ufw status
如果UFW处于非活动状态,则需要启用它来开始保护你的系统:
sudo ufw enable
如果需要禁用UFW,可以使用以下简单命令:
sudo ufw disable
二、列出当前的UFW规则
防火墙激活之后,你可以开始添加自定义规则来控制传入和传出流量。要检查防火墙的当前状态并查看现有的规则(包括默认设置),可以使用以下命令:
sudo ufw status verbose
输出详细解释:
Status: active
:意味着防火墙当前处于活动状态并正在执行你设置的规则。Logging: on (low)
:这意味着防火墙将记录基本事件,例如何时允许或阻止数据包。deny (code)
:意味着除非你明确添加了允许规则,否则所有外部连接都会被拒绝。allow (outgoing)
:意味着你的系统可以自由连接到外部服务器,例如访问网站或发送电子邮件。deny (routed)
:这表示通过你系统路由的流量(即非本机直接发起的流量)将被默认阻止。New profiles: skip
:此设置会跳过对新软件配置文件的自动规则添加,任何新安装的应用都需要你手动添加相应的防火墙规则。
三、添加UFW规则示例
默认情况下,UFW设置为拒绝所有传入连接并允许所有传出连接,这是一种很好的安全做法,因为它可以防止未经授权的访问,同时仍允许你的计算机连接到互联网。但是,如果你想远程访问机器,例如使用SSH功能,则需要明确允许适当的端口。
允许SSH访问
要允许传入的SSH连接(使用端口22),请运行以下命令,该命令将允许端口22上的IPv4和IPv6传入连接:
sudo ufw allow ssh
你可以使用以下方法检查规则是否已成功添加:
sudo ufw status
以编号方式列出规则
如果你有许多规则并希望更轻松地管理它们,则可以使用编号选项列出它们:
sudo ufw status numbered
仅允许TCP
默认情况下,允许SSH之类的服务会同时启用TCP和UDP协议,但SSH仅使用TCP,因此可以通过仅允许TCP连接来使规则更具针对性:
sudo ufw allow ssh/tcp
拒绝访问
正如允许访问特定服务或端口一样,UFW也允许你使用非常相似的命令结构来拒绝流量。当你想要明确阻止某个服务或连接访问系统时,拒绝访问就显得尤为重要。假设你想阻止FTP(通常在端口21上运行)在你的机器上访问,命令如下:
sudo ufw deny ftp
此外,你还可以使用具有相同拒绝语法的自定义端口或IP:
sudo ufw deny from 192.168.1.101 to any port 21
此规则将仅阻止特定IP(即192.168.1.101)访问端口21。
添加特定端口
有时候,你系统上的服务可能会运行在非标准或自定义端口上。例如,默认情况下,SSH使用端口22,但出于安全考虑,许多管理员会将此端口更改为其它值,例如2290。要允许通过这个自定义端口(2290)的流量,可以运行以下命令:
sudo ufw allow 2290
允许一定范围的端口
在某些情况下,你可能希望一次打开多个端口,例如,如果你正在运行使用一系列端口进行通信的服务,如某些游戏服务器或VoIP应用程序。那么要使用TCP协议允许一系列端口的话,输入以下命令:
sudo ufw allow 2290:2300/tcp
以上命令将开放2290到2300端口的TCP协议。要使用UDP协议允许相同范围,命令如下:
sudo ufw allow 2290:2300/udp
指定端口范围时,必须指定协议(tcp或udp)。如果不指定,则会收到如下错误:
ERROR: Must specify 'tcp' or 'udp' with multiple ports
三、为特定IP地址添加规则示例
到目前为止,我们已经添加了基于服务和端口的规则,但它还允许你基于IP地址控制访问,如果你想限制仅对网络上的某些机器的访问,这将非常有用。
允许从单个IP访问
要允许特定IP地址(例如192.168.2.10)访问任何服务,请使用以下命令:
sudo ufw allow from 192.168.2.10
允许从子网访问
你还可以允许来自整个IP范围或子网的访问。例如,要允许来自192.168.2.0/24范围内的任何设备的访问,请执行以下命令:
sudo ufw allow from 192.168.2.0/24
指定目标端口(To)
你也可以添加规则来控制流量的去向,而不仅仅是流量的来源。例如,如果你想允许从任何地方进行SSH访问(端口22),则可以这样写:
sudo ufw allow to any port 22
结合IP、协议和端口
为了实现更精细的控制,可以将所有参数组合使用。例如,只允许来自IP为192.168.0.104的TCP流量访问端口22:
sudo ufw allow from 192.168.0.104 proto tcp to any port 22
四、删除UFW规则
有时可能需要删除现有的防火墙规则,包括无论是为了故障排除、清理旧配置还是更改访问权限。幸运的是,UFW让这一切变得简单。接下来让我们了解两种常见的删除规则的方法。
示例场景
假设当前的防火墙规则如下所示:
To Action From -- ------ ---- 22/tcp ALLOW 192.168.0.104 21/tcp ALLOW Anywhere 21/tcp ALLOW Anywhere (v6)
规则说明如下:
- 端口22/tcp(SSH)仅允许来自IP 192.168.0.104的访问;
端口21/tcp(FTP)允许来自任何机器的访问。
方法一:按服务或端口删除
如果该规则是使用像ftp这样的服务名称添加的,则可以使用相同的语法将其删除:
sudo ufw delete allow ftp
此方法无需确认,一旦按下回车键,规则就会立即删除。
方法二:按规则编号删除
有时使用服务名称或端口删除规则不起作用,尤其是当规则添加了特定条件的时候(例如,仅允许来自特定IP)。此时可能会看以下错误:
Could not delete non-existent rule Could not delete non-existent rule (v6)
在这种情况下,最好的选择是按规则编号删除该规则。
步骤1:用数字列出规则
sudo ufw status numbered
示例输出:
To Action From -- ------ ---- [1] 22/tcp ALLOW 192.168.0.104 [2] 21/tcp ALLOW Anywhere [3] 21/tcp ALLOW Anywhere (v6)
步骤2:按编号删除规则
要删除第一条规则(192.168.0.104进行SSH访问),请运行以下命令:
sudo ufw delete 1
这时候会看到:
Deleting: allow from 192.168.0.104 to any port 22 proto tcp Proceed with operation (y|n)? y
五、如何重置UFW规则
有时候你可能想要完全重置防火墙配置,例如当你添加了过多规则导致配置混乱,或想要重新开始。要重置所有UFW规则并将一切恢复到默认状态,请使用以下命令:
sudo ufw reset
你会看到以下提示:
Resetting all rules to installed defaults. Proceed with operation (y|n)? y
如果按下y
,UFW将执行以下操作:
- 在删除现有规则之前备份它们(位于/lib/ufw/user.rules.sav或/etc/ufw/user.rules.save,可能依发行版略有不同)。
- 删除所有用户定义的规则。
- 将UFW设置恢复为安装的默认值。
- 重置后自动禁用防火墙。
重置后UFW将关闭(不会卸载UFW本身,也不会删除配置文件目录/etc/ufw),你需要使用以下命令再次启用它:
sudo ufw enable
六、UFW的高级功能
如前所述,UFW是强大IPTables防火墙的前端。虽然它被设计得非常简洁,但在背后仍具有高度的可定制性。
UFW的高级配置通过一系列纯文本文件来管理。这些文件允许你设置超出UFW命令行工具能力范围的规则和选项。以下是快速概览:
- /etc/default/ufw:默认策略、IPv6支持和内核模块的主要配置。
- /etc/ufw/before[6].rules:这些文件中的规则是在通过ufw命令添加的任何规则之前被应用(before6.rules为IPv6)。
- /etc/ufw/after[6].rules:这些文件中的规则是在通过ufw命令添加的任何规则之后被应用(before6.rules为IPv6)。
- /etc/ufw/sysctl.conf:配置内核网络参数。
- /etc/ufw/ufw.conf:用于设置系统启动时是否启用UFW,以及设置日志级别(LOGLEVEL)。
七、小结
UFW作为iptables的前端,无疑为用户提供了简洁易用的界面,使得用户无需记住复杂的iptables语法。更重要的是,UFW还使用“普通英文”作为其参数,比如:allow(允许)、deny(拒绝)、reset(重置)就是其中的一些。
当然,现在市面上还有许多其它的iptables前端工具,但对于那些希望快速、简单、而且安全地设置防火墙的用户来说,UFW是最好的替代方案之一。如需了解更多使用说明,请通过输入man ufw
来查看UFW手册页面。