身为一名长期在生产环境中摸爬滚打多年的运维资深人员,今儿打算跟你讲讲从无到有去构建一个网站,还有在后续维护期间那些一定要提及的“坑”和“道”。
这并非只是一回技术实操层面的事情,而是一次针对网站从起始到终结整个生命周期安全状况的深入细致的回顾分析。
场景设定:
假设我们要搭建一个企业官网,预估会稳定运营至少五年。
我们把省心以及成本控制作为考量因素,进而做出决定,采用主流方案,所谓主流方案就是基于腾讯云服务器,再加上宝塔面板,构建成LNMP环境。
第一步:域名的选购与解析(地基要稳)
在腾讯云注册域名时,我的习惯是“长痛不如短痛”。
既然确定这个域名要长久用,直接一次性买了十年。
这不但能够规避每一年进行续费的繁杂,更为关键的是预防域名由于忘掉了续费进而被抢注或者步入赎回期,这对于企业来讲是具有灾难性的。
域名选定后,要理解它的结构。
举个例子来说,www.example.com 这种情况,.com 属于顶级域名,example.com 是二级域名,www.example.com 是三级域名。
于安全测试期间,主站的那个 example.com 兴许如同铜墙铁壁般坚固,然而其诸如 mail.example.com 或者 test.example.com 这般的子域名常常属于防守薄弱之处。
很多渗透测试的突破口,就是从这些子域名开始的。
第二步:服务器初始化与宝塔面板安装
选购一台腾讯云轻量应用服务器,或者CVM,操作系统挑选 CentOS 7.9,或者 AlmaLinux 9(CentOS 8已经停止服务,不建议选用)。
拿到服务器的公网IP和密码后,我们通过SSH连接。
操作的目的在于,迅速地部署具备可视化特性的运维面板,以此得以降低后续进行LNMP搭建时所存在的复杂度。
# 使用root权限执行,官方最新安装脚本
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
安装完成后,务必立即记录面板地址、用户名和密码。
登录到面板之后,首要之事并非急忙去建站,而是对面板的默认端口予以修改,举个例子来说,就是要把它从8888变更为58888,并且还要针对面板安全入口展开配置,也就是访问路径所具备的后缀。
这是防止面板被暴力破解的第一道防线。
第三步:LNMP环境部署与站点创建
于宝塔面板的“软件商店”里头,借助一键的方式来安装 Nginx + MySQL + PHP。
企业官网方面,PHP选取7.4版本,或者8.0版本,是较为稳妥妥善的,兼顾着兼容性以及性能,这般选择是合适的。
在“网站”菜单添加站点。
〈HTML 标签“强”〉所对应的内容:填入代码“example.com”以及代码“www.example.com”。
那叫作根目录,此处你选择 defaults来应付就行,一般情况下它是 /www/wwwroot/example.com这样一组字符。
对于数据库,要选择去创建MySQL数据库,其密码建议采用由宝塔生成的随机强密码。
第四步:SSL证书与HTTPS(通信加密)
没有HTTPS的网站,就像在互联网上“裸奔”。
当下大厂均给出免费证书,我们径直于宝塔面板的“SSL”菜单里,挑选“Let's Encrypt”或者腾讯云免费证书,一键完成申请还要进行部署。
执行细节:开启强制HTTPS。
这一步,极其关键,要保证,所有的访问,皆经由加密传输,以此来防止,中间人劫持。
第五步:CDN加速与源站保护(安全盾牌)
CDN(内容分发网络) 的核心是“智能”和“就近”。
我们以腾讯云CDN为例。
在域名服务商那里,也就是腾讯云DNSPod这个地方,把www.example.com的解析记录实施修改,原本是A记录,它指向服务器IP呀,现在要改成CNAME记录,让其指向CDN厂商提供的域名。
2. 目的:当启用CDN之后,用户所访问的乃是CDN边缘节点,而真实源站IP被进行了隐藏。
这能够有效地对大流量DDoS攻击起到抵御作用,并且可以使各地区用户的访问速度得到显著提升。
3. 排错:配置后一定要测试。
采用 ping www.example.com 这种方式,要是所呈现出来的为CDN的节点IP,那就表明CDN已然生效了。
要是依旧是原本的服务器IP,那就查看一下DNS解析缓存,或者看看CNAME记录是不是正确的。
第六步:DNS与Hosts的本地测试
当网站还未上线之际,我们所要做的是开展本地测试,然而却不期望公网用户能够访问得到。
这时,能够对本地的 HOSTS 文件 予以修改,Windows 的路径是 C:WindowsSystem32driversetchosts。
将一条记录添加进去,这条记录是:服务器IP www.example.com。
如此一来,当你的电脑对 www.example.com 进行访问之际,会率先去读取HOSTS文件,进而直接指向你的服务器,然而公网用户却是借助正常的DNS解析来实施访问的。
这是上线前预检的黄金法则。
第七步:安全加固实战(不止于配置)
很多运维觉得装个面板、开个防火墙就万事大吉了,实则不然。
1. DNS安全视角:DNS是互联网的电话簿。
多见的那种所谓“DNS劫持”情形,乃是攻击者将你针对域名发起的请求,指引到了他自己的带恶意性质的IP之上。
进行CDN的启用操作,同时启用DNSSEC也就是域名系统安全扩展,能够对这一点起到有效的防止作用。
此外,存在着一种情况,即 DNS 污染,还有缓存投毒,这二者属于常见手段 ,攻击者会借助伪造响应的方式,或者采用篡改缓存的做法 ,最终致使你的用户访问到钓鱼网站。
2. 脚本语言与漏洞:我们网站用的是PHP。
PHP虽然灵活,但写法不严谨极易产生漏洞。
诸如常见的那种,被称作SQL注入的情况,是源于开发者并没有针对用户输入实施过滤操作,而是径直把参数拼接到SQL查询当中。
防护方面,于PHP代码层面,严谨地运用参数化查询;在运维层面,启动宝塔的“防火墙”插件(Nginx防火墙),此插件能够阻拦大部分SQL注入、XSS跨站脚本以及CC攻击。
3. 后门查杀:后门是攻击者留下的“秘密通道”。
它们常常被装扮成平常的图片,或者被伪装成普通的 JS 文件,又有的是暗藏在表面看似正常的 PHP 代码里呢。
建议定期运用宝塔的“病毒查杀”功能对网站目录予以扫描,着重检查诸如 /upload/、/images/ 等具备可写属性的目录当中的可疑脚本。
第八步:WEB架构与故障排查
在我们所具备的这套LNMP架构设定范畴之内,一旦存在任何一个环节出现了问题的状况,那么就必然会致使网站呈现出无法打开的结果。
故障排查三板斧:
首先查看Nginx是否妥当,网站呈现502 Bad Gateway这种状况,一般而言是PHP - FPM进程出现了终止的情况。
执行,systemctl status nginx,查看状态 , 和,systemctl status php-fpm,查看状态 , 或,重启试试。
二.进行数据库检查:产生“数据库连接失败”这一报错情况,首先要去确认MySQL服务于何种状态经由命令“systemctl status mysqld”来查看,然后再去核查数据库账号密码是否正确无误。
3. 查看日志:这是最重要的。
一般而言,Nginx的错误日志所处位置常常是在 /www/wwwlogs/ 这个地方,就像 nginx_error.log 这样的文件。
当瞅见报错情形时别慌张,将其中关键的信息予以复制,而后展开搜索,那百分之八十的问题均可寻觅到答案。
第九步:备份恢复(最后的救命稻草)
无论你的安全做得多好,总有意想不到的情况。
比如服务器被勒索病毒加密,或误操作删除了数据库。
选择在宝塔面板那儿的计划任务里,去设定每天都能做到自动备份网站文件,以及数据库,并且备份到云存储,就像腾讯云COS这样,这可是特别稳妥的一种做法。
倘若碰到服务器全然陷入瘫痪的状况,那么在短短几分钟之内,便可从备份里恢复到崭新的服务器之上。
总结:
起始于购买有着十年时长的域名,接着是进行配置CDN来将源站IP予以隐藏,随后又开展LNMP环境的加固工作以及实施自动化备份,这可不单单只是搭建起一个网站,更是着手构建起一套具备“纵深防御”特性的体系。
要记好,运维的关键核心并非是完全不出现故障这种情况,而是在出现了故障的时候,能够迅速地进行确定位置,并且能够迅速地予以恢复。
希望这套实战流程能帮你少踩一些坑,让网站跑得更稳、更安全。

Comments NOTHING