#!/bin/bash # ========================================================== # 脚本名称: mod_trust.sh # 核心功能: 动态扫描本地 LBS 冷数据,提取权威白名单,执行流量净化 # ========================================================== INSTALL_DIR="/opt/ip_sentinel" CONFIG_FILE="${INSTALL_DIR}/config.conf" UA_FILE="${INSTALL_DIR}/data/user_agents.txt" REPO_RAW_URL="https://raw.githubusercontent.com/hotyue/IP-Sentinel/main" # --- [基础环境校验] --- [ ! -f "$CONFIG_FILE" ] && exit 1 source "$CONFIG_FILE" REGION=${REGION_CODE:-"US"} LOG_FILE="${INSTALL_DIR}/logs/sentinel.log" # ========================================================== # 1. 动态获取配置 (拓扑自适应与兜底机制) # ========================================================== # 利用 find 穿透多级子目录,自动抓取安装时落地的专属 json 文件 REGION_JSON_FILE=$(find "${INSTALL_DIR}/data/regions" -name "*.json" 2>/dev/null | head -n 1) # [容灾兜底] 如果本地 json 异常,回退拉取云端通用大区配置 if [ -z "$REGION_JSON_FILE" ] || [ ! -f "$REGION_JSON_FILE" ]; then REGION_JSON_FILE="${INSTALL_DIR}/data/regions/${REGION}.json" mkdir -p "${INSTALL_DIR}/data/regions" curl -${IP_PREF:-4} -sL "${REPO_RAW_URL}/data/regions/${REGION}.json" -o "$REGION_JSON_FILE" fi # 解析安全网址数组 if [ -f "$REGION_JSON_FILE" ]; then mapfile -t TRUST_URLS < <(jq -r '.trust_module.white_urls[]' "$REGION_JSON_FILE" 2>/dev/null) fi # [极限容灾] 提供国际通用无害白名单防全盘崩溃 if [ ${#TRUST_URLS[@]} -eq 0 ]; then TRUST_URLS=("https://en.wikipedia.org/wiki/Special:Random" "https://www.apple.com/" "https://www.microsoft.com/") fi # --- [日志规范化组件] --- log_msg() { local TYPE=$1 local MSG=$2 # 强制无视本地时区,统一采用 UTC 时间生成日志时间戳 local TIME=$(date -u "+%Y-%m-%d %H:%M:%S UTC") local local_ver="${AGENT_VERSION:-未知}" echo "[$TIME] [v%-5s] [%-5s] [Trust ] [$REGION] $MSG" | sed "s/%-5s/$local_ver/;s/%-5s/$TYPE/" | tee -a "$LOG_FILE" } # ========================================================== # 2. 锁定单次会话指纹 (Hash-Seeded Persona) # ========================================================== if [ -f "$UA_FILE" ]; then mapfile -t UA_POOL < <(grep -v '^$' "$UA_FILE") TOTAL_UA=${#UA_POOL[@]} if [ "$TOTAL_UA" -gt 0 ]; then # 优先使用固化的公网 IP 作为哈希种子,防范 NAT 节点指纹同质化特征 SEED=$(echo -n "${PUBLIC_IP:-${BIND_IP:-127.0.0.1}}" | cksum | awk '{print $1}') # 构建当前节点的固定设备组映射 IDX1=$(( SEED % TOTAL_UA )) IDX2=$(( (SEED * 17) % TOTAL_UA )) IDX3=$(( (SEED * 31) % TOTAL_UA )) MY_UA_POOL=("${UA_POOL[$IDX1]}" "${UA_POOL[$IDX2]}" "${UA_POOL[$IDX3]}") # 模拟真实的家庭多设备环境进行会话隔离 CURRENT_UA=${MY_UA_POOL[$RANDOM % 3]} else CURRENT_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" fi else CURRENT_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" fi # ========================================================== # 3. 执行流量净化行动 # ========================================================== log_msg "START" "========== 启动区域 IP 信用净化会话 ==========" log_msg "INFO " "已载入 [${REGION}] 区域白名单,配置库条目: ${#TRUST_URLS[@]} 个" log_msg "INFO " "已锁定本地伪装指纹: $(echo $CURRENT_UA | cut -d' ' -f1-2)..." # ---------------------------------------------------------- # 网络锚定与协议自适应构建 # 强制 curl 绑定网卡并自动匹配底层网络协议栈 # ---------------------------------------------------------- CURL_BIND_OPT="" DYNAMIC_IP_PREF="-${IP_PREF:-4}" if [[ -n "$BIND_IP" && "$BIND_IP" =~ ^[0-9a-fA-F:\.]+$ ]]; then RAW_BIND_IP=$(echo "$BIND_IP" | tr -d '[]') if ! ip addr show 2>/dev/null | grep -qw "$RAW_BIND_IP"; then log_msg "WARN " "检测到配置的出口 IP ($RAW_BIND_IP) 已丢失,自动降级为系统默认路由出网!" CURL_BIND_OPT="" else CURL_BIND_OPT="--interface $BIND_IP" if [[ "$BIND_IP" == *":"* ]]; then DYNAMIC_IP_PREF="-6" log_msg "INFO " "底层路由锁定: 绑定 IPv6 出口及协议 ($BIND_IP)" elif [[ "$BIND_IP" == *"."* ]]; then DYNAMIC_IP_PREF="-4" log_msg "INFO " "底层路由锁定: 绑定 IPv4 出口及协议 ($BIND_IP)" fi fi fi STEP_COUNT=$((RANDOM % 4 + 3)) SUCCESS_INJECT=0 for ((i=1; i<=STEP_COUNT; i++)); do TARGET_URL=${TRUST_URLS[$RANDOM % ${#TRUST_URLS[@]}]} # 注入高权重流量,严格绑定出网协议,构造隐蔽的安全伪装协议头 HTTP_CODE=$(curl $CURL_BIND_OPT $DYNAMIC_IP_PREF -A "$CURRENT_UA" \ -H "Accept: text/html,application/xhtml+xml;q=0.9,image/avif,image/webp,*/*;q=0.8" \ -H "Accept-Language: en-US,en;q=0.9" \ -H "Sec-Fetch-Dest: document" \ -H "Sec-Fetch-Mode: navigate" \ -H "Upgrade-Insecure-Requests: 1" \ --compressed \ -s -o /dev/null -w "%{http_code}" -m 15 "$TARGET_URL") # 扩大 HTTP 状态码容错区间:包含各大骨干 CDN 常见的 20x 及 30x 状态转移 if [[ "$HTTP_CODE" =~ ^(20[0-9]|30[1-8])$ ]]; then log_msg "EXEC " "动作[$i/$STEP_COUNT]完成 | 状态: $HTTP_CODE | 注入: $TARGET_URL" ((SUCCESS_INJECT++)) else log_msg "EXEC " "动作[$i/$STEP_COUNT]异常 | 状态: $HTTP_CODE | 阻拦: $TARGET_URL" fi if [ $i -lt $STEP_COUNT ]; then SLEEP_TIME=$((RANDOM % 76 + 45)) log_msg "WAIT " "正在浏览本地高权重页面,模拟停留 $SLEEP_TIME 秒..." sleep $SLEEP_TIME fi done # ========================================================== # 4. 结论判定与输出 # ========================================================== if [ "$SUCCESS_INJECT" -ge $((STEP_COUNT / 2)) ]; then log_msg "SCORE" "自检结论: ✅ 信用净化完成 (已成功注入 $SUCCESS_INJECT 条无害流量)" else log_msg "SCORE" "自检结论: ❌ 净化受阻 (部分站点拦截或网络超时)" fi log_msg "END " "========== 会话结束,释放进程 ==========" log_msg "INFO " "系统级调度完毕,信任因子持续积累中..."