三二互联专业提供速度最快最稳定的美国服务器、香港服务器。中美直连,亚洲优化![ 代理登陆 ] [ 付款方式 ] [ 找回密码 ][ 电子协议责任书 ]
硬件资源保障

采用高配品牌服务器

主流强悍CPU配置

确保服务高速稳定运行

中美直连线路

中美直连亚洲优化

采用中国CN2骨干网络

保证速度飞快稳定高效

如何配置GoAccess简易告警?

美国、香港服务器

如何配置GoAccess简易告警?

07-01   来源:

 一、前置准备

Nginx 已配置 JSON 格式访问日志
nginx
log_format json_audit escape=json "{"
""time":"$time_iso8601","
""client_ip":"$realip_remote_addr","
""request":"$request","
""status":$status,"
""http_referer":"$http_referer","
""user_agent":"$http_user_agent""
"}";
access_log /var/log/nginx/access.log json_audit;
重载生效:
bash
运行
nginx -t && systemctl reload nginx
安装依赖工具
bash
运行
# CentOS
dnf install jq curl -y
# Ubuntu
apt install jq curl -y
钉钉创建自定义机器人(推荐加签方式更安全)
获取:Webhook地址、密钥
二、通用钉钉推送脚本(公共函数)
新建文件 /usr/local/bin/ding_alert.sh
bash
运行
#!/bin/bash
WEBHOOK="你的钉钉webhook地址"
SECRET="你的机器人加签密钥"
 
send_ding() {
    local msg="$1"
    local timestamp=$(date +%s%3N)
    local sign=$(printf "%s\n%s" "${timestamp}" "${SECRET}" | openssl dgst -sha256 -hmac "${SECRET}" -binary | base64)
 
    curl -s "${WEBHOOK}&timestamp=${timestamp}&sign=${sign}" \
    -H "Content-Type:application/json" \
    -d "{
        \"msgtype\":\"text\",
        \"text\":{
            \"content\":\"【Web安全告警-GoAccess巡检】\n${msg}\n告警时间:$(date "+%Y-%m-%d %H:%M:%S")\"
        }
    }"
}
授权:
bash
运行
chmod +x /usr/local/bin/ding_alert.sh
三、GoAccess 配套日志告警检测脚本
新建 /usr/local/bin/nginx_log_alert.sh
bash
运行
#!/bin/bash
LOG_PATH="/var/log/nginx/access.log"
# 告警防抖:10分钟内同一个IP只告警一次
BLACK_TMP="/tmp/alert_ip_black.txt"
# 告警阈值
FREQ_THRESHOLD=100
ERR_THRESHOLD=30
 
# 1. 高频IP访问告警(5分钟内超阈值)
high_freq_alert() {
    tmp=$(mktemp)
    # 取近5分钟日志
    start_time=$(date -d "5 minutes ago" +%Y-%m-%dT%H:%M)
    awk -v st="$start_time" "$1 >= st {print $2}" "$LOG_PATH" > "$tmp"
 
    awk -v thr="$FREQ_THRESHOLD" "{cnt[$1]++}END{for(ip in cnt)if(cnt[ip]>thr)print ip,cnt[ip]}" "$tmp" | while read ip num; do
        if ! grep -q "$ip" "$BLACK_TMP"; then
            /usr/local/bin/ding_alert.sh "检测高频访问攻击\n攻击IP:${ip}\n5分钟请求次数:${num}\n已自动拉黑该IP"
            # iptables 拉黑IP
            iptables -A INPUT -s "$ip" -j DROP
            echo "$ip $(date +%s)" >> "$BLACK_TMP"
        fi
    done
    rm -f "$tmp"
}
 
# 2. 403/404 扫描告警
scan_alert() {
    tmp=$(mktemp)
    grep -E ""status":403|"status":404" "$LOG_PATH" | tail -n 2000 > "$tmp"
    awk "{print $2}" "$tmp" | sort | uniq -c | awk "$1>30{print $2}" | while read ip; do
        if ! grep -q "$ip" "$BLACK_TMP"; then
            /usr/local/bin/ding_alert.sh "目录扫描告警\n恶意IP:${ip},大量403/404请求"
            echo "$ip $(date +%s)" >> "$BLACK_TMP"
        fi
    done
    rm -f "$tmp"
}
 
# 3. Web注入、木马特征告警
webshell_alert() {
    grep -E "eval|base64|union.*select|cmd=|webshell|phpinfo" "$LOG_PATH" | tail -n 500 > /tmp/shell.log
    if [ -s /tmp/shell.log ]; then
        attack_ip=$(jq -r .client_ip /tmp/shell.log | sort | uniq)
        /usr/local/bin/ding_alert.sh "高危:检测Web注入/木马扫描\n攻击IP:${attack_ip}\n请求片段:\n$(head -10 /tmp/shell.log)"
        for ip in $attack_ip; do
            iptables -A INPUT -s "$ip" -j DROP
            echo "$ip $(date +%s)" >> "$BLACK_TMP"
        done
    fi
}
 
# 4. 5xx服务异常告警
server_err_alert() {
    err_num=$(grep ""status":5[0-9][0-9]" "$LOG_PATH" | wc -l)
    if [ $err_num -gt $ERR_THRESHOLD ]; then
        /usr/local/bin/ding_alert.sh "服务异常告警\n5xx错误总次数:${err_num},请检查服务稳定性"
    fi
}
 
# 清理10分钟前的告警记录,避免永久防抖
clean_black() {
    now=$(date +%s)
    expire=$((now - 600))
    [ -f "$BLACK_TMP" ] && awk -v exp="$expire" "$2 > exp" "$BLACK_TMP" > "${BLACK_TMP}.tmp" && mv "${BLACK_TMP}.tmp" "$BLACK_TMP"
}
 
# 执行所有告警规则
clean_black
high_freq_alert
scan_alert
webshell_alert
server_err_alert
授权脚本:
bash
运行
chmod +x /usr/local/bin/nginx_log_alert.sh
四、配置定时任务,周期性巡检告警
bash
运行
crontab -e
# 每5分钟执行一次日志告警检测
*/5 * * * * /usr/local/bin/nginx_log_alert.sh >> /var/log/nginx_alert_task.log 2>&1
五、配合 GoAccess 做可视化 + 告警联动
正常启动 GoAccess 网页可视化面板
bash
运行
goaccess /var/log/nginx/access.log \
--log-format=JSON \
--real-time-html \
--output=/usr/share/nginx/html/log.html \
--daemonize
告警触发后,钉钉消息附带攻击 IP,可直接打开 GoAccess 日志页面检索该 IP 完整访问行为溯源攻击路径;
Nginx 给 GoAccess 页面配置 IP 白名单 + Basic 密码认证,禁止公网直接访问日志面板。
六、常用优化配置
告警白名单
在脚本高频检测开头添加内网、运维 IP 过滤,避免误告警:
bash
运行
WHITE_LIST="192.168.1.0/24 你的运维公网IP"
匹配到白名单 IP 直接跳过告警与拉黑。
临时拉黑 IP 自动释放(可选)
可以写定时任务定时清理 iptables 临时封禁规则,避免误封永久拉黑。
测试告警是否正常
bash
运行
/usr/local/bin/ding_alert.sh "测试Web日志告警"

三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快

上一篇:如何安装GoAccess工具? 下一篇:如何设置Web日志审计的告警策略?

美国GIA服务器三二互联版权所有 WWW.250.cc 2008-2015 All Rights Reserved
三二互联 - 专业的美国C3服务器、香港vps、抗DOOS流量清洗、云备份系统、网站加速系统、美国GIA服务器和香港云服务器产品提供商
三二互联24小时在线工单系统为您提供全面、专业、周到的技术支持与服务
咨询热线:400-679-9994(免长话费)