简单易用的防火墙工具ufw

简介

LInux原始的防火墙工具iptables由于过于繁琐,所以ubuntu系统默认提供了一个基于iptable之上的防火墙工具ufw。

而UFW支持图形界面操作,只需在命令行运行ufw命令即能看到一系列的操作

UFW 全称为Uncomplicated Firewall,是Ubuntu 系统上默认的防火墙组件, 为了轻量化配置iptables 而开发的一款工具。

UFW 提供一个非常友好的界面用于创建基于IPV4、IPV6的防火墙规则。

Linux 2.4内核以后提供了一个非常优秀的防火墙工具:netfilter/iptables,他免费且功能强大,可以对流入、流出的信息进行细化控制,它可以 实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。

但是iptables的规则稍微有些“复杂”,因此ubuntu提供了ufw这个设定工具,以简化iptables的某些设定,其后台仍然是 iptables。

ufw 即uncomplicated firewall的简称,一些复杂的设定还是要去iptables。(ufw还有图形化的Gufw)

ufw的下载

ufw是ubuntu20.04上的防火墙配置工具,一般是默认安装的,如果你没有安装,则可以使用如下命令来安装。

#ubuntu
sudo apt update
sudo apt install ufw

#centos
yum install -y ufw

启动

一般ufw命令只能在具有sudo权限的用户以及root用户下执行。

在激活的时候,默认是不允许ssh端口连接的,ufw会保持当前的连接,这时候执行sudo ufw allow ssh

来开启ssh的端口。如果不执行,重启后下次ssh连接就不能正常连接,因为ufw默认允许内部流量出去,但不允许外部流量进来。

sudo ufw enable          #启用ufw
sudo ufw disable         #禁用

配置

ufw相关的文件和文件夹

/etc/ufw/:里面是一些ufw的环境设定文件,如 before.rules、after.rules、sysctl.conf、ufw.conf,及 for ip6 的 before6.rule 及 after6.rules。这些文件一般按照默认的设置进行就ok。

若开启ufw之后,/etc/ufw/sysctl.conf会覆盖默认的/etc/sysctl.conf文件

若你原来的/etc/sysctl.conf做了修改,启动ufw后,若/etc/ufw/sysctl.conf中有新赋值,则会覆盖/etc/sysctl.conf的,否则还以/etc/sysctl.conf为准。

当然你可以通过修改/etc/default/ufw中的IPT_SYSCTL=条目来设置使用哪个 sysctrl.conf

默认 IPT_SYSCTL=/etc/ufw/sysctl.conf

/var/lib/ufw/user.rules 这个文件中是我们设置的一些防火墙规则,打开大概就能看明白,有时我们可以直接修改这个文件,不用使用命令来设定。修改后记得ufw reload重启ufw使得新规则生效。

其他设置

/etc/default/ufw

#是否开启ipv6
IPV6=yes

#默认的入口策略
DEFAULT_INPUT_POLICY="DROP"

#默认的出口策略
DEFAULT_OUTPUT_POLICY="ACCEPT"

#默认的转发策略
DEFAULT_FORWARD_POLICY="DROP"

#默认的应用策略
DEFAULT_APPLICATION_POLICY="SKIP"

#默认情况下,ufw只接触自己的链。将其设置为“yes”,以便ufw也能管理内置链。
#警告:将其设置为“yes”将破坏非ufw管理的防火墙规则
MANAGE_BUILTINS=no

# 指定启用ufw之后生效的sysctl配置文件
IPT_SYSCTL=/etc/ufw/sysctl.conf

常用选项

Usage: ufw COMMAND

Commands:
 enable                          启动ufc
 disable                         禁用ufc
 default ARG                     设置默认规则
 logging LEVEL                   设置日志级别
 allow ARGS                      添加允许的规则
 deny ARGS                       添加拒绝的规则 不返回拒绝的消息,相当于丢弃
 reject ARGS                     添加拒绝的规则 返回拒绝的消息
 limit ARGS                      添加30s内访问次数限制的规则
 delete RULE|NUM                 删除规则
 insert NUM RULE                 在某一条规则前插入规则
 reload                          重新加载配置
 reset                           重置ufw配置
 status                          查看状态
 status numbered                 查看状态并以序号的形式展示列表
 status verbose                  查看详细的状态
 version                         查看版本信息

Application profile commands:
 app list                        列出应用程序配置文件
 app info PROFILE                显示PROFILE配置文件上的信息
 app update PROFILE              更新PROFILE配置文件
 app default ARG                 设置默认应用程序规则

查看状态

#简单
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       192.168.10.5                
22/tcp                     ALLOW       240e:eb:111:111::/56              
5666/tcp                   ALLOW       xx:xxx:xxx::30      
5666/tcp                   ALLOW       xxx:xx::31 

#详细
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       192.168.10.5                
22/tcp                     ALLOW       240e:eb:111:111::/56              
5666/tcp                   ALLOW       xx:xxx:xxx::30      
5666/tcp                   ALLOW       xxx:xx::31 

#带序号
$ sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    192.168.10.5            
[ 2] 22/tcp                     ALLOW IN    240e:eb:111:111::/56    
[ 3] 5666/tcp                   ALLOW IN    xx:xxx:xxx::30         
[ 4] 5666/tcp                   ALLOW IN    xxx:xx::31    

修改默认策略

# 入口拒绝
sudo ufw default deny incoming
# 出口允许
sudo ufw default allow outgoing

设置特定端口

sudo ufw allow http #允许http连接
sudo ufw denty http #阻止http连接

特定端口的值都设置在文件/etc/services

设置自定义端口

sudo ufw allow 2222/tcp #允许2222端口的TCP
sudo ufw allow 2222/udp #允许2222端口的UDP
sudo ufw denty 2222/tcp #阻止2222端口的TCP
sudo ufw denty 2222/udp #阻止2222端口的UDP

#如果不带有TCP或者UDP,则默认两种都带上。
sudo ufw allow 2222
sudo ufw allow 2222
sudo ufw denty 2222
sudo ufw denty 2222

设置连续的端口

sudo ufw allow 2200:2222/tcp #允许2200到2222端口的TCP
sudo ufw denty 2200:2222/tcp #阻止2200到2222端口的UDP

设置指定IP连接

sudo ufw allow from xx.xx.xx.xx #允许指定IP访问所有端口
sudo ufw denty from xx.xx.xx.xx #阻止指定IP访问所有端口

设置指定IP访问指定端口

sudo ufw allow from xx.xx.xx.xx to any port 2222 #允许指定IP通过端口2222
sudo ufw denty from xx.xx.xx.xx to any port 2222 #阻止指定IP通过端口2222

设置特定IP访问指定协议的指定端口

sudo ufw allow from xx.xx.xx.xx to any port 2222 proto tcp#允许指定IP通过tcp协议的2222端口
sudo ufw denty from xx.xx.xx.xx to any port 2222 proto tcp #阻止指定IP通过tcp协议的2222端口

对指定网段设置

sudo ufw allow from xx.xx.xx.xx/24 #允许指定网段的连接
sudo ufw denty from xx.xx.xx.xx/24 #阻止指定网段的连接

配置出入

默认的规则都是进来的,我们可以通过inout配置。

sudo ufw allow in 2222 #允许2222端口的流量进来
sudo ufw denty in 2222 #阻止2222端口的流量进来
sudo ufw allow out 2222 #允许2222端口的流量出去
sudo ufw denty out 2222 #阻止2222端口的流量出去

插入规则

sudo ufw insert 1 deny from 192.168.140.3 to any port 80
#在1号规则前面添加一条拒绝192.168.140.3访问80端口的规则

删除规则

sudo ufw delete allow 2222/tcp #删除 allow 2222/tcp这条规则

也可以指定序号删除

sudo ufw status numbered
#执行后的接结果
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere

sudo ufw delete 3 #删除第三条规则。

限制30s访问次数

UFW最有用的功能之一是它能够轻松地对特定端口的连接进行速率限制。

可以使用此功能来限制连接到关键端口的数量。

当您限制一个连接时,UFW将不允许在过去30秒内有任何超过6个连接。

防火墙将阻止任何额外的连接。

格式 sudo ufw limit PORT[/PROTOCOL]

#限制22端口的访问速度
sudo ufw limit 22

重置UFW规则

sudo ufw reset

ufw的规则生效顺序

ufw的规则是,序号最小的先生效。

从上到下依次匹配,匹配到了就执行规则,不再匹配后面的规则

posted @ 2023-04-13 15:50  厚礼蝎  阅读(676)  评论(0编辑  收藏  举报