# Debian ufw 防火墙命令 备忘手册

## 1 基础命令

安装ufw：`apt-get install ufw`

查看防火墙现有规则：`ufw status`

重新加载规则：`sudo ufw reload`

开启/关闭防火墙：

- `ufw enable //开启`
- `ufw disable //关闭`

开启指定tcp或者udp端口：`ufw allow 22/tcp`

同时开启tcp与udp端口：`ufw allow 445`

开放一个端口范围：`ufw allow 12000:13000/tcp` （端口范围必须跟协议）

删除53端口：`ufw delete allow 53`

## 2 默认规则

开机自启动：`sudo ufw enable`

默认拒绝所有连接请求：`sudo ufw default deny`

## 3 特定网络接口的规则设置

突出显示的输出表示网络接口名称。 它们通常被命名为eth0或enp3s2 。

因此，如果您的服务器具有名为eth0的公共网络接口，则可以使用以下命令允许HTTP流量（端口80 ）：`sudo ufw allow in on eth0 to any port 80`

这样做将允许您的服务器从公共互联网接收HTTP请求。或者，如果您希望MySQL数据库服务器（端口3306 ）监听专用网络接口eth1上的连接，例如，您可以使用此命令：`sudo ufw allow in on eth1 to any port 3306`

这将允许专用网络上的其他服务器连接到MySQL数据库。

## 4 特定的IP地址规则设置

验证新添加的规则：`sudo ufw status numbered`

1、拦截或拒绝来自192.168.1.5的所有数据包：

`sudo ufw deny from 192.168.1.5 to any`

2、阻断或拒绝IP地址202.54.1.5访问80端口的请求：

`sudo ufw deny from 202.54.1.5 to any port 80`

3、拦截特定IP、端口以及协议：

阻断黑客IP地址202.54.1.1访问tcp 22端口(SSH协议)，可以输入：

`sudo ufw deny proto tcp from 202.54.1.1 to any port 22` 

4、移除已有的规则：

先查询：`sudo ufw status numbered` 

后删除：`sudo ufw delete NUM`

## 5 匹配规则

UFW(iptables)规则的匹配基于规则出现的顺序，一旦匹配某个规则，检查便会停止。因此，如果某个规则允许访问TCP端口22(如使用udo ufw allow 22)，后面另一个规则指示拦截某个IP地址(如使用 ufw deny proto tcp from 202.54.1.1 to any port 22)。最终，允许访问TCP端口22的规则会被使用，而后一个拦截黑客IP地址 202.54.1.1 却没有被使用。

这都是由于规则的顺序造成的。为避免这类问题，你需要编辑 /etc/ufw/before.rules文件，在“# End required lines”之后"Block an IP Address"添加规则。

查找如下所示的行：`# End required lines`

添加规则来拦截黑客或垃圾信息传播者：

```
# Block spammers
-A ufw-before-input -s 178.137.80.191 -j DROP
# Block ip/net (subnet)
-A ufw-before-input -s 202.54.1.0/24 -j DROP
```

保存并关闭文件。让防火墙重新加载配置信息：`sudo ufw reload`

### 特定路由选择性屏蔽

ufw route deny in on ens33【50】 out on ens38【1】 to 12.34.45.67

`ufw route deny in on ens33 out on ens38 to 192.168.1.204`
