1.
总体部署原则与准备
说明:先规划、再部署,先做备份,再改配置。
a) 确认VPS系统版本:cat /etc/os-release;记录内核uname -r。
b) 建立基线快照与配置备份:使用VPS面板快照或dd/rsync备份网站目录与数据库。
c) 准备运维账户:创建单独管理账户,不使用root直接登录(见3)。
2.
网络层防护:防火墙与端口策略
步骤:封锁默认端口,只开放必要端口。
a) 使用ufw(Ubuntu):sudo ufw default deny incoming && sudo ufw default allow outgoing;sudo ufw allow 22/tcp(或自定义SSH端口);sudo ufw allow 80,443/tcp;sudo ufw enable。
b) 使用iptables/nft:示例iptables保存规则:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT;iptables -A INPUT -p tcp --dport 22 -j ACCEPT;iptables -A INPUT -j DROP。保存后使用iptables-save。
c) 白名单管理:如果只允许特定IP管理,添加规则限制管理端口仅来自管理员IP。
3.
SSH加固与访问控制
目标:禁用密码登录、限制Root登录、变更端口。
a) 编辑 /etc/ssh/sshd_config:PermitRootLogin no;PasswordAuthentication no;Port 22022(或自定义)。
b) 配置公钥认证:在本地生成密钥ssh-keygen,上传公钥到~/.ssh/authorized_keys,设置权限chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys。
c) reload SSH:sudo systemctl reload sshd。测试新会话确认无误再断开旧会话。
4.
登录防爆破与自动封禁(fail2ban)
安装与规则:防止暴力破解。
a) 安装:sudo apt install fail2ban或yum install fail2ban。
b) 创建本地配置/etc/fail2ban/jail.local,示例:[sshd] enabled = true; port = 22022; maxretry = 5; bantime = 3600。
c) 启动并检查状态:sudo systemctl enable --now fail2ban;sudo fail2ban-client status sshd。
5.
Web应用隔离:站群文件与进程隔离步骤
目标:防止站点间横向越权。
a) 为每个站点创建独立系统用户:sudo adduser site1;目录/var/www/site1归site1所有:sudo chown -R site1:site1 /var/www/site1。
b) 使用PHP-FPM池隔离:在/etc/php/7.x/fpm/pool.d/为每个站点创建pool,设置user=site1,group=site1。重启php-fpm。
c) Nginx配置按server块使用root /var/www/site1,并设置fastcgi_pass到对应PHP-FPM池。
6.
文件与目录权限管理实操
原则:最小权限、必要写入。
a) 静态文件权限:sudo find /var/www/site1 -type d -exec chmod 755 {} \;;sudo find /var/www/site1 -type f -exec chmod 644 {} \;。
b) 上传目录需写权限,仅对站点用户开放:sudo chown site1:www-data /var/www/site1/uploads;chmod 750 /var/www/site1/uploads。
c) 使用setfacl精细化权限:sudo setfacl -m u:deploy:rwx /var/www/site1(示例,为部署用户临时授权)。
7.
系统与应用加固工具(SELinux/AppArmor/AIDE)
建议与操作:启用强制访问控制与文件完整性监测。
a) SELinux(CentOS):sudo setenforce 1,并在/selinux/config设置永久enforcing,使用semanage管理策略。
b) AppArmor(Ubuntu):sudo apt install apparmor apparmor-utils,启用并为常用服务加载配置。
c) 文件完整性:安装AIDE:sudo apt install aide;初始化sudo aideinit并定期比对 aide --check,发现篡改立即调查。
8.
WAF、ModSecurity与请求过滤
Web层防护:拦截恶意请求与爬虫。
a) 安装ModSecurity(Nginx或Apache):启用核心规则集(OWASP CRS)。
b) 配置规则:针对SQLi、XSS、文件上传扫描进行严格拦截,示例在nginx中 include modsecurity.conf。
c) 借助云WAF(如Cloudflare)做DDoS缓解与Bot管理,对香港VPS可启用CDN并限制源站直连请求。
9.
日志审计、监控与告警配置
要点:集中日志、实时告警。
a) 集中化:使用rsyslog或Filebeat将日志发送到集中ELK/Graylog服务器,便于多站群分析。
b) 关键日志监控:关注/var/log/auth.log、nginx/access.log、error.log;设置阈值告警(异常访问、登录失败峰值)。
c) 使用监控工具(Prometheus+Grafana或Zabbix)检查CPU、内存、网络、磁盘IO并设置报警策略。
10.
备份、演练与应急响应流程
步骤:定期备份并演练恢复。
a) 数据库备份:mysqldump --single-transaction --routines -u root -p dbname > /backup/dbname_$(date +%F).sql;定期上传至异地存储。
b) 文件备份:使用rsync增量备份到异地服务器或对象存储;保留周期与自动清理策略。
c) 恶意入侵响应:检测到入侵立即隔离受感染实例,保留镜像快照用于取证,切换到备份节点并在隔离环境清理后再上线。
11.
日常运维权限管理要点
实践:最小权限、审计与临时授权。
a) Sudo策略:在/etc/sudoers.d/为运维用户设置精确命令权限(用visudo编辑),避免全权限sudo。
b) 临时授权:使用sudo -l与时间限制脚本或Vault类工具颁发临时密钥,避免长期共享账号。
c) 审计:启用sudo日志并定期检查/var/log/auth.log,配合SIEM做行为分析。
12.
常见问题与快速答案 — 问:如何快速检测VPS是否被入侵?
答:检查登录历史(lastb/last)、查看auth日志异常、检查crontab、查看/tmp、/var/tmp可疑文件、使用rkhunter和chkrootkit扫描;若有不明进程用ps aux、lsof -i检测网络连接并隔离。
13.
常见问题与快速答案 — 问:站群如何防止站点间相互窃取数据?
答:为每站点创建独立系统用户与PHP-FPM池,设置文件权限仅允许站点用户访问,禁用跨站点共享写目录,使用setfacl与chroot/jail技术进一步隔离。
14.
常见问题与快速答案 — 问:如果一个站点被利用,应如何恢复并防止复发?
答:立即隔离:关闭受影响站点并切断网络或移到隔离VPS;分析日志与快照取证;恢复:从最近干净备份恢复,修补漏洞(更新应用、修复上传/注入点),调整权限与WAF规则,并演练补丁上线流程。
来源:安全防护 香港站群 vps 防护措施与权限管理要点