1. 简介

UFW(Uncomplicated Firewall)是一个简单易用的防火墙配置工具,针对 Ubuntu 和其他基于 UbuntuLinux 发行版设计的。UFW 的目标是让防火墙配置变得简单,即使对于不熟悉防火墙概念和命令行的用户也能轻松使用。
虽然 UFW 最初是为 Ubuntu 设计的,但它也可以在其他基于 Debian 的发行版上使用。

2. 安装

Debian & Ubuntu

apt update -y
apt install ufw -y

3. 开启服务

  • 查看ufw状态
    $ ufw status
    Status: inactive
    
  • 开启服务(开启服务之前建议先配置远程端口允许)
    $ ufw enable
    Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
    Firewall is active and enabled on system startup
    
  • 查看状态(没有配置规则)
    $ ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    

4. 常用命令

  • 允许所有出流量,禁用所有入流量

    ufw default allow outgoing
    ufw default deny incoming
    
  • 允许SSH连接,如果修改了SSH默认端口则需要指定端口号

    # 使用默认端口
    ufw allow ssh 
    # 指定ssh端口
    ufw allow 666
    
  • 指定传输协议TCP/UDP

    ufw allow 80/TCP
    ufw allow 21/UDP
    
  • 禁用端口传入和传出

    ufw deny 80
    
  • 删除指定规则

    # 删除已允许的规则
    ufw delete allow 80
    # 删除已禁用的规则
    ufw delete deny 80
    
  • 也可以通过编号删除规则

    $ ufw status numbered
    Status: active
    
     To                         Action      From
     --                         ------      ----
    [ 1] 22                         ALLOW IN    Anywhere
    [ 2] 22 (v6)                    ALLOW IN    Anywhere (v6)
    
    $ ufw delete 2
    Deleting:
    allow 22
    Proceed with operation (y|n)? y
    Rule deleted (v6)
    
  • 允许范围端口入流量

    # 允许TCP和UDP入流量
    ufw allow 6000:7000
    # 只允许TCP入流量
    ufw allow 7001:8000/tcp
    # 只允许UDP入流量
    ufw allow 8001:9000/udp
    
  • 允许/禁止特定IP连接

    ufw allow from 192.168.1.100
    ufw deny from 192.168.1.100
    
  • 允许/禁止范围IP连接

    # 192.168.1.0-192.168.254
    ufw allow from 192.168.1.0/24
    ufw deny from 192.168.1.0/24
    
  • 指定IP和端口访问

    # 允许
    ufw allow from 192.168.1.100 to any port 80
    # 指定tcp/udp
    ufw allow from 192.168.1.100 to any port 80 proto tcp
    ufw allow from 192.168.1.100 to any port 80 proto udp
    
    # 禁止
    ufw deny from 192.168.1.100 to any port 80
    # 指定tcp/udp
    ufw deny from 192.168.1.100 to any port 80 proto tcp
    ufw deny from 192.168.1.100 to any port 80 proto udp
    

敲黑板!!

Docker服务对外映射的端口默认不被ufw或其它防火墙工具控制,是因为Docker使用了网络地址转换(NAT)技术,将容器的网络流量转发到主机的网络接口上。
如果需要ufw控制,需要在docker配置文件中添加"iptables": false

```
cat /etc/docker/daemon.json
{
  "log-opts": {
    "max-size": "512m"
  },
  "data-root": "/docker-data/.docker",
  
  "iptables": false
}
```