本文由 简悦 SimpRead 转码, 原文地址 jskcw.com
防火墙是一种用于监视和过滤传入和传出网络流量的工具。它通过定义一组安全规则来确定是允许还是阻止特定流量。
Ubuntu 附带了一个名为 UFW(Uncomplicated Firewall)的防火墙配置工具。它是一个用户友好的前端,用于管理 iptables 防火墙规则。它的主要目标是使管理防火墙更容易,或者顾名思义,使管理变得简单。
本文介绍如何使用 UFW 工具在 Ubuntu 20.04 上配置和管理防火墙。正确配置的防火墙是整个系统安全最重要的方面之一。
先决条件
只有 root 或具有 sudo 权限的用户 才能管理系统防火墙。最佳实践是以 sudo 用户身份运行管理任务。
安装 UFW
UFW 是标准 Ubuntu 20.04 安装的一部分,应该存在于您的系统中。如果由于某种原因未安装,您可以通过键入以下内容安装该软件包:
sudo apt update
检查 UFW 状态
默认情况下禁用 UFW。您可以使用以下命令检查 UFW 服务的状态:
sudo apt install ufw
输出将显示防火墙状态为非活动状态:
sudo ufw status verbose
如果 UFW 被激活,输出将类似于以下内容:
UFW 默认策略
UFW 防火墙的默认行为是阻止所有传入和转发流量并允许所有出站流量。这意味着任何试图访问您的服务器的人都将无法连接,除非您专门打开该端口。在您的服务器上运行的应用程序和服务将能够访问外部世界。
默认策略在/etc/default/ufw
文件中定义,可以通过手动修改文件或使用sudo ufw default <policy> <chain>
命令来更改。
防火墙策略是构建更复杂和用户定义的规则的基础。通常,初始 UFW 默认策略是一个很好的起点。
应用配置文件
应用程序配置文件是 INI 格式的文本文件,用于描述服务并包含服务的防火墙规则。应用程序配置文件是在/etc/ufw/applications.d
安装包期间在目录中创建的。
您可以通过键入以下内容列出服务器上可用的所有应用程序配置文件:
Status: inactive
根据系统上安装的软件包,输出将类似于以下内容:
sudo ufw app list
要查找有关特定配置文件和包含的规则的更多信息,请使用以下命令:
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
输出显示 “Nginx Full” 配置文件打开端口80
和443
.
sudo ufw app info 'Nginx Full'
您还可以为您的应用程序创建自定义配置文件。
启用 UFW
如果您从远程位置连接到 Ubuntu,则在启用 UFW 防火墙之前,您必须明确允许传入的 SSH 连接。否则,您将无法再连接到机器。
要将 UFW 防火墙配置为允许传入 SSH 连接,请键入以下命令:
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server
Ports:
80,443/tcp
sudo ufw allow ssh
如果 SSH 在非标准端口上运行 ,则需要打开该端口。
例如,如果您的 ssh 守护程序侦听 port 7722
,请输入以下命令以允许该端口上的连接:
Rules updated
Rules updated (v6)
现在防火墙已配置为允许传入的 SSH 连接,您可以通过键入以下内容启用它:
sudo ufw allow 7722/tcp
sudo ufw enable
您将收到警告,启用防火墙可能会中断现有的 ssh 连接,只需键入y
并点击Enter
。
开放端口
根据系统上运行的应用程序,您可能还需要打开其他端口。打开端口的一般语法如下:
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
下面是一些关于如何允许 HTTP 连接的方法。
第一个选项是使用服务名称。UFW 检查/etc/services
文件中指定服务的端口和协议:
ufw allow port_number/protocol
您还可以指定端口号和协议:
sudo ufw allow http
当没有给出协议时,UFW 为tcp
和都创建规则udp
。
另一种选择是使用应用程序配置文件;在这种情况下,“Nginx HTTP”:
sudo ufw allow 80/tcp
UFW 还支持使用proto
关键字指定协议的另一种语法:
sudo ufw allow 'Nginx HTTP'
端口范围
UFW 还允许您打开端口范围。开始和结束端口由冒号 ( :
) 分隔,您必须指定协议,或者tcp
或udp
。
例如,如果您想在和上都允许从7100
到到的端口,您可以运行以下命令:7200``tcp``udp
sudo ufw allow proto tcp to any port 80
特定 IP 地址和端口
要允许来自给定源 IP 的所有端口上的连接,请使用from
后跟源地址的关键字。
以下是将 IP 地址列入白名单的示例:
sudo ufw allow 7100:7200/tcp
如果您只想允许给定的 IP 地址访问特定端口,请使用to any port
关键字后跟端口号。
例如,要允许22
从 IP 地址为 的机器访问端口64.63.62.61
,请输入:
sudo ufw allow 7100:7200/udp
子网
允许连接到 IP 地址子网的语法与使用单个 IP 地址时的语法相同。唯一的区别是您需要指定网络掩码。
下面是一个示例,展示了如何允许访问范围从192.168.1.1
到192.168.1.254
到端口3360
( MySQL ) 的 IP 地址:
sudo ufw allow from 64.63.62.61
特定网络接口
要允许特定网络接口上的连接,请使用in on
后跟网络接口名称的关键字:
sudo ufw allow from 64.63.62.61 to any port 22
拒绝连接
所有传入连接的默认策略设置为deny
,如果您没有更改它,UFW 将阻止所有传入连接,除非您专门打开连接。
编写拒绝规则与编写允许规则相同;您只需要使用deny
关键字而不是allow
.
假设您打开了端口80
和443
,并且您的服务器受到23.24.25.0/24
网络攻击。要拒绝来自23.24.25.0/24
您的所有连接,请运行以下命令:
sudo ufw allow from 192.168.1.0/24 to any port 3306
这里是否认只是端口的访问的例子80
,并443
从23.24.25.0/24
您可以使用下面的命令:
sudo ufw allow in on eth2 to any port 3306
删除 UFW 规则
有两种不同的方法可以通过规则编号和指定实际规则来删除 UFW 规则。
按规则编号删除规则更容易,尤其是当您不熟悉 UFW 时。要先按规则编号删除规则,您需要找到要删除的规则编号。要获取编号规则列表,请使用以下ufw status numbered
命令:
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
要删除规则编号3
,即允许连接到端口的规则编号8080
,您可以输入:
sudo ufw status numbered
第二种方法是通过指定实际规则来删除规则。例如,如果您添加了打开端口的规则,则8069
可以使用以下命令将其删除:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 8080/tcp ALLOW IN Anywhere
禁用 UFW
如果出于任何原因您想停止 UFW 并停用所有规则,您可以使用:
sudo ufw delete 3
稍后如果您想重新启用 UTF 并激活所有规则,只需键入:
sudo ufw delete allow 8069
重置 UFW
重置 UFW 将禁用 UFW,并删除所有活动规则。如果您想恢复所有更改并重新开始,这将很有帮助。
要重置 UFW,请键入以下命令:
sudo ufw disable
IP 伪装
IP 伪装是 Linux 内核中 NAT(网络地址转换)的一种变体,它通过重写源和目标 IP 地址和端口来转换网络流量。使用 IP 伪装,您可以允许专用网络中的一台或多台机器使用一台充当网关的 Linux 机器与 Internet 通信。
使用 UFW 配置 IP 伪装涉及几个步骤。
首先,您需要启用 IP 转发。为此,请打开/etc/ufw/sysctl.conf
文件:
sudo ufw enable
查找并取消注释以下行net.ipv4.ip_forward = 1
:
/etc/ufw/sysctl.conf
接下来,您需要配置 UFW 以允许转发数据包。打开 UFW 配置文件:
sudo ufw reset
找到DEFAULT_FORWARD_POLICY
键,并将值从 更改DROP
为ACCEPT
:
/etc/default/ufw
sudo nano /etc/ufw/sysctl.conf
现在您需要为表中的POSTROUTING
链nat
和伪装规则设置默认策略。为此,请打开/etc/ufw/before.rules
文件并附加以黄色突出显示的行,如下所示:
net/ipv4/ip_forward=1
附加以下几行:
/etc/ufw/before.rules
sudo nano /etc/default/ufw
不要忘了替换eth0
的-A POSTROUTING
行相匹配的公共网络接口的名称:
完成后,保存并关闭文件。
最后,通过禁用和重新启用 UFW 来重新加载 UFW 规则:
DEFAULT_FORWARD_POLICY="ACCEPT"
结论
我们已经向您展示了如何在 Ubuntu 20.04 服务器上安装和配置 UFW 防火墙。确保允许系统正常运行所需的所有传入连接,同时限制所有不必要的连接。
有关此主题的更多信息,请访问 UFW 手册页 。
如果您有任何疑问,请随时在下面发表评论。