5400多字,一起聊聊外贸网站安全稳定运行那些事!
Hello,大家好,我是500强哥~
今天我们来聊一聊网站安全这个话题。大家都知道,网站搭建起来只是最基础的要求,如何确保你的网站一直安全可靠的运行才是重中之重。这里强哥就说一下一些网站安全的常识,可能会涉及到一些专业知识!
什么是黑暗森林法则?
最近强哥一直在看三体小说,觉得这个特别贴切!黑暗森林法则这个概念来自刘慈欣原著小说《三体》,释义:宇宙就像是一座黑暗森林,每个文明都是带枪的猎人,像幽灵般潜行于林间,轻轻拨开树枝探索外界,同时竭力不发出脚步声隐藏行踪,因为林中到处都有与他一样潜行的猎人。如果他发现了别的生命不管是不是猎人,不管是天使还是魔鬼,能做的只有一件事:开枪消灭之,在这片森林中,他人就是地狱,永恒的威胁来源、任何暴露自己存在的生命都将很快被消灭。
其实刚开始强哥刚开始觉得世界很美好,所有的生意都是大家在同一片蓝天下公平竞争。有一次不小心将一个网站放了出来,然后,这个网站就完蛋了。在被社会毒打之后,我明白了这些道理:永远不要告诉别人你的网站。因为一个独立站没做起来的时候,搞死他太容易了,DDOS攻击,镜像,跑垃圾链接,不但提升你的运营成本,很可能分分钟就让你完蛋。咱们很多人面对这类恶搞,是真的无能为力的。
所以每次有人问我,能不能把网站给他看一下的时候,我都会笑一下不说话。这不是不给看,而是不能。所以我们要遵守黑森林法则,自己闷声发财就可以。
这里分两种情况,拥有root权限的云主机和wordpress云主机,这两者的区别在于前者是一台裸机,啥程序都需要自己安装部署,比较适合技术大佬,后者就是主机服务商已经把一些必要的程序安装好了,用户通过他们提供的控制面板进行可视化的操作去安装部署自己需要的软件就可以,比较适合建站新手,无论选择哪种类型主机,强哥只想说一句,不要使用免费主机和劣质主机,免费主机只适合用来学习建站程序和建站方法,不要使用免费主机来托管正式上线的网站。
当然了,最好也不要使用那些特别廉价,管理经验不足的主机商的服务,不然会坑死你。在这里提一句,什么钱都能省,但是服务器这笔钱千万不能省啊,这是你开门做生意的门店,门店隔三差五关门,谁还来你店里买东西,而一台高性能的服务器可以帮你解决90%的关门问题,我见过许多这样的案例,在服务器这块的预算相当拮据,网站上线跑起来后,流量稍微大一点就各种问题接连不断的出现,所以这一块千万不能省,想想你自己去买手机也只想买高配版的手机。
这里推荐一个强哥自己在用的wordpress主机服务商,性价比比较高,如果有需要的小伙伴可以找我要个优惠码,价格更便宜,有钱的大佬可以直接无视,哈哈。
官方网址:https://chemicloud.com/wordpress-hosting/
这个地方分两种情况,一种是拥有root(超级管理员)权限的裸机,另一种是专为wordpress优化过的主机,前者防火墙端口规则需要自己配置,后者的话一般已由第三方配置好,无需自己设置。我们今天就针对第一种主机讲讲怎么进行的基础的安全配置,说白了就是给你的服务器加上一把只有你才能打得开的安全锁。首先我们登录到主机服务商的控制台,进入安全组选项,举个例子,如果你用的是亚马逊云主机,那么步骤就如下:
用户访问我们的网站都是通过80和443端口,所以我们先把这两个端口添加进入站规则,另外我们在搭建wordpress环境时有些小伙伴可能会用到第三方安装脚本,比如宝塔面板之类的,这里以强哥自己使用的OpenLiteSpeed安装脚本为例,OpenLiteSpeed的控制台需要用到8090端口,所以我们把这个端口也放开,但这里只是暂时放开,等wordpress环境搭建好,网站运行起来后强哥还是建议把它关掉。如果你平时经常要用到这个控制台来监控查看服务器的一些参数,那就把控制台的用户登录密码设置复杂点,并且定期更换密码。
最后就是22端口了,这个端口是服务器默认的SSH通信协议远程登录端口,也是最容易被黑客攻击的地方,一旦被暴力破解,你的服务器就不再是你的服务器了。这里强哥的建议是随用随开,不用时就关掉,其实大部分情况下你都用不到这个端口。以上说的这几个端口基本上都是一个网站要用到的最基础的通信端口了,如果你还有别的应用程序要开放端口,记得把它添加到防火墙入站规则中。最后设置好的防火墙规则可以参考下图:
有一类工具叫SQL注入,黑客利用某个插件输入框的安全漏洞,通过恶意SQL语句直接修改网站数据库,删除我们的网站数据,整个网站就会直接挂掉。为什么SQL注入会有效呢?是因为我们在安装wordpress程序时,程序默认使用的数据库表前缀是wp_,这就给SQL注入留下了可乘之机。所以我们在wordpress安装的过程中,修改这一步骤中的表前缀选项,可以使大量的SQL注入工具失效。
我们的wordpress网站搭建好后,后台登陆地址默认是http://xxx.com/wp-admin,网上大量黑客程序都以它渗透目标这个时候如果我们的管理员账号信息安全性不够高的话就会很容易被黑客暴力破解,如果你的账号信息足够安全,可以抵挡住所有的暴力破解,但是这些大量的尝试登录请求会占用你大量的服务器资源,造成的你的网站速度打开变慢,如果服务器配置比较低的话甚至有可能会造成服务器宕机,严重影响正常用户的浏览体验。
想想看,这个时候如果正好有一个优质的客户在浏览你的网站,刚准备要发起询盘,结果网站打不开了,老板要是知道了估计这个月你的医疗支出费用又要增加了。所以为了自己的人生安全强哥强烈建议各位小伙伴们修改这个默认的后台登陆地址,修改方法有两种,一种是安装对应的插件,一种是修改wordpress主题代码,强哥比较推崇代码修改方式,毕竟能不安装插件就尽量不安装插件。代码修改方式如下:
登录wordpress后台,进入Appearance>Theme Editor,添加如下代码,保存即可
举个例子,如果你的域名是abc.com,自定义字符xyz,那么修改后的登陆地址就是https://www.abc.com/wp-login.php?safer=xyz,保存好这个登陆地址,绝不要透露给第三方无关人员,修改原来的登陆地址后,原来的登录请求和错误的登录请求都会直接跳转到我们设置的网站首页。
/*
** Login Url protection
*/
function login_protection(){
if($_GET['safer'] != 'xxx')header('Location: https://www.youdomain.com/');
}
add_action('login_enqueue_scripts','login_protection');
准确的来说,这项不应该划分到网站安全这个话题来,应该属于网站优化的范畴,给站点添加CDN最主要的目的其实是为了给网站提速,只不过我们常用的CDN平台可能都是国外的CloudFlare平台,而CloudFlare平台的功能实在是太强大了,一般的网络安全问题都可以解决,不需要单独再去安装网站安全插件,毕竟插件能少一个就少一个。
强哥这里只讲些常用的安全配置,至于如何把站点添加进CloudFlare平台和更高阶的选项设置,小伙伴们可以自行百度下教程,接下来的设置教程强哥假设你们都已经在cloudflare平台上添加好站点了,来,让我们往下走;
进入SSL/TLS选项,将模式设置成完全,并开启SSL/TLS建议程序,正如字面意思,使用cloudflare来加密访问者和我们服务器的之间通信数据,保证数据安全。
进入SSL/TLS选项下的边缘证书选项,设置所有请求始终使用HTTPS,开启自动HTTPS重写,这里面的设置项比较多,下面的图都是强哥自己在用的设置样例,供大家参考:
进入防火墙选项,这里可以设置更高阶的防火墙规则,免费用户只能设置5条,但对一般的用户而言合理配置基本上也够用了,在这里你可以设置只允许指定国家的流量访问你的网站,信誉度差的IP访问你的网站时开启验证码或者直接阻止请求,这里的配置项比较自由,所以强哥没法把具体的配置代码罗列出来,有需求的小伙伴们可以自行上网百度下,下面几个是强哥常用的配置样例,贴出来供小伙伴们参考下:
xmlrpc.php这个文件到底是干啥的呢?其实它是为了实现让用户通过客户端来管理WordPress,例如使用博客客户端Weblog Clients来发布WordPress的日志和页面。这些都是为了让用户更加方便的管理自己的站点而开发的功能,XML-RPC这个功能从WordPress3.5开始就默认开启了,而一般情况下,我们大部分wordpress用户是不会用到这个功能的,所以可以完全关闭它,不然就会成为一些黑客的攻击对象。
关闭xmlrpc也很简单,只需要在wordpress主题文件functions.php里加入一行代码:add_filter('xmlrpc_enabled', '__return_false');
那REST_API又是什么呢?通俗点的解释就是wordpress向外提供了一个请求接口,外部程序可以很轻松的获取网站的数据,可应用于其他网站、手机 APP 或小程序等,这个功能是从WordPress 从 4.4 版本开始新增的,但对于一般的网站是没有需要的,反而会拖累网站的打开速度,而且 REST API 采用 GET 请求方式,这就为DDOS攻击提供了一个新的攻击途径,所以应尽可能的禁止掉这些不必要的功能需求,并且去掉 head 里面输出 wp-json 链接。
查看WP JSON REST API是否开启的方法:http://你的域名/wp-json/,若输出数据则是开启状态。如果我们想兼容所有版本的 Wordpress,我们可以直接使用插件Disable REST API或Disable WP REST API来完全禁用 REST API功能,强哥比较推荐代码方式,直接将以下代码添加到主题的functions.php文件中即可禁用JSON REST API :/**
* WordPress 完全禁用 REST API
*/ 屏蔽 REST API
if ( version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) {
function lxtx_disable_rest_api( $access ) {
return new WP_Error( 'rest_api_cannot_acess', 'No Access', array( 'status' => rest_authorization_required_code() ) );
}
add_filter( 'rest_authentication_errors', 'lxtx_disable_rest_api' );
} else {
// Filters for WP-API version 1.x
add_filter( 'json_enabled', '__return_false' );
add_filter( 'json_jsonp_enabled', '__return_false' );
// Filters for WP-API version 2.x
add_filter( 'rest_enabled', '__return_false' );
add_filter( 'rest_jsonp_enabled', '__return_false' );
}
// 移除头部 wp-json 标签和 HTTP header 中的 link
remove_action('template_redirect', 'rest_output_link_header', 11 );
remove_action('wp_head', 'rest_output_link_wp_head', 10 );
remove_action('xmlrpc_rsd_apis', 'rest_output_rsd');
WordPress默认允许管理员帐号修改主题或插件源文件,一旦管理员帐号被渗透,理论上黑客可以通过这个功能修改这些文件,执行任何他想执行的代码,比如注入木马,留后门。那怎么杜绝这一潜在的漏洞呢?方法也简单,那就是修改wordpress的源代码,只不过这一项就不再是像前几项那样在wordpress后台去更改了,这里需要我们登录到服务器后台,手动编辑更改代码,对一些小伙伴来说可能会有点难度,强哥在这里直接贴上操作方法:
用Xshell之类的工具登上服务器后台,进入到wordpress的安装目录,找到wp-config.php这个文件,用命令vi打开文件,然后按i键移动光标进行编辑;
在末尾处加入以下代码:
define('DISALLOW_FILE_EDIT', true);
按住shift+:(Shift键和冒号键一起按)输入w回车保存退出即可。关闭.php文件直接访问权限其实性质上跟关闭文件编辑功能差不多,假设我们网站上某个php源文件有漏洞,这个文件一旦被黑客发现就可以通过直接访问然后反复尝试渗透,尤其是上传文件夹这样的敏感位置(/uploads)。如果关闭,那么即使漏洞存在,黑客也无能为力。关闭方法也简单,在wordpress的安装目录下有一个.htaccess文件,用上述的方法进行编辑,移动光标在文件末尾处添加以下代码:
<Directory "/var/www/wp-content/uploads/">
<Files *.php>
Order Allow, Deny
Deny from all
</Files>
</Directory>
保存退出即可。
WordPress官方会定期更新版本,修补旧版本留下的漏洞和新增一些新的功能,虽然WordPress会自动下载和安装大多数更新,但是当有主要版本发布时,还是需要我们进行手动更新,在我们的网站上经常会安装些第三方开发者开发的不同的插件和主题,在这里强哥提醒一下,为了安全起见我们在安装插件和主题时尽量选择官方或者下载安装量很大的,不要安装一些来历不明小众的,官方插件或主题会定期更新,提供新版本,安全能得到保证。更新方法也简单,进入WordPress控制台仪表盘,如果已安装的插件和主题有新版本发布时,这里的update选项会有提示
点击进去就能看到更新选项
提高网站安全性的另一个技巧就是创建备份。定期自动备份整站,一旦网站被黑,至少有数据可以恢复,留得青山在。最糟糕的情况就是服务器受了攻击,网站彻底变肉鸡,已无法备份网站数据,之前也没有留任何备份,这是最致命的。这样一来只能删库跑路了。。。
如果我们有预留的备份文件,这样即使服务器被黑,网站数据丢失也不用怕,我们也能从最近的一个备份版本恢复网站,这是最后的杀手锏,一般不要轻易用,当然了强哥也希望小伙伴们都用不到这个终极奥义。
WordPress备份工具有很多,强哥这里推荐UpdraftPlus,支持手动自动备份方式,备份文件可存储在云端也可以下载到本地,操作方法也很简单,如果你的网站更新不是很频繁的话强哥建议采用手动备份方式,备份完之后将插件删掉,等需要再备份的时候再重新安装就可以了,如果网站更新很频繁的话那就需要采用自动备份方式了,设置好备份周期和存储方式就可以了
确保你的网站一直安全可靠的运行才是重中之重,不说可用率100%,最起码99%也必须达到(好像这两个没什么区别,哈哈),但是要知道,可能就是那多出来的一点可用率就导致你比别人多获取一封优质的询盘。
我身边就有这样的一个例子,一客户朋友大晚上的给我打电话,说他们的网站挂了,但是服务器表现正常,也能远端登录,第一时间怀疑是不是网站被DDOS攻击了,然后让他看下网站流量数据,结果后台数据显示流量正常,并没有被攻击,我嚓不应该啊,就在我们百思不得其解时,一小伙伴提了句要不看看服务器磁盘使用情况,好家伙这不看不知道,一看吓一跳,磁盘空间使用率已经达到99%了,内存耗尽,一番周转后终于找到元凶了,我们二话不说,赶紧清理磁盘,给服务器扩容,就在我们刚处理好故障恢复网站正常运行时,没出五分钟就来了一个质量不错的询盘,幸亏处理的及时,不然双腿都要被老板打断。
这只是发生在我身边的一个例子,但我相信很多从事外贸行业的小伙伴肯定都有过这样的经历,可能就是那些错失的某个询盘阻碍了我们走向人生巅峰。所以,保证网站稳定运行,格外重要。