当前位置: 首页 > 科技观察

因为没有网关,我的服务器是DDoSed

时间:2023-03-14 00:57:40 科技观察

大家好,我是鸭血粉。我想起了之前制作中发生的事故。我还是很不安。今天我们就来学一个Kong,跟着学。下面说说做好网关限流控制的重要性。背景是这样的,阿芬记得那是一个阳光明媚的早晨,窗外一片祥和,整个世界都充满了和谐。没想到,9点30分,微信报警信息突然如暴风雨般袭来,让人猝不及防。原来是某个线上接口的流量突然暴增,而且居高不下,导致部分业务瘫痪,无法使用。按照正常的用户量,正常工作时间不会有这么大的流量,而且还是在这么短的时间内。对比平时的数据,发现访问量猛增了数十倍。为了不影响正常用户,紧急联系运维扩容服务器稳定业务。然后我紧急分析了问题。一开始以为是客户端APP升级的问题,导致死循环,但是问了终端负责人,也没有出新的APK。那么一切就到这里了,想必大家也猜到了原因,是的,我们被DDoSed了。关于什么是DDoS,我想大家都是有经验的开发者,应该都知道吧。不知道的朋友可以在公众号后台回复【安全】获取Web安全相关电子书。那么对于这种情况,我们除了扩容服务器还有哪些解决方案呢?知乎上有个问答,里面提到了以下几种方法:高防服务器黑名单DDoS清洗CDN加速这几种方案都有相应的方案特点,不过阿粉,我这里想介绍另外一种方案,简单快捷,但不方便使用,那就是使用网关限流。当然,不同的业务有不同的特点,需要选择适合自己的方法。如果你是金融证券公司,你应该请第三方专业公司做保护。APIGatewayKong为多云和混合组织引入了下一代API平台。将您所有的微服务和API与业界性能最高、可扩展性和灵活性最高的API平台连接起来。上面这句话是我在Kong官网上写的,翻译起来有点生疏,就不直译了。你可以自己阅读英语来更好地理解它。简单来说,Kong就是下一代API网关,用起来刚刚好。Kong是客户端和服务器之间的API网关。Kong作为网关,可以统一转发请求,并且由于Kong是基于Nginx的,所以支持水平扩展;另外,Kong可以对请求进行统一的限流、认证和授权管理,并且这些功能都是基于插件的,即插即用,可以根据自己业务的特点,选择合适的插件控制相关业务。如果现有的插件不合适,也可以自己开发相应的插件,但是插件的开发是基于lua的。安装数据库的安装步骤因为Kong的底层存储使用的是PostgreSQL9.5+或者Cassandra3.x.x,所以在安装Kong之前我们需要先安装好数据库。这里阿粉使用的是PostgreSQL9.5,服务器是CentOS7版本。1、使用yum安装依次执行以下命令~$yuminstallhttps://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm~$yuminstallpostgresql95~$yuminstallpostgresql95-server当提示安装y/n时,输入y。2、安装过程很快,没有难度,就不赘述了。最主要的是安装后需要注意配置。安装完成后,我们初始化数据库,进入/usr/pgsql-9.5/bin/postgresql95-setupinitdb3。初始化完成后,我们来设置服务,然后启动它,输入以下命令。~$systemctlenablepostgresql-9.5~$systemctlstartpostgresql-9.54。至此,我们的PostgreSQL安装就完成了,但是为了后面Kong能够正常运行,我们还需要做一些配置。这里的配置比较重要,网上各种文章都说不清楚,阿芬经过多方摸索终于想通了原因,齐声跟着我来到台下。先说说我们要做的操作步骤,接下来我们会一一完成。1)设置超级管理员密码:安装PostgreSQL后,会自动为我们创建一个Linux用户postgres,该用户默认为PostgreSQL超级管理员。2)创建Kong的数据存储环境,包括用户、密码和数据库:因为后面需要启动Kong,让Kong访问数据库,所以需要配置数据库、用户和密码。3)修改PostgreSQL配置文件5.我们先使用命令su-postgres,然后输入psql进入PostgreSQL的命令行模式,如图6所示,进入命令行模式后,我们完成了步骤1和上面的2,先修改密码,输入\passwordpostgres如下图,连续两次输入你需要设置的密码,比如postgres123一定要记住,后面登录时需要用到这个密码。7、修改密码后,我们进行第二步创建用户、密码和数据库,输入语句CREATEUSERkongWITHPASSWORD'kong123';我之前创建过这个用户,所以提示已经存在,正常显示CREATEROLE8。然后输入CREATEDATABASEkongOWNERkong;创建一个数据库,并将这个数据库授权给kong用户,输入GRANTALLPRIVILEGESONDATABASEkongtokong;同样的,我这里创建了一个kong数据库,所以报错,可以正常创建成功。9、此时我们正在检查是否创建成功。输入命令\du和\l可以看到后面的10个,如果能同时看到用户和数据库,说明创建成功。如果没有提示,说明没有设置成功,仔细再按照上面的操作。11、现在我们再次修改配置文件。我们先退出命令模式,使用命令\q,然后输入exit,进入linux的正常模式。我们输入命令vim/var/lib/pgsql/9.5/data/pg_hba.conf编辑pg_hba.conf文件,最后几行如图设置,即修改defaultpeer为md5。12、保存退出,使用systemctlrestartpostgresql-9.5重启服务。这个时候我们是用postgres用户登录看看。13.我们需要在这里输入密码。这里的密码是我们上面第1步设置的postgres123,输入Yes,如果提示psql:FATAL:passwordauthenticationfailedforuser"postgres"说明密码不正确,如果正常输入,那么我们会登录退出并使用setkong用户登录。输入psql-Ukong-W然后输入之前的kong密码。如下图如何正常进入,说明整个配置是正确的。如果提示psql:FATAL:Peerauthenticationfailedforuser"kong",你可以检查你的配置文件是否被修改,修改后是否重启。14、最后我们修改postgresql.conf文件,设置支持远程访问,vim/var/lib/pgsql/9.5/data/postgresql.conf,修改listen_addresses与下图一致,然后保存退出,并重新启动。至此,数据库部分已经完成。综上所述,peer模式的postgres用户可以免密码登录,md5模式登录需要密码。因为kong是远程密码登录,所以我们需要配置密码,支持远程访问。现在你可以安装Kong了。安装孔1。下载rpm文件:wgethttps://bintray.com/kong/kong-rpm/download_file?file_path=centos/7/kong-2.0.2.el7.amd64.rpm2。执行命令~$sudoyuinstallel-release~$sudoyumininstallkong-2.0.2.el7.amd64.rpm--nogpgcheck提示输入y。3、修改kong配置文件,先复制一个配置文件cpkong.conf.defaultkong.conf然后编辑对应的数据库,用户名和密码,这里的用户名和密码是上面配置的kong和kong1234。调整kongadminapi的访问地址,后面会用到。5、输入kongstart启动kong6。如果出现如下提示,输入kongmigrationsbootstrap,然后再次启动kongError:/usr/local/share/lua/5.1/kong/cmd/utils/migrations.lua:16:DatabaseneedsbootstrappingorisolderthanKong1.0.Tostartanewinstallationfromscratch,run'kongmigrationsbootstrap'。Tomigratingfromaversionolderthan1.0,migratedtoKong1.5.0youstillhave.Ifapi''entities,youcanconvertthemtoRoutesandServicesusingthe'kongmigrationsmigrate-apis'commandinKong1.5.0.Runwith--v(verbose)or--vv(debug)formoredetails7.检查是否安装成功,输入curlhttp://127.0.0.1:8001如果有如下信息输出说明安装成功。至此,我们也安装了Kong。为了以后使用方便,我们还需要安装一个管理页面。网上有几个Kong管理页面工具,比如Konga,KongadMinui等。在这里,你正在介绍Kongadminui来安装KongAdminUI。我们打开GitHub地址https://github.com/pocketdigi/kong-admin-ui,可以看到有四种部署方式。第一个是直接使用不用的部分,第二个和第三个是用Nginx下载部署,第四个是使用docker进行部署。作为一个经验丰富的开发者,阿芬还是使用docker进行安装。一行命令直接搞定。Docker的安装不是本文的重点,有兴趣的可以自行google。安装完成后打开8899端口看到如下界面,在Apiurl中填写Kong的Api信息,如http://127.0.0.1:8001点击进入。入口界面如下:至此整个Kong环境搭建完成,剩下的就是使用、流量控制、授权访问等功能。你可以自己试试。并不是说事故是可以避免的。写在最后,其实这个世界上天才很少,大部分人还没有到拼智商的地步;作为普通人,我们争取的是努力,圈子,对世界的了解,接触到越来越厉害的人,你迟早会变得更厉害。