保持Debian系统及PHP相关软件包为最新版本,及时修补已知安全漏洞。执行以下命令更新系统:
sudo apt update && sudo apt upgrade -y
建议开启自动安全更新(如unattended-upgrades),确保及时获取关键补丁。
编辑/etc/php/{version}/fpm/php.ini(PHP-FPM)或/etc/php/{version}/apache2/php.ini(Apache模块),调整以下关键参数:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
X-Powered-By: PHP标识,降低针对性攻击风险。expose_php = Off
register_globals = Off
open_basedir约束PHP仅能访问指定目录(如网站根目录/var/www/html),防止非法读取系统文件(如/etc/passwd)。open_basedir = /var/www/html:/tmp
file_get_contents()、include等函数从URL加载外部资源,防范远程文件包含(RFI)攻击。allow_url_fopen = Off
allow_url_include = Off
memory_limit = 128M
max_execution_time = 30
以上配置需根据实际业务调整(如memory_limit可根据应用需求增大)。
Suhosin是PHP的强化补丁,提供缓冲区溢出防护、数据加密、会话保护等功能。安装步骤如下:
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
sudo make install
编辑php.ini添加扩展:
extension=suhosin.so
可通过suhosin.ini进一步配置(如max_request_length限制POST数据大小),提升安全性。
mod_security用于Web应用防火墙):sudo a2enmod security2
Options -Indexes,防止攻击者浏览目录结构。www-data)对网站目录仅有读写权限,无执行权限(如chmod 750 /var/www/html)。/etc/php/{version}/fpm/pool.d/www.conf,将listen改为Unix套接字(更安全):listen = /run/php/php{version}-fpm.sock
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{version}-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
OPTIONS、TRACE,减少信息泄露风险。使用ufw(Uncomplicated Firewall)限制入站流量,仅允许HTTP(80)、HTTPS(443)、SSH(22)等必要端口:
sudo ufw enable
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw reload
若需更严格的控制,可限制SSH端口(如改为2222)并仅允许可信IP访问。
/etc/ssh/sshd_config,设置:PermitRootLogin no
ssh-keygen -t rsa),将公钥添加至~/.ssh/authorized_keys,并在sshd_config中设置:PasswordAuthentication no
sudo systemctl restart sshd
Logwatch或GoAccess定期分析Apache/Nginx访问日志(/var/log/apache2/access.log、/var/log/nginx/access.log)及PHP错误日志(/var/log/php_errors.log),识别异常请求(如大量404错误、SQL注入尝试)。Fail2ban,监控日志中的恶意行为(如多次登录失败),自动封禁IP地址(如封禁5分钟内失败5次的IP)。配置示例:sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑jail.local,启用SSH防护:[sshd]
enabled = true
maxretry = 5
bantime = 600
重启Fail2ban:sudo systemctl restart fail2ban
pam_cracklib模块设置密码复杂度(如要求包含大小写字母、数字、特殊字符),强制定期更换密码(如每90天)。phpdismod禁用未使用的模块(如xdebug),减少攻击面。rsync或BorgBackup),防止数据丢失。通过以上步骤,可显著提升Debian系统下PHP应用的安全性。需定期审查配置(如每季度检查一次),并根据最新安全威胁(如CVE公告)调整策略。