如何在 Ubuntu 20.04 LTS 上使用 UFW 配置防火墙
UFW 是“简单防火墙”的缩写。使用简单防火墙保护网络非常简单,强烈推荐。本页介绍如何使用 ufw 设置和保护您的 Ubuntu 20.04 LTS 服务器。
教程要求 | |
---|---|
要求 | Ubuntu Linux 20.04 LTS |
Root 权限 | 是的 |
难度等级 | 简单的 |
类别 | 防火墙 |
先决条件 | ufw 命令 |
预计阅读时间 | 7 分钟 |
步骤 1 - 设置默认 UFW 策略
要查看 ufw 的状态,请输入:
$ sudo ufw status
示例输出:
Status: inactive
默认策略防火墙对服务器和桌面都非常有用。关闭服务器上的所有端口并逐个打开所需的端口始终是一个好策略。让我们阻止所有传入连接并仅允许来自 Ubuntu 20.04 LTS 框的传出连接:
$ sudo ufw default allow outgoing
$ sudo ufw default deny incoming
启用 IPv6 支持
确保文件IPV6=yes中存在该指令/etc/default/ufw。例如:
$ cat /etc/default/ufw
步骤 2 – 打开 SSH TCP 端口 22 连接
下一个合乎逻辑的步骤是允许传入的 SSH 端口。我们可以使用 UFW 轻松打开 SSH TCP 端口 22,如下所示:
$ sudo ufw allow ssh
如果您在 TCP 端口 2222 或 TCP 端口 2323 上运行 ssh,请输入:
某些系统管理员在家中或办公室位置拥有静态 IP 地址(例如 202.54.2.5)。在这种情况下,仅允许从静态 IP 地址(例如 202.54.2.5)到 Ubuntu 服务器 IP 地址 172.24.13.45 的 ssh 访问:
但是如何在 Ubuntu 服务器上找到我的静态 IP 202.54.2.5?尝试w 命令或 lastlog 命令:
这是我看到的:
$ sudo ufw allow 2222/tcp
$ sudo ufw allow 2323/tcp
$ sudo ufw allow proto tcp from 202.54.2.5 to 172.24.13.45 port 22
$ w
$ lastlog -u {YOUR_ADMIN_LOGIN_NAME_HERE}
$ lastlog -u vivek
Username Port From Latest
vivek pts/0 202.54.2.5 Thu Sep 29 15:19:21 +0000 2022
接下来,让我们限制 ssh 端口,运行:有关更多信息,
$ sudo ufw limit ssh
请参阅“如何在 Ubuntu Linux 上使用 ufw 限制 SSH(TCP 端口 22)连接”。
步骤 3 – 打开防火墙
现在我们已启用基本配置。换句话说,防火墙将丢弃除 ssh TCP 端口 22 之外的所有传入流量。让我们在 UFW 上验证它,输入:
$ sudo ufw enable
请记住,一旦启用 UFW,它也会在整个系统重启后运行。我们可以使用 systemctl 命令轻松地验证这一点:
$ sudo systemctl status ufw.service
想要禁用基于 UFW 的防火墙?尝试
如果您需要停止防火墙并在系统启动时禁用,请输入:
$ sudo ufw disable
示例输出:
Firewall stopped and disabled on system startup
步骤 4 – 打开特定的传入连接/端口
让我们添加更多规则。假设您想使用 ufw 打开端口并允许 IP 地址。打开 TCP 端口 80 和 443 的语法如下:
打开 UDP/1194 (OpenVPN) 服务器:
$ sudo ufw allow 80/tcp comment 'accept Apache'
$ sudo ufw allow 443/tcp comment 'accept HTTPS connections'
$ sudo ufw allow 1194/udp comment 'OpenVPN server'
通过 ufw 允许端口范围
我们也可以允许端口范围,比如 tcp 和 udp 3000 到 4000:
在这个例子中,您想要允许来自 IP 地址 104.22.10.214 的所有连接,输入:
让我们允许来自 IP 地址 104.22.11.213 的连接到我们的端口 25,输入:
我们也可以为端口 25 设置目标 IP 222.222.222.222:
$ sudo ufw allow 3000:4000/tcp
$ sudo ufw allow 3000:4000/udp
$ sudo ufw allow from 104.22.10.214
$ sudo ufw allow from 104.22.11.213 to any port 25 proto tcp
$ sudo ufw allow from 104.22.11.213 to 222.222.222.222 port 25 proto tcp
允许特定接口上的连接
仅为 wg0 接口打开端口 22:
假设您想允许从 10.105.28.22 连接到 lxdbr0 接口上的 TCP 端口 3306,然后添加:
让我们添加子/网络而不是单个 IP 地址:
$ sudo ufw allow in on wg0 to any port 22
$ sudo ufw allow in on lxdbr0 from 10.105.28.22 to any port 3306 proto tcp
$ sudo ufw allow in on lxdbr0 from 10.105.28.0/24 to any port 3306 proto tcp
步骤 5 - 阻止并拒绝传入连接/端口
您想关闭端口并阻止某些 IP 地址吗?拒绝访问的语法如下。换句话说,只是忽略对端口 25 的访问:
$ sudo ufw deny 25/tcp
确保我们拒绝来自名为 203.5.1.43 的 IP 地址的所有连接,输入:
$ sudo ufw deny from 203.5.1.43
拒绝来自名为 103.13.42.13/29 的 IP/子网的所有连接,输入:
$ sudo ufw deny from 103.13.42.13/29
想要拒绝对端口 22 上的 1.1.1.2(比如坏人的 IP)的访问吗?尝试:
$ sudo ufw deny from 1.1.1.2 to any port 22 proto tcp
步骤 6 – 验证 UFW 的状态
使用状态命令如下:
$ sudo ufw status
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere # accept Apache 443/tcp ALLOW Anywhere # accept HTTPS connections 1194/udp ALLOW Anywhere # OpenVPN server 3000:4000/tcp ALLOW Anywhere 3000:4000/udp ALLOW Anywhere Anywhere ALLOW 104.22.10.214 25/tcp ALLOW 104.22.11.213 222.222.222.222 25/tcp ALLOW 104.22.11.213 Anywhere DENY 203.5.1.43 Anywhere DENY 103.13.42.8/29 22/tcp DENY 1.1.1.2 22/tcp (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) # accept Apache 443/tcp (v6) ALLOW Anywhere (v6) # accept HTTPS connections 1194/udp (v6) ALLOW Anywhere (v6) # OpenVPN server 3000:4000/tcp (v6) ALLOW Anywhere (v6) 3000:4000/udp (v6) ALLOW Anywhere (v6)
想要详细输出?尝试:
$ sudo ufw status verbose
Ubuntu 20.04 LTS UFW 删除规则
到目前为止,我们学习了如何添加、拒绝和列出防火墙规则。现在是时候删除不需要的规则了。语法如下,以编号列表格式列出所有当前规则:
$ sudo ufw status numbered
Status: active To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN Anywhere [ 2] 80/tcp ALLOW IN Anywhere # accept Apache [ 3] 443/tcp ALLOW IN Anywhere # accept HTTPS connections [ 4] 1194/udp ALLOW IN Anywhere # OpenVPN server [ 5] 3000:4000/tcp ALLOW IN Anywhere [ 6] 3000:4000/udp ALLOW IN Anywhere
要删除第 6 条规则,请输入命令:有关更多信息,
请参阅如何在 Ubuntu/Debian Linux 教程中删除 UFW 防火墙规则。
$ sudo ufw delete 6
$ sudo ufw status numbered
使用 UFW 配置防火墙的其他命令
让我们学习几个更重要的命令。
重置 ufw
$ sudo ufw reset
重新加载 ufw
$ sudo ufw reload
查看防火墙日志
默认情况下,所有 UFW 条目都记录到 /var/log/ufw.log 文件中。使用grep /more/tail 命令和其他命令查看 ufw 日志:
让我们打印出所有试图通过 SSH 端口登录但被 UFW 丢弃的 IP 地址列表:
$ sudo more /var/log/ufw.log
$ sudo tail -f /var/log/ufw.log
grep 'DPT=22' /var/log/ufw.log |\ egrep -o 'SRC=([0-9]{1,3}[\.]){3}[0-9]{1,3}' |\ awk -F'=' '{ print $2 }' | sort -u
显示规则列表
类型:输出:
$ sudo ufw show listening
$ sudo ufw show added
Added user rules (see 'ufw status' for running firewall): ufw allow from 10.8.0.0/24 to 10.8.0.1 port 22 proto tcp ufw allow from 10.8.0.0/24 to 10.8.0.1 port 3128 proto tcp ufw allow from 1t9.xxx.yyy.zzz to 1y2.aaa.bbb.ccc port 22 proto tcp
使用 ufw 设置 IP 伪装
首先编辑/etc/ufw/sysctl.conf并确保您有以下行:
接下来在 /etc/ufw/before.rules/file] 的顶部添加,在 10.0.0.0/8 和 wg0 接口的 *filter 部分之前:
net/ipv4/ip_forward=1
# IPv6
#net/ipv6/conf/default/forwarding=1
#net/ipv6/conf/all/forwarding=1
*nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.0.0.0/8 -o wg0 -j MASQUERADE COMMIT
保存并关闭文件。最后,添加 ufw 路由以允许流量:有关更多信息,
$ sudo ufw route allow in on eth0 out on wg0 from 10.0.0.0/8
请参阅“如何配置 ufw 将端口 80/443 转发到 LAN 上托管的内部服务器”。
设置出口过滤
假设您想要阻止 RFC1918 地址从连接到 Internet 的 VM 上的 eth0 接口发出。添加规则ufw route以拒绝流量:
$ sudo ufw route reject out on eth0 to 10.0.0.0/8 comment 'RFC1918 reject'
$ sudo ufw route reject out on eth0 to 172.16.0.0/12 comment 'RFC1918 reject'
$ sudo ufw route reject out on eth0 to 192.168.0.0/16 comment 'RFC1918 reject'
结论
在本快速教程中,您学习了如何在 UFW 的帮助下保护您的 Ubuntu Linux 20.04 LTS 服务器或桌面。有关更多信息,请参阅此处的 ufw 帮助页面。
- 在Ubuntu 16.04 LTS服务器上安装 UFW 防火墙
- 在 Ubuntu/Debian Linux 上使用 ufw 打开 ssh 端口 22
- 配置 ufw 将端口 80/443 转发到 LAN 上托管的内部服务器
- 在 Ubuntu Linux 服务器上使用 ufw 阻止 IP 地址
- 在 Ubuntu Linux 上使用 ufw 限制 SSH(TCP 端口 22)连接
- 使用 UFW 的 Ubuntu Linux 防火墙打开端口命令
- 在 Ubuntu/Debian Linux 上使用 ufw 打开 DNS 端口 53
- 在Ubuntu 18.04上使用 UFW 设置防火墙
- 删除 UFW 防火墙规则
- 在Ubuntu 20.04 LTS上使用 UFW 配置防火墙
- 向 UFW 规则添加评论
- Ubuntu 22.04 LTS 5 分钟设置 UFW 防火墙