Google Analytics (GA) 主要用于网站流量分析,但通过合理配置也可以用于基本的Web安全监控。以下是在Nginx环境中实现这一目标的方案:
首先在Google Analytics中创建账号并获取跟踪ID,格式为UA-XXXXXXXX-X
或G-XXXXXXXXXX
。
server {
listen 80;
server_name yourdomain.com;
location / {
# 其他配置...
# 使用sub_filter插入GA代码
sub_filter '</head>' '<script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date());gtag("config","GA_MEASUREMENT_ID");</script></head>';
sub_filter_once on;
}
}
server {
error_page 404 /404.html;
location = /404.html {
internal;
# 插入GA代码到404页面
sub_filter '</head>' '<script>gtag("event", "404_error", {page_location: "$request_uri", page_path: "$uri"});</script></head>';
sub_filter_once on;
}
}
server {
# 记录可疑用户代理
if ($http_user_agent ~* (nmap|nikto|wget|curl|python|sqlmap|hydra|metasploit)) {
set $suspicious 1;
}
location / {
# 其他配置...
# 插入GA事件跟踪可疑活动
if ($suspicious) {
sub_filter '</head>' '<script>gtag("event", "suspicious_activity", {user_agent: "$http_user_agent", ip: "$remote_addr"});</script></head>';
}
}
}
location /login {
# 登录处理逻辑...
# 记录登录尝试
sub_filter '</head>' '<script>gtag("event", "login_attempt", {method: "$request_method", username: "$arg_username", status: "$status"});</script></head>';
}
http {
log_format security '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$http_x_forwarded_for" '
'suspicious=$suspicious';
server {
access_log /var/log/nginx/security.log security;
# 其他配置...
}
}
然后可以设置脚本定期分析日志文件并通过GA Measurement Protocol API发送数据到Google Analytics。
sub_filter '</head>' '<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({"gtm.start":new Date().getTime(),event:"gtm.js"});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!="dataLayer"?"&l="+l:"";j.async=true;j.src="https://www.googletagmanager.com/gtm.js?id="+i+dl;f.parentNode.insertBefore(j,f);})(window,document,"script","dataLayer","GTM-XXXXXX");</script></head>';
在Google Analytics中设置以下自定义报告: - 可疑活动报告(基于自定义事件) - 404错误报告 - 异常流量模式 - 地理位置异常访问
如果安全监控是主要需求,考虑以下专业方案: 1. ELK Stack (Elasticsearch, Logstash, Kibana) 2. WAF解决方案 (如ModSecurity) 3. 专业安全分析工具 (如Splunk)
这种GA方案适合中小型网站的基础安全监控需求,对于高安全性要求的网站,建议使用专业安全监控工具。