# Ubuntu UFW Command

根据ubuntu官方文档关于UFW命令的介绍 (opens new window),UFW(Uncomplicated Firewall),UFW 旨在简化 iptables 防火墙配置,提供了一种用户友好的方法来创建基于 IPv4 或 IPv6 主机的防火墙。默认情况下,UFW 最初处于禁用状态。从 ufw 手册页:"UFW并不打算通过其命令界面提供完整的防火墙功能,而是提供了一种添加或删除简单规则的简单方法。它目前主要用于基于主机的防火墙"。今天我们来学习一下ufw命令的基础使用。

# 查看UFW防火墙状态

$ sudo ufw status
Status: inactive

查看防火墙详细状态信息

$ sudo ufw status verbose

上面的命令代表ufw命令已安装,但是未激活。如果系统中没有安装 UFW,你可以使用以下命令进行安装:

$ sudo apt update
$ sudo apt install ufw

# 启用 UFW

$  sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

上面命令在开始ufw的同时提示开启防火墙会导致ssh链接断开。这个时候我们先添加允许SSH连接的规则再开起防火墙。

$  sudo ufw allow 22
Rule added
Rule added (v6)

然后执行重启UFW的命令让规则生效

$ sudo ufw reload
Firewall reloaded

# 配置默认策略

在启用 UFW 之后,你需要配置默认的策略。默认情况下,所有的入站都会被拒绝,所有的出站流量都是被允许的。这意味着你需要明确地配置规则来允许特定的流量。你可以根据你的需求选择不同的默认策略。首先使用下面的命令查看防火墙的详细信息。

$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22                         ALLOW IN    Anywhere                  
22 (v6)                    ALLOW IN    Anywhere (v6)       

这会显示当前的 UFW 防火墙配置,包括默认策略。在输出中,你会看到以下信息之一:

  • Default: deny (incoming), allow (outgoing):表示默认策略是拒绝所有入站流量,允许所有出站流量。
  • Default: allow (incoming), deny (outgoing):表示默认策略是允许所有入站流量,拒绝所有出站流量。
  • Default: deny (incoming), deny (outgoing):表示默认策略是拒绝所有入站流量和出站流量。
  • Default: allow (incoming), allow (outgoing):表示默认策略是允许所有入站流量和出站流量。

# 添加规则

要打开端口(在本例中为 SSH),请执行以下操作:

$ sudo ufw allow 22

也可以使用编号格式添加规则:

$ sudo ufw insert 1 allow 80
Rule inserted
Rule inserted (v6)

也可以使用常见的服务名称来添加规则

$ sudo ufw allow openSSH

以下是一些ufw常见的服务别名的示例:

  • OpenSSH: 允许SSH远程访问,默认端口是22。
  • HTTP: 允许HTTP流量,默认端口是80。
  • HTTPS: 允许HTTPS安全HTTP流量,默认端口是443。
  • FTP: 允许FTP文件传输,默认端口是21。
  • SMTP: 允许SMTP邮件传输,默认端口是25。
  • IMAP: 允许IMAP电子邮件访问,默认端口是143。
  • POP3: 允许POP3电子邮件访问,默认端口是110。
  • DNS: 允许DNS域名解析,默认端口是53。
  • NTP: 允许网络时间协议(NTP)流量,默认端口是123。
  • Samba: 允许Samba文件共享服务,默认端口是139。
  • Squid: 允许Squid代理服务器,默认端口是3128。
  • MySQL: 允许MySQL数据库服务,默认端口是3306。
  • PostgreSQL: 允许PostgreSQL数据库服务,默认端口是5432。
  • Redis: 允许Redis数据库服务,默认端口是6379。
  • MongoDB: 允许MongoDB数据库服务,默认端口是27017。
  • BitTorrent: 允许BitTorrent文件共享服务,默认端口是6881。

也可以允许从特定主机或网络访问端口。以下示例允许从主机 192.168.0.2 通过 SSH 访问此主机上的任何 IP 地址:

$ sudo ufw allow proto tcp from 192.168.0.2 to any port 22

将 192.168.0.2 替换为 192.168.0.0/24 以允许从整个子网进行 SSH 访问。

$ sudo ufw allow proto tcp from 192.168.0.0/24 to any port 22

# 关闭打开的端口

$ sudo ufw deny 22

# 删除规则

$ sudo ufw delete deny 22

# 禁用 UFW

$ sudo ufw disable

# 重启 UFW

$ sudo ufw reload

# --dry-run

将 –dry-run 选项添加到 ufw 命令将输出生成的规则,但不会应用它们。例如,以下是打开 HTTP 端口时将应用的内容:

$ sudo ufw --dry-run allow http

# UFW应用集成

打开端口的应用程序可以包含 ufw 配置文件,该配置文件详细说明了应用程序正常运行所需的端口。配置文件保留在 中 /etc/ufw/applications.d ,如果默认端口已更改,则可以对其进行编辑。

# 要查看哪些应用程序安装了配置文件,请在终端中输入以下内容:

$ sudo ufw app list
Available applications:
  OpenSSH
$ ll /etc/ufw/applications.d/
total 12
drwxr-xr-x 2 root root 4096 Apr 21  2022 ./
drwxr-xr-x 3 root root 4096 Apr 21  2022 ../
-rw-r--r-- 1 root root  145 Feb 26  2022 openssh-server

与允许流量流向端口类似,使用应用程序配置文件是通过输入以下内容来完成的:

$ sudo ufw allow Samba

扩展语法也可用:

$ sudo ufw allow from 192.168.0.0/24 to any app Samba

要查看有关为应用程序定义了哪些端口、协议等的详细信息,请输入:

$ sudo ufw app info Samba