什么是 UFW
UFW,即简单防火墙 Uncomplicated FireWall,是一个管理防火墙规则的前端,大部分 Linux 系统都可以使用。它的目的就是为了使防火墙配置简单而不是复杂。
1.安装
更新
#Arch Linux
pacman -Syu
#Debian / Ubuntu
apt-get update && sudo apt-get upgrade
在 Arch Linux 安装
pacman -S ufw
在 Debian / Ubuntu 安装
apt-get install ufw
在Ubuntu中,UFW默认已经安装好了,但在Arch 和 Debian 中需要手动安装。
默认UFW的规则是放通全部端口,即使你已经打开它并且后台运行了,它也不会强制执行任何防火墙规则,新增防火墙规则的部分在下面。
在 centos7 安装
安装 EPEL源
yum -y install epel-release
安装
yum -y install ufw
设置默认规则
一般情况下只需要打开少量端口允许入站就可保证服务的正常使用了。我们先从默认规则开始,ufw default
命令是设置UFW对传入传出连接的默认响应动作,我们首先设置拒绝所有传入并允许所有传出。
ufw default allow outgoing
ufw default deny incoming
警告!
请勿运行上述命令后直接应用,否则会直接锁定你的服务器。确保在应用默认规则前放通了SSH和其他关键服务的端口。
添加基本规则
有两种方式添加规则: 端口号或服务名。
例如要允许 SSH 的22 端口的传入传出连接,你可以运行:
ufw allow ssh
或者是:
ufw allow 22
同样,如果你要阻止特定端口上的流量,例如1234,你可运行:
ufw deny 1234
为了适应不同的需求,你还可以设置基于TCP或UPD的规则,例如允许80端口的TCP传入传出连接:
ufw allow 80/tcp
ufw allow http/tcp
下面的例子会允许来自 2000 端口上的 TCP 包:
ufw allow 2000/udp
允许多个(TCP或 UDP)端口
ufw allow 22,25,80,443,9000/tcp
或者,您可以通过这种方式添加一定范围的端口
ufw allow 9009:9013/tcp
添加高级规则
除了简单的基于端口或协议的规则,UFW 还允许按照IP地址、子网、端口、协议的不同组合来设置高级规则。
例如允许从一个IP连接:
ufw allow from 192.168.1.1
允许特定子网的连接:
ufw allow from 192.168.1.0/24
允许 IP + 端口 + 协议的组合:
ufw allow from 192.168.1.1 to any port 80 proto tcp
所有例子的allow
都可以根据需求改为deny
,proto tcp
也可以根据你的需求改为proto udp
ipv6 规则设置
允许所有IPV6地址连接
ufw allow from ::/0
允许一个IPV6地址连接
ufw allow from 2409:8a25:d4ba:2b91:216:3cff:fe28:7351
允许一个IPV6 段地址连接
ufw allow from 2409:3a55:d4ba::/0
允许 IP + 端口 + 协议的组合:
运行所有IPV6地址连接 连接某个端口
ufw allow from ::/0 to any port 6699
允许一个IPV6地址连接 连接某个端口
ufw allow from 2409:8a25:d4ba:2b91:216:3cff:fe28:7351 to any port 6699
允许一个IPV6 段地址连接 连接某个端口
ufw allow from 2409:8a25:d4ba::/0 to any port 6699
删除规则
要删除某一条规则,就在相应的规则前加入delete
。例如你想要拒绝 HTTP 的流量你可以运行:
ufw delete allow 80
同样的,可以使用服务名删除规则。
还有另一种方法删除规则,首先运行命令:
ufw status numbered
它会将所有正在使用的规则列出来,并且前面标上了序号例如:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 25/tcp ALLOW IN Anywhere
[ 3] 80/tcp ALLOW IN Anywhere
[ 4] 443/tcp ALLOW IN Anywhere
[ 5] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 25/tcp (v6) ALLOW IN Anywhere (v6)
[ 7] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 8] 443/tcp (v6) ALLOW IN Anywhere (v6)
如果你想要删除某一个规则,输入sudo ufw delete [规则号码]
即可,例如:
ufw delete 2
#就会删除 [ 2] 25/tcp ALLOW IN Anywhere
编辑 UFW 的配置文件
虽然可以直接通过命令行添加规则,但是如果你有需要添加更高级或特殊的规则可以编辑配置文件,UFW 有三个配置文件。
before.rules
/etc/ufw/before.rules
,在运行你通过命令行设置的规则【前】运行的任何规则。同目录中的 before6.rules
文件用于 IPv6 。
after.rules
/etc/ufw/after.rules
,在运行你通过命令行设置的规则【后】运行的任何规则。同目录中的 after6.rules
文件用于 IPv6 。
默认配置文件
/etc/default/ufw
,从此处可以设置是否启用 IPv6,可以设置默认规则,并可以设置 UFW 以管理内置防火墙链。
查看 UFW 状态
查看 UFW 状态。该命令会显示所有规则列表,以及当前是否激活。
ufw status
启用关闭防火墙
当你设定好规则后,第一次运行ufw status
可能会提示Status: inactive
。这时候就要使用以下命令激活防火墙规则了。
ufw enable
禁用防火墙规则使用以下命令:
ufw disable
日志
如需启用日志记录,使用以下命令:
ufw logging on
启用日志后可以使用 sudo ufw logging low|medium|high
设置日志级别,默认是low
。
日志文件储存在 /var/logs/ufw
,一般长得像下面一样:
Nov 20 20:13:21 <hostname> kernel: [UFW BLOCK] IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=1.1.1.1 DST=2.2.2.2 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 地址的组合
SRC: 包源的 IP
DST: 包目的地的 IP
LEN: 数据包长度
TTL: 数据包 TTL,或称为 time to live。 在找到目的地之前,它将在路由器之间跳跃,直到它过期。
PROTO: 数据包的协议
SPT: 包的源端口
DPT: 包的目标端口
WINDOW: 发送方可以接收的数据包的大小
SYN URGP: 指示是否需要三次握手。 0 表示不需要。
原文:https://tstrs.me/1480.html