搭建LAMP(Linux+Apache+MySQL+PHP)环境后,必须进行适当的安全配置以保护服务器免受攻击。以下是全面的安全设置建议:
# 更新系统软件包
sudo apt update && sudo apt upgrade -y # Debian/Ubuntu
sudo yum update -y # CentOS/RHEL
# 设置自动安全更新
sudo apt install unattended-upgrades # Debian/Ubuntu
sudo dpkg-reconfigure unattended-upgrades
# 使用UFW(简单防火墙)
sudo apt install ufw
sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw status verbose
# 修改SSH默认端口
sudo nano /etc/ssh/sshd_config
# 修改: Port 2222 (或其他非标准端口)
# 禁用root登录
# 修改: PermitRootLogin no
# 使用密钥认证
# 修改: PasswordAuthentication no
# 限制用户登录
# 修改: AllowUsers yourusername
sudo systemctl restart sshd
sudo nano /etc/apache2/conf-available/security.conf
修改以下参数:
ServerTokens Prod
ServerSignature Off
TraceEnable Off
FileETag None
sudo a2dismod autoindex status cgi cgid
sudo systemctl restart apache2
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 750 /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
sudo mysql_secure_installation
CREATE DATABASE dbname;
CREATE USER 'username'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost';
FLUSH PRIVILEGES;
sudo nano /etc/mysql/my.cnf
添加:
[mysqld]
skip-networking
local-infile=0
symbolic-links=0
sudo nano /etc/php/7.x/apache2/php.ini
修改以下参数:
expose_php = Off
display_errors = Off
log_errors = On
allow_url_fopen = Off
allow_url_include = Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
upload_max_filesize = 2M
post_max_size = 8M
sudo chown -R root:root /var/www/html
sudo chown -R www-data:www-data /var/www/html/uploads
sudo nano /var/www/html/.htaccess
添加:
<FilesMatch "\.(env|log|htaccess|htpasswd|ini|phps|fla|psd|log|sh|sql)$">
Order allow,deny
Deny from all
</FilesMatch>
# 安装日志分析工具
sudo apt install logwatch
# 设置日志轮转
sudo nano /etc/logrotate.d/apache2
# 创建备份脚本
sudo nano /usr/local/bin/backup.sh
添加内容:
#!/bin/bash
mysqldump -u username -p'password' dbname > /backups/dbname_$(date +%Y%m%d).sql
tar -czf /backups/html_$(date +%Y%m%d).tar.gz /var/www/html
find /backups -type f -mtime +30 -delete
# 安装fail2ban防止暴力破解
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 安装rootkit检查工具
sudo apt install rkhunter chkrootkit
sudo rkhunter --update
sudo rkhunter --check
# 使用Let's Encrypt免费证书
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d yourdomain.com
# 安装ModSecurity
sudo apt install libapache2-mod-security2
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
sudo nano /etc/modsecurity/modsecurity.conf
修改:
SecRuleEngine On
SecRequestBodyLimit 536870912
通过以上设置,您的LAMP环境将具备较高的安全性。请记住,安全是一个持续的过程,需要定期更新和检查。