UFW,即简单防火墙,是一个接口iptables
旨在简化配置防火墙的过程。尽管iptables
虽然是一个可靠且灵活的工具,但对于初学者来说,学习如何使用它来正确配置防火墙可能会很困难。如果您希望开始保护您的网络,并且不确定使用哪个工具,那么 UFW 可能是您的正确选择。
本教程将向您展示如何在 Ubuntu 14.04 上使用 UFW 设置防火墙。
在开始使用本教程之前,您应该在 Ubuntu 服务器上设置一个单独的非 root 超级用户帐户(具有 sudo 权限的用户)。您可以通过至少完成中的步骤 1-3 来了解如何执行此操作使用 Ubuntu 14.04 进行初始服务器设置教程。
Ubuntu 上默认安装 UFW。如果由于某种原因被卸载,您可以使用以下命令安装它apt-get
:
-
sudo apt-get install ufw
如果您的 Ubuntu 服务器启用了 IPv6,请确保 UFW 配置为支持 IPv6,以便除了 IPv4 之外,它还能管理 IPv6 的防火墙规则。为此,请使用您喜欢的编辑器打开 UFW 配置。我们将使用纳米:
-
sudo nano/etc/默认/ufw
然后确保“IPV6”的值等于“yes”。它应该看起来像这样:
/etc/default/ufw 摘录
...
IPV6=yes
...
保存并退出。打Ctrl-X
退出文件,然后Y
保存您所做的更改,然后ENTER
确认文件名。
启用 UFW 后,它将配置为写入 IPv4 和 IPv6 防火墙规则。
本教程是针对 IPv4 编写的,但只要启用 IPv6,它也能正常工作。
您可以随时使用以下命令检查 UFW 的状态:
-
sudoufw 状态详细
默认情况下,UFW 处于禁用状态,因此您应该看到如下内容:
Output:
Status: inactive
如果 UFW 处于活动状态,输出会显示它处于活动状态,并且会列出已设置的所有规则。例如,如果防火墙设置为允许来自任何地方的 SSH(端口 22)连接,则输出可能如下所示:
Output:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
因此,如果您需要检查 UFW 如何配置防火墙,请使用 status 命令。
在启用 UFW 之前,我们需要确保您的防火墙配置为允许您通过 SSH 连接。让我们从设置默认策略开始。
如果您刚刚开始使用防火墙,首先要定义的规则是默认策略。这些规则控制如何处理未明确匹配任何其他规则的流量。默认情况下,UFW 设置为拒绝所有传入连接并允许所有传出连接。这意味着任何试图访问您的云服务器的人都将无法连接,而服务器内的任何应用程序都可以访问外部世界。
让我们将您的 UFW 规则设置回默认值,这样我们就可以确保您能够按照本教程进行操作。要设置 UFW 使用的默认值,请使用以下命令:
-
sudoufw 默认拒绝传入
-
sudoufw 默认允许传出
正如您可能已经猜到的,这些命令将默认值设置为拒绝传入连接并允许传出连接。这些防火墙默认设置本身可能足以满足个人计算机的需求,但服务器通常需要响应来自外部用户的传入请求。我们接下来会研究这个。
如果我们现在启用 UFW 防火墙,它将拒绝所有传入连接。这意味着,如果我们希望服务器响应这些类型的请求,我们将需要创建明确允许合法传入连接(例如 SSH 或 HTTP 连接)的规则。如果您使用云服务器,您可能希望允许传入 SSH 连接,以便您可以连接到并管理您的服务器。
要将服务器配置为允许传入 SSH 连接,您可以使用以下 UFW 命令:
-
sudoUFW 允许ssh
这将创建防火墙规则,允许端口 22 上的所有连接,该端口是 SSH 守护程序侦听的端口。 UFW 知道“ssh”以及一堆其他服务名称的含义,因为它被列为使用端口 22 的服务/etc/services
file.
我们实际上可以通过指定来编写等效规则port而不是服务名称。例如,此命令的作用与上面的命令相同:
-
sudoUFW 允许22
如果您将 SSH 守护程序配置为使用不同的端口,则必须指定适当的端口。例如,如果您的 SSH 服务器正在侦听端口 2222,您可以使用以下命令允许该端口上的连接:
-
sudo ufw allow 2222
现在您的防火墙已配置为允许传入 SSH 连接,我们可以启用它。
要启用 UFW,请使用以下命令:
-
sudo ufw enable
您将收到一条警告,指出“该命令可能会中断现有的 ssh 连接”。我们已经设置了允许 SSH 连接的防火墙规则,因此应该可以继续。响应提示y
.
防火墙现已启用。随意运行sudo ufw status verbose
命令查看设置的规则。
现在您应该允许服务器需要响应的所有其他连接。您应该允许的连接取决于您的具体需求。幸运的是,您已经知道如何编写允许基于服务名称或端口的连接的规则 - 我们已经在端口 22 上为 SSH 做到了这一点。
我们将展示您可能需要允许的一些非常常见的服务示例。如果您有任何其他服务想要允许所有传入连接,请遵循此格式。
可以使用以下命令允许 HTTP 连接(这是未加密的 Web 服务器使用的连接):
-
sudoufw 允许 http
如果您想使用端口号 80,请使用以下命令:
-
sudoUFW 允许80
可以使用以下命令允许 HTTPS 连接(加密 Web 服务器使用的连接):
-
sudoufw 允许 https
如果您想使用端口号 443,请使用以下命令:
-
sudoUFW 允许443
FTP 连接用于未加密的文件传输(您可能无论如何都不应该使用它),可以使用以下命令允许:
-
sudoUFW 允许ftp
如果您想使用端口号 21,请使用以下命令:
-
sudoUFW 允许21/tcp
您可以使用 UFW 指定端口范围。某些应用程序使用多个端口,而不是单个端口。
例如,要允许使用端口 6000-6007 的 X11 连接,请使用以下命令:
-
sudo ufw allow 6000:6007/tcp
-
sudo ufw allow 6000:6007/udp
使用 UFW 指定端口范围时,必须指定协议 (tcp
or udp
)应适用规则。我们之前没有提到这一点,因为不指定协议只是允许两种协议,这在大多数情况下是可以的。
使用 UFW 时,您还可以指定 IP 地址。例如,如果您想要允许来自特定 IP 地址的连接,例如工作或家庭 IP 地址15.15.15.51
,您需要指定“from”,然后指定 IP 地址:
-
sudo ufw allow from 15.15.15.51
您还可以通过在端口号后添加“到任何端口”来指定允许 IP 地址连接的特定端口。例如,如果您想允许15.15.15.51
要连接到端口 22 (SSH),请使用以下命令:
sudo ufw allow from 15.15.15.51 to any port 22
如果要允许 IP 地址子网,可以使用 CIDR 表示法指定网络掩码。例如,如果您想要允许以下范围内的所有 IP 地址:15.15.15.1
to 15.15.15.254
你可以使用这个命令:
-
sudo ufw allow from 15.15.15.0/24
同样,您还可以指定子网的目标端口15.15.15.0/24
被允许连接到。同样,我们将使用端口 22 (SSH) 作为示例:
sudo ufw allow from 15.15.15.0/24 to any port 22
如果要创建仅适用于特定网络接口的防火墙规则,可以通过指定“allow in on”后跟网络接口的名称来实现。
在继续之前,您可能需要查找您的网络接口。为此,请使用以下命令:
-
ip addr
输出摘录:
...
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
...
突出显示的输出表示网络接口名称。它们通常被命名为“eth0”或“eth1”。
因此,如果您的服务器有一个名为的公共网络接口eth0
,您可以使用以下命令允许 HTTP 流量(端口 80)到达它:
-
sudo ufw allow in on eth0 to any port 80
这样做将允许您的服务器接收来自公共 Internet 的 HTTP 请求。
或者,如果您希望 MySQL 数据库服务器(端口 3306)侦听专用网络接口上的连接eth1
,例如,您可以使用以下命令:
-
sudo ufw allow in on eth1 to any port 3306
这将允许您的专用网络上的其他服务器连接到您的 MySQL 数据库。
如果您没有更改传入连接的默认策略,UFW 将配置为拒绝所有传入连接。通常,这要求您创建明确允许特定端口和 IP 地址通过的规则,从而简化了创建安全防火墙策略的过程。然而,有时您会想要根据源 IP 地址或子网拒绝特定连接,也许是因为您知道您的服务器正在受到来自那里的攻击。另外,如果您想将默认传入策略更改为allow(出于安全考虑,不建议这样做),您需要创建deny您不希望允许连接的任何服务或 IP 地址的规则。
来写deny规则,您可以使用我们上面描述的命令,除非您需要将“allow”替换为“deny”。
例如,要拒绝 HTTP 连接,您可以使用以下命令:
-
sudoufw 拒绝 http
或者,如果您想拒绝来自的所有连接15.15.15.51
你可以使用这个命令:
sudo ufw deny from 15.15.15.51
如果您需要帮助编写任何其他内容deny规则,看前面的allow规则并相应地更新它们。
现在我们来看看如何删除规则。
了解如何删除防火墙规则与了解如何创建防火墙规则同样重要。有两种不同的方式指定要删除的规则:按规则编号或按实际规则(类似于创建规则时指定规则的方式)。我们将从按规则编号删除方法,因为如果您是 UFW 的新手,与编写要删除的实际规则相比,它更容易。
如果您使用规则编号删除防火墙规则,您要做的第一件事就是获取防火墙规则列表。 UFW status 命令有一个选项可以显示每个规则旁边的数字,如下所示:
-
sudoUFW 状态编号
编号输出:
Status: 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
这将显示确认提示,然后删除允许 HTTP 连接的规则 2。请注意,如果您启用了 IPv6,您还需要删除相应的 IPv6 规则。
规则编号的替代方法是指定要删除的实际规则。例如,如果你想删除“allow http”规则,你可以这样写:
-
sudo ufw delete allow http
您还可以通过“allow 80”指定规则,而不是通过服务名称:
-
sudo ufw delete allow 80
此方法将删除 IPv4 和 IPv6 规则(如果存在)。
如果您出于某种原因决定不想使用 UFW,可以使用以下命令禁用它:
-
sudoufw 禁用
您使用 UFW 创建的任何规则将不再有效。你可以随时奔跑sudo ufw enable
如果您稍后需要激活它。
如果您已经配置了 UFW 规则,但您决定重新开始,则可以使用重置命令:
-
sudoUFW重置
这将禁用 UFW 并删除之前定义的任何规则。请记住,如果您在任何时候修改默认策略,它们都不会更改为其原始设置。这应该会给你一个 UFW 的新开始。
您的防火墙现在应该配置为允许(至少)SSH 连接。请务必允许您的服务器的任何其他传入连接,同时限制任何不必要的连接,以便您的服务器正常运行且安全。
要了解更常见的 UFW 配置,请查看本教程:UFW 要点:常见防火墙规则和命令
祝你好运!