ufw作为ubuntu20.04的默认防火墙,刚好最近需要用到防火墙,所以研究了ufw的基本用法。
ufw的下载
ufw是ubuntu20.04上的防火墙配置工具,一般是默认安装的,如果你没有安装,则可以使用如下命令来安装。
sudo apt update
sudo apt install ufw
查看ufw的状态
一般ufw是不会开启的,激活ufw用sudo ufw enable
来激活。需要注意的是,在激活的时候,默认是不允许ssh端口连接的,ufw会保持当前的连接,这时候执行sudo ufw allow ssh
来开启ssh的端口。如果不执行,重启后下次ssh连接就不能正常连接,因为ufw默认允许内部流量出去,但不允许外部流量进来。
你可以通过下面的命令来检查ufw的状态。
sudo ufw status verbose
一般ufw命令只能在具有sudo权限的用户以及root用户下执行。执行完上面的命令后,如果开启了ufw则会输出下面这段文字和防火墙的规则。
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
如果没有激活ufw,则输出应该为Status: inactive
。
查看ufw的规则还有另一条命令
sudo ufw status
这条指令相比于上面的sudo ufw status verbose
。这条指令则没有上面那条输出的信息多,上面那条指令会输出更为详细的端口规则。
还有一条查看的命令会给规则前面加上序列号,通过序列号可以删除规则。
sudo ufw status numbered
端口规则设置
ufw激活后的默认的策略是允许出去,不允许流量进来,这个可以在ufw的配置文件中看到。在配置文件/etc/default/ufw
中可以看到DEFAULT_OUTPUT_POLICY="ACCEPT"
,如果需要端口可以出去,则需要自己配置。
可以通过ufw的命令来直接修改端口规则。
ufw allow port_number/protocol
ufw配置了一些特定的端口的规则,我们可以直接用。
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 #允许2222端口的连接
sudo ufw denty 2222 #阻止2222端口的连接
如果要配置一组连续的端口,则可以这样。
sudo ufw allow 2200:2222/tcp #允许2200到2222端口的TCP
sudo ufw denty 2200:2222/tcp #阻止2200到2222端口的UDP
设置特定IP连接
我们可以设置特定的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 poart 2222 #允许特定IP通过端口2222
sudo ufw denty from xx.xx.xx.xx to any poart 2222 #阻止特定IP通过端口2222
还可以设置特定的子网连接
sudo ufw allow from xx.xx.xx.xx/24 #允许特定子网连接
sudo ufw denty from xx.xx.xx.xx/24 #阻止特定子网连接
配置出入
默认的规则都是进来的,我们可以通过in
和out
配置。
sudo ufw allow in 2222 #允许2222端口的流量进来
sudo ufw denty in 2222 #阻止2222端口的流量进来
sudo ufw allow out 2222 #允许2222端口的流量出去
sudo ufw denty out 2222 #阻止2222端口的流量出去
删除端口规则
删除有两种方式。
通过在规则前面加上delete删除规则。
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 #删除第三条规则。