一直学一直嗨,一直嗨一直学

Linux实用工具总结之UFW

文章目录

[隐藏]

  • 允许UFW管理IPV6
  • 设置默认规则
  • 允许SSH连接
  • 查看防火墙状态
  • 允许指定端口的所有连接协议
  • 允许指定端口的指定协议连接
  • 允许指定范围内的端口的指定协议的连接
  • 允许指定IP的连接
  • 允许子网的连接
  • 指定允许通过某个网卡的连接
  • 允许出站连接
  • 通过规则号删除
  • 通过规则删除
  • 批量禁止IP

UFW,即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命令:

$ 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 允许指定端口的所有连接协议">允许指定端口的所有连接协议  

通过刚才设置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/,其中before.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列表

原文出处:tuisec -> https://paper.tuisec.win/detail/5baf9b3a63b2562

Tags: