1. 系统基础安全加固
sudo apt update && sudo apt upgrade -y,确保Linux内核、Nginx、MySQL、PHP等组件为最新版本,修补已知安全漏洞。libpam-pwquality工具,编辑/etc/security/pwquality.conf,调整minlen=12(密码最小长度)、dcredit=-1(至少1个小写字母)、ucredit=-1(至少1个大写字母)等参数,强制用户使用复杂密码。systemctl list-units --type service --state running查看运行中的服务,禁用未使用的服务(如telnet、ftp),减少攻击面。2. 防火墙配置(UFW)
sudo apt install ufw && sudo ufw enable,默认拒绝所有入站连接、允许所有出站连接。sudo ufw allow ssh # 远程管理
sudo ufw allow http # HTTP(80端口)
sudo ufw allow https # HTTPS(443端口)
sudo ufw allow mysql # MySQL(3306端口,默认仅本地访问)
/etc/ufw/before.rules,在*filter部分添加规则,仅允许特定IP访问SSH(如sudo ufw allow from 192.168.1.100 to any port 22),降低暴力破解风险。3. SSH安全优化
/etc/ssh/sshd_config,将Port 22改为Port 2222(或其他非标准端口),减少自动化扫描攻击。sshd_config中设置PermitRootLogin no,禁止直接以root用户登录,使用普通用户+sudo提升权限。ssh-keygen -t rsa -b 4096),将公钥(id_rsa.pub)复制到服务器~/.ssh/authorized_keys,关闭密码认证(PasswordAuthentication no),提升登录安全性。4. Nginx安全加固
--without-http_autoindex_module、--without-http_geo_module等参数禁用不常用模块(如自动索引、地理模块),减少潜在攻击点。sudo apt install certbot python3-certbot-nginx),运行sudo certbot --nginx -d yourdomain.com自动配置HTTPS,强制HTTP跳转HTTPS(在server块中添加return 301 https://$host$request_uri;)。优化SSL参数:编辑/etc/nginx/nginx.conf,添加ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;,启用前向保密(PFS)。server或location块中设置client_max_body_size 20M;,防止恶意用户上传超大文件导致DDoS攻击。nginx.conf的server_tokens指令中设置为off(server_tokens off;),避免泄露Nginx版本信息。5. MySQL/MariaDB安全配置
sudo mysql_secure_installation,设置root密码、移除匿名用户、禁止root远程登录、删除测试数据库。/etc/mysql/mysql.conf.d/mysqld.cnf,将bind-address设置为127.0.0.1,仅允许本地连接;若需远程访问,通过GRANT语句限制特定IP(如GRANT ALL PRIVILEGES ON database.* TO 'user'@'192.168.1.100' IDENTIFIED BY 'StrongPassword';)。sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/mysql/ssl/mysql-key.pem -out /etc/mysql/ssl/mysql-cert.pem),编辑mysqld.cnf添加SSL配置(ssl-ca=/etc/mysql/ssl/mysql-cert.pem; ssl-cert=/etc/mysql/ssl/mysql-cert.pem; ssl-key=/etc/mysql/ssl/mysql-key.pem;),重启MySQL服务(sudo systemctl restart mysql),要求客户端使用SSL连接(mysql --ssl-ca=/etc/mysql/ssl/mysql-cert.pem -u user -p)。ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword' PASSWORD EXPIRE INTERVAL 90 DAY;),强制定期更换密码。6. PHP安全设置
/etc/php/7.4/fpm/php.ini(根据PHP版本调整),找到disable_functions,添加exec,passthru,shell_exec,system等危险函数,防止代码执行攻击。/etc/php/7.4/fpm/pool.d/www.conf中调整pm.max_children(如pm.max_children = 20,根据服务器内存调整)、pm.start_servers(如pm.start_servers = 5),防止PHP进程占用过多资源导致服务器崩溃;设置request_terminate_timeout = 30s,限制脚本执行时间,避免长时间运行。/etc/php/7.4/fpm/php.ini,设置expose_php = Off,避免泄露PHP版本信息。php.ini中设置display_errors = Off(生产环境),log_errors = On,将错误信息记录到/var/log/php_errors.log,防止敏感信息泄露。7. 日志监控与自动防护
sudo apt install fail2ban,创建/etc/fail2ban/jail.local,添加以下配置针对SSH和Nginx的暴力破解防护:[sshd]
enabled = true
maxretry = 3
bantime = 3600
[nginx-http-auth]
enabled = true
maxretry = 3
bantime = 3600
重启Fail2Ban(sudo systemctl restart fail2ban),自动封禁多次尝试失败的IP。Logwatch(sudo apt install logwatch)每日生成系统日志报告,或通过sudo tail -f /var/log/nginx/error.log、sudo tail -f /var/log/mysql/error.log实时监控Nginx和MySQL的错误日志,及时发现异常行为。