myfreax
ufw

如何在Ubuntu 20.04配置防火墙ufw

防火墙是用于监控和过滤传入和传出网络流量的工具。 它通过定义一组确定是允许还是阻止特定流量的安全规则来工作

10 min read
By myfreax
如何在Ubuntu 20.04配置防火墙ufw
如何在Ubuntu 20.04配置防火墙ufw

防火墙是用于监控和过滤传入和传出网络流量的工具。 它通过定义一组确定是允许还是阻止特定流量的安全规则来工作。

Ubuntu 20.04安装了一个称为UFW的防火墙配置工具。它是用于管理iptables防火墙规则的用户友好型前端。它的主要目标是使防火墙的管理变得更容易,简单。

只有root或具有sudo权限的用户可以管理系统防火墙。最佳做法是以sudo用户运行管理任务系统防火墙。

ufw是Ubuntu 20.04标准安装的一部分,它应该已安装于您的系统中。

如果由于某种原因未安装,则可以通过apt软件管理器安装UFW,sudo apt update
&& sudo apt install ufw
命令将会安装UFW

UFW默认情况下处于禁用状态。 您可以运行命令sudo ufw status verbose检查UFW服务的状态。

sudo ufw status verbose命令将会打印防火墙的状态。Status: inactive表示防火墙状态为非活动状态。Status: active表示UFW已激活。

UFW防火墙的默认行为是阻止所有传入连接,并允许所有出站流量。这意味着除非您打开指定的端口,否则任何尝试访问您的服务器的人都将无法连接。

默认策略在/etc/default/ufw文件中定义,可以通过手动修改该文件或使用sudo ufw default <policy> <chain>命令来更改。

防火墙策略是建立更复杂的用户自定义规则的基础。通常,最初的UFW默认策略是一个很好的起点。

sudo ufw status verbose

应用配置文件

应用程序配置文件是INI格式的文本文件,描述了服务的防火墙规则。在安装软件期间,会在/etc/ufw/applications.d目录中创建应用程序配置文件。

您可以运行命令sudo ufw app list列出服务器上所有可用的应用程序配置文件。sudo ufw app info命令可以查找指定配置文件包含的防火墙规则详细信息。

sudo ufw app info 'Nginx Full'命令将会查找Nginx服务的防火墙规则的配置信息。您也可以为应用创建自定义配置文件。

sudo ufw app list
sudo ufw app info 'Nginx Full'

启用UFW

在启用UFW防火墙之前,必须明确允许SSH的连接。否则,您将无法连接到计算机。

sudo ufw allow ssh命令将UFW防火墙配置为允许SSH的连接。如果SSH不是监听默认端口22。则需要打开该端口。

如果您的ssh服务监听端口7722,请运行命令sudo ufw allow 7722/tcp允许该端口的连接。当已将防火墙配置为允许SSH的连接时,您可以运行命令来启用它。

sudo ufw enable将会启用ubuntu防火墙,并提示你命令可能会中断SSH的连接是否要进行该操作。

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y。只需键入y并按Enter回车。

sudo ufw allow ssh # 明确允许SSH连接
sudo ufw allow 7722/tcp # SSH在其它端口
sudo ufw enable #启用UFW

打开端口

根据系统上运行的应用程序,您可能还需要打开其他端口。打开端口语法是ufw allow port_number/protocol。如果未给出协议,则UFW会同时为tcpudp创建规则。

以下是关于如何允许HTTP连接的几种方法。第一种选择是使用服务名称。UFW将检查/etc/services文件中服务指定的端口和协议。命令是sudo ufw allow http

另一个选择是使用应用程序的配置文件。比如命令sudo ufw allow 'Nginx HTTP'将会应用Nginx的防火墙配置文件,打开端口80和443。

UFW还允许您打开指定的端口范围。起始端口和结束端口用冒号:分隔,并且您必须指定协议tcpudp

例如,如果要允许71007200端口在TCP协议的连接,请运行命令sudo ufw allow 7100:7200/tcp

指定端口号最常用的方式,例如命令sudo ufw allow 80将会打开80端口。UFW还支持使用proto关键字指定协议。

sudo ufw allow http #如果http服务存在
sudo ufw allow 'Nginx HTTP' #如果Nginx服务存在
sudo ufw allow 80 #tcp和udp 80
sudo ufw allow 80/tcp #仅tcp 80
sudo ufw allow 7100:7200/tcp #端口范围
sudo ufw allow proto tcp to any port 80

允许源IP地址接口/网卡

要允许来自指定源IP的连接,请使用from关键字,后跟源地址。如果要仅允许指定的IP地址访问指定的端口,请使用to any port关键字,后跟端口号。

除了允许指定的IP地址之外你还可以指定IP地址的范围,或者是子网。允许IP地址子网的语法与使用单个IP地址时的语法相同。唯一的区别是您需要指定子网掩码。

在允许指定的网络接口上的连接时,请使用in on关键字,后跟接口的名称。

下面是一个示例,展示如何允许从192.168.1.1192.168.1.254的IP地址,即192.168.1.0/24网段。连接到MySQL端口3360

sudo ufw allow from 192.168.1.100 #仅允许单IP地址
sudo ufw allow from 192.168.1.100 to any port 3306 #仅允许单IP地址连接3306
sudo ufw allow from 192.168.1.0/24 to any port 3306 
sudo ufw allow in on eth2 to any port 3306

拒绝连接

所有传入连接的默认策略均设置为deny,如果您未更改默认策略,除非打开指定端口的连接,否则UFW会阻止所有传入连接。

撰写拒绝规则与撰写允许规则相同。您只需要使用deny关键字而不是allow

假设您打开了端口80443,并且服务器受到23.24.25.0/24网络的攻击。要拒绝来自23.24.25.0/24的所有连接。请运行命令sudo ufw deny from 23.24.25.0/24

命令将会拒绝23.24.25.0/24网段的连接,如果你仅需要拒绝指定IP地址的连接,则不需要添加子网掩码。

你还可以拒绝指定的IP地址连接到指定端口的连接,例如命令sudo ufw deny proto tcp from 23.24.25.100 to any port 80,443。将会拒绝23.24.25.100访问端口80443

sudo ufw deny from 23.24.25.100 #拒绝指定的IP连接
sudo ufw deny from 23.24.25.0/24  #整个网段
sudo ufw deny proto tcp from 23.24.25.0/24 to any port 80,443

删除防火墙规则

有两种方法删除UFW规则,第一种是通过规则编号,第二种是指定实际规则来删除UFW规则。按规则编号删除ufw防火墙规则比较容易,尤其是您不熟悉UFW时。

如果你要通过规则编号删除规则,您需要找到要删除的规则的编号。要获取规则编号的列表,请运行命令sudo ufw status numbered,命令将会展示所有规则的编号。

假设要删除的ufw规则编号是3,该规则号允许连接到端口8080。你可运行命令sudo ufw delete 3

第二种方法是通过指定实际规则来删除规则。例如,如果您添加打开8069端口的规则,则可以运行命令sudo ufw delete allow 8069将其删除。

sudo ufw status numbered #已编号的防火墙规则
sudo ufw delete 3 #根据编号删除
sudo ufw delete allow 8069 通过规则删除规则

禁用防火墙

如果出于某些原因要停止UFW并停用所有规则,则可以运行命令sudo ufw disable禁用防火墙。

以后,如果您想重新启用ufw并激活所有规则,运行命令sudo ufw enable即可。

重置UFW将禁用UFW,并删除所有活动规则。如果您不想还原所有更改并重新开始,这将很有帮助。要重置UFW,可以运行命令sudo ufw reset

sudo ufw disable #禁用
sudo ufw enable #开启
sudo ufw reset #重置

IP伪装

IP伪装是Linux内核中NAT网络地址转换的一种变体,它通过重写源IP地址和目标IP地址端口来转换网络流量。

借助IP伪装,您可以使用一台Linux计算机充当网关,允许私有网络中的一台或多台计算机与互联网通信。

例如VMware或者Virtualbox此类虚拟软件就是通过一个NAT适配器充当网关,转发多台虚拟机网络数据,连接到互联网。

使用UFW配置IP伪装涉及几个步骤。首先,您需要启用IP转发ip_forward。

请使用你喜欢的编辑器编辑/etc/ufw/sysctl.conf文件,在本教程中将使用vim编辑器打开文件

sudo vim /etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
/etc/ufw/sysctl.conf

保存文件并退出vim

您还需要配置UFW以允许转发数据包。打开UFW配置文件/etc/default/ufw。找到DEFAULT_FORWARD_POLICY键,然后将值从DROP更改为ACCEPT

sudo vim /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

现在,您需要在nat表中设置POSTROUTING链的默认策略和伪装规则。请打开/etc/ufw/before.rules文件。追加以下几行到文件.

sudo vim /etc/ufw/before.rules
#NAT table rules 启用nat 表
*nat
# 允许POSTROUTING 链
:POSTROUTING ACCEPT [0:0]

# 转发eth0接口的数据包,请将eth0更改为你对应的接口
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
/etc/ufw/before.rules

注意不要删除COMMIT关键词,它永远是在最后一行。别忘了在-A POSTROUTING行中替换eth0以匹配你的计算机可以连接到互联网的接口名称。

完成后,保存并关闭文件。最后,通过命令sudo ufw disable禁用和命令sudo ufw enable重新启用UFW重新加载UFW规则。

我们已向您展示了如何在Ubuntu 20.04服务器安装和配置防火墙。在限制所有不必要的连接的同时,请确保允许系统正常运行所需的所有传入连接。

有关此主题的更多信息,请访问UFW手册页。如果您有任何疑问,请随时在下面发表评论。