Linux运维知识之Linux实用工具总结之UFW
小标 2018-12-21 来源 : 阅读 2002 评论 0

摘要:本文主要向大家介绍了Linux运维知识之Linux实用工具总结之UFW,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

本文主要向大家介绍了Linux运维知识之Linux实用工具总结之UFW,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。


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 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/,其中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列表

 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved