ubuntu下的UFW防火墙

UFW,即Uncomplicated Firewall,是基于iptables实现的防火墙管理工具,所以实际上UFW修改的是iptables的规则。之所以不直接使用iptables,而要通过UFW进行管理是因为iptables的规则对于新手入门来说有点难,UFW做了很好的包装。

关于ufw、firewalld及iptables之间的关系整理

首先,iptables是最底层、最古老的防火墙系统,所有系统都会存在此防火墙,但一般而言只需保证该防火墙处于完全开放状态即可,其他不用管他,更不需要复杂的配置。而ufw和firewall都是较新linux系统上的替代iptables的工具,当他们同时安装在服务器上时,两者之间就会存在冲突。

事实上,他们很可能同时安装在同一个系统上,并且相互作用影响!而ufw和firewalld默认都安装在ubuntu20上

综上,这里采用的是单纯依靠ufw,也就是需要关掉firewalld服务也取消自启,如果没有取消firewalld的自启,那么开启ufw的时候,也会打开firewalld,但是只配置了ufw的策略的话,firewalld那边没加开放端口策略,端口还是连接不上的,而且如果firewalld开机自启,ufw的自启也会有问题。

所以先要关闭 firewalld的服务,禁用自启

systemctl  firewalld  status    //查看firewalld 服务的状态
systemctl  stop firewalld       //停止firewalld服务
systemctl  disable firewalld    //禁用自启

安装UFW

Ubuntu系统默认已经安装了UFW,如果没有ufw,可以手动安装:

sudo apt-get update
sudo apt-get install ufw

允许UFW管理IPV6

...
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,则应该修改为相应 的端口

启用/禁用UFW

sudo ufw enable  //启用并设置自启
sudo ufw disable  //禁用并删除自启

启用/禁用防火墙日志

sudsudo ufw   logging on    //启用防火墙日志级别
sudo ufw logging low|medium|high  //可以指定日志级别   日志文件在 /var/log/ufw.log
sudo ufw logging off       //禁用防火墙日志

日志文件在/var/log/ufw.log
Sep 16 15:08:14 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   enable   //启用防火墙并设置自启
sudo ufw   disable  //该命令会禁用防火墙并关闭其开机自动启动
sudo ufw   logging on    //启用防火墙日志级别
sudo ufw logging low|medium|high  //可以指定日志级别   日志文件在 /var/log/ufw.log


sudo ufw   status   //查看防火墙状态
sudo ufw   show added  //查看已添加的规则
sudo ufw   allow 22   //添加22端口的入规则
sudo ufw   allow out 20 //添加xx端口的出规则
sudo ufw   deny  80  //拒绝80端口的所有连接
sudo ufw   deny from 15.15.15.51 //拒绝IP为15.15.15.51的所有连接
sudo ufw   delete allow 80//删除80端口的规则
sudo ufw   reset   //重置防火墙规则
sudo ufw   reload  //修改配置文件之后通过以下命令重新加载配置文件


备份/还原规则
UFW的所有规则文件都在路径/etc/ufw/,
其中 before.rules 规则为UFW在运行用户自定义的规则之前运行的规则,相应的before6.rules对应IPV6。
after.rules为UFW启用用户自定义规则之后运行的规则。
user.rules即为用户自定义的规则。
/etc/default/ufw文件为UFW的配置文件。
所以可以通过直接备份这些配置文件的方式来备份防火墙规则,需要备份的文件有:

/etc/ufw/*.rules
/lib/ufw/*.rules
/etc/default/ufw  # 这个配置文件如果没有修改过,可以不备份

其他
批量禁止IP

 while read line; do sudo ufw deny from $line; done < file.txt

file.txt里面是一个需要禁止的IP列表

添加新评论