UFW(即简单防火墙)是iptables
的一个接口,旨在简化防火墙的配置过程。虽然 iptables
是一种可靠且灵活的工具,但对于初学者而言,仍然不知道该如何使用它来正确配置防火墙。UFW可能是一个相对友好的选择。本教程中,我们将介绍如何在Ubuntu 18.04 系统上设置 UFW 防火墙。
前提条件
- Ubuntu 18.04 系统;
- 拥有sudo权限的非root用户;
- 已经安装了ufw;如未安装ufw,执行 sudo apt install ufw 安装。
第一步 — 配置 UFW 开启IPV6
如果我们的Ubuntu服务器启用了IPv6,也需要将UFW配置为开启支持IPv6。使用编辑器打开配置文件:
sudo nano /etc/default/ufw
在文件中,将 IPV6 的值设置为 “yes”:
/etc/default/ufw
IPV6=yes
保存并关闭文件。在UFW启用后,它将被写入IPv4和IPv6防火墙规则。但是,在启用UFW之前,我们要确保已将防火墙配置为允许通过SSH连接。
第二步— 设置默认规则
默认情况下,UFW拒绝所有输入连接并允许所有输出连接。这意味着任何试图访问服务器的人都将无法连接,而服务器中的任何应用程序都将能够与外界通信。
我们先将UFW规则重新设置为默认值,这样我们就可以完全从初始状态开始进行操作。执行以下命令:
sudo ufw default deny incoming
sudo ufw default allow outgoing
第三步 — 开启SSH连接
如果现在启用UFW防火墙,它将拒绝所有传入连接。所以我们需要创建相应的规则,允许合法的Http传入连接。如果我们使用的是云服务器,还需要允许SSH连接,以便可以在本地管理云服务器。
配置服务器允许SSH连接:
sudo ufw allow ssh
通过创建这条防火墙规则,服务器将允许22端口上的所有连接。
我们也可以直接允许22端口的连接,这样可以达到与上面相同的效果:
sudo ufw allow 22
如果已经将SSH配置为使用其他端口,则必须开放相应的端口。例如,如果将SSH端口设置为2222
,则需要开放2222端口:
sudo ufw allow 2222
经过前面的配置,我们的防火墙已经允许SSH连接,我们现在可以启用UFW了。
第四步 — 启动 UFW
要启动 UFW, 允许如下命令:
sudo ufw enable
执行后,我们将收到一条警告信息,指出该命令可能会导致SSH无法连接。因为我们已经设置了允许SSH连接的防火墙规则,因此我们输入“Y”然后回车确认。
UFW防火墙现在已经处于开启状态。我们可以运行如下命令来查看已经设置的UFW规则:
sudo ufw status verbose
第五步 — 开放其他连接
现在,我们可以根据我们的需求来开放相应的端口。设置方法与前面配置22端口的方式相同。
要开放常规的http访问,我们需要允许通过80端口访问:
sudo ufw allow http
或sudo ufw allow 80
要开放HTTPS访问:
sudo ufw allow https
或sudo ufw allow 443
除了为指定的端口配置规则,我们还有其他的几种配置方式。
开放端口范围
因为有些应用程序需要使用多个端口,因此我们可以配置UFW规则,允许某个范围内的所有端口。
例如,要允许X11连接,我们需要开放6000-6007范围内的端口,执行以下命令:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
如果使用UFW开放指定范围内的端口,我们必须要在后面声明协议类型。如果没有声明,则默认允许tcp和udp协议。
指定IP地址
如果我们只想允许来自某个IP地址的连接,比如我们开启来自203.0.113.4的连接,则可以按如下方式设置UFW规则:
sudo ufw allow from 203.0.113.4
如果想允许来自203.0.113.4的用户访问22端口,可以使用如下的命令:
sudo ufw allow from 203.0.113.4 to any port 22
网段
如果想要允许来自同一网段的IP地址访问(例如 203.0.113.1 – 203.0.113.254),执行如下命令:
sudo ufw allow from 203.0.113.0/24
同指定IP一样,我们也可以配置允许 203.0.113.0/24
网段连接的目标端口。例如,我们允许上述网段使用22
(SSH)端口:
sudo ufw allow from 203.0.113.0/24 to any port 22
连接到指定网络接口
如果要创建仅适用于特定网络接口的防火墙规则,可以通过“ allow in on” 来指定网络接口的方式。
执行如下命令,查看网络接口情况:
ip addr
输出如下内容:
Output
Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .
红色文字的内容就是网络接口的名称,一般情况下网络接口有类似 eth0
或者 enp3s2
这样的名字。
如果我们想开放的网络接口是 eth0 ,来允许HTTP访问:
sudo ufw allow in on eth0 to any port 80
如果允许某私有网络接口(eth1)访问MySQL数据库服务器(端口3306),则执行如下命令:
sudo ufw allow in on eth1 to any port 3306
这将允许私有网络内的其他服务器访问MySQL数据库。
第六步 — 拒绝连接
要拒绝HTTP连接,可以使用以下命令:
sudo ufw deny http
如果想拒绝来自 203.0.113.4
的所有连接,则可以使用以下命令:
sudo ufw deny from 203.0.113.4
第七步 — 删除规则
我们不但要知道如何创建UFW防火墙规则,也要知道如何来删除已经配置好的UFW防火墙规则。
删除UFW规则有两种方式:
按规则编码
如果要使用规则编号删除UFW防火墙规则,那么首先要获取防火墙规则的列表。使用如下命令可以获取规则编码:
sudo ufw status numbered
输出内容:
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
如果我们要删除规则2(该规则允许端口80(HTTP)连接),则可以在UFW delete命令中指定该规则,如下所示:
sudo ufw delete 2
按实际规则
我们可以通过实际的规则的项目,来将其删除。例如,如果要删除allow http
规则,则可以这样编写:
sudo ufw delete allow http
此方法将删除IPv4和IPv6规则。
还可以通过删除开放的端口的方式来删除规则:
sudo ufw delete allow 80
此方法将删除IPv4和IPv6规则。
第八步 —查看 UFW 状态和规则
可以使用以下命令检查UFW的状态:
sudo ufw status verbose
如果UFW已经被关闭,将看到类似以下的内容:
Output
Status: inactive
如果UFW处于启动状态,输出内容将显示UFW处于“active”状态,并将列出所有已设置的规则。
Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
第九步 — 关闭或者重置 UFW
如果不想继续使用UFW,则可以使用以下命令将其禁用:
sudo ufw disable
禁用UFW后,之前创建的所有规则将不再有效。如果以后想重新启用UFW,可以使用如下的命令:
sudo ufw enable
如果已经配置了UFW规则,但是想将UFW恢复初始状态,则可以使用reset命令:
sudo ufw reset
重置UFW后,之前设置的防火墙规则全部失效,而UFW则将处于关闭状态。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/setup-firewall-with-ufw-on-ubuntu-18-04/