当前位置:网站首页 >  攻略

ZBlog网站防恶意访问拦截的完整设置指南

时间:2026年05月27日 16:32:20 来源:易频IT社区

一、恶意访问的常见类型与危害

在配置拦截规则前,你需要了解常见的恶意访问类型。以下为ZBlog网站最常遇到的几种攻击形式:

1.1 高频请求攻击

攻击者在短时间内发送大量请求,消耗服务器资源。典型表现包括:

  • 同一IP每秒请求次数超过10次
  • 持续访问同一页面超过30秒
  • 在1分钟内访问超过50个不同页面

1.2 恶意爬虫扫描

这类访问会尝试寻找网站漏洞:

  • 扫描/wp-admin/、/phpmyadmin/等管理路径
  • 尝试访问不存在的.php、.asp文件
  • 在URL参数中注入SQL语句片段

1.3 内容采集器

自动抓取网站内容的程序:

  • User-Agent中包含"spider"、"bot"但非主流搜索引擎
  • 短时间内抓取大量文章内容
  • 无视robots.txt协议限制

二、服务器层面的基础防护设置

2.1 Nginx服务器配置

在Nginx配置文件中添加以下规则,配置文件通常位于/etc/nginx/nginx.conf或站点配置目录:

``` 限制连接频率 limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn perip 10; 限制请求频率 limit_req_zone $binary_remote_addr zone=reqlimit:10m rate=1r/s; limit_req zone=reqlimit burst=5 nodelay; 阻止特定User-Agent if ($http_user_agent ~ (AhrefsBot|SemrushBot|MJ12bot|DotBot) ) { return 403; } 阻止扫描尝试 location ~ \.(php|asp|aspx|jsp|cgi)$ { if ($request_uri ~ "/(admin|wp-admin|phpmyadmin|administrator)") { return 403; } } ```

配置完成后执行nginx -t测试配置,然后执行systemctl reload nginx重新加载配置。

2.2 Apache服务器配置

在.htaccess文件中添加以下规则,该文件位于ZBlog根目录:

``` 开启重写引擎 RewriteEngine On 阻止恶意User-Agent RewriteCond %{HTTP_USER_AGENT} (AhrefsBot|SemrushBot|MJ12bot) [NC] RewriteRule . - [F] 限制请求方法 RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|TRACK) [NC] RewriteRule . - [F] 阻止特定文件访问 Order allow,deny Deny from all 限制访问频率 DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 3600 ```

三、ZBlog插件防护方案

3.1 安装并配置ZBlog防CC攻击插件

进入ZBlog后台,依次点击应用中心 → 插件管理 → 获取更多插件,搜索"防CC攻击"安装。安装完成后进行以下配置:

在插件设置页面,找到"基础设置"选项卡:

  • 开启防护:选择"是"
  • 统计时间:设置为60秒
  • 最大请求数:设置为30次
  • 封锁时间:设置为3600秒
  • 记录日志:选择"是"

在"高级规则"选项卡中添加以下自定义规则:

``` 阻止特定路径扫描 /admin/ => block /wp-admin/ => block /phpmyadmin/ => block /.git/ => block 阻止可疑参数 ?cmd= => block ?exec= => block ?system= => block ?phpinfo => block ```

3.2 验证码插件配置

安装"ZBLOG验证码增强版"插件,在以下位置启用验证码:

  • 用户登录页面
  • 文章评论提交
  • 联系表单提交
  • 注册页面

ZBlog网站防恶意访问拦截的完整设置指南

关键配置项:

  • 验证码类型:选择"数学计算题"
  • 失效时间:设置为300秒
  • 失败次数限制:设置为5次
  • 封锁IP:选择"是"

四、PHP代码层面的防护措施

4.1 修改ZBlog核心配置文件

编辑zb_users/c_option.php文件,在文件末尾添加:

``` // 防恶意访问设置 $GLOBALS['filter'] = array( // 屏蔽IP段 'block_ips' => array( '123.456..', '789.012.34.' ), // 允许的User-Agent 'allow_agents' => array( 'Mozilla', 'Chrome', 'Safari', 'Baiduspider', 'Googlebot' ), // 请求频率限制 'rate_limit' => array( 'max_requests' => 30, 'time_period' => 60 ) ); ```

4.2 创建独立防护文件

在ZBlog根目录创建security.php文件,内容如下:

``` 10) { header('HTTP/1.1 429 Too Many Requests'); exit('Too many requests'); } } else { $_SESSION['request_count'] = 1; $_SESSION['last_request'] = $current_time; } } else { $_SESSION['request_count'] = 1; $_SESSION['last_request'] = $current_time; } ?> ```

然后在ZBlog的zb_users/theme/你的主题名/include.php文件开头添加:

``` require_once dirname(__FILE__) . '/../../security.php'; ```

五、数据库层面的防护策略

5.1 创建访问日志表

在phpMyAdmin中执行以下SQL语句:

``` CREATE TABLE IF NOT EXISTS `zbp_access_log` ( `log_id` int(11) NOT NULL AUTO_INCREMENT, `ip_address` varchar(45) NOT NULL, `user_agent` text NOT NULL, `request_url` text NOT NULL, `request_time` datetime NOT NULL, `request_count` int(11) DEFAULT '1', `is_blocked` tinyint(1) DEFAULT '0', PRIMARY KEY (`log_id`), KEY `ip_address` (`ip_address`), KEY `request_time` (`request_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ```

5.2 创建自动封锁存储过程

执行以下SQL创建自动处理程序:

``` DELIMITER $$ CREATE PROCEDURE `block_malicious_ips`() BEGIN -- 封锁1分钟内请求超过50次的IP UPDATE zbp_access_log SET is_blocked = 1 WHERE ip_address IN ( SELECT ip_address FROM ( SELECT ip_address, COUNT() as request_count FROM zbp_access_log WHERE request_time >= DATE_SUB(NOW(), INTERVAL 1 MINUTE) GROUP BY ip_address HAVING request_count > 50 ) AS temp ); -- 删除7天前的日志 DELETE FROM zbp_access_log WHERE request_time < DATE_SUB(NOW(), INTERVAL 7 DAY); END$$ DELIMITER ; ```

5.3 设置定时任务

通过crontab设置每5分钟执行一次封锁检查:

``` 编辑crontab crontab -e 添加以下行 /5 /usr/bin/php /path/to/your/zblog/check_block.php ```

创建check_block.php文件:

``` db->query("CALL block_malicious_ips()"); // 获取被封锁的IP并更新防火墙规则 $blocked_ips = $zbp->db->query("SELECT DISTINCT ip_address FROM zbp_access_log WHERE is_blocked = 1"); foreach ($blocked_ips as $ip) { // 更新iptables规则 exec("iptables -A INPUT -s {$ip['ip_address']} -j DROP"); // 记录到日志 $zbp->db->query("INSERT INTO zbp_block_log (ip_address, block_time, reason) VALUES ('{$ip['ip_address']}', NOW(), '自动封锁')"); } ?> ```

六、监控与维护

6.1 创建监控脚本

创建monitor.php文件用于实时监控:

``` 0, 'blocked_requests' => 0, 'top_attackers' => array() ); // 获取最近1小时数据 $sql = "SELECT ip_address, COUNT() as request_count, SUM(CASE WHEN is_blocked = 1 THEN 1 ELSE 0 END) as blocked_count FROM zbp_access_log WHERE request_time >= DATE_SUB(NOW(), INTERVAL 1 HOUR) GROUP BY ip_address ORDER BY request_count DESC LIMIT 10"; $result = $zbp->db->query($sql); while ($row = $zbp->db->fetch($result)) { $stats['top_attackers'][] = $row; $stats['total_requests'] += $row['request_count']; $stats['blocked_requests'] += $row['blocked_count']; } // 输出监控信息 echo "总请求数: " . $stats['total_requests'] . "\n"; echo "已拦截请求: " . $stats['blocked_requests'] . "\n"; echo "拦截率: " . round(($stats['blocked_requests'] / $stats['total_requests']) 100, 2) . "%\n"; echo "\nTop 10 攻击IP:\n"; foreach ($stats['top_attackers'] as $attacker) { echo $attacker['ip_address'] . " - " . $attacker['request_count'] . "次请求\n"; } ?> ```

6.2 设置报警机制

创建报警脚本alert.php

``` = DATE_SUB(NOW(), INTERVAL 1 HOUR) GROUP BY ip_address HAVING count > $threshold"; $result = $zbp->db->query($sql); if ($zbp->db->num_rows($result) > 0) { // 发送邮件报警 $to = "admin@yourdomain.com"; $subject = "ZBlog安全警报 - 检测到异常访问"; $message = "检测到以下IP异常访问:\n\n"; while ($row = $zbp->db->fetch($result)) { $message .= "IP: " . $row['ip_address'] . " - " . $row['count'] . "次请求\n"; } mail($to, $subject, $message); // 记录到系统日志 error_log("安全警报: " . $message, 3, "/var/log/zblog_security.log"); } ?> ```

将以上所有配置完成后,你的ZBlog网站已经具备了完整的恶意访问防护能力。定期检查监控日志,根据实际情况调整阈值参数,即可持续保障网站安全。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图