针对服务器上所有OpenCart后台的持续性DDoS攻击防护求助
针对OpenCart批量后台POST攻击的优化解决方案
1. 全局路由拦截(无需逐站修改代码)
这类攻击特征高度统一,全部命中OpenCart默认的/admin后台路径,直接在Apache全局配置层做拦截,比在PHP层面返回403资源占用低90%以上:
- 新增全局重写规则,拦截无合法Referer的后台POST请求:正常用户访问后台必然先GET/admin页面加载登录页,再发起POST请求,Referer会带当前站点域名,攻击脚本基本都是直接发起无Referer的POST请求
<IfModule mod_rewrite.c> RewriteEngine On # 匹配所有POST访问/admin路径的请求 RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} ^/admin/ [NC] # 校验Referer是否来自当前站点的后台页面 RewriteCond %{HTTP_REFERER} !^https?://%{HTTP_HOST}/admin/ [NC] # 直接返回403拒绝访问 RewriteRule ^(.*)$ - [F,L] </IfModule>
- 批量修改所有OpenCart站点的默认后台路径,从根源避免被攻击命中:可以用shell脚本遍历所有站点根目录批量操作,无需逐站手动修改
for site_root in /home/*/public_html/; do # 判断是否为OpenCart站点 if [ -f "${site_root}config.php" ] && grep -q "HTTP_SERVER" "${site_root}config.php" && [ -d "${site_root}admin" ]; then # 生成随机后台路径名 new_admin_dir="manage_$(tr -dc a-z0-9 </dev/urandom | head -c 8)" # 重命名admin目录 mv "${site_root}admin" "${site_root}${new_admin_dir}" # 替换站点配置文件里的后台路径 sed -i "s/'\/admin/'\/${new_admin_dir}/g" "${site_root}config.php" "${site_root}${new_admin_dir}/config.php" fi done
2. CSF防火墙联动拦截
- 新增CSF自定义监控规则,统计单IP 1分钟内请求
/admin路径超过5次直接临时拉黑24小时,规则写入/etc/csf/csf.custom:
if (($lgfile eq $config{APACHE_LOG}) && ($line =~ /\sPOST\s\/admin\/\sHTTP/)) { my $ip = $1 if $line =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/; if ($ip && !csf_ip_is_whitelisted($ip)) { csf_temp_ban($ip, 86400, "OpenCart admin brute force attempt"); } }
- 开启CSF端口速率限制,配置443端口单IP每秒请求数不超过20,超过直接临时阻断1小时,避免攻击打满服务器连接数。
3. ModSecurity规则优化
通用GotRoot规则对这类定向攻击漏判率高,新增自定义高优先级规则即可:
SecRule REQUEST_URI "@rx ^/admin/" "id:100001,chain,deny,status:403,log,msg:'OpenCart admin brute force detected'" SecRule REQUEST_METHOD "@streq POST" SecRule &ARGS:username "!@gt 0"
上面的规则会直接拦截POST到/admin路径且没有带username参数的无效请求,这类攻击大多是扫路径或者无意义的空请求,不会带合法登录参数。
4. 服务器资源隔离兜底
配合你当前使用的CloudLinux系统自带功能做资源隔离,避免攻击影响整台服务器稳定性:
- 开启CageFS功能,把每个站点的运行环境完全隔离,攻击无法跨站渗透
- 给每个站点的LVE资源设置限额,限制单站点最多占用2核CPU、20个PHP进程,就算单个站点被打满资源也不会影响其他站点运行,不会出现日志中CPU占用700%+的情况。
内容的提问来源于stack exchange,提问作者qwertyg
相关产品推荐
相关产品推荐

