之前一直都在使用iptables好多年,因为它是系统基础的一部分,很多Linux发行版本都适用它。可每次需要添加端口删除端口的时候都需要重新查询手册,虽然功能很强大,但太复杂了。
今天我们要介绍的是一款非常简单容易上手的防火墙UFW,英文名: Uncomplicated Firewall,中文名应该叫简单防火墙。它其实底层还是使用了iptables,它基于iptables封装了一些非常日常易用的命令。
安装
使用Debian自带的包管理工具apt就可以安装
sudo apt install ufw -y
检查UFW状态
一旦你成功安装了UFW,你可以随时随地通过一下命令查看UFW的状态
sudo ufw status verbose
它应该会输出类似这样的信息
Status: inactive
UFW默认是关闭的,以上信息应该是默认情况下会提示inactive表示未开启,这默认关闭状态主要是担心服务器出现lockout的情况,尤其你是通过远程位置ssh连接到你服务器的进行安装UFW的,如果默认启用会直接造成你的ssh 22端口连接被强制断开。如果出现这种情况,只能通过母机登录解决了,如果你使用的是阿里云也可以通过网页端的控制台登录处理。
如果你开启了,它的输出应该类似这样
root@WEB_APP1:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
默认规则
这里要注意看了,在默认规则里UFW会禁止所有的入口连接,包括常用的SSH 22端口以及Web常用的80、443端口。也就是你如果不修改默认配置文件的情况下开启了UFW,那么你将无法通过任何端口访问你的服务器,包括SSH连接。
默认的配置文件在/etc/default/ufw
然而你不需要直接编辑它,因为UFW提供了一套非常易用的命令给用户快速使用
应用配置
当你安装UFW之后apt会创建一个目录/etc/ufw/applications.d
,主要是列出应用名称,能列出多少取决于你安装了什么应用
root@WEB_APP1:~# ufw app list
Available applications:
AIM
Bonjour
CIFS
DNS
Deluge
IMAP
IMAPS
IPP
KTorrent
Kerberos Admin
Kerberos Full
Kerberos KDC
Kerberos Password
LDAP
LDAPS
LPD
MSN
MSN SSL
Mail submission
NFS
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
POP3
POP3S
PeopleNearby
SMTP
SSH
Socks
Telnet
Transmission
Transparent Proxy
VNC
WWW
WWW Cache
WWW Full
WWW Secure
XMPP
Yahoo
qBittorrent
svnserve
你可以通过应用名字开启相应使用的端口,比如我要看OpenSSH服务使用了哪些端口可以这么看
root@WEB_APP1:~# ufw app info OpenSSH
Profile: OpenSSH
Title: Secure shell server, an rshd replacement
Description: OpenSSH is a free implementation of the Secure Shell protocol.
Port:
22/tcp
开发端口
我们必须要在允许必要的端口访问之后才能开启UFW,所以下面我们开启一些常用的端口
要允许远程位置通过SSH服务连接你的服务器,可以这么开启,OpenSSH名字是通过ufw app list
命令获取的
sudo ufw allow OpenSSH
如果你要开启的服务名称不在ufw app list
里,也无需担心,我们可以直接定义要开启的端口,比如我们要开启80和443端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
如果你要开启的开端是一个区间值,可以这么用
sudo ufw allow 9100:9200/tcp
当然,你也可以开启udp协议的
sudo ufw allow 9100:9200/udp
也可以指定IP地址
sudo ufw allow from 192.168.2.180
如果IP地址还不够,还能在加端口限制
sudo ufw allow from 192.168.2.180 to any port 22
如果IP地址不够灵活,也可以指定网段,比如允许192.168.2.1到192.168.2.254访问端口为3306的MySQL服务
sudo ufw allow from 192.168.2.0/24 to any port 3306
现在的机器有可能配置多块网卡,所以UFW也支持绑定网卡规则,假设你服务器有一块网卡名称叫eth2
,你需要开启它的3306端口,可以这么干:
sudo ufw allow in on eth2 to any port 3306
拒绝连接
比如你有一个站点,并通过UFW对外开放80端口,但你监测到服务器总是被一个IP地址为34.56.81.30
的IP进行DOS攻击,很轻松的使用UFW拒绝这个IP的访问
sudo ufw deny from 34.56.81.30 to any port 80
但通常情况下,都是通过网段限制,如
sudo ufw deny from 34.56.81.0/24 to any port 80
删除规则
我们可以通过一下命令查看开启了哪些规则
root@WEB_APP1:~# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 443/tcp ALLOW IN Anywhere
[ 3] 80/tcp ALLOW IN Anywhere
[ 4] OpenSSH (v6) ALLOW IN Anywhere (v6)
[ 5] 443/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 80/tcp (v6) ALLOW IN Anywhere (v6)
注意,一定要加status,否则左侧第一列的ID将不会显示,这个ID是每一条规则的唯一值,我们删除规则需要使用它,比如我们要删除80端口
sudo ufw delete 3
开启关闭重置防火墙
一切都配置好了之后,我们可以开启UFW防火墙了
sudo ufw enable
如果你需要关闭UFW防火墙
sudo ufw disable
如果你觉得你的规则配置的太混乱,想重新配置可以reset一下,所有的配置会丢失还原到初始状态,这个要谨慎使用
sudo ufw reset