Ubuntu的防火墙是UFW,UFW,即简单防火墙uncomplicated firewall,是一个 Arch Linux、Debian 或 Ubuntu 中管理防火墙规则的前端。 UFW 通过命令行使用(尽管它有可用的 GUI),它的目的是使防火墙配置简单(即不复杂uncomplicated)。
UFW状态
你初始运行 ufw status
可能会输出 Status: inactive
。 启用 UFW 并强制执行防火墙规则:
sudo ufw enable
相似地,禁用 UFW 规则:
sudo ufw disable
UFW 会继续运行,并且在下次启动时会再次启动。
设置默认规则
大多数系统只需要打开少量的端口接受传入连接,并且关闭所有剩余的端口。 从一个简单的规则基础开始,ufw default
命令可以用于设置对传入和传出连接的默认响应动作。 要拒绝所有传入并允许所有传出连接,那么运行:
sudo ufw default allow outgoing
sudo ufw default deny incoming
ufw default
也允许使用 reject
参数。
警告:
除非明确设置允许规则,否则配置默认 deny
或 reject
规则会锁定你的服务器。确保在应用默认 deny
或 reject
规则之前,已按照下面的部分配置了 SSH 和其他关键服务的允许规则。
添加规则
可以有两种方式添加规则:用端口号或者服务名表示。
要允许 SSH 的 22 端口的传入和传出连接,你可以运行:
sudo ufw allow ssh
你也可以运行:
sudo ufw allow 22
为了更好地调整你的规则,你也可以允许基于 TCP 或者 UDP 的包。下面例子会允许 80 端口的 TCP 包:
sudo ufw allow 80/tcp
sudo ufw allow http/tcp
这个会允许 1725 端口上的 UDP 包:
sudo ufw allow 1725/udp
高级规则
除了基于端口的允许或阻止,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
删除规则同样可以使用服务名。
查看规则
查看防火墙状态及规则
sudo ufw status
使用命令sudo ufw status,这将显示ufw防火墙的当前状态(是否启用)以及所有已配置的规则。输出将包括允许的端口、IP地址等信息。
查看带编号的规则
sudo ufw status numbered
使用命令sudo ufw status numbered
,这将列出所有的防火墙规则及其对应的编号。这对于后续管理和修改规则非常有用,因为你可以通过编号来引用特定的规则。
查看原始规则
sudo ufw show raw
使用命令sudo ufw show raw
,这将显示原始的防火墙规则,包括输入、输出和转发规则。这些规则以iptables的格式显示,可以更深入地了解系统的网络连接和数据包过滤情况。
查看已添加的规则
sudo ufw show added
使用命令sudo ufw show added
,这将显示所有已添加的规则,包括端口、协议和操作。这有助于快速查找特定端口的规则信息。
查看默认规则
incoming:入站流量
outgoing:出站流量
routed:转发流量
ufw status verbose
root@ubuntu:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
编辑UFW的配置文件
虽然可以通过命令行添加简单的规则,但仍有可能需要添加或删除更高级或特定的规则。 在运行通过终端输入的规则之前,UFW 将运行一个文件 before.rules
,它允许回环接口、ping 和 DHCP 等服务。要添加或改变这些规则,编辑 /etc/ufw/before.rules
这个文件。 同一目录中的 before6.rules
文件用于 IPv6 。
还存在一个 after.rule
和 after6.rule
文件,用于添加在 UFW 运行你通过命令行输入的规则之后需要添加的任何规则。
还有一个配置文件位于 /etc/default/ufw
。 从此处可以禁用或启用 IPv6,可以设置默认规则,并可以设置 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 地址的组合
- SRC:包源的 IP
- DST:包目的地的 IP
- LEN:数据包长度
- TTL:数据包 TTL,或称为 time to live。 在找到目的地之前,它将在路由器之间跳跃,直到它过期。
- PROTO:数据包的协议
- SPT:包的源端口
- DPT:包的目标端口
- WINDOW:发送方可以接收的数据包的大小
- SYN URGP:指示是否需要三次握手。
0
表示不需要。