介绍
- Ubuntu 的默认防火墙配置工具是
ufw,是为了简化iptables防火墙配置而开发,ufw提供了一种友好的方式来创建基于IPv4或IPv6主机的防火墙。一般情况下系统默认禁用UFW。 - Gufw 是一个 ufw 的图形界面版本。
基本的语法和一些示例
默认规则适用于普通家庭用户
- 当您打开UFW时,它使用一组默认规则(配置文件),所有“传入”都被拒绝,然后用户再定义一些例外的端口或应用,就差不多了
启用和禁用
启用UFW
1 | sudo ufw enable |
检查UFW的状态
1 | sudo ufw status |
- 请注意,默认情况下,deny正在应用于传入。有一些例外,可以在此命令的输出中找到:
sudo ufw show raw - 您也可以通过读取 /etc/ufw 中的规则文件(后缀名:.rules),来查看防火墙规则。
禁用UFW
1 | sudo ufw disable |
允许和拒绝(特定规则)
允许
1 | sudo ufw allow <port>/<optional: protocol> |
示例
- 允许在端口53上传入tcp和udp数据包
1
sudo ufw allow 53
- 允许端口53上的传入tcp数据包
1
sudo ufw allow 53/tcp
- 允许端口53上的传入udp数据包
1
sudo ufw allow 53/udp
拒绝
1 | sudo ufw deny <port>/<optional: protocol> |
示例
- 拒绝端口53上的tcp和udp数据包
1
sudo ufw deny 53
- 拒绝端口53上的传入tcp数据包
1
sudo ufw deny 53/tcp
- 拒绝端口53上传入的udp数据包
1
sudo ufw deny 53/udp
删除现有规则
- 要删除规则,只需在原始规则前加上删除。
- 例如,如果原始规则是:
1
ufw deny 80/tcp
- 用这一条命令来删除它
1
sudo ufw delete deny 80/tcp
服务
您也可以允许或拒绝服务名称,因为ufw会从从 /etc/services读取服务名称。
- 查看所有服务
1
less /etc/services
按服务名称允许
1 | sudo ufw allow <service name> |
示例
- 允许ssh
1
sudo ufw allow ssh
按服务名称拒绝
1 | sudo ufw deny <service name> |
示例
- 拒绝ssh
1
sudo ufw deny ssh
Status
检查ufw的状态将告诉您是否启用了ufw,并列出了应用于iptables的ufw规则。
查看状态
1
2
3
4
5
6
7
8
9
10
11ubuntu@ubuntu# sudo ufw status
Firewall loaded
To Action From
-- ------ ----
22:tcp DENY 192.168.0.1
22:udp DENY 192.168.0.1
22:tcp DENY 192.168.0.7
22:udp DENY 192.168.0.7
22:tcp ALLOW 192.168.0.0/24
22:udp ALLOW 192.168.0.0/24如果未启用ufw,则输出将为
1
2sudo ufw status
Status: inactive
日志
要启用日志记录,请使用:
sudo ufw logging on要禁用日志记录,请使用:
sudo ufw logging off
高级语法
您还可以使用更全面的语法,指定源和目标地址,端口和协议。
允许访问
按特定IP允许:
1 | sudo ufw allow from <ip address> |
示例
- 允许来自207.46.232.182的数据包
1
sudo ufw allow from 207.46.232.182
- 允许子网
你也许会使用网关来配置
1
sudo ufw allow from 192.168.1.0/24
允许特定端口,IP地址
1 | sudo ufw allow from <target> to <destination> port <port number> |
示例
- 允许使用TCP访问端口22的IP地址192.168.0.4
1
sudo ufw allow from 192.168.0.4 to any port 22
允许特定端口,IP地址和协议
1 | sudo ufw allow from <target> to <destination> port <port number> proto <protocol name> |
示例
- 允许使用 TCP 访问端口22的IP地址192.168.0.4
1
sudo ufw allow from 192.168.0.4 to any port 22 proto tcp
禁用 ping
- 默认允许ping,如果要禁用 ping, 您可以在
/etc/ufw/before.rules里面删除以下行
1 | # ok icmp codes |
或者把 ACCEPT 修改为 DROP
1 | # ok icmp codes |
拒绝访问
按特定IP拒绝
1 | sudo ufw deny from <ip address> |
示例
- 阻止来自207.46.232.182的数据包:
1
sudo ufw deny from 207.46.232.182
通过特定端口和IP地址拒绝
1 | sudo ufw deny from <ip address> to <protocol> port <port number> |
示例
- 拒绝所有协议的端口22的IP地址192.168.0.1访问
1
sudo ufw deny from 192.168.0.1 to any port 22
使用规则的编号进行管理
显示规则的顺序和ID号
1 | sudo ufw status numbered |
编辑编号规则
删除编号规则
然后,您可以使用该号码删除规则。这将删除第一个规则,规则将向上移动以填充列表。
1
sudo ufw delete 1
插入编号规则
1 | sudo ufw insert 1 allow from <ip address> |
高级示例
阻止从192.168.0.1和192.168.0.7访问端口22,但允许所有其他192.168.0.x IP使用tcp访问端口22
1
2
3sudo ufw deny from 192.168.0.1 to any port 22
sudo ufw deny from 192.168.0.7 to any port 22
sudo ufw allow from 192.168.0.0/24 to any port 22 proto tcp
这将特定规则放在第一位,将通用第二位放在第二位。一旦规则匹配,其他规则将不会被匹配. 因此您必须首先列出特定规则。 ‘’’随着规则的变化,您可能需要删除旧规则,以确保按照正确的顺序放置新规则。
阻止访问端口22到192.168.0.3以及192.168.0.1和192.168.0.7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26sudo ufw delete allow from 192.168.0.0/24 to any port 22
sudo ufw status
Firewall loaded
To Action From
-- ------ ----
22:tcp DENY 192.168.0.1
22:udp DENY 192.168.0.1
22:tcp DENY 192.168.0.7
22:udp DENY 192.168.0.7
sudo ufw deny 192.168.0.3 to any port 22
sudo ufw allow 192.168.0.0/24 to any port 22 proto tcp
sudo ufw status
Firewall loaded
To Action From
-- ------ ----
22:tcp DENY 192.168.0.1
22:udp DENY 192.168.0.1
22:tcp DENY 192.168.0.7
22:udp DENY 192.168.0.7
22:tcp DENY 192.168.0.3
22:udp DENY 192.168.0.3
22:tcp ALLOW 192.168.0.0/24
如果你只是添加拒绝规则,那么 allow 的优先级就会超过它并被应用.
解释日志条目
根据对报文的回复
SPT和DPT值以及SRC和DST值通常是分析防火墙日志时要关注的值。
伪日志条目
1 | Feb 4 23:33:37 hostname kernel: [ 3529.289825] [UFW BLOCK] IN=eth0 OUT= MAC=00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd SRC=444.333.222.111 DST=111.222.333.444 LEN=103 TOS=0x00 PREC=0x00 TTL=52 ID=0 DF PROTO=UDP SPT=53 DPT=36427 LEN=83 |
- Date:查看日期和时间是一种很好的做法。如果事情发生故障或时间块丢失,那么攻击者可能会破坏您的日志。
hostname:服务器的主机名
uptime:正常运行的时间
Logged Event:记录事件的简短描述;例如[UFW BLOCK]
IN:如果有,则事件是传入事件
OUT:如果有,则事件是传出事件。
MAC: 这提供了目标MAC,源MAC和EtherType字段的14字节组合,遵循以太网II报头中的顺序。见 以太网帧 和 EtherType 了解更多信息。
- [UFW BLOCK]:这是记录事件的描述开始的位置。在此例中,它表示阻止了连接。
- IN:如果它包含一个值,那么代表该事件是传入事件
- OUT:如果它包含一个值,那么代表事件是传出事件
- MAC:目的地和源 MAC 地址的组合
- SRC:包源的 IP
- DST:包目的地的 IP
- LEN:数据包长度
- TTL:数据包 TTL,或称为 time to live。 在找到目的地之前,它将在路由器之间跳跃,直到它过期。
- PROTO:数据包的协议
- SPT:包的源端口
- DPT:包的目标端口
- WINDOW:发送方可以接收的数据包的大小
- SYN URGP:指示是否需要三次握手。 0 表示不需要。
参见
- UFW

