1. 系统与软件更新
保持Debian系统及LAMP组件(Apache、MariaDB/MySQL、PHP)为最新版本,及时修补已知安全漏洞。定期运行以下命令更新系统:
sudo apt update && sudo apt upgrade -y
建议启用自动安全更新,安装unattended-upgrades工具:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
2. 用户与权限管理
避免使用root用户进行日常操作,创建普通用户并加入sudo组:
sudo useradd -m myuser && sudo passwd myuser # 创建用户并设置密码
sudo usermod -aG sudo myuser # 加入sudo组
强化密码策略,通过PAM模块设置密码复杂度(如要求大小写字母、数字、特殊字符),编辑/etc/pam.d/common-password文件,修改以下行:
password requisite pam_cracklib.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
3. SSH服务安全配置
禁用root用户远程登录,编辑/etc/ssh/sshd_config文件,设置:
PermitRootLogin no
PermitEmptyPasswords no
启用SSH密钥对认证(替代密码登录),步骤如下:
ssh-keygen -t rsa -b 4096(按提示保存密钥);ssh-copy-id myuser@server_ip;sudo systemctl restart sshd。ufw(Uncomplicated Firewall)简化防火墙规则,仅允许必要端口(HTTP 80、HTTPS 443、SSH 22):sudo ufw allow 'Apache Full' # 允许HTTP/HTTPS
sudo ufw allow ssh # 允许SSH
sudo ufw enable # 启用防火墙
若使用iptables,可添加以下规则:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -j DROP # 拒绝所有其他入站连接
5. Apache Web服务器安全
禁用不必要的Apache模块(如php_cgi),减少攻击面:
sudo a2dismod php7.4-cgi # 根据PHP版本调整(如php8.1-cgi)
sudo systemctl restart apache2
配置目录权限,禁止目录列表并限制敏感目录访问。编辑/etc/apache2/sites-available/000-default.conf,添加:
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
6. MariaDB/MySQL数据库安全
运行mysql_secure_installation脚本进行基础安全设置,包括:更改root密码、删除匿名用户、禁止root远程登录、删除测试数据库。
限制数据库访问权限,仅允许特定IP地址访问(如本地或应用服务器IP),编辑/etc/mysql/mariadb.conf.d/50-server.cnf文件,修改bind-address:
bind-address = 127.0.0.1 # 仅允许本地访问
7. PHP安全配置
编辑php.ini文件(路径如/etc/php/8.1/apache2/php.ini),禁用危险函数(如exec、system、shell_exec),防止命令注入:
disable_functions = exec,system,shell_exec,passthru
调整open_basedir限制PHP脚本访问目录,防止跨目录攻击:
open_basedir = /var/www/html/:/tmp/
8. 定期审计与监控
使用fail2ban工具防止暴力破解攻击(如SSH、Apache登录),安装并配置:
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # 备份默认配置
sudo nano /etc/fail2ban/jail.local # 启用SSH防护(设置enabled = true)
sudo systemctl restart fail2ban
定期检查系统日志(/var/log/syslog、/var/log/auth.log)和Web服务器日志(/var/log/apache2/access.log、error.log),及时发现异常活动(如大量失败登录尝试、可疑文件访问)。