UFW是什么?
UFW(Uncomplicated Firewall)是Arch Linux、Debian或Ubuntu中管理防火墙规则的前端工具。UFW通常在命令行环境下使用(尽管UFW也提供了图形界面),目的是让配置防火墙变得简单(或者说,没那么复杂)。
开始前的准备
- 熟悉入门指南,并按正确步骤设置好Linode的主机名及时区。
- 本指南会尽可能使用
sudo
权限。请阅读文档中保护您的服务器安全章节部分,以创建标准用户账号,加强SSH访问并移除不必要的网络服务。请不要遵循 创建防火墙 章节的指引——本指南将介绍如何使用UFW来控制防火墙,这是iptables命令之外另一种控制防火墙的方法。 - 升级您的系统
Arch Linux
sudo pacman -Syu
Debian / Ubuntu
sudo apt-get update && sudo apt-get upgrade
安装UFW
UFW默认包含在Ubuntu中,但在Arch Linux及Debian中必须手动安装。Debian会自动启动UFW的systemd单元并使其在重启时启动,但Arch Linux并不会这样做。这与告诉UFW启用防火墙规则不同,因为通过systemd或upstart启动UFW只会告诉系统初始化程序启动UFW守护进程。
默认情况下,UFW的规则集为空——因此即使守护进程正在运行,也不会启用任何防火墙规则。启用防火墙规则集的内容将在页面下方进行介绍。
Arch Linux
安装UFW:
sudo pacman -S ufw
启动并启用UFW的systemd单元:
sudo systemctl start ufw
sudo systemctl enable ufw
Debian / Ubuntu
安装UFW
sudo apt-get install ufw
使用UFW管理防火墙规则
设置默认规则
大部分系统只需要一小部分端口为传入连接打开,其余所有端口均关闭。先从简单的基础规则开始,ufw default
命令可用来设置对传入和传出连接的默认响应。要想拒绝所有传入连接并允许所有传出连接,请运行:
sudo ufw default allow outgoing
sudo ufw default deny incoming
ufw default
命令还允许使用reject
参数。
警告
除非有明确的允许规则,否则配置默认拒绝或拒绝规则可能会阻止您退出Linode。在应用默认拒绝或拒绝规则之前,请确保已按照以下部分为SSH和其他关键服务配置了允许规则。
添加规则
可以通过两种方式添加防火墙规则:声明端口号或声明服务名称。
例如,要允许22端口上的传入和传出连接用于SSH,您可以运行:
sudo ufw allow ssh
您还可以运行:
sudo ufw allow 22
同样的,要拒绝某个端口上的流量(本例中为111端口),您只需运行:
sudo ufw deny 111
要进一步微调规则,您还可以允许基于TCP或UDP的数据包通过。以下命令将允许80端口上的TCP数据包通过:
sudo ufw allow 80/tcp
sudo ufw allow http/tcp
而以下命令将允许1725端口上的UDP数据包通过:
sudo ufw allow 1725/ufw
高级规则
除了仅通过指定端口来添加允许或拒绝规则之外,UFW还可让您允许/阻止来自指定IP地址、子网或特定IP地址/子网/端口组合的连接。
允许来自指定IP地址的连接:
sudo ufw allow from 123.45.67.89
允许来自指定子网的连接:
sudo ufw allow from 123.45.67.89/24
允许来自指定IP地址/端口组合的连接:
sudo ufw allow from 123.45.67.89 to any port 22 proto tcp
可根据您的实际需求删除proto tcp
参数或替换为proto udp
,并且如有需要,所有示例中的allow
都可替换为deny
。
删除规则
要想删除规则,请在规则语句前添加delete
。如果您不在希望允许HTTP流量通过,则可运行:
sudo ufw delete allow 80
还可以通过指定服务名称来删除规则。
编辑UFW配置文件
虽然可以通过命令行添加简单的规则,但有些时候也需要添加或删除更加高级或特定的防火墙规则。在运行通过终端输入的规则之前,UFW会首先运行before.rules
文件中的规则,该文件允许本地环回(loopback)、ping以及DHCP通过防火墙。要对这些规则添加修改,请编辑/etc/ufw/before.rules
文件。在相同目录下同样存在一个名为before6.rules
的文件用来对IPv6的规则进行配置。
同样的,还存在after.rule
和after6.rule
文件,用来添加在UFW运行从命令行输入的规则后需要添加的任何规则。
另一个配置文件位于/etc/default/ufw
。在该配置文件中可以禁用或启用IPv6,设置默认规则,还可以设置UFW来管理内置的防火墙链。
UFW状态
您可随时使用sudo ufw status
命令查看UFW的状态信息。这将以列表的形式打印出所有的规则信息,并显示UFW是否处于活跃状态:
sudo ufw status
Status:
To Action From
-- ------ ----
22 ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
启用防火墙
根据您设置的规则,首次运行ufw status
可能会输出Status: inactive
。可通过以下命令启用UFW并强制执行防火墙规则:
sudo ufw enable active
同样的,可通过以下命令禁用防火墙规则:
sudo ufw disable
注意
系统重启后UFW服务仍会启动并运行。
UFW日志
您可使用以下命令启用UFW日志记录:
sudo ufw logging on
日志级别可通过sudo ufw logging low|medium|high
设置,low
、medium
、high
分别对应从低到高的级别,默认级别为low
。
一条正常的日志记录与以下内容类似,它位于/var/logs/ufw
:
Sep 16 15:08:14 <hostname> kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=123.45.67.89 DST=987.65.43.21 LEN=40 TOS=0x00 PREC=0x00 TTL=249 ID=8475 PROTO=TCP SPT=48247 DPT=22 WINDOW=1024 RES=0x00 SYN URGP=0
最开始的值分别表示日期,时间以及您的主机名。其他重要的字段包括:
- [UFW BLOCK]:此位置表示日志描述所定位的位置。本例中,日志是在阻止连接时记录的
- IN:如果该字段有值,表示这是一个传入连接
- OUT:如果该字段有值,表示这是一个传出连接
- MAC:目的MAC地址和源MAC地址的组合
- SRC:数据包的源IP地址
- DST:数据包的目的IP地址
- LEN:数据包长度
- TTL:TTL(Time To Live)包,或称为生存时间。表示在没有找到目的地址的情况下,数据包会在路由器之间传输多久直至过期
- PROTO:数据包的协议
- SPT:数据包的源端口
- DPT:数据包的目标端口
- WINDOW:发送方可以接收的数据包大小
- SYN URGP:表示是否需要三次握手,
0
表示不需要
参考文章