Ubuntu防火墙配置工具ufw
文章转载自:http://notes.maxwi.com/2017/01/19/linux-command-tools-ufw/
FW,即Uncomplicated Firewall,是基于iptables实现的防火墙管理工具,所以实际上UFW修改的是iptables的规则。之所以不直接使用iptables,而要通过UFW进行管理是因为iptables的规则对于新手入门来说有点难,UFW做了很好的包装。
本文测试环境为Ubuntu 16.04,其他系统可做参考。
安装
Ubuntu系统默认已经安装了UFW,如果没有ufw,可以手动安装:
sudo apt-get update
sudo apt-get install ufw
基础配置
允许UFW管理IPV6
sudo vim /etc/default/ufw
确保你的IPV6选项为yes即可:
...
IPV6=yes
...
设置默认规则
UFW默认情况下允许所有的出站连接,拒绝所有的入站连接,所以这里首先将UFW设置为默认规则:
sudo ufw default deny incoming
sudo ufw default allow outgoing
ufw default
也允许使用reject参数
允许SSH连接
一旦启用UFW之后,如果没有允许SSH连接,将无法再通过SSH远程访问主机,所以在开启防火墙之后要确认SSH连接已经设置为允许:
sudo ufw allow ssh
这里创建一条规则,允许ssh连接,其实是允许22端口的连接,等价于:
sudo ufw allow 22
UFW通过/etc/services
知道ssh服务使用的默认端口为22,如果你的SSH服务使用的端口不是22,则应该修改为相应 的端口号。
查看防火墙状态
通过以下命令查看防火墙状态:
sudo ufw status verbose
也可以不带verbose,当防火墙处于关闭状态时只会显示inactive
可以查看刚刚添加的防火墙规则:
sudo ufw show added
show后面还可以跟其他几项参数,可以通过man手册查看REPORTS
启用/禁用UFW 启用UFW命令:
sudo ufw enable
该命令默认会将UFW设置为开机启动,如果发现重启后UFW并没有自动启动,可以手动设置UFW服务开机自动启动:
sudo systemctl start ufw
sudo systemctl enable ufw
记得查看防火墙当前的状态:
sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
禁用UFW:
sudo ufw disable
该命令会禁用防火墙并关闭其开机自动启动
启用/禁用防火墙日志
启用防火墙日志:
sudo ufw logging on
可以指定日志级别sudo ufw logging low|medium|high
日志文件在/var/log/ufw.log
内容形如:
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数据包的源IP
- DST:目的地的IP
- LEN:数据包长度
- TTL:数据 TTL,或称为time to live。
- PROTO:数据包的协议
- SPT:数据包的源端口
- DPT:目标端口
- WINDOW:发送方可以接收的数据包的大小
- SYN URGP:指示是否需要三次握手。 0 表示不需要。
禁用防火墙日志:
sudo ufw logging off
允许连接
默认情况下ufw的allow不加in允许连接是指允许入站连接,如果要指定允许出站,可以加上out,如:
sudo ufw allow in port #允许port入站
sudo ufw allow out port #允许port出站
允许指定端口的所有连接协议
通过刚才设置ssh的规则,可以知道直接allow就是允许连接
允许HTTP 80端口的所有连接:
sudo ufw allow http
等价于:
sudo ufw allow 80
同样可以允许https的连接:
sudo ufw allow https
等价于:
sudo ufw allow 443
允许指定端口的指定协议连接
FTP默认端口为21,连接协议为tcp,那么可以这样:
sudo ufw allow ftp
等价于:
sudo ufw allow 21/tcp
允许指定范围内的端口的指定协议的连接
例如,X11的连接端口范围是6000-6007:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
允许指定IP的连接
通过查看防火墙状态可以看出有个From:
sudo ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
21/tcp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
21/tcp (v6) ALLOW Anywhere (v6)
默认情况是相应端口允许所有IP的连接,可以通过后跟from指定允许某IP的所有连接:
sudo ufw allow from 15.15.15.51
允许15.15.15.51的所有入站连接,命令后面跟to any port 22允许端口22的所有连接:
sudo ufw allow from 15.15.15.51 to any port 22
允许子网的连接
如果要允许IP段15.15.15.1到15.15.15.254的所有连接:
sudo ufw allow from 15.15.15.0/24
并指定连接端口:
```sudo ufw allow from 15.15.15.0/24 to any port 22
### 指定允许通过某个网卡的连接
通过命令中加入`allow in on`即可
首先查看系统中的所有网卡:
ip addr
或者:
ifconfig
假设这里允许eth0的80端口连接:
sudo ufw allow in on eth0 to any port 80
### 允许出站连接
允许相应端口的出站连接,直接allow后面跟out即可:
sudo ufw allow out 34
## 拒绝连接
与允许连接一样,只需要将相应的allow换成deny即可,如拒绝http端口的所有连接:
sudo ufw deny http
等价于:
sudo ufw deny 80
拒绝指定ip的连接:
sudo ufw deny from 15.15.15.51
## 删除规则
UFW有两种方式删除防火墙规则,既可以通过规则号删除,也可以通过实际规则删除,通过规则号删除更容易。
### 通过规则号删除
首先查看所有规则的规则号:
sudo ufw status numbered
Status: active
To Action From
– —— —-
[ 1] 22 ALLOW IN Anywhere
[ 2] 21/tcp ALLOW IN Anywhere
[ 3] 34 ALLOW IN Anywhere
[ 4] 34 ALLOW OUT Anywhere (out)
[ 5] 22 ALLOW OUT 15.15.15.51 (out)
[ 6] 22 (v6) ALLOW IN Anywhere (v6)
[ 7] 21/tcp (v6) ALLOW IN Anywhere (v6)
[ 8] 34 (v6) ALLOW IN Anywhere (v6)
[ 9] 34 (v6) ALLOW OUT Anywhere (v6) (out)
然后直接delete即可,例如删除ftp(21)的连接规则:
sudo ufw delete 2 sudo ufw delete 7
因为即有ipv6,又有ipv4,所以需要删除2个
### 通过规则删除
删除`allow http`规则:
sudo ufw delete allow http
等价于:
sudo ufw delete allow 80
## 重置防火墙规则
sudo ufw reset
该命令将禁用UFW,并且删除所有已经定义的规则,不过默认该命令会对已经设置的规则进行备份
## 备份/还原规则
UFW的所有规则文件都在路径`/etc/ufw/`,其中b`efore.rules`规则为UFW在运行用户自定义的规则之前运行的规则,相应的`before6.rules`对应IPV6。`after.rules`为UFW启用用户自定义规则之后运行的规则。`user.rules`即为用户自定义的规则。
`/etc/default/ufw`文件为UFW的配置文件。
所以可以通过直接备份这些配置文件的方式来备份防火墙规则,需要备份的文件有:
/etc/ufw/.rules /lib/ufw/.rules /etc/default/ufw # 这个配置文件如果没有修改过,可以不备份
修改配置文件之后通过以下命令重新加载配置文件:
sudo ufw reload
## 其他
### 批量禁止IP
while read line; do sudo ufw deny from $line; done < file.txt ``` file.txt里面是一个需要禁止的IP列表
journalctl -b0 SYSLOG_PID=1