温馨提示×

Apache2在Ubuntu上如何进行安全加固

小樊
48
2025-11-11 11:03:40
栏目: 智能运维

系统更新与补丁管理
定期更新系统和Apache2软件包是安全加固的基础,可及时修补已知漏洞。执行以下命令更新包列表并升级所有可更新的软件包:

sudo apt update && sudo apt upgrade -y

配置防火墙(UFW)
使用UFW(Uncomplicated Firewall)限制对Apache服务的访问,仅允许必要的HTTP(80/tcp)和HTTPS(443/tcp)流量。操作步骤如下:

sudo apt install ufw -y  # 安装UFW(若未安装)
sudo ufw allow 'Apache Full'  # 允许Apache全流量(包含HTTP/HTTPS)
sudo ufw enable  # 启用防火墙
sudo ufw status  # 验证规则(应显示“Apache Full”允许)

禁用不必要的Apache模块
禁用不使用的模块可减少攻击面。首先查看已启用的模块:

apache2ctl -M

然后禁用不需要模块(如autoindex用于防止目录列表、php7.x若未使用PHP),以autoindex为例:

sudo a2dismod autoindex  # 禁用autoindex模块
sudo systemctl restart apache2  # 重启Apache使更改生效

隐藏Apache敏感信息
修改配置文件隐藏Apache版本号和操作系统信息,防止攻击者利用已知版本漏洞攻击:

sudo sed -i 's/ServerTokens OS/ServerTokens Prod/g' /etc/apache2/apache2.conf  # 隐藏版本号
sudo sed -i 's/ServerSignature On/ServerSignature Off/g' /etc/apache2/apache2.conf  # 关闭服务器签名
sudo systemctl restart apache2  # 重启Apache

启用SSL/TLS加密
为Apache配置SSL证书,强制使用HTTPS加密数据传输。步骤如下:

  1. 安装mod_ssl模块:
    sudo a2enmod ssl  # 启用SSL模块
    sudo systemctl restart apache2
    
  2. 生成自签名证书(生产环境建议使用Let’s Encrypt等免费证书):
    sudo mkdir -p /etc/apache2/ssl  # 创建SSL证书目录
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt  # 生成自签名证书
    
  3. 配置虚拟主机使用SSL(编辑/etc/apache2/sites-available/default-ssl.conf):
    <VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        SSLEngine on  # 启用SSL
        SSLCertificateFile /etc/apache2/ssl/apache.crt  # 证书路径
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key  # 密钥路径
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    
  4. 启用SSL站点并重启Apache:
    sudo a2ensite default-ssl.conf  # 启用SSL虚拟主机
    sudo systemctl reload apache2  # 重新加载配置
    

限制目录访问权限
防止未经授权的目录列表和文件访问,修改Apache配置文件:

sudo nano /etc/apache2/apache2.conf

添加或修改以下内容(针对网站根目录/var/www/html):

<Directory /var/www/html>
    Options -Indexes FollowSymLinks  # 禁止目录列表
    AllowOverride None  # 禁止.htaccess覆盖配置
    Require all granted  # 允许所有用户访问(可根据需求限制为特定IP)
</Directory>
sudo systemctl restart apache2  # 重启Apache

安装Web应用防火墙(WAF)
使用mod_security模块防范SQL注入、跨站脚本(XSS)等常见Web攻击:

sudo apt install libapache2-mod-security2 -y  # 安装mod_security
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf  # 复制配置文件
sudo sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/g' /etc/modsecurity/modsecurity.conf  # 开启主动防护模式
sudo a2enmod security2  # 启用mod_security模块
sudo systemctl restart apache2  # 重启Apache

监控与日志分析
定期检查Apache日志,及时发现异常行为。常用命令:

tail -f /var/log/apache2/access.log  # 实时查看访问日志
tail -f /var/log/apache2/error.log  # 实时查看错误日志

可选:安装logwatch工具自动化日志分析:

sudo apt install logwatch -y
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf  # 备份默认配置
sudo logwatch --output mail  # 发送日志摘要到邮箱(需配置邮件服务)

额外安全建议

  • 禁用AppArmor(可选):生产环境中建议配置自定义AppArmor规则,而非完全禁用:
    sudo aa-genprof /usr/sbin/apache2  # 生成Apache的AppArmor配置文件
    sudo aa-enforce /etc/apparmor.d/usr.sbin.apache2  # 强制应用配置
    
  • 定期备份数据:使用tar命令备份网站数据和配置文件:
    sudo tar -czvf /backup/apache_backup_$(date +%Y%m%d).tar.gz /var/www/html /etc/apache2
    

0