让你的服务器更安全 - 使用 UFW 开启防火墙

UFW(Uncomplicated Firewall) 是一个非常容易上手的 iptables 类防火墙配置工具,这个工具可以对出入服务的网络数据进行分割、过滤、转发等等细微的控制,进而实现诸如防火墙、 NAT 等功能。它简化了 iptable 那复杂的配置过程。我们都知道 iptable 非常强大、灵活,但是对于初学者来学习如何使用它正确的配置防火墙是比较难的,但是你又想保护你的网络,UFW 将会是你最好的选择。

下面我将会解释如何在 Ubuntu 14.04 中使用 UFW 安装、配置防火墙。

使用前提

在你使用这片教材之前,我希望你有一个独立的 no-root 超级管理员用户 - 拥有 root 的所有权限。你可以查看我这篇文章 让你的服务器更安全 - 初始化服务器配置 中创建用户相关步骤。

一般来说 UFW 是默认会被安装的,假如你的系统中没有安装,你可以使用 apt-get 来安装。

$ sudo apt-get install ufw

使用 IPv6

如果你的 Ubuntu 服务器已启用 IPv6,为了确保 UFW 能支持 IPv6 协议。

打开 UFW 的相关配置,使用你最喜欢的编辑器,这里我使用 vim

$ vim /etc/default/ufw

然后,确认 IPv6 是否设置成 yes,如果没有则设置为 yes,大致如下:

...
IPV6=yes
...

退出并保存,当 UFW 开启时,它将会同时支持 IPv4IPv6 的配置规则。

查看 UFW 状态和配置规则

在任何时间,你都可以检查它的状态和配置规则,如下:

$ sudo ufw status verbose

默认情况下,UFW 并没有开启,它将会输出如下结果:

# Output:
Status: inactive

假如你已经开启了防火墙,它将会输出状态为 active,并列出你所配置的规则。例如:你允许来自任何地方的 SSH 连接,将将会输出如下结果:

# Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

像这样通过 status 就可以检查你的防火墙状态和配置了。

注意:在开启防火墙之前,你需要确保你允许了 SSH 连接,否则当你关闭远程连接后,你就无法再连上了。博主自己就曾用这招坑了自己!:joy:

设置默认规则

当你需要开始配置你的防火墙规则时,首先,你需要设置默认规则:拒绝所有流入连接,允许流出连接。意思是,不允许任何人连接你的主机,允许主机内的任何应用访问外部网络。

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

开启 SSH 连接

上面我们已经设置了默认不接受任何外来连接,同样也包括了 SSH 使用的 22 端口。所以,为了我们能通过 SSH 来操作主机,所以我们需要配置允许 SSH 连接到我们的主机上。

通过如下命令来配置:

$ sudo ufw allow ssh

这个配置将会允许所有 22 端口上的连接,默认 22 端口是被 SSH 监听的。UFW 知道什么是 ssh,因为它在 /etc/services 中已经被定义好了。

当然我们也可以指定允许 22 端口的所有连接:

$ sudo ufw allow 22

这个和上面一个命令的作用是一样的。

开启 UFW

上面已经允许 SSH 连接,我们就可以放心的开启防火墙了,使用如下命令:

$ sudo ufw enable

在这个过程中,你将会收到一条警告信息(command may disrupt existing ssh connections.),需要你手动确认,输入 y 按回车即可。

:smile: 太棒了,我们已经开启了防火墙,你可以再一次通过 sudo ufw status verbose 来查看。

配置其他规则

HTTP/HTTPS

当我们部署 WEB 引用服务器时,我们需要使用 80443 端口来接受请求,这是我们需要开启这两个端口,操作如下:

$ sudo ufw allow http
$ sudo ufw allow https

或者,你可以指定端口:

$ sudo ufw allow 80
$ sudo ufw allow 443

FTP

FTP 连接一般用于非加密文件传输,它默认监听 21 端口,也许你永远都不会用到。

$ sudo ufw allow ftp

或者,你可以指定端口:

$ sudo ufw allow 21/tcp

指定端口范围

你可以指定一个端口范围,来配置防火墙策略,当有些服务需要使用多个端口时,这个就起到了作用。

如,为了允许所有 X11 连接,他们使用的端口范围是 6000 ~ 6007,你可以这样配置:

$ sudo ufw allow 6000:6007/tcp
$ sudo ufw allow 6000:6007/udp

指定端口范围时,你必须指定协议类型(TCPUDP)。

指定 IP 地址

使用 UFW 工作的时候,你可以指定 IP 地址,例如:假如你想允许来自某一个 IP 所有连接,你可以指定 from 这个 IP 地址。

$ sudo ufw allow from 192.168.66.213

上面的配置将会允许 192.168.66.213 连接到我们主机的任何开放了的端口。

我们还可以指定只允许某个 IP 到主机某一个端口的连接,拒绝某个 IP 到主机其他所有端口的连接,我们可以这样做:

$ sudo ufw allow from 192.168.66.213 to any port 80

上面配置中,我们只允许 192.168.66.213 连接到我们的 80 端口。

配置子网

当你需要允许子网内所有的 IP,你可以 CIDR 的格式来配置,例如:当你需要允许 IP 地址从 192.168.1.1192.168.1.254 内所有 IP 的连接时,你可以这样配置:

$ sudo ufw allow from 192.168.1.1/24

当然,像上面一样,我们也可以同时指定端口号:

$ sudo ufw allow from 192.168.1.1/24 to any port 22

上面配置中,我们允许 192.168.1.1/24 内的所有主机通过 SSH 连接我们的主机。

指定网络接口

如果您想创建只适用于特定网络接口的防火墙规则,您可以通过指定 allow in on 加上网络接口的名称 来配置规则。

在配置之前你可以先查找所有的网络接口,再配置:

$ ip addr
# Output Excerpt:
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
...
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
...

上面列举了网络接口的一些信息,他们通常叫做 eth0eth1 之类的名字。

假如你的 eth0 为公网地址,你同事需要向外开放 80 端口,你可以如下操作:

$ sudo ufw allow in on eth0 to any port 80 

上面配置中,你的服务器将会接受来自于公网的 HTTP 请求。

另外,假如你想你的 MySQL 服务器(监听 3306)只接受通过内网网卡 eth1 的请求,你可以这样:

$ sudo ufw allow in on eth1 to any port 3306 

如上配置中,只有在用一个内网中的服务器才能连接你的 MySQL 服务器。

添加拒绝连接规则

假如你没有修改过我们上面设置过的默认规则,它将会拒绝所有的外来连接,通常情况下,这样大大的简化了你配置一系列的防火墙规则,比如要求你创建指定端口啊,指定 IP 啊等等。但是,如果你想拒绝某个 IP 源或者某个网段的特定连接;也许你知道攻击源就来自于某个 IP 或某个网段;再者,你想把默认外接规则(incomming rule) 设置为 allow,这是你就需要指定某些拒绝规则了。

配置 拒绝规则 ,更我们上面配置 允许规则 是一样的方式,只不过将 allow 改为 deny

如:拒绝所有 HTTP 连接,即:拒绝所有连接 80 端口。

sudo ufw deny http

当然,也可以指定端口号:

sudo ufw deny 80

拒绝某一个 192.168.1.10 通过 SSH 连接到我们的主机上:

$ sudo ufw deny from 192.168.1.10 to any port 22

如果你想书写更多的 拒绝规则 ,请参考之前描述的 允许规则 书写方式,将 allow 改为 deny 即可。

现在我们知道如何添加 允许规则拒绝规则,但是我们还不知道如何删除规则,没关系,我们再往下看。

删除规则

众所周知,如何删除一条防火墙规则和如何创建一条防火墙规则一样重要,UFW 提供了两种路径删除他们:

指定规则序号删除

每一个规则在创建时都会分配一个序号,你可以将它理解为数据库的自增 ID 吧,可以通过他来进行更方便的操作,你可以通过如下方式查看序号:

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 端口的连接,如下操作:

$ sudo ufw delete 2

注意:如果你启用了 IPv6 规则,这同时也将删除相应的 IPv6 规则。

指定实际规则删除

如果你不想通过 规则序号 来删除,你可以指定 创建时的参数格式 来删除,例如:当你使用 sudo ufw allow http 创建的规则时,你可以通过如下方式删除:

$ sudo ufw delete allow http

同样你可以指定端口号来替代服务名:

$ sudo ufw delete allow 80

注意:这种方式将会同时删除相应的 IPv4 和 IPv6规则。

关闭 UFW

现在,由于某些我们不想开启防火墙了,我们可以关闭它:

$ sudo ufw disable

重置 UFW 的配置

将入你配置了好多规则,但是你现在需要重新配置,抛弃之前的配置规则,你可以这么做:

$ sudo ufw reset

这个命令将会删除你之前配置的所有规则,但是默认规则将会被保留。

总结

服务器安全一直都是一个重要的话题,开启防火墙使我们保护服务器安全的重要手段之一,所以,无论什么情况下,我们都应该为服务器开启防火墙。当然,开放 SSH 也是必不可少的,与此同时,你可以允许一些连接到您的服务器,同时并限制一些不必要的连接,这样您的服务器才会更加的安全的提供服务。

想了解更多的 UFW 防火墙配置,你可以参考这篇文章:UFW Essentials: Common Firewall Rules and Commands

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • CentOS7下Firewall防火墙配置用法详解 centos 7中防火墙是一个非常的强大的功能了,但对于cen...
    很少更新了阅读 5,687评论 0 9
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 防火墙的概念iptables的简介iptables命令网络防火墙NATfirewalld服务 一、防火墙的概念 (...
    哈喽别样阅读 1,813评论 0 1
  • LInux原始的防火墙工具iptables由于过于繁琐,所以ubuntu系统默认提供了一个基于iptable之上的...
    很少更新了阅读 9,286评论 0 4
  • “春生夏长,秋收冬藏”。秋天,万物生机都在往回收,植物把收生机获收到果里,收回到根里,慢慢甩掉枝上的叶子,迎接冬天...
    石竹阅读 1,383评论 8 6