一个被正确配置的防火墙是所有系统安全中最重要的部分。UFW (Uncomplicated Firewall) 是一个用来管理 iptables 防火墙规则的用户友好的前端。它的主要目的就是为了使得管理 iptables 更简单,就像名字所说的,简单的。
本文描述了如何在 Debian 10 上使用 UFW 设置防火墙。
仅仅 root 或者其他有 sudo 权限的用户可以管理系统防火墙。
输入下面的命令,安装ufw
软件包:
sudo apt update
sudo apt install ufw
安装过程不会自动激活防火墙,以避免服务器被锁住。你可以检查 UFW 的状态,输入:
sudo ufw status verbose
输出如下:
Status: inactive
如果 UFW 激活了,输入应该类似下面这样:
默认情况下,UFW 阻塞了所有进来的连接,并且允许所有出去的连接。这意味着任何人无法访问你的服务器,除非你打开端口。运行在服务器上的应用和服务可以访问外面的世界。
默认的策略定义在/etc/default/ufw
文件中,并且可以通过使用sudo ufw default <policy> <chain>
命令来修改。
防火墙策略是用来构建更多详细的和用户自定义的规则的基础。通常情况下,初始的默认策略是一个很好的起点。
大部分应用都附带一份应用配置,它描述了服务,并且包含了 UFW 设置。这个规则在软件包安装的时候,被自动创建在/etc/ufw/applications.d
目录下。
想要列举出你系统上所有的应用配置,输入:
sudo ufw utf --help
与你系统上安装的软件包有关系,输出应该看起来像下面这样:
Available applications:
DNS
IMAP
IMAPS
OpenSSH
POP3
POP3S
Postfix
Postfix SMTPS
Postfix Submission
...
想要查找更多关于指定配置和包含规则的信息,使用app info
命令,加上配置名称。例如,你想要获得 OpenSSH 配置,你可以使用:
sudo ufw app info OpenSSH
输出如下:
Profile: OpenSSH
Title: Secure shell server, an rshd replacement
Description: OpenSSH is a free implementation of the Secure Shell protocol.
Port:
22/tcp
输出包含配置名称,标题,描述,以及防火墙规则。
在启用 UFW 防火墙之前,你需要允许 SSH 连接。
如果你从远程位置访问你的服务器,并且你在明确允许 SSH 连接之前启用 UFW 防火墙,你将永远无法连接到你的 Debian 服务器。
想要配置你的 UFW 防火墙接受 SSH 连接,运行下面的命令:
sudo ufw allow OpenSSH
输出:
Rules updated
Rules updated (v6)
如果 SSh 服务器没有监听默认端口 22,你还需要打开那个端口。
例如,你的 SSH 服务器 监听端口 7722
,你将会执行:
sudo ufw allow 7722/tcp
现在 UFW 防火墙被配置允许 SSH 远程连接,启用它,输入:
sudo ufw enable
输出:
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
你将会被警告启用防火墙可能会中断现有的 SSH 连接,输入"y”,并且回车。
取决于运行在你服务器上的应用,你需要根据服务打开不同的端口。
下面是几个例子,用来演示如何允许对最常用的服务的连接。
允许 HTTP 连接:
sudo ufw allow http
除了使用http
,你还可以使用端口号码,80
:
sudo ufw allow 80/tcp
允许 HTTPS 连接:
sudo ufw allow https
你还可以使用端口号码,443
:
sudo ufw allow 443/tcp
如果你运行 Tomcat 或者其他监听8080
端口的应用,打开这个端口:
sudo ufw allow 8080/tcp
使用 UFW,你可以允许一个端口访问的访问。当你打开一个端口访问,你需要指定端口的协议。
例如想要允许端口从7100
到7200
同时支持tcp
和udp
,运行下面的命令:
sudo ufw allow 7100:7200/tcp
sudo ufw allow 7100:7200/udp
想要允许指定 IP 地址访问所有的端口,使用ufw allow from
命令,加上 IP 地址:
sudo ufw allow from 64.63.62.61
想要允许指定端口,比如从你 IP 地址64.63.62.61
的工作机器访问22
端口,使用下面的命令:
sudo ufw allow from 64.63.62.61 to any port 22
允许一个子网 IP 地址的访问和允许一个单个 IP 地址的访问,命令是一样的。唯一的不同是需要指定网络掩码。例如,如果你想要允许 IP 地址(192.168.1.1 到 192.168.1.254),通过 3360(MySQL),你可以使用这个命令:
sudo ufw allow from 192.168.1.0/24 to any port 3306
想要允许指定端口,比如指定网络接口eth2
访问3360端口,使用allow in on
和 网络接口的名字:
sudo ufw allow in on eth2 to any port 3306
对于所有进来连接的默认的策略被设置为deny
,它代表 UFW 将会屏蔽所有进来的连接,除非你指定打开连接。
比如说你打开了端口80
和443
,并且你的服务器处于来自23.24.25.0/24
网络的攻击。想要禁止来自23.24.25.0/24
的所有连接,使用下面的命令:
sudo ufw deny from 23.24.25.0/24
如果你仅仅像禁止从23.24.25.0/24
对80
和443
端口的访问,使用:
sudo ufw deny from 23.24.25.0/24 to any port 80
sudo ufw deny from 23.24.25.0/24 to any port 443
编写禁止规则和编写允许规则是一样的。你只需要将allow
替换成deny
。
有两种不同的方式可以删除 UFW 规则。通过规则序号和通过指定的规则。
通过规则序号来删除 UFW 规则很简单,特别是你刚接触 UFW。
想要通过规则序号来删除,你需要找到你想删除的规则序号。想要这么做,运行下面的命令:
sudo ufw status numbered
输出:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 8080/tcp ALLOW IN Anywhere
想要删除规则,序号为3,这个规则允许对端口8080的连接,你可以使用下面的命令:
sudo ufw delete 3
删除规则的第二种方法就是指定实际的规则。例如,如果你添加过一个打开端口8069
的规则,你可以通过下面的命令删除它:
sudo ufw delete allow 8069
如果因为任何原因,你需要停止 UFW,并且使得所有规则失效,你可以运行:
sudo ufw disable
稍后,如果你想重新启用 UFW,并且激活所有规则,输入:
sudo ufw enable
重置 UFW 将会禁用 UFW,删除所有激活的规则。如果你想撤销所有的应用规则,并且重新开始时,这个很有用。
想要重置 UFW,简单输入下面的命令:
sudo ufw reset
你已经学会了如何在你的 Debian 10 机器上安装和配置 UFW 防火墙。在限制所有不必要连接时,请确保系统正常运行所需要的允许进来的连接。