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

介绍

UFW,或不复杂的防火墙,是iptables的界面,旨在简化配置防火墙的过程.虽然iptables是一个坚实和灵活的工具,但初学者可能很难学习如何正确地配置防火墙。

本教程将向您展示如何在Ubuntu 14.04上设置防火墙。

前提条件

在您开始使用本教程之前,您应该在 Ubuntu 服务器上设置一个独立的非 root 超级用户帐户 - 一个具有 sudo 权限的用户。

UFW 默认安装在 Ubuntu 上. 如果它因某种原因被卸载,您可以使用 apt-get 安装它:

1sudo apt-get install ufw

使用IPv6与UFW

如果您的 Ubuntu 服务器已启用 IPv6,请确保 UFW 已配置为支持 IPv6,以便管理 IPv6 的防火墙规则以及 IPv4。

1sudo nano /etc/default/ufw

然后确保IPV6的值等于

1[label /etc/default/ufw excerpt]
2...
3IPV6=yes
4...

按「Ctrl-X」來退出檔案,然後按「Y」來保存您所做的更改,然後按「ENTER」來確認檔案名稱。

当 UFW 启用时,它将配置为写入 IPv4 和 IPv6 防火墙规则。

这个教程是用IPv4写的,但只要你允许它,IPv6就很好。

查看 UFW 状态和规则

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

1sudo ufw status verbose

默认情况下,UFW被禁用,所以你应该看到这样的东西:

1[secondary_label Output:]
2Status: inactive

如果 UFW 是活跃的,输出将表示它是活跃的,并将列出设置的任何规则,例如,如果防火墙设置为允许 SSH (端口 22) 连接从任何地方,输出可能会看起来像这样:

1[secondary_label Output:]
2Status: active
3Logging: on (low)
4Default: deny (incoming), allow (outgoing), disabled (routed)
5New profiles: skip
6
7To Action From
8--                         ------      ----
922/tcp ALLOW IN Anywhere

因此,如果您需要检查UFW如何配置防火墙,请使用状态命令。

在启用 UFW 之前,我们希望确保您的防火墙配置为允许您通过 SSH 连接。

设置默认政策

如果你刚刚开始使用防火墙,第一个要定义的规则是你的默认策略. 这些规则控制如何处理不明确匹配任何其他规则的流量。 默认情况下,UFW 设置为拒绝所有传入连接,并允许所有传出连接。

让我们将您的 UFW 规则重新设置为默认值,以便我们可以确定您将能够跟随本教程。

1sudo ufw default deny incoming
2sudo ufw default allow outgoing

正如你可能已经猜到的那样,这些命令设置了默认值,以拒绝传入并允许传出连接. 这些防火墙默认值本身可能对个人计算机来说足够,但服务器通常需要响应来自外部用户的传入请求。

允许 SSH 连接

如果我们现在启用了我们的 UFW 防火墙,它将拒绝所有接入连接,这意味着我们需要创建明确允许合法的接入连接的规则(例如,SSH 或 HTTP 连接),如果我们希望我们的服务器响应这些类型的请求。

要配置您的服务器允许接入的 SSH 连接,您可以使用以下 UFW 命令:

1sudo ufw allow ssh

这将创建防火墙规则,允许所有连接在端口22上,这是SSH大卫倾听的端口。UFW知道什么是ssh,以及一大堆其他服务名称,因为它列为在/etc/services文件中使用端口22的服务。

实际上,我们可以通过指定 port而不是服务名称来写出相当规则,例如,这个命令与上面的命令相同:

1sudo ufw allow 22

例如,如果您的 SSH 服务器正在倾听 2222 端口,您可以使用以下命令允许该端口连接:

1sudo ufw allow 2222

现在您的防火墙已配置为允许接入SSH连接,我们可以启用它。

允许 UFW

要启用 UFW,请使用此命令:

1sudo ufw enable

您将收到一个警告,说命令可能会扰乱现有 ssh 连接。我们已经设置了一个防火墙规则,允许 SSH 连接,所以应该继续正常。

防火墙现在活跃. 请自由运行sudo ufw status verbose命令,查看已设置的规则。

允许其他连接

现在,您应该允许所有其他服务器需要响应的连接。 您应该允许的连接取决于您的具体需求。 幸运的是,您已经知道如何编写允许基于服务名称或端口的连接的规则,我们已经为 SSH 在端口 22 上做了这一点。

我们将展示一些您可能需要允许的非常常见服务的示例. 如果您有任何其他服务,您想要允许所有接入连接,请遵循此格式。

HTTP - 端口 80

HTTP 连接,即未加密的 Web 服务器所使用的连接,可以通过此命令允许:

1sudo ufw allow http

如果您更愿意使用端口号(80),请使用以下命令:

1sudo ufw allow 80

HTTPS - 端口 443

HTTPS 连接,这是加密的 Web 服务器使用的,可以通过这个命令允许:

1sudo ufw allow https

如果您更愿意使用端口号443,请使用以下命令:

1sudo ufw allow 443

FTP - 端口 21

FTP连接,用于未加密文件传输(您可能不应该使用),可以通过这个命令允许:

1sudo ufw allow ftp

如果您更愿意使用端口号,21 则使用此命令:

1sudo ufw allow 21/tcp

允许特定的港口范围

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

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

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

在使用 UFW 指定端口范围时,您必须指定该规则应适用于的协议(‘tcp’或 ‘udp’)。

允许特定 IP 地址

例如,如果你想允许从特定 IP 地址连接,例如工作或家庭 IP 地址 15.15.15.51,你需要指定然后 IP 地址:

1sudo ufw allow from 15.15.15.51

您也可以通过添加到任何端口,然后添加端口号来指定某个特定端口,该 IP 地址可以连接到,例如,如果您想要允许 15.15.15.51 连接到端口 22 (SSH),请使用以下命令:

1sudo ufw allow from 15.15.15.51 to any port 22

允许子网

如果您想要允许 IP 地址的子网,您可以使用 CIDR 标注来指定一个 netmask. 例如,如果您想要允许从 15.15.15.1 到 15.15.254 所有的 IP 地址,您可以使用以下命令:

1sudo ufw allow from 15.15.15.0/24

同样,您还可以指定15.15.15.0/24子网允许连接的目标端口。

1sudo ufw allow from 15.15.15.0/24 to any port 22

允许连接到特定网络接口

如果您想要创建一个仅适用于特定网络接口的防火墙规则,则可以通过指定允许启用,然后是网络接口的名称。

您可能想在继续之前搜索您的网络接口,请使用以下命令:

1ip addr
1[secondary_label Output Excerpt:]
2...
32: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
4...
53: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
6...

突出输出表示网络界面名称,它们通常被命名为eth0eth1

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

1sudo ufw allow in on eth0 to any port 80

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

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

1sudo ufw allow in on eth1 to any port 3306

这将允许您私人网络上的其他服务器连接到您的MySQL数据库。

否认连接

如果您尚未更改入口连接的默认策略,则 UFW 会被配置为拒绝所有入口连接,这通常简化了创建安全防火墙策略的过程,要求您创建明确允许特定端口和 IP 地址的规则,但有时您会想要拒绝基于源 IP 地址或子网的特定连接,也许是因为您知道您的服务器正在从那里受到攻击。

要编写 ** deny** 规则,您可以使用我们上面描述的命令,除非您需要用否定代替允许

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

1sudo ufw deny http

或者,如果你想拒绝从15.15.15.51的所有连接,你可以使用这个命令:

1sudo ufw deny from 15.15.15.51

如果您需要帮助编写其他否定规则,只需查看之前的允许规则,并相应地更新它们。

现在让我们来看看如何删除规则。

删除规则

知道如何删除防火墙规则就像知道如何创建它们一样重要. 有两种不同的方式来指定哪些规则要删除:通过规则号码或实际规则(类似于规则创建时的规则)。

规则号码

如果您使用规则号删除防火墙规则,您要做的第一件事是获取防火墙规则列表。

1sudo ufw status numbered
1[secondary_label Numbered Output:]
2Status: active
3
4     To Action From
5     --                         ------      ----
6[ 1] 22 ALLOW IN 15.15.15.0/24
7[ 2] 80 ALLOW IN Anywhere

如果我们决定我们要删除规则2,允许端口80(HTTP)连接的规则,我们可以用UFW删除命令这样指定它:

1sudo ufw delete 2

这会显示一个确认提示,然后删除规则2,允许HTTP连接. 请注意,如果您已启用IPv6,您也希望删除相应的IPv6规则。

根据当前规则

替代数规则是指定要删除的实际规则,例如,如果你想删除允许 http规则,你可以这样写:

1sudo ufw delete allow http

您还可以用允许80来指定规则,而不是用服务名称:

1sudo ufw delete allow 80

此方法将删除IPv4和IPv6规则,如果它们存在。

如何禁用 UFW (可选)

如果您决定不希望因任何原因使用 UFW,您可以使用此命令禁用它:

1sudo ufw disable

您使用 UFW 创建的任何规则将不再活跃,如果需要稍后激活,您可以随时运行sudo ufw 启用

重置 UFW 规则(可选)

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

1sudo ufw reset

这将禁用 UFW 并删除以前定义的任何规则. 请记住,默认策略不会改变到原始设置,如果您在任何时候修改它们。

结论

您的防火墙现在应该配置为允许(至少)SSH连接. 请确保允许任何其他接入连接到您的服务器,同时限制任何不必要的连接,所以您的服务器将功能和安全。

要了解更多常见的 UFW 配置,请参阅本教程: UFW Essentials: Common Firewall Rules and Commands

好运!

Published At
Categories with 技术
comments powered by Disqus