ubuntu ufw 防火墙

ubuntu 系统自带了一个非常易用的防火墙 ufw —— uncomplicated firewall ,不复杂的防火墙。它是一个管理防火墙规则的前端,透过其简单的语法,让它来实际替你执行详细的防火墙细则。

安装

ubuntu 系统装完后,默认已经安装,如果没有的话,则

$ sudo apt update && apt install ufw

使用

查看使用帮助

$ sudo ufw -h
Usage: ufw COMMAND

Commands:
 enable                          enables the firewall # 启用防火墙
 disable                         disables the firewall # 关闭防火墙
 default ARG                     set default policy # 设定默认规则
 logging LEVEL                   set logging to LEVEL # 设定日志级别
 allow ARGS                      add allow rule # 允许规则
 deny ARGS                       add deny rule # 拒绝规则
 reject ARGS                     add reject rule
 limit ARGS                      add limit rule
 delete RULE|NUM                 delete RULE
 insert NUM RULE                 insert RULE at NUM
 route RULE                      add route RULE
 route delete RULE|NUM           delete route RULE
 route insert NUM RULE           insert route RULE at NUM
 reload                          reload firewall
 reset                           reset firewall
 status                          show firewall status
 status numbered                 show firewall status as numbered list of RULES
 status verbose                  show verbose firewall status
 show ARG                        show firewall report
 version                         display version information

Application profile commands:
 app list                        list application profiles # 罗列应用名字
 app info PROFILE                show information on PROFILE
 app update PROFILE              update PROFILE
 app default ARG                 set default application policy  

有详细的命令参数说明。

添加规则

可以通过 端口号 或者 服务名 来添加规则。

例如允许 ssh 服务连接

$ sudo ufw allow ssh

或者以端口号的形式

$ sudo ufw allow 22

再详细到允许 TCP 还是 UDP

$ sudo ufw allow 80/tcp
$ sudo ufw allow http/tcp
$ sudo ufw allow 1725/udp

拒绝的话则为

$ sudo ufw deny 80/tcp 22 http/tcp

还可通过 application profiles 应用名来添加,例如

$ sudo ufw app list
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
  Samba

# 允许openssh这个应用  
$ sudo ufw allow "OpenSSH"

高级规则

还可以设定是否允许某个IP,某个IP网段,某个IP的某个端口访问,如

允许从某个IP过来的连接

$ sudo ufw allow from 123.45.67.89

允许某个IP网段

$ sudo ufw allow from 123.45.67.89/24

允许某个IP的端口

$ sudo ufw allow from 123.45.67.89 to any port 22 proto tcp

删除规则

直接使用 delete 即可。

$ sudo ufw delete allow 80

如果之前的规则都不想要了,则可以重置

$ sudo ufw reset

默认规则

以上规则设定好之后,则需要设定一个默认规则

# 除了上述设定的规则外,其他一律拒绝
$ sudo ufw default deny

注意 : 务必设定好开启的规则再执行默认拒绝,否则把自己也挡在防火墙外就搞笑了。

状态与开关

查看当前 ufw 状态

$ sudo ufw status
Status: active # 激活状态
To                         Action      From
--                         ------      ----
22                         ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
22 (v6)                    ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

开启 ufw

$ sudo ufw enable

关闭 ufw

$ sudo ufw disable

开启日志

日志有 lowmediumhigh 三个级别,默认为 low

开启日志

$ sudo ufw logging on

设定日志级别

$ sudo ufw logging high

日志文件路径为:/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,找到目的地之前,它将在路由器之间跳跃,直到它过期
  • PROTO :数据包的协议
  • SPT: 包的源端口
  • DPT: 包的目标端口
  • WINDOWS: 发送方可以接收的数据包的大小
  • SYN URGP: 指示是否需要三次握手。0 表示不需要

参考链接

How to Configure a Firewall with UFW

发表评论

电子邮件地址不会被公开。 必填项已用*标注