自学内容网 自学内容网

在Ubuntu 18.04上如何使用UFW设置防火墙

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

简介

UFW(Uncomplicated Firewall)是一个面向简化配置防火墙过程的 iptables 接口。虽然 iptables 是一个稳定且灵活的工具,但对于初学者来说,学习如何正确配置防火墙可能会有一定难度。如果你想开始保护你的网络,但又不确定应该使用哪个工具,那么 UFW 可能是你的正确选择。

本教程将向您展示如何在 Ubuntu 18.04 上使用 UFW 设置防火墙。

先决条件

要按照本教程操作,您需要:

  • 一个安装了 sudo 非根用户的 Ubuntu 18.04 服务器,您可以按照《使用 Ubuntu 18.04 初始服务器设置》中的步骤 1–3 进行设置。

UFW 默认已安装在 Ubuntu 上。如果由于某些原因它被卸载了,您可以使用 sudo apt install ufw 命令进行安装。

步骤 1 —— 确保 IPv6 已启用

在最近的 Ubuntu 版本中,默认已启用 IPv6。实际上,这意味着添加到服务器的大多数防火墙规则将包括 IPv4 和 IPv6 两个版本,后者在 UFW 状态命令的输出中以 v6 标识。要确保 IPv6 已启用,您可以检查 UFW 配置文件 /etc/default/ufw。使用 nano 或您喜欢的命令行编辑器打开此文件:

sudo nano /etc/default/ufw

然后确保 IPV6 的值设置为 yes。它应该是这样的:

IPV6=yes

保存并关闭文件。如果您使用的是 nano,可以通过输入 CTRL+X,然后输入 YENTER 来确认。

当在本指南的后续步骤中启用 UFW 时,它将被配置为编写 IPv4 和 IPv6 防火墙规则。

步骤 2 —— 设置默认策略

如果您刚开始使用 UFW,一个很好的第一步是检查默认防火墙策略。这些规则控制如何处理不明确匹配任何其他规则的流量。

默认情况下,UFW 被设置为拒绝所有传入连接并允许所有传出连接。这意味着任何试图连接到您的服务器的人都无法连接,而服务器内的任何应用程序都可以连接到外部世界。允许特定服务和端口的附加规则被包含为对这一般策略的例外。

为了确保您能够跟随本教程的其余部分,您现在将设置 UFW 的传入和传出流量的默认策略。

要将默认的 UFW 传入策略设置为 deny,运行:

sudo ufw default deny incoming
默认传入策略已更改为 'deny'
(请确保相应更新您的规则)

要将默认的 UFW 传出策略设置为 allow,运行:

sudo ufw default allow outgoing
默认传出策略已更改为 'allow'
(请确保相应更新您的规则)

这些命令将默认设置为拒绝传入和允许传出连接。这些防火墙默认值可能足够用于个人计算机,但服务器通常需要响应来自外部用户的传入请求。我们将在下一步中了解这一点。

步骤 3 —— 允许 SSH 连接

如果您现在启用 UFW 防火墙,它将拒绝所有传入连接。这意味着如果您希望服务器响应这些类型的请求 — 例如 SSH 或 HTTP 连接 — 您需要创建明确允许合法传入连接的规则。如果您使用的是云服务器,您可能希望允许传入的 SSH 连接,以便连接到并管理您的服务器。

允许 OpenSSH UFW 应用程序配置文件

在安装时,大多数依赖网络连接的应用程序将在 UFW 中注册一个应用程序配置文件,这使用户可以快速允许或拒绝对服务的外部访问。您可以使用以下命令检查当前在 UFW 中注册的配置文件:

sudo ufw app list
可用应用程序:
  OpenSSH

要启用 OpenSSH 应用程序配置文件,运行:

sudo ufw allow OpenSSH
已添加规则
已添加规则(v6)

这将创建允许在默认情况下 SSH 守护程序监听的端口 22 的防火墙规则。

通过服务名称允许 SSH

配置 UFW 允许传入 SSH 连接的另一种方法是通过引用其服务名称:ssh

sudo ufw allow ssh
已添加规则
已添加规则(v6)

UFW 根据 /etc/services 文件知道服务使用的端口和协议。

允许使用端口号进行 SSH 连接

另一种方法是通过指定端口而不是应用程序配置文件或服务名称来编写等效规则。例如,以下命令与前面的示例具有相同的功能:

sudo ufw allow 22

规则已添加
规则已添加 (v6)

如果你配置了 SSH 守护程序使用不同的端口,你需要指定相应的端口。例如,如果你的 SSH 服务器监听在 2222 端口上,你可以使用以下命令允许在该端口上进行连接:

sudo ufw allow 2222

规则已添加
规则已添加 (v6)

现在你的防火墙已配置允许传入的 SSH 连接,你可以启用它。

步骤 4 — 启用 UFW

你的防火墙现在应该已配置允许 SSH 连接。即使防火墙仍处于禁用状态,你可以使用以下命令验证到目前为止添加了哪些规则:

sudo ufw show added

已添加的用户规则(查看正在运行的防火墙,请使用 'ufw status'):
ufw allow OpenSSH

确认已经设置了允许传入 SSH 连接的规则后,你可以使用以下命令启用防火墙:

sudo ufw enable

命令可能会中断现有的 SSH 连接。是否要继续操作 (y|n)? y
防火墙在系统启动时处于活动状态并已启用

你将收到一个警告,指出该命令可能会中断现有的 SSH 连接。由于你已经设置了允许 SSH 连接的防火墙规则,所以继续操作应该是安全的。回应提示输入 y 并按下 ENTER 键。

防火墙现在已激活。运行 sudo ufw status verbose 命令查看设置的规则。本教程的其余部分将详细介绍如何更多地使用 UFW,例如允许或拒绝不同类型的连接。

步骤 5 — 允许其他连接

此时,你应该允许服务器需要响应的所有其他连接。你应该允许的连接取决于你的具体需求。你已经知道如何编写基于应用程序配置文件、服务名称或端口的允许连接规则;你已经为端口 22 上的 SSH 完成了这一点。你还可以为以下服务完成这些操作:

  • 使用 sudo ufw allow httpsudo ufw allow 80 允许端口 80 上的 HTTP,这是未加密的 Web 服务器使用的端口
  • 使用 sudo ufw allow httpssudo ufw allow 443 允许端口 443 上的 HTTPS,这是加密的 Web 服务器使用的端口
  • 使用 sudo ufw allow ‘Apache Full’ 允许 Apache 使用 HTTP 和 HTTPS
  • 使用 sudo ufw allow ‘Nginx Full’ 允许 Nginx 使用 HTTP 和 HTTPS

不要忘记使用 sudo ufw app list 命令检查服务器可用的应用程序配置文件。

除了指定端口或已知服务名称外,还有几种其他允许连接的方法。接下来我们将看到其中一些方法。

指定端口范围

你可以使用 UFW 指定端口范围。一些应用程序使用多个端口,而不是单个端口。

例如,要允许使用端口 6000-6007 的 X11 连接,可以使用以下命令:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

在使用 UFW 指定端口范围时,你必须指定规则应适用的协议(tcpudp)。我们之前没有提到这一点,因为不指定协议会自动允许两种协议,这在大多数情况下都是可以的。

指定 IP 地址

在使用 UFW 时,你还可以在规则中指定 IP 地址。例如,如果你想允许来自特定 IP 地址(例如工作或家庭 IP 地址 203.0.113.4)的连接,你需要使用 from 参数,然后提供你想要允许的 IP 地址:

sudo ufw allow from 203.0.113.4

规则已添加

你还可以通过添加 to any port 后跟端口号来指定 IP 地址允许连接的端口。例如,如果你想允许 203.0.113.4 连接到端口 22(SSH),可以使用以下命令:

sudo ufw allow from 203.0.113.4 to any port 22

规则已添加

子网

如果你想允许 IP 地址的子网,你可以使用 CIDR 表示法指定子网掩码。例如,如果你想允许从 203.0.113.1203.0.113.254 的所有 IP 地址,你可以使用以下命令:

sudo ufw allow from 203.0.113.0/24

规则已添加

同样,你也可以指定子网 203.0.113.0/24 允许连接的目标端口。同样,我们将以端口 22(SSH)为例:

sudo ufw allow from 203.0.113.0/24 to any port 22

规则已添加

连接到特定网络接口

如果你想创建一个仅适用于特定网络接口的防火墙规则,你可以通过指定“allow in on”后跟网络接口的名称来实现。

在继续之前,你可能需要查看你的网络接口。要这样做,使用以下命令:

ip addr
[secondary_label 输出摘录]
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

高亮显示的输出指示了网络接口的名称。它们通常被命名为类似 eth0enp3s2 的名称。

因此,如果你的服务器有一个名为 eth0 的公共网络接口,你可以使用以下命令允许 HTTP 流量(端口 80)通过它:

sudo ufw allow in on eth0 to any port 80

规则已添加
规则已添加(v6)

这样做将允许你的服务器从公共互联网接收 HTTP 请求。

或者,如果你希望你的 MySQL 数据库服务器(端口 3306)监听私有网络接口 eth1 上的连接,你可以使用以下命令:

sudo ufw allow in on eth1 to any port 3306

规则已添加
规则已添加(v6)

这将允许私有网络中的其他服务器连接到你的 MySQL 数据库。

步骤 6 — 拒绝连接

如果你没有更改传入连接的默认策略,UFW 被配置为拒绝所有传入连接。通常,这简化了通过要求你明确允许特定端口和 IP 地址的规则来创建安全防火墙策略的过程。

然而,有时你会希望基于源 IP 地址或子网拒绝特定连接,也许是因为你知道你的服务器正在受到攻击。此外,如果你想将默认传入策略更改为允许(这是不推荐的),你需要为任何你不希望允许连接的服务或 IP 地址创建拒绝规则。

要编写拒绝规则,你可以使用之前描述的命令,将allow替换为deny

例如,要拒绝 HTTP 连接,你可以使用以下命令:

sudo ufw deny http

规则已添加
规则已添加(v6)

或者,如果你想拒绝来自 203.0.113.4 的所有连接,你可以使用以下命令:

sudo ufw deny from 203.0.113.4

规则已添加

在某些情况下,你可能还希望阻止服务器的传出连接。要拒绝所有用户使用服务器上的端口,比如 SMTP 流量的端口 25,你可以使用 deny out 后跟端口号:

sudo ufw deny out 25

规则已添加
规则已添加(v6)

这将阻止服务器上的所有传出 SMTP 流量。

步骤 7 — 删除规则

知道如何删除防火墙规则与知道如何创建它们一样重要。有两种不同的方式来指定要删除的规则:按规则编号或按其人类可读的名称(类似于创建规则时指定的方式)。

按编号删除 UFW 规则

要按编号删除 UFW 规则,首先你需要获取所有防火墙规则的编号列表。UFW 状态命令有一个选项,可以在每个规则旁边显示编号,如下所示:

sudo ufw status numbered
[secondary_label 编号输出:]
状态:active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

如果你决定要删除编号为 2 的规则,即允许端口 80(HTTP)连接的规则,你可以在 UFW 删除命令中指定它,如下所示:

sudo ufw delete 2

删除:
 允许 80
继续操作(y|n)?y
规则已删除

这将提示确认,然后删除规则 2,允许 HTTP 连接。请注意,如果你启用了 IPv6,你也需要删除相应的 IPv6 规则。

按名称删除 UFW 规则

除了使用规则编号,你还可以根据其人类可读的名称引用规则,该名称基于规则类型(通常为allowdeny)和该规则的目标服务名称或端口号,或者在使用的情况下是应用程序配置文件名称。例如,如果你想删除先前启用的名为 Apache Full 的应用程序配置文件的allow规则,你可以使用:

sudo ufw delete allow "Apache Full"

规则已删除
规则已删除(v6)

delete 命令对使用服务名称或端口引用的规则同样适用。例如,如果你之前设置了一个允许 HTTP 连接的规则 sudo ufw allow http,你可以使用以下命令删除该规则:

sudo ufw delete allow http

规则已删除
规则已删除(v6)

因为服务名称在指定规则时与端口号是可互换的,所以你也可以将同一规则称为 allow 80,而不是 allow http

sudo ufw delete allow 80

规则已删除
规则已删除(v6)

按名称删除 UFW 规则时,如果存在,IPv4 和 IPv6 规则都会被删除。

第八步 — 检查 UFW 状态和规则

您可以随时使用以下命令检查 UFW 的状态:

sudo ufw status verbose

如果 UFW 处于禁用状态(默认情况下是这样),您将看到类似以下内容:

状态:未激活

如果 UFW 处于活动状态(如果您按照第 3 步进行了设置),输出将显示它处于活动状态,并列出任何设置的规则。例如,如果防火墙设置为允许来自任何地方的 SSH(端口 22)连接,输出可能如下所示:

状态:活动
日志记录:开启(低)
默认:拒绝(传入),允许(传出),禁用(路由)
新配置文件:跳过

目标      动作        来自
--        ------      ----
22/tcp    允许进入    任何地方

如果您想要检查 UFW 如何配置防火墙,可以使用 status 命令。

第九步 — 禁用或重置 UFW(可选)

如果您决定不使用 UFW,可以使用以下命令禁用它:

sudo ufw disable

防火墙已停止并在系统启动时禁用

您创建的任何规则将不再生效。如果以后需要激活它,可以随时运行 sudo ufw enable

如果您已经配置了 UFW 规则,但决定重新开始,可以使用重置命令:

sudo ufw reset

重置所有规则为安装默认值。这可能会中断现有的 SSH 连接。是否继续操作(y|n)?y
将 'user.rules' 备份到 '/etc/ufw/user.rules.20210729_170353'
将 'before.rules' 备份到 '/etc/ufw/before.rules.20210729_170353'
将 'after.rules' 备份到 '/etc/ufw/after.rules.20210729_170353'
将 'user6.rules' 备份到 '/etc/ufw/user6.rules.20210729_170353'
将 'before6.rules' 备份到 '/etc/ufw/before6.rules.20210729_170353'
将 'after6.rules' 备份到 '/etc/ufw/after6.rules.20210729_170353'

这将禁用 UFW 并删除先前定义的任何规则。这将为您提供 UFW 的全新开始。请记住,如果您在任何时候修改了默认策略,它们的默认设置不会更改。

结论

您的防火墙现在已配置为允许(至少)SSH 连接。请确保允许服务器需要的任何其他传入连接,同时限制任何不必要的连接,以确保服务器功能正常且安全。

要了解更多常见的 UFW 配置,请查看 UFW 基础知识:常见防火墙规则和命令教程。


原文地址:https://blog.csdn.net/rubys007/article/details/143277329

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!