摘要:无论是外部还是内部的安全防御都是一个长期的工作,无论哪种防御方法都不是永久有效的,技术的更新迭代在进化者防御的同时也在加持着攻击/破坏的法力,所以警告大家不要迷信某一种防御手段,正所谓“道高一尺魔高一丈”!

网络永远不是大家看到的“风平浪静”的表象,你的网站每时每刻都在被别有用心的“人”关注着、扫描着、分析着!

不要幼稚的认为自己的网站没有价值,所谓的“价值”都是相对的,用你的服务器攻击别人、用你的服务器来“挖矿”对别人都是有价值的呀。

所以,在安全防御的路上还有很长的路要走下去,还是那句话“生命不止、折腾不息”。

 

生产环境搭配方案

对于网站服务器来说,所谓的生产环境就是指用的是什么操作系统、Web 服务器、数据库、网站平台的源代码语言这些,

主流的生产环境如下:

LNMP(Linux+Nginx+MySQL/MariaDB+PHP)

LAMP(Linux+Apache+MySQL/MariaDB+PHP)

LNMPA(Linux+Nginx+Apache+MySQL/MariaDB+PHP)

LTMP(Linux+Tengine+MySQL/MariaDB+PHP)

不同的生产环境要根据自己站点运行类型来选择部署的,对于我们个人博客站长来说 LNMP 是最常见的生产环境,也是目前来说性价比最高的

基本上 1 核 1G 的服务器硬件最低配置都可以满足所有的要求了,甚至挂 3-5 个站点都毫无压力(比如自己就是这样的配置环境),理论上来说 LNMP 生产环境应对百万级别访问量的站点都是可以的,所以不用担心未来发展面临的生产环境瓶颈问题的,当然生产环境也要根据网站自身的需求来做出不同的选择的,比如 Web 服务器的选择是以处理动态网站有优势的 Apache 还是用处理静态文件并发有优势的 Nginx 都要根据自己的实际需求来选择的,如果硬件条件允许 LNMPA 的组合理论上来说是最完美的,但是对硬件配置要求不低,这也意味着成本的增加。只能说是大家要根据自己的情况各取所需就是了。

 

安全防御的背景

最近又开始瞄向网站安全方面的折腾了,又是 HTTP 响应头,又是 Nginx Lua 的,可以说折腾的是不亦乐乎!

说实话都是“自娱自乐”而已。今天实在是没有什么好更新的了,就总结分享一下最近折腾的这个“由内而外的安全防御思路”给大家,希望可以起到“抛砖引玉”的效用,欢迎大家踊跃点评讨论分享哦!

对于博客网站的安全问题,很多新手站长们可能感触不多,甚至没有感觉。对于玩博客时间久一点儿的站长来说几乎每个人都有一段“安全”的辛酸故事,就拿自己来说,这七八年的博客站长生涯里几乎经历了所有的安全故障,什么木马、后门植入、网页篡改、HTTP 流量劫持、恶意解析、CC/DDOS 攻击、XSS 攻击、SQL 植入、点击劫持(ClickJacking)等等,可以说五花八门什么样的都有。套用电影《疯狂的石头》里郭涛的那句咆哮:“公共厕所嘛!想来就来,想走就走嗖!”真的是太贴切了,所以对网站安全防御一直都是很重视的,或者说一直都是心中的“梦魇”。

至于说安全因素给博客网站带来的坏处有哪些?可能很多新手博客站长对此还是很模糊的,就自己的经验和亲身经历总结如下,以供大家参考:

  • 流量、带宽的损耗造成服务器成本增加。
  • 过多的安全隐患造成网站整体稳定性持续性差,影响用户浏览体验甚至严重到影响搜索引擎排名、权重。
  • 网站用户、信息、服务器资源被盗用、篡改。
  • 被恶意镜像复制、仿冒造成搜索引擎误判拔毛。
  • 网站投放的联盟广告被点击劫持(ClickJacking)连带联盟账号被封禁。
  • 被人恶意持续 CC/DDOS 攻击,造成服务器商封禁主机。
  • 被植入涉及违法的文字、链接造成域名被 GFW 拉黑。

上述这些后果基本上都是亲身经历过的,最后一条是一个朋友网站真实发生的后果,这些并不是危言耸听,几乎每条都是一个真实实例,可以说都是些“血淋淋”的教训。造成这些后果的主因其实就是站长对网站安全不够重视造成的,很多站长们都认为自己的站点没有什么价值,被人攻破也没有什么影响,殊不知这种认知将会给你的网站埋下很大的祸根,最严重的甚至会给你带来法律上的麻烦等等。

说了这么多,其实就是想告诉大家,如果你想好好的运营你的网站,那么相应的安全方面也必须要重视起来,并且这样的安全工作不是一次性的,而是一个长期的工作(技术的发展是日新月异的,任何防御手段都没法保证可以永久有效)。所以,网站的安全防御其实更多的一些思想观念,技术层面的都差不多的原理,下面就以网站服务器为准由外而内的讲讲我自己总结的安全防御思路。

 

网站外部安全防御外部

曾经有一篇文章【互联网世界里的“黑暗森林法则”】一文里提到过,其实我们的互联网就类似于科幻小说《三体》中描述宇宙一样,无论你是多么先进的文明生存的第一要素其实就是“隐藏自己”(详情可看原文了解)。对于网站来说某些重要的网站数据“隐藏”起来势必就增加了“破坏者”的攻击/破坏成本,或者说是门槛也可以。比如【如何在 HTTP 头中隐藏 PHP 版本号】、【如何隐藏 Nginx 版本号和 Web 服务器名称】文章中的这些其实就是这个目的。就目前的互联网安全环境来说真实的网站 IP 是首要隐藏的一个重要指标,这也是网站外部安全防御里的重中之重,因为对方一旦知道你的真是 IP 地址,那么在试试 CC/DDOS 攻击的时候就是目标明确了,一旦实施攻击,除了服务器宕机几乎没有其他的办法补救,说白了暴露网站主机真实 IP 就意味着放弃了防御纵深,一旦被攻击只有“死路一条”!要想隐藏网站主机的真实 IP 其实很简单挂个免费的 CDN 即可,如果是自带防御的 CDN 最好了,比如:百度云加速、360 网站卫士、又拍云等等!

隐藏了网站主机真实 IP 后,并不是就万事大吉了,这时候还有可能被人恶意抓取、复制镜像、HTTP 流量劫持、恶意 Frame 框引用、点击劫持(ClickJacking)等等,这些可以借助 CDN 层面的 WAF 防火墙来应对。同时还可以利用 HTTP 响应头来让客户端的浏览器来提升你的网站安全(可参考【在 Nginx 里容易被忽视的 HTTP 响应头】、【Content Security Policy 入门教程】)等文章,目前主流浏览器如:IE/EDGE、Chrome、Firefox 等对安全类的 HTTP 响应头的支持已经很完善了,借助不同的 HTTP 响应头来告诉浏览器自己网站的安全防护规则,浏览器就会根据这些规则自动过滤掉 HTTP 流量劫持、恶意 Frame 框引用、点击劫持(ClickJacking)等等不安全的隐患的(顺带说一下,HTTP 响应头可以很好的解决国内运营商 DNS 劫持的问题)。这个其实是很多站长们都忽略的一个安全防御环节,脸书、推特、谷歌等网站其实都在使用这些 HTTP 响应头的,微软、谷歌、火狐也都在不断的制定安全防护的 HTTP 响应头来应对当前日趋严重的安全形势。

关于网站的外部安全防御就总结这么多了,有些可能就是一句话带过的,这些具体的以后大家有需要我可以专们分开单独给大家讲解,今天主要就是讲个思路,不注重实践的,只有思想观念跟上了,才会有所行动嘛!

 

网站内部安全防御内部

所谓的网站内部其实更多的是指网站平台的后台和服务器层面,网站平台可以是 WordPress 、 Typecho 等等平台,无论何种网站平台都要养成好的使用习惯,比如:不乱装来路不明的插件和主题、尽量购买使用正版的主题插件、自己无法判定的文件绝不随意上传等等。可以说网站被植入木马、后门的几乎百分百都是盗版主题、插件带来的,这些很多新手站长的网站上经常可以找到样本的。这类安全隐患最麻烦,有些潜伏期甚至长达几年才会发作或者被发现,造成的后果也是千奇百怪,总之就是后果很严重,大家需谨慎。这方面没有很好的应对方法,就是一个好习惯的养成的问题!要想减少这方面的隐患危害,建议大家在设置网站目录权限的时候不少都是 777 权限,一般 644 都可以的就不要懒省事儿直接给个 777 了,大部分 Linux 服务器被攻破其实都是“权限”惹的货,特别是木马等的传播其实拥有“写入”权限才能实现的。

服务器层面的内部安全防御,其实这是个很大的话题,基本上服务器运维的主要工作就是围绕安全防御展开的,所以真要细说起来的话,水平就真的是有限了,所以我只捡自己目前正在用的和自己实践过的来讲,希望可以起到“抛砖引玉”的作用。

目前在服务器端采取的安全防御措施还是不少的,像:

系统级的防火墙 iptables

参考文章:【iptables 屏蔽 IP 指令详解】、【免费而强大的策略防火墙: APF

WEB 服务器下的 WAF 防火墙

参考文章:【LNMP 1.5 测试版体验之 ngx_lua_waf 初体验!

简单的脚本防火墙 DDoS Deflate

参考文章:【DDoS Deflate 的安装和使用

再加上 WEB 服务器 Nginx 层面的安全措施(可参考【Nginx 限制单个 IP 的并发连接数改进适配开启 CDN 站点】一文)都是我目前所在尝试和使用的安全防御措施。基本上就是结合着一起使用,根据不同情况不同对待,平时主要就是屏蔽和拦截各类垃圾蜘蛛爬虫的抓取和访问以及各种扫描脚本屏蔽,这个主要借助的是 ngx_lua_waf 这个 Nginx 模块,目前来看只要及时的收集和返现被扫描都可以很好的拦截和屏蔽。配合相应的规则还可以减少漏洞带来的风险。整体的效果目前来看自己还是很满意的,在配合 CDN 情况下小当量的 CC/DDOS 攻击应对合适的话都是没有问题的,总结下来就是服务器端的安全防御是个长期性的工作,因为矛和盾的故事永远都在上演着,安全防御也得跟随着进行下去,从服务器层面来看,网站发展到一定时候一个好的运维服务是非常重要的,至少可以节省不少的服务器维护、升级成本。

 

安全防御整体思路总结

其实无论是外部还是内部的安全防御都是一个长期的工作,无论哪种防御方法都不是永久有效的,技术的更新迭代在进化者防御的同时也在加持着攻击/破坏的法力,所以警告大家不要迷信某一种防御手段,正所谓“道高一尺魔高一丈”!网络永远不是大家看到的“风平浪静”的表象,你的网站每时每刻都在被别有用心的“人”关注着、扫描着、分析着!不要幼稚的认为自己的网站没有价值,所谓的“价值”都是相对的,用你的服务器攻击别人、用你的服务器来“挖矿”对别人都是有价值的呀。所以,在安全防御的路上还有很长的路要走下去,还是那句话“生命不止、折腾不息”。

好了,没有想到又啰嗦了一堆,就到这里吧,一说起来就没完没了。今天实在是太冷了,啰嗦了这么久,手指头都快冻僵了!要不是有杯热水陪伴真心坚持不下去了,外面的雪一直在下着,伴随着北风那个吹。我去!《白毛女》主题曲呀这节奏!还真是应景呀!

 

 

原文转自博客网站由内而外的安全防御思路 (登楼博客)

 

参考推荐

Apache 和 Nginx 对比

Servlet 工作原理解析

Jetty 工作原理以及与 Tomcat 的比较

Tomcat 系统架构与设计模式:工作原理

Tomcat 系统架构与设计模式:设计模式分析

后台服务器开发总结

Protobuf 和 Thrift对比

Docker是什么