系统基础安全
sudo apt update && sudo apt upgrade,确保系统及所有软件包(包括Nginx、MySQL/MariaDB、PHP)安装最新安全补丁,修补已知漏洞。libpam-pwquality模块(sudo apt install libpam-pwquality),编辑/etc/security/pwquality.conf设置密码复杂度(如最小长度、包含大小写字母/数字/特殊字符),避免弱密码被破解。systemctl list-units --type service --state=running列出运行中的服务,禁用未使用的服务(如FTP、Telnet),减少攻击面。ufw(Uncomplicated Firewall)限制入站流量,仅允许HTTP(80/tcp)、HTTPS(443/tcp)、SSH(22/tcp)等必要端口,命令示例:sudo ufw allow OpenSSH; sudo ufw allow 80/tcp; sudo ufw allow 443/tcp; sudo ufw enable。/etc/ssh/sshd_config,设置Port 2222(更改默认端口)、PermitRootLogin no(禁用root远程登录)、PasswordAuthentication no(禁用密码认证,使用SSH密钥对),重启SSH服务使配置生效。Nginx Web服务器安全
/etc/nginx/nginx.conf),在http块中添加server_tokens off;,关闭响应头中的Nginx版本号,防止攻击者根据版本查找已知漏洞。server或http块中添加以下指令,增强浏览器安全防护:add_header X-Frame-Options "SAMEORIGIN"(防止点击劫持)、add_header X-XSS-Protection "1;mode=block"(启用XSS防护)、add_header X-Content-Type-Options "nosniff"(防止资源类型混淆)、add_header Referrer-Policy "strict-origin-when-cross-origin"(控制引用地址传递)、add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'"(限制资源加载来源)。limit_conn_zone和limit_req_zone指令限制单个IP的连接数和请求频率,防止DDoS攻击。示例:在http块中添加limit_conn_zone $binary_remote_addr zone=addr:10m;(定义共享内存区域),在server块中添加limit_conn addr 100;(限制每个IP最多100个并发连接);limit_req_zone $binary_remote_addr zone=req_zone:10m rate=10r/s burst=20;(限制每秒10个请求,突发20个),并在location块中应用limit_req zone=req_zone burst=20 nodelay;。/admin/)使用allow/deny指令限制IP访问,示例:location /admin/ { allow 192.168.1.0/24; allow 10.0.0.0/8; deny all; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd; }(仅允许指定IP段访问,其他IP拒绝,并启用基本认证)。sudo apt install certbot python3-certbot-nginx; sudo certbot --nginx -d yourdomain.com),配置Nginx监听443端口并强制HTTPS跳转(if ($scheme != "https") { return 301 https://$server_name$request_uri; }),添加HSTS头(add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;),强制浏览器在一年内使用HTTPS访问。server块中,设置ssl_protocols TLSv1.2 TLSv1.3;(仅允许TLS 1.2及以上安全协议)、ssl_ciphers HIGH:!aNULL:!MD5;(使用强加密套件)、ssl_prefer_server_ciphers on;(优先使用服务器端加密套件);启用OCSP Stapling(ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s;),提高SSL握手效率并验证证书有效性。MySQL/MariaDB数据库安全
sudo mysql_secure_installation,按照提示设置root密码、移除匿名用户、禁止root远程登录、删除测试数据库。/etc/mysql/mysql.conf.d/mysqld.cnf或/etc/mysql/my.cnf),找到[mysqld]部分,将bind-address设置为127.0.0.1,限制MySQL仅监听本地连接,防止远程非法访问。CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123'; GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO 'app_user'@'localhost'; FLUSH PRIVILEGES;(避免使用root用户连接应用)。skip-networking(禁用网络访问)或通过mysql_secure_installation禁用root远程登录,若需远程管理,使用SSH隧道代替直接连接。openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/mysql/mysql-server.key -out /etc/mysql/mysql-server.crt),编辑MySQL配置文件添加ssl-ca=/etc/mysql/mysql-server.crt; ssl-cert=/etc/mysql/mysql-server.crt; ssl-key=/etc/mysql/mysql-server.key;,重启MySQL服务,强制应用使用SSL连接。PHP应用层安全
sudo apt install php-fpm php-cli php-mysql升级),修补已知安全漏洞。/etc/php/8.2/fpm/php.ini(根据PHP版本调整路径),设置display_errors = Off(关闭错误显示,防止敏感信息泄露)、expose_php = Off(隐藏PHP版本信息)、register_globals = Off(关闭全局变量,减少脚本注入风险)、open_basedir = /var/www:/tmp(限制PHP可访问的目录,防止目录遍历攻击)、allow_url_fopen = Off/allow_url_include = Off(禁止远程资源访问,防止文件包含漏洞)。wget http://download.suhosin.org/suhosin-0.9.37.1.tar.gz; tar zxvf suhosin-0.9.37.1.tar.gz; cd suhosin-0.9.37.1; phpize; ./configure --with-php-config=/usr/bin/php-config; make; make install),在php.ini中添加extension=suhosin.so,重启PHP-FPM服务。/etc/php/8.2/fpm/pool.d/www.conf),修改listen = /run/php/php8.2-fpm.sock(使用Unix socket代替TCP,提高性能和安全性),设置listen.owner = www-data; listen.group = www-data(确保Nginx用户有权限访问socket),重启PHP-FPM服务。location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }(仅允许指定目录下的.php文件执行,防止恶意脚本运行)。