UFW或简单的防火墙是Linux iptables的用户友好前端。UFW用Python编写(支持Python 3.5及更高版本),并且是Ubuntu系统中当前的事实上的防火墙管理实用程序。该实用程序非常易于使用,可充当基于主机的出色防火墙。
本文向您展示如何在Ubuntu 20.04 LTS系统上安装和使用UFW。
安装
UFW预先安装在大多数Ubuntu系统上。如果您的版本尚未安装此程序,则可以使用snap或apt软件包管理器进行安装。
$ sudo snap install ufw
或
$ sudo apt install ufw
我个人更喜欢使用apt软件包管理器来执行此操作,因为snap不太流行,并且我不想拥有这种额外的复杂性。在撰写本文时,针对UFW发行的20.04版本的版本为0.36。
传入流量与传出流量
如果您是网络世界的初学者,那么首先需要澄清的是传入和传出流量之间的差异。
当您使用apt-get安装更新,浏览Internet或查看电子邮件时,您正在做的就是向服务器(例如Ubuntu,Google等)发送“传出”请求。要访问这些服务,您甚至不需要公共IP。通常,为家庭宽带连接分配一个公共IP地址,并且每个设备都有自己的私有IP。然后,路由器使用称为NAT或网络地址转换的信息处理流量。
NAT和专用IP地址的详细信息不在本文讨论范围之内,但是上面链接的视频是一个很好的起点。回到UFW,默认情况下,UFW将允许所有常规传出Web流量。您的浏览器,程序包管理器和其他程序会选择一个随机端口号-通常是一个3000以上的端口号-这就是每个应用程序可以跟踪其连接的方式。
当您在云中运行服务器时,它们通常带有公共IP地址,并且上述允许传出流量的规则仍然有效。由于您仍将使用软件包管理器之类的实用程序,这些实用程序作为“客户端”与世界其他地方进行通信,因此UFW默认情况下允许这样做。
有趣之处始于传入流量。应用程序(例如用于登录VM的OpenSSH服务器)会像其他应用程序一样,在特定端口(如22)上侦听传入的请求。Web服务器需要访问端口80和443。
防火墙的工作之一是允许特定的应用程序侦听某些传入的流量,同时阻止所有不必要的流量。您可能在VM上安装了数据库服务器,但通常不需要在具有公共IP的接口上侦听传入的请求。通常,它只是在回送接口上侦听请求。
Web上有许多漫游器,它们不断用虚假请求轰炸服务器,以蛮横地闯入服务器或进行简单的“拒绝服务”攻击。配置良好的防火墙应该能够借助Fail2ban等第三方插件来阻止大多数这些恶作剧。
但是,到目前为止,我们将专注于一个非常基本的设置。
基本用法
现在您已经在系统上安装了UFW,我们将研究该程序的一些基本用法。由于防火墙规则是在系统范围内应用的,因此以下命令以root用户身份运行。如果愿意,可以在此过程中使用具有适当特权的sudo。
# ufw status
Status: inactive
默认情况下,UFW处于非活动状态,这是一件好事。您不想阻止端口22(默认的SSH端口)上的所有传入流量。如果您通过SSH登录到远程服务器,并且阻塞了端口22,则您将被锁定在服务器之外。
UFW使我们很容易为OpenSSH戳一个漏洞。运行以下命令:
root@testubuntu:~# ufw app list
Available applications:
OpenSSH
请注意,我仍未启用防火墙。现在,我们将OpenSSH添加到允许的应用程序列表中,然后启用防火墙。为此,请输入以下命令:
# ufw allow OpenSSH
Rules updated
Rules updated (v6)
# ufw enable
该命令可能会破坏现有的SSH连接。进行运算(y | n)?y。
防火墙现在处于活动状态,并在系统启动时启用。
恭喜,UFW现在已启动并正在运行。UFW现在仅允许OpenSSH侦听端口22上的传入请求。要随时检查防火墙的状态,请运行以下代码:
# ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
如您所见,OpenSSH现在可以从Internet上的任何地方接收请求,只要它通过端口22到达它即可。v6行表示该规则也适用于IPv6。
当然,您可以禁止特定的IP范围,或者仅允许特定的IP范围,具体取决于您所处的安全性约束。
添加应用
对于最受欢迎的应用程序,ufw app list命令在安装时自动更新其策略列表。例如,安装Nginx Web服务器后,您将看到以下新选项出现:
# apt install nginx
# ufw app list
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
继续尝试这些规则。请注意,您可以简单地允许端口号,而不用等待显示应用程序的配置文件。例如,要允许端口443进行HTTPS通信,只需使用以下命令:
# ufw allow 443 # ufw status Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
结论
既然已经掌握了UFW的基础知识,那么您就可以探索其他强大的防火墙功能,从允许和阻止IP范围开始。拥有清晰而安全的防火墙策略将使您的系统安全并受到保护。A5互联https://www.a5idc.net/