CentOS LNMP环境安全设置技巧
sudo yum update -y
更新CentOS系统及所有软件包,及时修复已知漏洞,降低被攻击风险。webuser
),设置/sbin/nologin
作为登录Shell,避免使用root用户运行Web服务;/etc/ssh/sshd_config
中的PermitRootLogin no
并重启SSH服务);chattr +i
命令锁定关键系统文件(如/etc/passwd
、/etc/shadow
、/etc/group
),防止非授权修改。firewalld
或iptables
,仅开放必要端口(如SSH的22端口、HTTP的80端口、HTTPS的443端口),禁止外部访问MySQL的3306端口(sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --permanent --remove-port=3306/tcp && sudo firewall-cmd --reload
)。PasswordAuthentication no
),强制使用SSH密钥认证(PubkeyAuthentication yes
),限制SSH登录IP范围(AllowUsers root@your_ip
)。server_tokens off;
),移除X-Powered-By
头部(more_clear_headers 'X-Powered-By';
),防止泄露服务器技术栈。if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; }
);通过allow
/deny
指令限制特定IP访问敏感目录(如location ~ ^/(wp-admin|wp-login.php) { allow 192.168.1.100; deny all; }
)。X-Frame-Options "SAMEORIGIN"
防止点击劫持,X-XSS-Protection "1; mode=block"
启用XSS保护,Content-Security-Policy "default-src 'self'"
限制资源加载来源,X-Content-Type-Options "nosniff"
防止MIME类型混淆。ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'
),启用OCSP Stapling(ssl_stapling on; ssl_stapling_verify on;
),强制HTTPS跳转(return 301 https://$host$request_uri;
)。mysql_secure_installation
脚本移除默认匿名账号、测试数据库及远程root登录;创建专用数据库用户(如webuser
),仅授予SELECT
、INSERT
、UPDATE
等必要权限(GRANT SELECT, INSERT ON dbname.* TO 'webuser'@'localhost';
),避免使用root用户连接数据库。/etc/my.cnf
),设置skip-name-resolve
禁止DNS反向解析(提升连接速度),local-infile=0
禁用本地文件加载(防止SQL注入读取文件),secure-file-priv=/var/lib/mysql-files
限制文件导入导出目录。GRANT ALL ON dbname.* TO 'webuser'@'192.168.1.100';
),或通过SSH隧道加密远程连接。php.ini
中禁用exec
、passthru
、shell_exec
、eval
等高危函数(disable_functions = exec,passthru,shell_exec,eval
),防止恶意代码执行。upload_max_filesize
(如2M)、post_max_size
(如8M)限制上传文件大小;开启cgi.fix_pathinfo=0
防止路径穿越攻击;使用open_basedir
限制PHP仅能访问网站目录(如open_basedir = /var/www/html:/tmp
),避免访问系统敏感文件。session.cookie_httponly
(防止XSS窃取Cookie)、session.cookie_secure
(仅HTTPS传输Cookie);关闭display_errors
(避免暴露服务器路径等信息),开启log_errors
(将错误日志记录到/var/log/php_errors.log
)。chown -R webuser:webuser /var/www/html
),目录权限设为750(find /var/www/html -type d -exec chmod 750 {} \;
),文件权限设为640(find /var/www/html -type f -exec chmod 640 {} \;
),防止其他用户读取或修改网站文件。chmod 600 /etc/nginx/nginx.conf
、chmod 600 /etc/php/7.4/fpm/php.ini
),避免敏感信息泄露。/etc/logrotate.d/nginx
),保留14天日志并压缩,避免日志文件过大;定期检查/var/log/nginx/error.log
、/var/log/mysql/error.log
,查找异常访问记录(如大量404错误、SQL注入尝试)。fail2ban
(sudo yum install fail2ban -y
),配置针对SSH、Nginx的暴力破解防护(如禁止多次失败登录的IP);使用Logwatch
生成每日安全报告,及时发现异常行为。rsync
、tar
或专业备份工具(如Bacula
)定期备份网站数据(/var/www/html
)、数据库(mysqldump -u webuser -p dbname > dbname.sql
)及配置文件(/etc/nginx/
、/etc/php/
),备份文件存储在异地(如云存储)或加密介质中。