Hot For Coding
Debian9 UFW防火墙

ufw

之前一直都在使用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

TITLE: Debian9 UFW防火墙

LINK: https://www.qttc.net/494_debian9_ufw.html

NOTE: 转载内容请注明出处