0%

UFW 的简单使用

介绍

  • 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>
示例
  1. 允许在端口53上传入tcp和udp数据包
    1
    sudo ufw allow 53
  2. 允许端口53上的传入tcp数据包
    1
    sudo ufw allow 53/tcp
  3. 允许端口53上的传入udp数据包
    1
    sudo ufw allow 53/udp
拒绝
1
sudo ufw deny <port>/<optional: protocol>
示例
  1. 拒绝端口53上的tcp和udp数据包
    1
    sudo ufw deny 53
  2. 拒绝端口53上的传入tcp数据包
    1
    sudo ufw deny 53/tcp
  3. 拒绝端口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>
示例
  1. 允许ssh
    1
    sudo ufw allow ssh
按服务名称拒绝
1
sudo ufw deny <service name>
示例
  1. 拒绝ssh
    1
    sudo ufw deny ssh

Status

  • 检查ufw的状态将告诉您是否启用了ufw,并列出了应用于iptables的ufw规则。

  • 查看状态

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ubuntu@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
2
sudo ufw status
Status: inactive

日志

  1. 要启用日志记录,请使用: sudo ufw logging on
  2. 要禁用日志记录,请使用:sudo ufw logging off

高级语法

您还可以使用更全面的语法,指定源和目标地址,端口和协议。

允许访问

按特定IP允许:
1
sudo ufw allow from <ip address>
示例
  1. 允许来自207.46.232.182的数据包
    1
    sudo ufw allow from 207.46.232.182
  2. 允许子网

    你也许会使用网关来配置

    1
    sudo ufw allow from 192.168.1.0/24

允许特定端口,IP地址

1
sudo ufw allow from <target> to <destination> port <port number>
示例
  1. 允许使用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>
示例
  1. 允许使用 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
2
3
4
5
6
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

或者把 ACCEPT 修改为 DROP

1
2
3
4
5
6
# ok icmp codes
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j DROP
-A ufw-before-input -p icmp --icmp-type source-quench -j DROP
-A ufw-before-input -p icmp --icmp-type time-exceeded -j DROP
-A ufw-before-input -p icmp --icmp-type parameter-problem -j DROP
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

拒绝访问

按特定IP拒绝
1
sudo ufw deny from <ip address>
示例
  1. 阻止来自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>
示例
  1. 拒绝所有协议的端口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>
高级示例
  1. 阻止从192.168.0.1和192.168.0.7访问端口22,但允许所有其他192.168.0.x IP使用tcp访问端口22
1
2
3
sudo 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

这将特定规则放在第一位,将通用第二位放在第二位。一旦规则匹配,其他规则将不会被匹配. 因此您必须首先列出特定规则。 ‘’’随着规则的变化,您可能需要删除旧规则,以确保按照正确的顺序放置新规则。

  1. 阻止访问端口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
26
sudo 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 表示不需要。

参见

  1. UFW
-------------本文结束再接再厉-------------

本文标题:UFW 的简单使用

文章作者:IITII

发布时间:2019年08月02日 - 12:08

最后更新:2019年08月02日 - 13:08

原始链接:https://iitii.github.io/2019/08/02/1/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。