|
|
# UFW
|
|
|
|
|
|
> Debian
|
|
|
|
|
|
|
|
|
# 简单版本
|
|
|
|
|
|
* 下载
|
|
|
|
|
|
```bash
|
|
|
wget http://mirrors.163.com/debian/pool/main/u/ufw/(这里自己去查看版本).deb
|
|
|
# http://mirrors.163.com/debian/pool/main/u/ufw/ufw_0.36.1-4_all.deb
|
|
|
```
|
|
|
|
|
|
* 安装
|
|
|
|
|
|
```bash
|
|
|
sudo dpkg -i *.deb
|
|
|
```
|
|
|
|
|
|
* 配置文件
|
|
|
|
|
|
```bash
|
|
|
nano /etc/default/ufw
|
|
|
```
|
|
|
|
|
|
* 说明
|
|
|
|
|
|
allow 开启
|
|
|
|
|
|
deny 禁止
|
|
|
|
|
|
ignore 忽略
|
|
|
|
|
|
* 查看状态
|
|
|
|
|
|
```bash
|
|
|
sudo ufw status verbose
|
|
|
# sudo ufw status
|
|
|
```
|
|
|
|
|
|
* 刷新
|
|
|
|
|
|
```bash
|
|
|
sudo ufw reload
|
|
|
```
|
|
|
|
|
|
* 删除规则
|
|
|
|
|
|
```bash
|
|
|
sudo ufw delete allow ssh# 删除刚才添加的某个规则
|
|
|
```
|
|
|
|
|
|
如果规则又长又复杂,问题就比较棘手了。这里有一个更简单的方法,需要分成两个步骤:
|
|
|
|
|
|
```bash
|
|
|
sudo ufw status numbered //按规则来编号防火墙规则。命令会将所有防火墙规则以数字列表形式列出来
|
|
|
# 请将 [number] 替换成规则列表对应的数字序号。
|
|
|
sudo ufw delete 1 //按规则编号删除防火墙规则 sudo ufw delete [number]
|
|
|
sudo ufw delete 4 //删除编号为4的规则
|
|
|
```
|
|
|
|
|
|
* 添加规则
|
|
|
|
|
|
```bash
|
|
|
sudo ufw allow port
|
|
|
```
|
|
|
|
|
|
* 范围规则(UDP和TCP需要单独设置)
|
|
|
|
|
|
```bash
|
|
|
sudo ufw allow 0:1024/udp
|
|
|
```
|
|
|
|
|
|
* 禁用端口
|
|
|
|
|
|
示例:
|
|
|
|
|
|
```bash
|
|
|
sudo ufw deny http //拒绝http连接
|
|
|
sudo ufw deny smtp //禁止外部访问smtp服务
|
|
|
|
|
|
sudo ufw deny from 111.111.111.111 //拒绝特定IP连接
|
|
|
sudo ufw deny from 192.168.1.5 to any //拦截或拒绝来自192.168.1.5的所有数据包
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 1.引言
|
|
|
|
|
|
`Linux`系统下一般会使用`iptables`对防火墙的规则进行管理。`iptables`可以灵活的定义防火墙规则, 功能非常强大,但是由此产生的副作用便是配置过于复杂。在`deepin`系的系统里,附带了一个相对iptables简单很多的防火墙配置工具:`ufw`。
|
|
|
|
|
|
## 2.安装
|
|
|
|
|
|
```bash
|
|
|
wget http://mirrors.163.com/debian/pool/main/u/ufw/(这里自己去查看版本).deb
|
|
|
# http://mirrors.163.com/debian/pool/main/u/ufw/ufw_0.36.1-4_all.deb
|
|
|
```
|
|
|
|
|
|
```bash
|
|
|
sudo dpkg -i *.deb
|
|
|
```
|
|
|
|
|
|
一般系统已经自带了ufw,如果意外卸载了,可以执行以下命令安装:
|
|
|
|
|
|
```bash
|
|
|
sudo apt install ufw
|
|
|
```
|
|
|
|
|
|
## 3.查看防火墙状态
|
|
|
|
|
|
```
|
|
|
sudo ufw status
|
|
|
sudo ufw status numbered //按编号显示
|
|
|
```
|
|
|
|
|
|
## 4. 防火墙版本
|
|
|
|
|
|
```
|
|
|
sudo ufw version
|
|
|
```
|
|
|
|
|
|
## 5.开启/禁止端口
|
|
|
|
|
|
```
|
|
|
sudo ufw allow|deny [service]
|
|
|
```
|
|
|
|
|
|
## 6.开启/关闭防火墙 (默认设置是`disable`)
|
|
|
|
|
|
```
|
|
|
sudo ufw enable|disable
|
|
|
```
|
|
|
|
|
|
## 7.常见用法
|
|
|
|
|
|
## 7.1基本使用
|
|
|
|
|
|
```
|
|
|
sudo ufw enable
|
|
|
sudo default deny
|
|
|
```
|
|
|
|
|
|
运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常;此时系统已经足够安全了,如果你需要开放某些服务,再使用`sudo ufw allow`开启。
|
|
|
|
|
|
设置默认策略(默认策略即为拒绝所有传入连接,允许所有传出链接)
|
|
|
|
|
|
```
|
|
|
sudo ufw default deny incoming
|
|
|
sudo ufw default allow outgoing
|
|
|
```
|
|
|
|
|
|
允许SSH连接(重要!)否则你将无法连接云服务器…
|
|
|
|
|
|
```
|
|
|
sudo ufw allow ssh
|
|
|
sudo ufw allow 22
|
|
|
```
|
|
|
|
|
|
### 7.2启动端口
|
|
|
|
|
|
示例:
|
|
|
|
|
|
```
|
|
|
sudo ufw allow from 123.45.67.89 //允许从一个 IP 地址连接
|
|
|
sudo ufw allow from 123.45.67.89/24 //允许特定子网的连接:
|
|
|
sudo ufw allow smtp //允许所有的外部IP访问本机的25/tcp (smtp)端口
|
|
|
sudo ufw allow 22/tcp //允许所有的外部IP访问本机的22/tcp (ssh)端口
|
|
|
sudo ufw allow 53 //允许外部访问53端口(tcp/udp)
|
|
|
sudo ufw allow from 192.168.1.100 //允许此IP访问所有的本机端口
|
|
|
sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53
|
|
|
|
|
|
sudo ufw allow www
|
|
|
sudo ufw allow 80/tcp
|
|
|
|
|
|
sudo ufw allow ftp
|
|
|
sudo ufw allow 21/tcp
|
|
|
|
|
|
sudo ufw allow 22/tcp //允许所有的外部IP访问本机的22/tcp (ssh)端口
|
|
|
sudo ufw allow 53 //允许外部访问53端口(tcp/udp)
|
|
|
sudo ufw allow 80 //允许外部访问80端口 等价 sudo ufw allow http
|
|
|
sudo ufw allow http
|
|
|
|
|
|
sudo ufw allow from 192.168.1.1 //允许此IP访问所有的本机端口
|
|
|
sudo ufw allow from 111.111.111.111 to any port 22 //允许特定IP特定端口的连接
|
|
|
sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53
|
|
|
sudo ufw allow smtp //允许所有的外部IP访问本机的25/tcp (smtp)端口
|
|
|
```
|
|
|
|
|
|
允许特定 IP/端口的组合:
|
|
|
|
|
|
```
|
|
|
sudo ufw allow from 123.45.67.89 to any port 22 proto tcp
|
|
|
//proto tcp 可以删除或者根据你的需求改成 proto udp,所有例子的 allow 都可以根据需要变成 deny。
|
|
|
```
|
|
|
|
|
|
允许特定端口范围连接
|
|
|
|
|
|
```
|
|
|
sudo ufw allow 1000:2000/tcp
|
|
|
sudo ufw allow 2001:3000/udp
|
|
|
|
|
|
//拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口
|
|
|
sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22
|
|
|
|
|
|
//可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级):
|
|
|
sudo ufw allow from 10.0.0.0/8
|
|
|
sudo ufw allow from 172.16.0.0/12
|
|
|
sudo ufw allow from 192.168.0.0/16
|
|
|
```
|
|
|
|
|
|
### 7.3禁用端口
|
|
|
|
|
|
示例:
|
|
|
|
|
|
```
|
|
|
sudo ufw deny http //拒绝http连接
|
|
|
sudo ufw deny smtp //禁止外部访问smtp服务
|
|
|
|
|
|
sudo ufw deny from 111.111.111.111 //拒绝特定IP连接
|
|
|
sudo ufw deny from 192.168.1.5 to any //拦截或拒绝来自192.168.1.5的所有数据包
|
|
|
```
|
|
|
|
|
|
除了基于端口的允许或阻止,UFW 还允许您按照 IP 地址、子网和 IP 地址/子网/端口的组合来允许/阻止:
|
|
|
|
|
|
```
|
|
|
ufw deny from {ip-address-here} to any port {port-number-here}
|
|
|
|
|
|
//例子:
|
|
|
sudo ufw deny from 202.54.1.5 to any port 80 //阻断或拒绝IP地址202.54.1.5访问80端口的请求
|
|
|
```
|
|
|
|
|
|
拦截特定IP、端口以及协议:
|
|
|
|
|
|
```
|
|
|
sudo ufw deny proto {tcp|udp} from {ip-address-here} to any port {port-number-here}
|
|
|
|
|
|
//例如:阻断IP地址202.54.1.1访问tcp 22端口(FTP协议),可以输入
|
|
|
sudo ufw deny proto tcp from 202.54.1.1 to any port 22
|
|
|
sudo ufw status numbered
|
|
|
```
|
|
|
|
|
|
拦截子网
|
|
|
|
|
|
```
|
|
|
sudo ufw deny proto tcp from sub/net to any port 22
|
|
|
sudo ufw deny proto tcp from 202.54.1.0/24 to any port 22
|
|
|
```
|
|
|
|
|
|
## 7.4删除规则
|
|
|
|
|
|
```
|
|
|
sudo ufw delete allow ssh
|
|
|
sudo ufw delete allow 22
|
|
|
|
|
|
sudo ufw delete allow http
|
|
|
sudo ufw delete allow 80
|
|
|
sudo ufw delete allow 80/tcp
|
|
|
|
|
|
sudo ufw delete allow 1000:2000/tcp
|
|
|
```
|
|
|
|
|
|
如果规则又长又复杂,问题就比较棘手了。这里有一个更简单的方法,需要分成两个步骤:
|
|
|
|
|
|
```
|
|
|
sudo ufw status numbered //按规则来编号防火墙规则。命令会将所有防火墙规则以数字列表形式列出来
|
|
|
# 请将 [number] 替换成规则列表对应的数字序号。
|
|
|
sudo ufw delete 1 //按规则编号删除防火墙规则 sudo ufw delete [number]
|
|
|
sudo ufw delete 4 //删除编号为4的规则
|
|
|
```
|
|
|
|
|
|
## 8.详细说明
|
|
|
|
|
|
```
|
|
|
//[]内的为选配项
|
|
|
//命令激活|关闭|重新载入
|
|
|
ufw enable|disable|reload
|
|
|
|
|
|
//命令默认 允许|阻止|拒绝 [访问本机的规则|向外访问的规则
|
|
|
//注:reject让访问者知道数据被拒绝(回馈拒绝信息)。deny则直接丢弃访问数据,访问者不知道是访问被拒绝还是不存在该主机。
|
|
|
ufw default allow|deny|reject [incoming|outgoing]
|
|
|
|
|
|
//命令日志 开启|关闭|“级别”
|
|
|
ufw logging on|off|LEVEL
|
|
|
|
|
|
//命令复位
|
|
|
ufw reset
|
|
|
|
|
|
//命令状态 [详细|被编号的规则]
|
|
|
ufw status [verbose|numbered]
|
|
|
|
|
|
//命令显示 “报告类型”
|
|
|
ufw show REPORT
|
|
|
|
|
|
//命令[删除][插到“x号规则”之前] 允许|阻止|拒绝|限制 [进|出] [记录新连接|记录所有数据包] “端口” [/“协议”]
|
|
|
ufw [delete] [insert NUM] allow|deny|reject|limit [in|out][log|log-all] PORT[/protocol]
|
|
|
|
|
|
//命令[删除][插到x号规则之前] 允许|阻止|拒绝|限制 [进|出 基于“什么网络设备”] [协议 “协议”] [来源 “地址” [端口 “端口”]] [目标 “地址” [端口 “端口”]]
|
|
|
ufw [delete] [insert NUM] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]]
|
|
|
|
|
|
//命令删除 “第X号规则”
|
|
|
ufw delete NUM
|
|
|
|
|
|
//命令程序 清单|信息|默认|更新
|
|
|
ufw [--dry-run] app list|info|default|update
|
|
|
```
|
|
|
|
|
|
## 9.参数
|
|
|
|
|
|
```
|
|
|
–version
|
|
|
显示程序版本号
|
|
|
|
|
|
-h , –help
|
|
|
显示帮助信息
|
|
|
|
|
|
–dry-run
|
|
|
不实际运行,只是把涉及的更改显示出来。
|
|
|
|
|
|
enable
|
|
|
激活防火墙,开机时自动启动
|
|
|
|
|
|
disable
|
|
|
关闭防火墙,开机时不启动
|
|
|
|
|
|
reload
|
|
|
重新载入防火墙
|
|
|
|
|
|
default allow|deny|reject 方向
|
|
|
方向是指:向内(incoming)|向外(outgoing)。如果更改了默认策略,一些已经存在的规则可能需要手动修改。更多内容看“规则示例”一节。
|
|
|
|
|
|
logging on|off|“级别”
|
|
|
切换日志状态。日志记录包使用的是系统日志。“级别”有好几个,默认是低级(low)。详细内容看“日志”一节。
|
|
|
|
|
|
reset [--force]
|
|
|
关闭防火墙,并复位至初始安装状态。如果使用–force选项,则忽略确认提示。
|
|
|
|
|
|
status
|
|
|
显示防火墙的状态和已经设定的规则。使用status verbose显示更详细的信息。‘anywhere’与‘any’、‘0.0.0.0/0’一个意思。
|
|
|
|
|
|
show “报告类型”
|
|
|
显示防火墙运行信息。详细内容看“报告类型”
|
|
|
|
|
|
limit “规则”
|
|
|
此命令目前只能用于IPv4。还不支持IPv6.
|
|
|
```
|
|
|
|
|
|
学习更多知识,加QQ群:1098090823
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|