ubuntu ufw(UncomplicatedFirewall)防火墙使用简介

ubuntu ufw(UncomplicatedFirewall)防火墙使用简介

简介

从名字Uncomplicated(简单的,不混乱的)就可以看出,ufw的目的是提供一个简单、易用的防火墙工具。
ubuntu系统的Linux内核提供了一个名为netfilter的网络包过滤系统,控制netfilter的传统接口工具是iptables命令工具。iptables提供了一个既高可配置有高度灵活的完整的防火墙解决方案。

但是想要熟练iptables命令需要花费较长的时间,而且仅使用iptables来开始学习netfilter是一个艰难的任务。因此,近年来出现了很多iptables的前端工具(frontends for iptables),每个工具实现的结果和面向的用户都不相同。

ufw也是一个iptables的前端工具,并且是一个特别适合于主机(host-based)的防火墙。ufw提供了一套管理netfilter的框架,和一个控制防火墙的命令行工具。ufw的目标是为不熟悉防火墙概念的用户提供一个简单易用的接口。同时也为知道自己在干甚么的管理员用户简化了iptables命令。ufw是其他系统发行版本和图形界面前端的上游。


对ubuntu系统的支持

ufw从ubuntu 8.04 LTS版本就加入了系统工具,在系统中时默认安装的。

  • Ubuntu 12.04 ESM: 0.31.1-1
  • Ubuntu 14.04 ESM: 0.34~rc-0ubuntu2
  • Ubuntu 16.04 LTS: 0.35-0ubuntu2
  • Ubuntu 18.04 LTS: 0.36-0ubuntu0.18.04.1
  • Ubuntu 20.04: 0.36-6
  • Ubuntu 21.04: 0.36-7.1
  • Ubuntu 21.10: 0.36.1-1,
  • Ubuntu Core: 0.36pre

基本使用

ufw是ubuntu默认的防火墙配置工具,但默认ufw是关闭的(disabled),因为ufw 的目的不是通过其命令接口提供完整的防火墙功能,而是提供一种简单的方法来添加或删除简单的规则。它目前主要用于基于主机的防火墙(host-based firewalls)。

ufw命令的使用比较简单,如我们想用系统仅放开ssh端口的tcp连接,需要执行以下命令:

$ ufw allow ssh/tcp # 或者ufw allow 22/tcp
$ ufw logging on  # 开启日志
$ ufw enable  # 使配置生效
$ ufw status  # 查看配置结果

Firewall loaded

To                         Action  From
--                         ------  ----
22:tcp                     ALLOW   Anywhere

其中的allow + port称为 RULE。共有4中RULE类型,分别是:

  • allow:开放端口,允许访问。
  • deny:直接拒绝/忽略对本机某个端口的访问。
  • reject:拒绝对本机端口的访问。有时最好让发送端知道流量被拒绝了,而不是简单的忽略请求。在这些情况下,使用reject而不是deny。
  • limit:限制规则,目前只支持IPv4。ufw支持连接速率限制,这对防止暴力登录攻击非常有用。当使用限制规则时,ufw 会像往常一样允许连接,但如果一个 IP 地址试图在30秒内启动6个或更多连接,则会拒绝该连接。通常的用法是ufw limit ssh/tcp

此外,RULE中还可以指定流量方向(in/out)、使用的网卡(eth0/eth1)、使用的协议等(tcp/udp)等,详细的各种语法请查看 语法参考 或使用man ufw命令查看 RULE SYNTAX 部分。


常用命令介绍

下面简单介绍常用的命令

端口操作

  • 首先,我们要开启ufw:ufw enable
  • 打开某个端口,以SSH为例:ufw allow 22 也可以使用ufw allow ssh
  • 也可以为规则添加编号,如设置规则1为开启80端口:ufw insert 1 allow 80。要注意insert NUM只能在已经存在某些RULES时,像添加的新RULE优先级更高时插入对应的位置。在没有RULE的情况下使用会报错。
  • 关闭打开的端口,拒绝其访问:ufw deny 22。此时不是删除了允许访问22端口的规则,而是禁止访问22端口了。
  • 想要删除定义的规则:ufw delete deny 22
  • 如果想要允许某些指定的主机或网络访问一个端口,可以添加对应的主机IP。如,允许 SSH 从主机192.168.0.2访问该主机上的任何 IP 地址:ufw allow proto tcp from 192.168.0.2 to any port 22。如果将192.168.0.2改为192.168.0.0/24则允许该子网都可以通过SSH访问本机。
  • 使用--dry-run选项可以使ufw仅输出结果规则,而不实际影响本机规则。如,查看打开HTTP的规则:
    $ ufw --dry-run allow http
    
    *filter
    :ufw-user-input - [0:0]
    :ufw-user-output - [0:0]
    :ufw-user-forward - [0:0]
    :ufw-before-logging-input - [0:0]
    :ufw-before-logging-output - [0:0]
    :ufw-before-logging-forward - [0:0]
    :ufw-user-logging-input - [0:0]
    :ufw-user-logging-output - [0:0]
    :ufw-user-logging-forward - [0:0]
    :ufw-after-logging-input - [0:0]
    :ufw-after-logging-output - [0:0]
    :ufw-after-logging-forward - [0:0]
    :ufw-logging-deny - [0:0]
    :ufw-logging-allow - [0:0]
    :ufw-user-limit - [0:0]
    :ufw-user-limit-accept - [0:0]
    ### RULES ###
    
    ### tuple ### allow tcp 22 0.0.0.0/0 any 0.0.0.0/0 in
    -A ufw-user-input -p tcp --dport 22 -j ACCEPT
    
    ### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 in
    -A ufw-user-input -p tcp --dport 80 -j ACCEPT
    
    ### END RULES ###
    ...
    
  • 关闭ufw:ufw disable
  • 重新加载规则:ufw reload
  • 查看当前规则配置:ufw status [verbose]。使用verbose可以查看更详细的内容。
  • 查看带序号的规则状态:ufw status numbered

应用管理

除了直接对端口进行操作,ufw还可以和应用整合在一起使用。打开端口的应用程序可以包括 ufw 配置文件(profile),该配置文件详细说明了应用程序正常运行所需的端口。概要文件保存在/etc/ufw/applications.d 中,如果默认端口已经更改,则可以编辑它们。

  • 查看哪些应用程序已经使用了profile:ufw app list
  • 类似于对端口流量的操作,可以直接对应用profile进行操作:ufw allow Samba
  • 对应用profile添加扩展参数:ufw allow from 192.168.0.0/24 to any app Samba
  • 查看应用使用的端口、协议等详细信息:ufw app info Nginx

日志功能

防火墙日志对于识别攻击、故障排除防火墙规则以及注意网络上的异常活动是必不可少的。必须在防火墙中包含日志记录规则才能生成日志,而且日志记录规则必须放在任何应用关闭(terminating)规则(具有决定数据包命运的目标的规则,例如 ACCEPT、 DROP 或 REJECT)之前。

  • 打开日志功能:ufw logging on
  • 关闭日志功能:ufw logging off
    外界访问本机端口的日志信息可以通过dmesg命令进行查看。
    如一个来自本机80端口请求其日志信息类似于:
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP
SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

完整的日志信息还可以通过/var/log/messages, /var/log/syslog/var/log/kern.log文件查看。可以通过适当编辑/etc/syblog.conf 或安装和配置 ulogd 并使用 ULOG 目标而不是 LOG 来修改此行为。ulogd 守护进程是一个用户空间服务器,它监听来自内核的防火墙日志指令,并且可以记录日志到任何你想要的文件,甚至可以写入到 PostgreSQL 或 MySQL 数据库。使用日志分析工具(如 logwatch、 fwanalog、 fwlogwatch 或 lire)可以简化防火墙日志的理解。

更多帮助信息

更多相关命令可以通过ufw --help查看

$ ufw --help

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

对ufw命令的详细用法和示例可以参考:http://manpages.ubuntu.com/manpages/focal/en/man8/ufw.8.html#


专业功能

ufw可以完成所有iptables能做的事情。不过这需要通过几个规则文件的集合来实现,这些规则文件是 iptables-restore 兼容的文本文件。
微调 ufw 规则或添加ufw不提供的额外iptables规则配置,可以通过修改以下文件完成:

  • /etc/default/ufw: 高级配置,例如默认策略、 IPv6支持和要使用的内核模块。

  • /etc/ufw/before[6].rules: 该文件中的所有规则会在任何ufw命令添加的规则之前计算执行。

  • /etc/ufw/after[6].rules: 该文件中的所有规则会在任何ufw命令添加的规则之后计算执行。

  • /etc/ufw/sysctl.conf: 内核网络可调参数。

  • /var/lib/ufw/user[6].rules 或 /lib/ufw/user[6].rules (0.28 and later): ufw命令添加的规则(通常不应该手动修改)。

  • /etc/ufw/ufw.conf: 设置ufw是否在开机时自启动, and in 9.04 (ufw 0.27) and later, 设置日志的 LOGLEVEL。

  • /etc/ufw/after.init: 初始化自定义脚本在ufw初始化完成后运行 (ufw 0.34 and later)。

  • /etc/ufw/before.init: 初始化自定义脚本在 ufw 初始化之前运行 (ufw 0.34 and later)。

其中文件名后带 [6] 的文件表示IPv6配置。

每次修改完以上文件后,要想让配置生效需要执行以下命令:

$ ufw disable
$ ufw enable

不同ubuntu发行版本中的使用引导

  • Ubuntu 16.04 LTS (Xenial Xerus)
    • Server Guide - Firewall

    • ufw manual

    • ufw framework manual

  • Ubuntu 18.04 LTS (Bionic Beaver)
    • Server Guide - Firewall

    • ufw manual

    • ufw framework manual

  • Ubuntu 20.04 (Focal Fossa)
    • Ubuntu Server Guide - Firewall

    • ufw manual

    • ufw framework manual

  • Ubuntu 21.04 (Hirsute Hippo)
    • ufw manual

    • ufw framework manual

  • Ubuntu 21.04 (Impish Indri)
    • ufw manual

    • ufw framework manual

  • Ubuntu Core
    • See 'ufw.doc' on your Ubuntu Core system, specifically 'ufw.doc ufw-on-snappy | less' to see how ufw differs on Ubuntu Core.

  • Ubuntu Community Documentation on UFW

  • Specification: UbuntuFirewallSpec

  • Code: https://launchpad.net/ufw

  • Graphic User Interface for UFW: Gufw.

你可能感兴趣的:(运维,ubuntu,服务器,安全,运维,网络)