LNMP (Linux + Nginx + MySQL + PHP) 是一种常见的Web服务器架构。为确保服务器安全,需要进行全面的安全配置。以下是详细的配置建议:
系统更新
# 定期更新系统
apt update && apt upgrade -y # Debian/Ubuntu
yum update -y # CentOS/RHEL
禁用root远程登录
# 修改/etc/ssh/sshd_config
PermitRootLogin no
# 重启SSH服务
systemctl restart sshd
创建普通用户并配置sudo权限
adduser username
usermod -aG sudo username # Debian/Ubuntu
usermod -aG wheel username # CentOS/RHEL
修改SSH端口
# 修改/etc/ssh/sshd_config
Port 2222
# 重启SSH服务
systemctl restart sshd
配置防火墙
# 使用UFW (Ubuntu)
ufw allow 2222/tcp # SSH新端口
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
# 使用firewalld (CentOS)
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
隐藏Nginx版本信息
# 在nginx.conf的http块中添加
server_tokens off;
禁用不必要的HTTP方法
location / {
limit_except GET POST {
deny all;
}
}
配置SSL/TLS
server {
listen 443 ssl http2;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384...';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
}
防止信息泄露
location ~ /\. {
deny all;
}
location ~* \.(ini|log|conf|bak|sql)$ {
deny all;
}
运行安全脚本
mysql_secure_installation
禁用远程root访问
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES;
创建专用数据库用户
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON dbname.* TO 'webuser'@'localhost';
FLUSH PRIVILEGES;
启用二进制日志审计
# 在my.cnf中添加
[mysqld]
log-bin=mysql-bin
binlog_format=ROW
禁用危险函数
# 在php.ini中修改
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
限制文件访问
open_basedir = /var/www/html:/tmp
调整错误报告级别
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
配置上传限制
upload_max_filesize = 2M
post_max_size = 8M
安装Fail2Ban防止暴力破解
apt install fail2ban -y # Debian/Ubuntu
yum install fail2ban -y # CentOS/RHEL
配置自动安全更新
apt install unattended-upgrades -y # Debian/Ubuntu
yum install yum-cron -y # CentOS/RHEL
定期备份
# 使用crontab设置定期备份
0 3 * * * /usr/bin/mysqldump -u username -p'password' dbname > /backup/dbname-$(date +\%Y\%m\%d).sql
0 4 * * * tar -zcvf /backup/web-$(date +\%Y\%m\%d).tar.gz /var/www/html
监控和日志分析
漏洞扫描
# 使用lynis进行系统审计
lynis audit system
检查可疑进程
ps aux | grep -E '(nmap|nikto|sqlmap|hydra|john)'
检查异常登录
last
grep 'Failed password' /var/log/auth.log
通过以上配置,您的LNMP服务器将具备较高的安全性。请记住,安全是一个持续的过程,需要定期更新和维护这些配置。