1. 在正式加固前,准备:root或sudo权限账号、目标服务器IP列表、备份策略(rsync/快照)、维护窗口、变更记录模板和紧急回滚方案。
2. 先执行系统更新并删除不必要软件:Ubuntu/Debian:apt update && apt -y upgrade && apt -y autoremove;CentOS:yum update。移除ftp、telnet等不安全服务,保留必要组件并锁定版本。
3. 编辑 /etc/ssh/sshd_config:禁止root登录(PermitRootLogin no)、使用Protocol 2、禁用密码登录(PasswordAuthentication no)、设置LoginGraceTime 30、MaxAuthTries 3。保存后重启:systemctl restart sshd。为避免锁死,先在新终端验证。
4. 为每个运维账户生成SSH密钥(ssh-keygen),在authorized_keys设置强限制(from="IP",command="...":可选)。部署Google Authenticator或Duo:apt install libpam-google-authenticator并修改 /etc/pam.d/sshd 与 /etc/ssh/sshd_config 使用ChallengeResponseAuthentication yes。将外网登录限定到香港Bastion/VPN。
5. 使用ufw或iptables:ufw默认拒绝 ufw default deny incoming; ufw allow from 管理IP to any port 22; ufw allow 80,443。iptables示例:iptables -A INPUT -p tcp --dport 22 -s 管理IP -j ACCEPT;iptables -A INPUT -p tcp --dport 22 -j DROP。定期保存规则并测试。
6. 每个站点使用独立系统用户、独立PHP-FPM池或容器(Docker/LXC)。nginx配置示例:为每个站点设置 root、user、fastcgi_pass 到不同的 unix socket,并用open_basedir限制PHP访问路径。设置文件权限:网站文件属主为siteuser:www-data,目录755文件644,避免777。
7. 在nginx前端启用WAF(ModSecurity 或商用WAF)。nginx示例限速:limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; 在server中使用limit_req zone=one burst=20 nodelay。启用TLS、HSTS并强制使用安全套件(参考Mozilla TLS配置)。
8. 安装fail2ban并针对ssh、nginx、php-fpm配置过滤器:/etc/fail2ban/jail.local 加入 [sshd] enabled=true port=22 maxretry=3 bantime=3600。对站群可按站点自定义jail防止暴力破解。
9. 定期快照与增量备份(rsync + remote storage 或对象存储),备份脚本加入校验(sha256sum)。集中日志使用rsyslog/Fluentd发送到外部Logstash/ELK,并开启文件完整性监控(AIDE/OSSEC)。配置报警:磁盘、CPU、异常登录、WAF拦截阈值。
10. 使用sudoers精细授权:visudo 添加 Cmnd_Alias 管理命令,授予特定用户仅需权限。开启审计auditd:auditctl -w /etc/ -p wa -k etc_changes,持久配置写入 /etc/audit/rules.d/。定期导出审计日志并分析可疑操作。
11. 在香港节点建议配合CDN(Cloudflare/阿里云CDN)和上游防护,设置rate-limit、geoip限制可疑国家,启用TCP SYN cookies并在云端做DDoS清洗。对IPv6也做相同ACL策略。
12. 建立变更控制:所有配置改动先在测试环境验证、通过代码管理(Git),变更时间窗口与回滚脚本。定期演练恢复(从备份恢复网站、重建服务器脚本化:Ansible/Terraform)。
13. 问:如何在香港机房只允许某些国家访问特定站点?
13. 答:答:在nginx使用geoip2模块或在WAF/CDN配置GeoIP白名单,示例nginx:geoip2 /etc/nginx/geoip2.mmdb { country iso_code source=$remote_addr; } 然后通过if ($geoip2_country_iso_code !~ (HK|CN)) { return 403; }。在边界防火墙也同步ACL以防IP伪造。
14. 问:站群中某站被入侵,如何隔离并查看影响范围?
14. 答:答:立即把该站点从负载均衡移除或disable nginx site,断开站点对应的PHP-FPM池或容器网络;保留只读快照用于取证,使用AIDE/auditd/ELK查看最近变更与异常请求,检查其他站点是否共享同一系统用户或socket,及时更换相关密钥与密码。
15. 问:如何在保证安全前提下实现运维便利性?
15. 答:答:使用跳板机+SSH代理转发、集中认证(LDAP/AD/OAuth2)与短期临时证书(Vault/ACME集成)、基于角色的访问控制(RBAC),并把常用操作通过Ansible等自动化工具封装成受审计的任务,既提高效率又有审计链。
