很多人觉得服务器安全只是技术人员需要考虑的事情,自己租一台云主机搭建小型网站,不会有人刻意攻击。但现实环境里,互联网上的扫描程序和自动化攻击脚本一直在持续探测,公网服务器上线那一刻,就会持续收到各类试探请求。安全防护并不是安装杀毒软件就万事大吉,大量安全漏洞都来自日常配置的疏忽。
系统与软件更新,是最基础却最容易被忽略的步骤。不管是Linux还是Windows系统,厂商会定期发布安全补丁,修补已经公开的安全漏洞。补丁拖延越久,被攻击者利用的概率越高。不少用户觉得更新之后重启服务器麻烦,直接关闭自动更新,相当于敞开系统入口。设定固定维护时段,定期安装补丁,并不会耗费太多时间。

账号登录相关配置,能优化的地方比想象更多。默认SSH端口22每天都会收到大量暴力扫描请求,修改成其他端口,可以拦截绝大多数自动化攻击。尽量关闭密码登录,改用密钥认证,密钥破解难度远高于普通密码。如果只能使用密码,密码长度和复杂度要达标,不要使用生日、拼音或者123456这类弱密码。root账号禁止远程登录,需要管理员权限操作时使用sudo,操作会留下记录,也能规避误操作带来的风险。条件允许的话开启多因素认证,登录增加动态验证码,安全等级会明显提升。
网络层面依靠防火墙与安全组管控。云服务器自带安全组,相当于虚拟防火墙,仅放行业务必需端口。搭建Web服务只开放80和443端口,数据库端口3306、6379不能对公网开放,远程管理操作走内网或者跳板机。服务器本机的iptables或者firewalld同样需要配置,限制访问来源IP,拦截异常流量。有些用户为了省事放行全部端口,看似方便,等同于把服务器访问权限随意开放。
Web应用层面的防护经常被低估。服务器本身配置再安全,网站程序存在漏洞依旧会被入侵。SQL注入、跨站脚本、文件上传漏洞属于老生常谈的风险点,但每年依旧有大量网站因为这类漏洞被攻破。WAF也就是Web应用防火墙,可以拦截一部分常见攻击,想要彻底规避,开发阶段就要做好安全处理,参数化查询、输入过滤、输出转义这些基础操作不能省略。使用现成CMS或者开发框架,及时升级到最新版本,老旧版本漏洞已经被攻击者充分研究。
数据是最后一道防线,也是损失代价最大的部分。定期备份属于基础操作,备份文件必须存放在和服务器相互独立的存储位置,服务器被入侵,备份不能跟着一并丢失。备份文件本身也要加密,一旦泄露就失去备份意义。数据库里的用户敏感数据,例如账号密码,存储时必须加盐哈希,严禁明文保存。数据传输全程启用SSL/TLS加密,防止中间人窃听。
日志与监控是发现异常的重要手段。系统日志、网站访问日志、登录日志都要留存,定期查看。SSH暴力破解会产生大量失败登录记录,网站目录莫名新增陌生文件,访问请求出现异常参数,这些都有可能是入侵信号。部署入侵检测系统或者启用云厂商安全监控,减少人工排查的工作量。
权限管理遵循最小权限原则。每个账号只分配完成工作必需的权限,账号不再使用及时删除。不同业务服务不要共用同一个账号,出现安全事件无法定位操作人。数据库账号同理,网站程序连接数据库的账号仅分配增删改查权限,不要授予DROP和GRANT权限。员工离职之后,第一时间停用对应账号,不要等到出事才想起处理。
一旦发生安全事件,最先要做的不是慌乱处理,而是断开网络。隔离服务器,阻止攻击者继续操作,避免数据持续外泄。保留现场,快照、日志、内存镜像全部留存,这些都是后续溯源取证的资料。不要立刻重装系统,重装会清除全部证据。处理完成之后复盘入侵路径,找到被突破的环节,修复漏洞,防止同类问题再次发生。
服务器安全不存在一劳永逸的方案。今天配置好的防护规则,后续还会出现新漏洞。持续关注安全公告,定期复核配置,不需要的端口和权限及时关闭。这类工作看起来琐碎,但对比被入侵之后数据丢失、遭遇勒索、服务器被当作攻击跳板带来的损失,提前防护投入的时间会划算很多。