服务器防火墙无法直接识别tor流量,需结合封禁tor出口节点ip列表(每小时更新)与连接行为特征(如高频短连接、缺失user-agent)进行拦截;建议先日志观察再分阶段精准阻断,避免误伤。

服务器防火墙本身无法直接识别“Tor流量”或“Tor用户”,因为Tor出口节点发出的请求在传输层与普通HTTPS流量无异。真正可行的做法是:通过封禁已知Tor出口节点的IP地址列表,结合连接行为特征(如高频短连接、非标准User-Agent、无JavaScript环境等)进行辅助拦截。这需要定期更新IP库,并配合应用层防护策略。
获取并导入Tor出口节点IP列表
Tor Project官方提供实时更新的出口节点IP清单(https://check.torproject.org/torbulkexitlist),该列表仅包含当前活跃且允许中继流量的出口IP,每小时刷新一次。
- 使用curl或wget定时下载该列表,例如:
wget -O /tmp/tor-exit-ips.txt https://check.torproject.org/torbulkexitlist - 清洗格式:去除注释行(以#开头)、空行,保留纯IPv4地址(每行一个)
- 在firewalld中批量封禁(CentOS/RHEL 7+):
while read ip; do firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="$ip" reject'; done - 执行
firewall-cmd --reload使规则生效
限制高风险连接行为(非IP维度)
单靠IP封禁易被绕过(如新出口节点未收录、桥接流量不经过出口),建议叠加以下轻量级行为控制:
- 用iptables或nftables限制单IP每分钟新建TCP连接数(如超过30次即临时封禁5分钟),可有效抑制扫描和暴力访问
- 在Web服务器(如Nginx/Apache)配置中,拒绝不含
Accept: text/html或User-Agent字段的请求——多数Tor浏览器默认不发送完整UA或会禁用JS,导致部分自动化工具特征暴露 - 对/robots.txt、/.git/、/wp-admin等敏感路径增加访问频率阈值,触发后返回429或跳转至验证页
注意规避误伤与维护成本
Tor出口IP与正常云主机、教育网出口存在重叠可能,盲目全量封禁会导致真实用户无法访问。推荐采用分阶段策略:
- 初期启用日志记录模式(
log-prefix "TOR-ATTEMPT"),不阻断,只统计来源IP与路径,观察一周确认误报率 - 优先封禁同时满足“Tor出口IP + 访问/admin.php + 无Referer + HTTP/1.0协议”的组合请求,精准度更高
- 将IP列表更新任务写入crontab(建议每6小时一次),并设置失败告警(如邮件通知或企业微信机器人)
- 避免在负载较高的生产服务器上运行实时IP匹配脚本,应改用内核级规则(firewalld rich rules 或 nftables set)提升性能
这套方法不依赖深度包检测或中间件改造,适用于主流Linux发行版,关键是把IP黑名单作为基础层,再叠加行为分析做增强。实际效果取决于更新及时性和业务接口的暴露程度。











