前言
最近看见一些我的朋友遭受了各种网站攻击,于是就有了这篇博文,主要讲解如何防御大流量消耗资源的方案。
了解流量防御口
一个单服务器的流量进入由 客户>解析域名(如果有域名解析缓存可不需要)>服务器网卡硬件>服务器服务端(例如nginx)>服务器网页程序(例如typecho)
了解cc和ddos
cc和ddos是一种攻击方式 由于篇幅问题我们引用了文章 cc和ddos区别
了解流量黑洞
当服务器遭受到大流量攻击时,服务商会检测一定流量上限对服务器进行黑洞处理,黑洞顾名思义,如黑洞一般,将该台服务器脱离外网环境,进行隔离一定时间,如果仍然存在大流量攻击就会一直进入黑洞,黑洞时间一般在2小时,隔离服务器是比较万全的,因为一个服务器受到大流量攻击可能会牵连整个机房服务器躺枪,为了避免这种情况黑洞机制就出现了。
准备工作
相信被攻击很多人才会找如何防御,都被攻击了防御又怎么及时。 我们先要关闭域名解析,然后对服务器的IP进行切换, 如果是黑洞状态需要等待时间。
确定问题
先别着急防御,我们首先要确定问题,如果你有CDN加持,翻车,可能就是你泄露了服务器ip或者漏洞泄露了, 如果避免ip泄露就是一个问题了,很多情况下发送邮件是可以泄露服务器ip的,因为一些原因单台服务器顺便当邮件发送很常见,所以这样导致的泄露ip是很常见的。
其次是对日志的分析,分析ip是否泄露,日志可以从php日志和服务商提供的日志下载,分析出被攻击网页特征和攻击特征,比如五个相同的ip攻击,如果是cc攻击是可以比较好的防御的,还有攻击同一个网页的,收集好这些数据。如果量大可以提交举报。
避免再次黑洞
如何避免服务器再次黑洞,我们可以使用两台服务器,对主服务器进行反代,无论怎么攻击,主服务器运行不会受到影响,当然副服务器可以增加两台(这样在cdn中可以设置主备,这样来回横跳能抗一会
万能的CDN
CDN就是一个分布式的服务器群,加入cdn之后,在流量方面能过帮我们缓存部分资源,在平常业务中能过更快更流畅,当然被攻击的时候比如ddos和cc都有一定用处,但是一定要记住泄露源站ip是保不了你的,设置好源站缓存的一些规则会更高效,其次刚刚说过如何避免黑洞,你主备两ip cdn可以抗一会 但是远远不够。
服务器第一层程序防御
服务器第一层软件一般都是nginx iis之类的 但是我们今天只讲解nginx,为什么?nginx多并发高性能,抗打就套上,而且我一般也不用什么Apache,也搞不懂。 nginx我们进行的是对ip进行封禁,对流量进行限制,误杀几率尽量压制到最低。 nginx需要修改配置项 下面的指令可以对nginx设置单用户限速和限制链接数量
代码语言:javascript复制client_body_timeout
limit_req_zone
limit_conn_zone
这些操作详细内容不做介绍 除了这些你还可以使用nginx_lua脚本进行一些操作 这篇文章有些不足的是对seo有些问题,不过可以通过一些方法解决,这个放在以后文章。 这里你还可以开启 用基于sysctl的保护(这个是可以鉴别一些伪造的或者cookies的 经典防御文章 除了这些你还可以使用deny指令对指定的ip或者ip段进行封杀,除了这些还有很多,但是我们需要介绍很多,所以这个可以百度找到。 撇开这些我想起宝塔本身就可以限制流量,当然这样被cc或者ddos占完估计用户全是503之类的
waf
突然就忘记了防火墙别着急,防火墙分为两类其中一种是硬件防火墙一种是软件防火墙,但是服务器的硬件防火墙就需要充钱来解决了,比如说什么云盾什么的,停,虽然硬件防火墙是很有用,但是没办法没钱买那个几千的学生,只能用用免费的防火墙了。 这里环境是linux,win主机可以自行百度。
fail2ban就是一款出色的服务器入侵检测软件 可以阻止连接到服务器的可疑IP。这会扫描服务器日志以查找可疑访问权限并在防火墙中阻止此类IP,例如,我们创建一个fail2ban jail/etc/fail2ban/jail.local并添加以下代码来监控对Nginx的请求数。
代码语言:javascript复制 [nginx-req-limit] enabled = true
filter = nginx-req-limit action =
iptables-multiport[name=ReqLimit,
port=”http,https”, protocol=tcp]
logpath = /var/log/nginx/*error.log
findtime = 200 bantime = 2600
maxretry = 20
这将扫描Nginx日志文件并阻止IP与服务器建立过多连接。
在linux还可以使用DDoS-Deflate,这是一款非常小巧的防御和减轻DDoS攻击的工具,它可以通过监测netstat来跟踪来创建大量互联网连接的IP地址信息,通过APF或IPTABLES禁止或阻档这些非常IP地址。
第二层网页软件防cc
都打到这里来了,还能有啥防御?如果想防御的话,也只能防cc了,这里可以使用数据库缓存比如memcached和静态化缓存,当然还可以使用五秒盾进行防御cc
总结
cc是一种比较好防御的攻击,但是ddos就是洪流了,有人在双11前夕有人调侃每年流量最大的ddos即将开始, ddos本身就是一种不好防御的攻击,一些大厂依然受到攻击,码云之类的平台也遭受过,在这之下,我们能做好的就是修复漏洞,限制流量,避免服务器的过多流量,分布均衡,这些是我的看法,有兴趣可以留言。