Linux中LNMP安全設置指南
LNMP(Linux+Nginx+MySQL+PHP)是常見的Web服務架構,需從系統基礎、組件配置、權限管理、監控審計等多維度強化安全。以下是具體安全設置步驟:
sudo apt update && sudo apt upgrade -y
;CentOS/RHEL系統執行sudo yum update -y
。webuser
),避免Nginx/PHP-FPM以root運行;禁用root SSH登錄,修改/etc/ssh/sshd_config
中的PermitRootLogin no
并重啟SSH服務(sudo systemctl restart sshd
)。sudo ufw allow 22; sudo ufw allow 80; sudo ufw allow 443; sudo ufw enable
。server_tokens off;
),移除Server
、X-Powered-By
等HTTP頭(more_clear_headers 'Server'; more_clear_headers 'X-Powered-By';
)。if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 405; }
);使用limit_req_zone
限制請求頻率(如每秒10個請求),抵御暴力破解。ECDHE-ECDSA-AES256-GCM-SHA384
),啟用OCSP Stapling提升驗證效率。X-Frame-Options "SAMEORIGIN"
防點擊劫持、X-XSS-Protection "1; mode=block"
啟XSS保護、Content-Security-Policy "default-src 'self'"
控資源加載、X-Content-Type-Options "nosniff"
防MIME混淆)。sudo mysql_secure_installation
,設置root強密碼,移除匿名用戶、測試數據庫及遠程root登錄。webuser
),限制其僅能從localhost訪問,并授予最小必要權限(如SELECT, INSERT, UPDATE
);修改/etc/mysql/my.cnf
,設置bind-address = 127.0.0.1
禁止遠程訪問。skip-name-resolve
(避免DNS反向解析延遲)、local-infile=0
(防止文件讀取漏洞)、secure-file-priv=/var/lib/mysql-files
(限制文件導入導出路徑)。exec, passthru, shell_exec
),關閉錯誤顯示(display_errors = Off
),記錄錯誤到日志(log_errors = On; error_log = /var/log/php_errors.log
);禁止URL包含/打開(allow_url_fopen = Off; allow_url_include = Off
),啟用cgi.fix_pathinfo=0
防止路徑遍歷。webuser
)運行,設置listen.owner
和listen.group
為webuser
;調整進程池參數(pm.max_children = 50
,根據服務器內存調整),避免資源耗盡。open_basedir
,限制PHP僅能訪問網站目錄(如/var/www/html:/tmp/
),防止目錄穿越攻擊。sudo 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 {} \;
),避免PHP直接操作靜態文件。/etc/mysql/my.cnf
、/etc/php/7.4/fpm/php.ini
、Nginx虛擬主機配置)的訪問權限為600(chmod 600 /path/to/config
)。/etc/logrotate.d/nginx
),每日歸檔、保留14天、壓縮舊日志,避免日志文件過大。sudo apt install fail2ban
),配置針對SSH、Nginx的防護規則(如禁止多次失敗登錄的IP),實時阻斷惡意訪問。sudo rkhunter --check
);定期檢查Nginx、MySQL、PHP日志,分析異常請求(如大量404、POST請求)。mysqldump -u root -p --all-databases | gzip > /backup/mysql_$(date +%Y%m%d).sql.gz
)、網站文件(tar -czvf /backup/website_$(date +%Y%m%d).tar.gz /var/www/html
)、配置文件(tar -czvf /backup/config_$(date +%Y%m%d).tar.gz /etc/nginx /etc/mysql /etc/php
)。sudo apt install unattended-upgrades
),配置自動安裝安全更新(sudo dpkg-reconfigure --priority=low unattended-upgrades
),減少手動維護成本。