在Ubuntu中使用UFW配置防火墙

简介

UFW (uncomplicated firewall) 是 Ubuntu 默认的防火墙配置工具。为了简化 iptables 防火墙的配置,ufw 提供了一种友好的方式来创建基于 IPv4 或 IPv6 主机的防火墙。

在 Ubuntu 中,ufw 默认是禁用状态。

在 Arch 和 Debian 中,需要先安装 ufw:

# Arch
sudo pacman -S ufw
sudo systemctl start ufw
sudo systemctl enable ufw

# Debian
sudo apt-get install ufw

基本语法和规则

启用和禁用 ufw

启用 ufw,默认情况下,防火墙规则为:除一些默认的例外端口,传入流量-deny,传出流量-allow。

sudo ufw enable

查看 ufw 状态(按添加顺序排列,越早添加的规则优先级越高):

sudo ufw status verbose

禁用 ufw:

sudo ufw disable

查看原始配置,也可以查看 /etc/ufw/ 目录中以 .rules 结尾的文件。

sudo ufw show raw

设置规则

设置 allow 规则

sudo ufw allow <port>/<optional:protocol>

示例:允许 53 端口传入 tcp 和 udp 数据包

sudo ufw allow 53

示例:只允许 53 端口传入 tcp 数据包

sudo ufw allow 53/tcp

示例:只允许 53 端口传入 udp 数据包

sudo ufw allow 53/udp

设置 deny 规则

sudo ufw deny <port>/<optional: protocol>

示例:禁止 53 端口传入 udp 数据包

sudo ufw deny 53/udp

设置默认规则

sudo ufw default allow outgoing
sudo ufw default deny incoming

删除规则

要删除规则,只需在原始规则前加上 delete 命令。例如,原始规则命令是:

sudo ufw deny 80/tcp

那么删除这条规则的命令是:

sudo ufw delete deny 80/tcp

通过服务名称设置规则

也可以使用服务名称来设置和删除规则。ufw 会从 /etc/services 中读取服务列表。

示例:设置 allow 规则允许 SSH 服务端口

sudo ufw allow ssh

注意:如果更改了服务的默认端口号,要使用实际端口号,而不是服务名称来设置规则。

日志

启用日志记录:

sudo ufw logging on

关闭日志记录:

sudo ufw logging off

设置日志级别,默认为 low

sudo ufw logging low|medium|high

日志文件默认路径为 /var/logs/ufw.log

高级设置

访问规则

允许特定 IP 地址访问:

sudo ufw allow from 127.0.0.1

允许特定子网访问:

sudo ufw allow from 123.45.67.89/24

允许特定 IP 的特定端口访问,destination 可以为 any 表示不限制目的地址。

sudo ufw allow from <target> to <destination> port <port number>

允许特定 IP 的特定端口使用特定协议访问:

sudo ufw allow from <target> to <destination> port <port number> proto <protocol name>

禁止访问规则与上述相似,只要将 allow 替换为 deny 即可。

规则参考编号

查看 ufw 状态时显示规则编号:

sudo ufw status numbered

通过编号删除规则:

sudo ufw delete 1

通过编号插入规则,新规则将会被插入到编号指定位置,方便设置规则的优先级:

sudo ufw insert 1 allow from <ip address>

参考链接

目录