web服务器安全设置的核心答案是:从操作系统、Web服务、网络访问和日志审计四个维度同时设防,坚持最小权限原则,用纵深防御把攻击者挡在每一层。
web服务器安全设置有哪些核心项?
很多第一次接触服务器的人,以为装上杀毒软件就算安全了,实际上Web服务器要对外提供80和443端口,等于把大门敞开给全世界,安全措施必须覆盖到系统、应用、网络、数据四个方向,缺一个都会留出破绽。
操作系统层:先管住登录和进程
- 精简系统安装包,只保留必要组件,多装一个组件,就多一个被利用的可能。
- 关闭SSH密码登录,改用密钥对,密码爆破是服务器最常见的攻击方式,密钥登录能把爆破成功率压到极低。
- 给服务运行用户降权,Nginx、PHP-FPM这类Web进程不要用root运行,否则一旦出现远程执行漏洞,攻击者直接拿到最高权限,业内专家指出,Web进程的权限边界,决定了被攻陷后的破坏范围。
- 启用强制访问控制,比如SELinux或AppArmor,在系统层限制进程的文件访问路径,防止越权读写。
Web服务层:每个请求都可能是一把刀
- 关闭目录列表,避免站点文件结构被遍历。
- 限制上传文件类型,尤其要禁止PHP、JSP、ASP等脚本文件进入可执行目录。
- 配置请求头安全策略,包括
X-Frame-Options、X-Content-Type-Options、Content-Security-Policy。 - 对URL做白名单校验,过滤掉、
?id=1 and这类路径穿越和SQL注入特征。
网络访问层:让防火墙成为第一道门
- 只开放必要端口:80、443、SSH,其他全部拒绝。
- 管理端口限IP:SSH和后台入口只允许固定IP访问,能挡住相当一部分扫描器。
- 限制请求速率,用Nginx的
limit_req模块或云服务商的WAF,防止CC攻击拖垮进程。
下面这张表能直观看出不同攻击类型该用什么设置去扛。
| 攻击类型 | 对应安全设置 |
|---|---|
| 暴力破解 | 密钥登录、fail2ban、IP白名单 |
| SQL注入 | 参数化查询、WAF规则、最小数据库权限 |
| XSS跨站 | CSP、HttpOnly Cookie、输入过滤 |
| 恶意文件上传 | 禁用脚本执行、白名单文件类型 |
| DDoS/CC | 云DDoS防护、限流模块、CDN |
日志与备份:被攻破后唯一能追溯的东西
- 开启
access.log和error.log,并配置日志轮转,防止磁盘被日志涨满。 - 日志至少保留180天,异地存储更稳妥,本地日志被清理后就什么都没了。
- 定期备份站点文件和数据库,备份不要放在同一台服务器上,否则攻击者可以顺着内网把备份一起拖走。
网站服务器安全设置步骤:上线前按这个顺序走一遍
如果服务器还没上线,建议按这个顺序来操作,每一步都有明确对象,能直接在命令行或控制台验证结果。
第一步:更新系统并清理默认服务
以Ubuntu或CentOS为例,先执行apt update && apt upgrade -y或yum update -y,把系统补丁打全,然后用ss -lntup查看监听端口,停掉不需要的postfix、avahi、rpcbind等服务。
第二步:配置Web服务的运行用户和目录权限
在Nginx的nginx.conf里,把user指令改成www-data;PHP-FPM的pool配置里,user和group也改成同一个用户,站点根目录所有权设为该用户,权限控制在750或755,可写目录单独拎出来,比如upload目录,并在这个目录里禁用PHP解析,避免攻击者上传一个PHP木马直接拿到shell。
第三步:配置云服务器安全组和系统防火墙
先改安全组,再动iptables。云服务器安全组配置的原则是白名单只出不进:先清空入站规则,然后只放行80、443、SSH,SSH再限定固定IP来源,本地防火墙用iptables或firewalld再加一层同样的规则,安全组管的是虚拟化层面的流量,系统防火墙管的是内部进程间的访问,两层规则都在,即使安全组被误改,系统防火墙还能兜底。
第四步:启用HTTPS并强制跳转
申请SSL证书后,在Nginx配置里指定证书路径,然后加一条return 301 https://$host$request_uri;把所有HTTP请求转到HTTPS,协议头开启TLSv1.2以上,禁用SSLv3和TLSv1.0,防止POODLE和BEAST攻击,测试用curl -I https://域名看响应状态码是否为301/200。
第五步:加上安全响应头和请求限制
在Nginx的server块里添加:
add_header X-Frame-Options "SAMEORIGIN" always;add_header X-Content-Type-Options "nosniff" always;add_header Content-Security-Policy "default-src 'self'" always;limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
第六步:接入WAF或CDN
国内云服务器可以直接在控制台开启Web应用防火墙,或者接入CDN并开启CC防护,WAF能拦截大量自动化工具的探测和扫描,还能在Web层挡住一部分SQL注入和XSS,行业共识认为,WAF不是必须的,但对面向公网的站点来说,性价比远高于出事后的应急响应成本。
第七步:验证安全配置
用nmap -sS -p 80,443,22扫描一下公网IP,确认只有这三个端口在暴露;用在线工具检查HTTPS评级,A级以上才算合格;随手翻翻/var/log/nginx/access.log,看看有没有异常扫描IP持续请求,这步走完,服务器就可以安心上线了。
web服务器安全配置方案:独立服务器和云服务器哪个更省心?
这是站长群里经常被讨论的问题,自购机柜里的独立服务器,和简米云、酷番云上的云服务器,安全配置的思路差别很大。
云服务器安全组配置的独特之处
云服务器的安全组是虚拟化层面的过滤,和系统内部的防火墙相互独立,它的优点是可以配合弹性IP做快速切换,被攻击时能秒级改规则,国内主流云厂商控制台里都有“安全组”入口,配置好后,如果某个IP段暴力破解SSH,直接在安全组里拒绝这个IP段的所有入站流量即可,不需要登录服务器操作。
自建机房的成本与安全取舍
自己租机柜放物理服务器,意味着要用硬件防火墙或路由器ACL来承担安全组的功能。web服务器安全设置费用在这里会明显分化:小项目用系统iptables就够了,成本几乎为零,但防护颗粒度不如云厂商的云盾或WAF;中型项目请运维做托管,按年收费,价格从几千到几万元不等,取决于服务器数量和监控级别,多数情况下,独立服务器的安全支出主要花在人的运维时间上,而不是软件授权费。
混合场景的推荐做法
如果站点同时使用云数据库和负载均衡,就不要只盯服务器本身,把Web服务器放到私有子网,通过负载均衡对外提供服务,后端服务器只允许VPC内部访问,这一层隔离比任何软件配置都值钱,因为数据库和管理系统完全不暴露在公网。
web服务器安全加固方案:哪些细节最容易翻车?
加固不是做完一遍就结束,很多站点都是从细节上出问题的,下面几个坑值得反复检查。
权限配置太宽松
站点根目录用777权限,等于把写入权限送给所有人,正确做法是文件644、目录755,上传目录单独设为750并禁止执行PHP,不少教程还这样教,但实战里这就是漏洞入口。
管理后台裸奔
WordPress或宝塔面板后台直接对外开放,用默认用户名和弱密码,更稳妥的做法是绑定域名,加上IP白名单,并启用双因素认证,如果这些没做,被扫描器命中只是时间问题。
忽略Web服务本身的补丁
Nginx和Apache的版本漏洞每年都有几个,有的可以远程执行命令,定期运行nginx -v或apachectl -v查看当前版本,及时用系统包管理器更新到最新稳定版。
备份文件放到站内目录
备份文件放在站点根目录下,比如/backup.zip,攻击者猜一下文件名就下载走了,备份应放到站外或加访问密码,文件名用随机字符串。
最后再提醒一句:没有一劳永逸的安全设置,Web攻击手法在变,防火墙规则和插件漏洞也在变,每季度花半天时间复查一下配置,比出事后再应急要省心得多。
关于web服务器安全设置的常见问题
必须配置HTTPS吗?不配会怎样?
必须配,HTTPS不仅加密内容,还避免内容被运营商注入广告或篡改,目前主流浏览器对不使用HTTPS的站点会显示“不安全”标识,搜索排名也会受影响,不用HTTPS意味着网站的所有请求参数、Cookie、密码都以明文在网络上传输,抓包工具一抓一个准。
云服务器安全组和系统防火墙要同时开吗?
要同时开,安全组管的是虚拟机外部的流量入口,系统防火墙管的是服务器内部进程之间的网络访问,两层规则配合,即使安全组被误改,系统防火墙还能兜底,建议在两处都只放行必要端口,并保持规则一致。
网站已经被挂马,先改什么?
先断网隔离,关掉Web服务,然后把Nginx配置文件和站点文件按时间顺序比对,找到最近被修改的入口文件,再查系统账号和启动项,确认没有残留后门,最后用干净备份恢复,这一步不要急着删木马,保留现场证据有助于彻底溯源。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/712142.html





