前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >因为没有网关,我的服务器被 DDoS 了

因为没有网关,我的服务器被 DDoS 了

作者头像
纯洁的微笑
发布于 2020-03-18 01:41:27
发布于 2020-03-18 01:41:27
1.7K00
代码可运行
举报
文章被收录于专栏:纯洁的微笑纯洁的微笑
运行总次数:0
代码可运行

每天早上七点三十分,准时推送干货

大家好,我是鸭血粉丝,想起来之前生产发生的事故,阿粉我的内心到现在都还很忐忑不安,今天我们来学习一个 Kong 以及跟你们聊聊做好网关限流控制的重要性。

背景

事情是这样的,阿粉记得那是一个阳光明媚的早上,窗外一片祥和,整个世界充满了和谐。谁知九点半的时候突然微信报警消息如狂风暴雨般袭来,让人猝不及防,原来是线上的一个接口流量突然暴增,而且居高不下,导致部分业务瘫痪,无法使用。

按照正常的用户量,平常的上班时间不会出现如此大的流量,而且还是在这么短的时间里,对比了下往常的数据,发现访问量飙升几十倍,为了不影响正常的用户,紧急联系运维扩容服务器,稳定业务。然后紧急分析问题,一开始以为是客户端的 APP 升级出现了问题,导致死循环了,但是问了下终端负责人,并没有发布新的 APK。然后事情都这里想必大家都猜到原因了,没错,那就是我们被 DDoS 了。

关于什么是 DDoS,我想大家都是有经验的开发人员,应该都知道,不知道的朋友可以在公众号后台回复【安全】,获取一份 Web 安全相关电子书。

那么遇到这种情况,我们除了扩容服务器还有哪些解决方案呢?

知乎上有一篇问答,里面提到有下面几种方式

  1. 高防服务器
  2. 黑名单
  3. DDoS 清洗
  4. CDN 加速

这几种方案都有相应的特性,不过阿粉我在这里想给大家介绍另一种方案,简单,快速,但是对用户不友好,那就是采用网关限流。当然不同的业务有不同的特性,需要选择适合自己的方式,如果是金融证券企业的话还是请第三方专业的公司去做防护。

API 网关 Kong

介绍

Next-Generation API Platform for Multi-Cloud and Hybrid Organizations. Connect all your microservices and APIs with the industry’s most performant, scalable and flexible API platform.

在 Kong 的官网赫然的写了上面的一句话,翻译起来有点别扭,我就不直译了,大家自己看英文更能理解。简单来说 Kong 就是下一代的 API 网关,用起来就对了。

Kong 是在客户端和服务端之间的 API 网关,Kong 作为网关可以统一转发请求,并且因为 Kong 是基于 Nginx 的,所以本身支持水平扩展;另外 Kong 可以对请求做统一的限流,认证和授权管理,而且这些功能都是基于插件式,即插即用,根据自身业务的特性,可以选择合适的插件来控制相关业务。如果已有的插件不适合,还可以自己开发相应的插件,不过插件的开发是基于 lua 的。

安装步骤
安装数据库

因为 Kong 的底层存储是采用 PostgreSQL 9.5+ 或者 Cassandra 3.x.x 的,所以我们在安装 Kong 之前需要先安装数据库,阿粉这里采用的是 PostgreSQL 9.5,并且服务器是 CentOS7 的版本。

  1. 使用 yum 安装依次执行如下命令
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~$ yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
~$ yum install postgresql95
~$ yum install postgresql95-server

在提示安装y/n 的时候,输入y 即可。

  1. 安装过程很快,没什么难度,就不赘述,主要是安装过后的配置大家需要注意一下,安装完毕过后,我们初始化一下数据库,输入/usr/pgsql-9.5/bin/postgresql95-setup initdb
  2. 初始化完毕过后,我们设置一下服务,然后启动即可,输入如下命令。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~$ systemctl enable postgresql-9.5
~$ systemctl start postgresql-9.5
  1. 到这一步我们 PostgreSQL 的安装已经完整了,但是为了后面Kong 能正常的运行起来,我们需要做一些配置,这里的配置比较重要,网上各种文章说的也都不清不楚,阿粉在多次探索之后终于搞清了其中的缘由,来全场跟着我整齐划一,先说下我们要做的操作步骤,然后我们再依次完成。 1) 给超级管理员设置密码:安装完 PostgreSQL 后,会自动帮我们创建一个 Linux 的用户 postgres,而且这个用户默认是 PostgreSQL 的超级管理员。 2) 创建 Kong数据存储环境,包括用户,密码和数据库:因为我们后面需要启动 Kong ,需要让 Kong 能访问到数据库,所以需要配置数据库,用户和密码。 3) 修改PostgreSQL配置文件
  1. 我们首先使用命令 su - postgres , 然后输入 psql,进入 PostgreSQL 的命令行模式,如下图
  1. 进入命令行模式过后,我们先后完成上面 1 和 2 的步骤,先修改密码,输入\password postgres 如下图,连续输入两次你需要设定的密码,例如 postgres123 一定要记住,后面需要用到这个密码登录的。
  1. 修改完密码过后,我们进行第二步操作,创建用户,密码和数据库,输入语句 CREATE USER kong WITH PASSWORD 'kong123'; 我这里因为之前已经创建过这个用户了,所以提示已经存在,正常是显示 CREATE ROLE
  1. 然后再输入 CREATE DATABASE kong OWNER kong; 创建数据库,并且把这个数据库授权给 kong 用户,输入 GRANT ALL PRIVILEGES ON DATABASE kong to kong; 同样的,我这边已经创建 kong 数据库了,所以显示错误,正常是可以创建成功的。
  1. 到这里,我们在检查一下是否都创建成功,通过输入命令 \du\l 来看下
  1. 如果能看到用户和数据库都有的话,那就说明创建成功了,如果没有说明没有设置成功,按照上面的操作再仔细来一遍。
  2. 现在我们再来修改配置文件,我们先退出命令模式,使用命令 \q 然后再输入 exit 即可推到 Linux 的正常模式。我们输入命令 vim /var/lib/pgsql/9.5/data/pg_hba.conf 来编辑 pg_hba.conf 文件,将最后的几行设置成如图所示,也就是将默认的 peer 修改成 md5
  1. 保存退出,使用 systemctl restart postgresql-9.5 重启服务,这时我们在使用postgres 用户去登录一下看看
  1. 这里需要我们输入密码了,这里的密码就是我们上面步骤 1 设定了 postgres123,输入即可,如果提示psql: FATAL: password authentication failed for user "postgres" 说明密码不对,如果正常进去,那我们再退出来用设置的 kong 用户再去登录看看。输入 psql -U kong -W 再输入之前 kong 的密码,如何能正常的如下图进去说明整个配置都正确。

如果提示 psql: FATAL: Peer authentication failed for user "kong" 可能检查你的配置文件是否修改,以及修改后是否重启。

  1. 最后我们修改一下 postgresql.conf 文件,设置支持远程访问,vim /var/lib/pgsql/9.5/data/postgresql.conf ,将 listen_addresses 修改为下图一致,然后保存退出,重启即可。

到这里,数据库的部分就已经完成了,总结一个小点,peer 模式的 postgres 用户不用密码可以登入,md5 模式下需要密码才能登入。因为Kong 是有密码的远程登录,所以我们要配置密码以及支持远程访问。

下面就可以安装 Kong 了。

安装 Kong
  1. 下载 rpm 文件:wget https://bintray.com/kong/kong-rpm/download_file?file_path=centos/7/kong-2.0.2.el7.amd64.rpm
  2. 执行命令
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
~$ sudo yum install epel-release
~$ sudo yum install kong-2.0.2.el7.amd64.rpm --nogpgcheck

有提示输入 y 就好了

  1. 修改 kong 配置文件,先拷贝一份配置文件 cp kong.conf.default kong.conf 然后编辑一下对应的数据库,用户名和密码,这里的用户名和密码就是上面配置的 kongkong123
  1. 调整一下 kong admin api 的访问地址,后面会用到
  1. 输入 kong start 启动 kong
  2. 如果出现下面提示,则输入 kong migrations bootstrap 然后再次启动 kong
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error: /usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16: Database needs bootstrapping or is older than Kong 1.0.

To start a new installation from scratch, run 'kong migrations bootstrap'.

To migrate from a version older than 1.0, migrated to Kong 1.5.0 first.
If you still have 'apis' entities, you can convert them to Routes and Services
using the 'kong migrations migrate-apis' command in Kong 1.5.0.

  Run with --v (verbose) or --vv (debug) for more details
  1. 检验是否安装成功,输入curl http://127.0.0.1:8001 如有下面的信息输出表示安装成功

至此我们Kong 也安装好了,下面为了日后使用方便,我们还需要安装一个管理页面,Kong 的管理页面工具网上有好几个,比如 KongaKong admin ui 等,阿粉这里也大家介绍的是Kong admin ui

安装 Kong Admin UI

我们打开 GitHub 地址 https://github.com/pocketdigi/kong-admin-ui,可以看到提供四种部署方式,

第一种是可以直接使用不用部分,第二种和第三种都是下载使用 Nginx 部署,第四种是采用 docker 进行部署。作为有经验的开发人员,阿粉还是采用 docker 进行安装。直接一行命令搞定即可。Docker 的安装不是本文的重点,感兴趣的可以自行 Google。

安装完成后打开 8899 端口可以看到如下界面,在 Api url 里面填入 KongApi 信息即可,如http://127.0.0.1:8001 然后点击进入。

进入界面如下:

至此,整个Kong 环境的搭建就已经完成了,剩下的就是使用了,流量控制,授权访问等更多特性,大家可以自行去尝试,想想如果当时阿粉就知道了 Kong 是不是就可以避免那一次的事故。

写在最后

其实这个世界上天才真的很少,大部分人都还没有到拼智商的地步;作为普通人我们拼的是努力,拼的是圈子,拼的是对这个世界的认知,接触更多更厉害的人,你迟早也会厉害起来。扫描下文二维码,加入我们的知识星球,有 1700+ 优秀的人与你一起进步,阿粉在知识星球等你!

< END >

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 纯洁的微笑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
又肝了下微服务 API 网关“金刚”,也是蛮香的~
Kong 是由 Mashape 公司开源的云原生、高性能、可扩展的微服务 API 网关。它基于 OpenResty 实现,使用 Cassandra 或 PostgreSQL 存储数据。
芋道源码
2020/06/16
2K0
又肝了下微服务 API 网关“金刚”,也是蛮香的~
kong网关架构_kong网关性能
Kong是一个使用了lua-nginx-module运行在Nginx之上的Lua应用。Kong是一个成熟的API网关解决方案。API 网关,即API Gateway,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API托管服务,从而帮助服务的开发者便捷地对外提供服务,而不用考虑安全控制、流量控制、审计日志等问题,统一在网关层将安全认证,流量控制,审计日志,黑白名单等实现。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供API发布、管理、维护等主要功能。开发者只需要简单的配置操作即可把自己开发的服务发布出去,同时置于网关的保护之下。
全栈程序员站长
2022/10/01
2K0
kong网关架构_kong网关性能
微服务网关Kong系列文章之二:Kong安装
如我们在术语部分的介绍,服务是上游服务的抽象,可以是一个应用,或者具体某个接口。Kong 提供了管理接口,我们可以通过请求 8001 管理接口直接创建,也可以通过安装的管理界面,实现的效果是一样的。
mervinwang
2021/01/20
8850
微服务网关Kong系列文章之二:Kong安装
kong网关集群部署[通俗易懂]
下载安装 因为kong的界面系统konga 0.14不支持v12版,只能安装v11版
全栈程序员站长
2022/09/30
1.8K0
微服务API网关-Kong初探
Kong是一个clould-native、快速的、可扩展的、分布式的微服务抽象层(也称为API网关、API中间件或在某些情况下称为服务网格)框架。更确切地说,Kong是一个在Nginx中运行的Lua应用程序,并且可以通过lua-nginx模块实现。Kong不是用这个模块编译Nginx,而是与OpenResty一起发布,OpenResty已经包含了lua-nginx-module。OpenResty 不是 Nginx的分支,而是一组扩展其功能的模块。
KaliArch
2019/09/29
5.5K2
微服务API网关-Kong初探
kong安装与部署
目标任务:kong: v0.14.x, postgresql: v10.5(注意:psql版本必须与kong版本对应)
全栈程序员站长
2022/09/13
1.3K0
PostgreSQL入门
这时相当于系统用户postgres以同名数据库用户的身份,登录数据库,这是不用输入密码的。如果一切正常,系统提示符会变为"postgres=#",表示这时已经进入了数据库控制台。以下的命令都在控制台内完成。
老马
2019/05/25
2K0
postgresql主备配置步骤
rpm -e --nodeps postgresql95-contrib-9.5.3-2PGDG.rhel7.x86_64
felixxue
2022/12/29
1.5K0
API 网关 Kong
Kong 是一款基于 OpenResty 的 API 网关平台,在客户端和(微)服务之间转发 API 通信。Kong 通过插件的方式扩展自己的功能,其中包括身份验证、安全控制、流量控制、熔断机制、日志、黑名单、API 分发等等众多功能。下图是官网给出的传统项目架构和使用 Kong 的架构:
李振
2021/11/26
1.9K0
API 网关 Kong
PostgreSQL入门和高维向量索引
wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-ppc64le/pgdg-centos96-9.6-3.noarch.rpm yum install pgdg-centos96-9.6-3.noarch.rpm
黄规速
2022/04/17
1.9K0
在CentOS 7上安装&配置PostgreSQL 12
PostgreSQL安装成功之后,会默认创建一个名为postgres的Linux用户,初始化数据库后,会有名为postgres的数据库,来存储数据库的基础信息,例如用户信息等等,相当于MySQL中默认的名为mysql数据库。
KenTalk
2020/03/02
16.6K1
CentOS7安装配置PostgreSQL9.6 转
PostgreSQL 9.6.3:https://www.postgresql.org/download/linux/RedHat/
双面人
2019/05/21
1.4K0
PostgreSQL基础(二):PostgreSQL的安装与配置
PostgreSQL不推荐使用root管理,在安装成功postgreSQL后,他默认会给你创建一个用户:postgres
Lansonli
2024/09/06
5K0
PostgreSQL基础(二):PostgreSQL的安装与配置
如何在CentOS 7上安装PostgreSQL关系数据库
PostgreSQL关系数据库系统是一个功能强大的,可扩展的,并符合标准的开源数据库平台。本指南将帮助您在CentOS 7 Linode上安装和配置PostgreSQL。
沈唁
2018/09/20
5K0
搭建您自己的SonarQube
在devops流水线中,所有的代码都存储在代码仓库中,通过git的一些方法可以完成代码的codereview的卡点设置,那么下一步需要搭建的服务是什么呢?下一步就是Sonar,通过Sonar完成代码质量的管理。
Criss@陈磊
2019/10/09
1.9K0
搭建您自己的SonarQube
PostgreSQL 操作命令
认证方式除“trust”外,还有“peer”, “ident”, “md5”, “password”等
Kevin song
2020/02/19
1.2K0
PostgreSQL 操作命令
Linux 上安装 PostgreSQL
可以参考:https://www.cnblogs.com/freeweb/p/8006639.html#top
别先生
2020/09/01
6.6K0
Linux 上安装 PostgreSQL
CentOS7 部署 PostgreSQL
陳斯托洛夫斯記
2024/08/07
1340
01 . PostgreSQL简介部署
PostgreSQL简介 简介 PostgreSQL在业内通常也简称PG,是一个关系型数据库管理系统,适用于各种Linux操作系统、Windows、Solaris、BSD和Mac OS X。PostgreSQL遵循BSD许可,是一个开源软件,PostgreSQL作为全球第四大关系型数据库服务,正在以飞快的速度发展,目前已经广泛用在各个行业,PostgreSQL本身具有哪些功能特点,请往下看 # 1. PostgreSQL数据库是目前功能最强大的开源数据库,是架构上和Oracle最接近的开源数据库.它基
iginkgo18
2020/09/27
1.2K0
PG主从数据库搭建
1、使用postgres用户登录(PostgresSQL安装后会自动创建postgres用户,无密码)
Karl Du
2020/10/23
1.6K0
PG主从数据库搭建
相关推荐
又肝了下微服务 API 网关“金刚”,也是蛮香的~
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验