首页站内杂志技术文摘
文章内容页

巧用宝塔计划任务的Shell脚本,守护网站安全,拉黑恶意采集IP

  • 作者:雨祺
  • 来源: 原创
  • 发表于2024-03-09 21:51:07
  • 被阅读0
  • 今天我们来聊聊如何巧妙运用宝塔的计划任务中的Shell脚本,将恶意采集网站内容的IP一网打尽!网站如同宝库,恶意采集者则如同小偷,悄悄窃取我们的心血。是时候亮剑反击了!借助Shell脚本,我们就像布下了侦探网,自动识别并拉黑那些可疑的IP。再结合宝塔的计划任务,让“侦探”每日定时巡逻,让恶意采集者无处遁形!这样不仅能保护我们的原创内容,减轻服务器负担,还能提升用户浏览体验,甚至助力网站排名和流量的提升。虽然无法完全杜绝采集,但至少能让那些菜鸟采集者望而却步。赶紧行动起来,用宝塔计划任务中的Shell脚本守护我们的网站,让它重回宁静与安全的怀抱!

    首先要安装jq:安装jq非常简单,cenos只需运行以下命令
    1. sudo yum install jq -y 
    该命令将自动下载并安装jq工具及其依赖项。

    那接下来就进入宝塔的计划任务,任务类型选择shell脚本,任务名称“定位恶意IP”执行周期每15分钟。脚本内容如下
    1. #!/bin/bash   
    2. logfiles=(   
    3.   "/www/wwwlogs/www.*****.com.log"   
    4.   "/www/wwwlogs/www.*****.cn.log"   
    5.   "/www/wwwlogs/www.*****.com.log"   
    6. )   
    7. baidu_spider_ips="/www/server/nginx/conf/baidu_spider_ips.txt"   
    8. blockiplogfile="/www/server/nginx/conf/blockip.conf"   
    9. geolocation_file="/www/wwwlogs/blockipinfo.txt"   
    10. last_minutes=1   
    11. start_time=$(date -d "${last_minutes} minutes ago" +"%d/%b/%Y:%H:%M:%S")   
    12. stop_time=$(date +"%d/%b/%Y:%H:%M:%S")   
    13. merged_log=$(mktemp)   
    14. geolocation_txt=$(mktemp)   
    15. for logfile in "${logfiles[@]}"do   
    16.   tac "$logfile" | awk -v st="$start_time" -v et="$stop_time" -F' ' '   
    17.     BEGIN {   
    18.       while (getline < "'$baidu_spider_ips'") spider[$0]   
    19.     }   
    20.     {   
    21.       t = substr($4, 2, 19); # 时间戳是每行的第四个字段,格式为[dd/Mmm/YYYY:HH:MM:SS]   
    22.       if (t >= st && t <= et && !($1 in spider)) { # 排除百度蜘蛛IP   
    23.         print $1; # IP地址是每行的第一个字段   
    24.       }   
    25.     }   
    26.   ' >> "$merged_log"   
    27. done    
    28. sort "$merged_log" | uniq -c | sort -nr > "${merged_log}.sorted"   
    29. threshold=60   
    30. api_url="https://www.meiweny.cn/e/extend/chat/info.php?enews=ipcha&ip="  
    31. "$blockiplogfile"   
    32. while IFS=' ' read -r count ip; do   
    33.   if (( count > threshold )); then   
    34.     response=$(curl -s "$api_url$ip")   
    35.     if [[ -n "$response" ]]; then   
    36.       location=$(echo "$response" | jq -r '.ip1' 2>/dev/null)   
    37.       if [[ $? -eq 0 ]]; then # 检查jq命令是否成功   
    38.         echo "$ip - $count requests - $location" >> "$geolocation_txt"   
    39.         echo "deny $ip;" >> "$blockiplogfile"   
    40.         echo "IP $ip blocked due to excessive requests."   
    41.       else   
    42.         echo "$ip - $count requests - Failed to extract location with jq" >> "$geolocation_txt"   
    43.       fi   
    44.     else   
    45.       echo "$ip - $count requests - Unable to retrieve location" >> "$geolocation_txt"   
    46.     fi   
    47.   fi   
    48. done < "${merged_log}.sorted"   
    49. while IFS=' ' read -r ip _; do   
    50. grep -qF "deny $ip;" "$blockiplogfile" || echo "deny $ip;" >> "$blockiplogfile"   
    51. done < "$geolocation_txt"   
    52. cat "$geolocation_txt" > "$geolocation_file"   
    53. rm "$merged_log" "${merged_log}.sorted" "$geolocation_txt"   
    54. echo "Blacklist updated."   
    55. echo "saved to $geolocation_file." 
    记得要在/www/server/nginx/conf/目录下面新建一个baidu_spider_ips.txt,这文件存放蜘蛛的IP,每行一个。比如:
    1. 116.179.32.1 
    2. 116.179.32.2 
    3. 116.179.32.3 
    4. 116.179.32.4 
    5. 116.179.32.5 
    6. 116.179.32.6 
    7. 116.179.32.7 
    8. 116.179.32.8 
    9. 116.179.32.9 
    10. 116.179.32.10 
    11. 116.179.32.11 
    12. 116.179.32.12 
    13. 116.179.32.13 
    14. 116.179.32.14 
    15. 116.179.32.15 
    16. 116.179.32.16 
    17. 116.179.32.17 
    18. 116.179.32.18 
    19. 116.179.32.19 
    20. 116.179.32.20 
    21. 116.179.32.21 
    22. 116.179.32.22 
    23. 116.179.32.23 
    24. 116.179.32.24 
    25. 116.179.32.25 
    26. 116.179.32.26 
    27. 116.179.32.27 
    28. 116.179.32.28 
    29. 116.179.32.29 
    30. 116.179.32.30 
    31. 116.179.32.31 
    32. 116.179.32.32 
    33. 116.179.32.33 
    34. 116.179.32.34 
    另外提供一个将大部分蜘蛛的IP详情生成TXT的方法
    1. <?php   
    2. function cidrToIpRangeGenerator($cidr) {   
    3.     list($ip, $mask) = explode('/', $cidr);   
    4.     $ipInt = ip2long($ip);   
    5.     $maskInt = ~((1 << (32 - $mask)) - 1);   
    6.     $networkAddress = $ipInt & $maskInt;   
    7.     $broadcastAddress = $networkAddress | (~$maskInt);   
    8.     for ($currentIpInt = $networkAddress + 1; $currentIpInt < $broadcastAddress; $currentIpInt++) {   
    9.         yield long2ip($currentIpInt);   
    10.     }   
    11. }   
    12. function batchProcessCidrs($cidrs, $batchSize, $outputFile) {   
    13.     $file = fopen($outputFile, 'w');   
    14.     if (!$file) {   
    15.         die('无法打开文件');   
    16.     }   
    17.     $count = 0;   
    18.     $totalCidrs = count($cidrs);   
    19.     $batchCount = ceil($totalCidrs / $batchSize);     
    20.     echo "开始处理CIDR块...\n";   
    21.     for ($batch = 0; $batch < $batchCount; $batch++) {   
    22.         $batchCidrs = array_slice($cidrs, $batch * $batchSize, $batchSize);   
    23.         foreach ($batchCidrs as $cidr) {   
    24.             foreach (cidrToIpRangeGenerator($cidr) as $ip) {   
    25.                 fwrite($file, $ip . PHP_EOL);   
    26.             }   
    27.             $count++;   
    28.             echo "已处理CIDR {$count}/{$totalCidrs}\n";   
    29.         }   
    30.         sleep(10); // 暂停10秒   
    31.     }   
    32.     fclose($file);   
    33.     echo "所有IP地址范围已写入{$outputFile}文件。\n";   
    34. }      
    35. $cidrs = [   
    36. //百度蜘蛛 
    37. '116.179.32.0/24'
    38. '180.76.15.0/24'
    39. '119.63.196.0/24'
    40. '115.239.212./24'
    41. '119.63.199.0/24'
    42. '122.81.208.0/22'
    43. '123.125.71.0/24'
    44. '180.76.4.0/24'
    45. '180.76.5.0/24'
    46. '180.76.6.0/24'
    47. '185.10.104.0/24'
    48. '220.181.108.0/24'
    49. '220.181.51.0/24'
    50. '111.13.102.0/24'
    51. '123.125.67.144/29'
    52. '123.125.67.152/31'
    53. '61.135.169.0/24'
    54. '123.125.68.68/30'
    55. '123.125.68.72/29'
    56. '123.125.68.80/28'
    57. '123.125.68.96/30'
    58. '202.46.48.0/20'
    59. '220.181.38.0/24'
    60. '123.125.68.80/30'
    61. '123.125.68.84/31'
    62. '123.125.68.0/24'
    63. //神马蜘蛛 
    64. '106.11.0.0/16'
    65. '42.156.0.0/16'
    66. '42.120.0.0/16'
    67. //头条蜘蛛 
    68. '111.225.148.0/24'
    69. '111.225.149.0/24'
    70. '220.243.135.0/24'
    71. '220.243.136.0/24'
    72. '60.8.123.0/24'
    73. '110.249.201.0/24'
    74. '110.249.202.0/24'
    75. //搜狗蜘蛛 
    76. '106.38.241.0/24'
    77. '43.250.200.0/24'
    78. '43.250.201.0/24'
    79. '58.250.125.0/24'
    80. '49.7.20.0/24'
    81. '49.7.21.0/24'
    82. '61.158.148.0/24'
    83. '61.158.208.0/24'
    84. '36.157.174.185'
    85. //360蜘蛛 
    86. '180.153.232.0/24'
    87. '180.153.234.0/24'
    88. '180.153.236.0/24'
    89. '180.163.220.0/24'
    90. '42.236.101.0/24'
    91. '42.236.102.0/24'
    92. '42.236.103.0/24'
    93. '42.236.10.0/24'
    94. '42.236.12.0/24'
    95. '42.236.13.0/24'
    96. '42.236.14.0/24'
    97. '42.236.15.0/24'
    98. '42.236.16.0/24'
    99. '42.236.17.0/24'
    100. '42.236.46.0/24'
    101. '42.236.48.0/24'
    102. '42.236.49.0/24'
    103. '42.236.50.0/24'
    104. '42.236.51.0/24'
    105. '42.236.52.0/24'
    106. '42.236.53.0/24'
    107. '42.236.54.0/24'
    108. '42.236.55.0/24'
    109. '42.236.99.0/24'
    110. //Bing蜘蛛 
    111. '40.77.169.0/24'
    112. '65.52.104.0/24'
    113. '65.52.108.0/22'
    114. '65.55.24.0/24'
    115. '65.55.52.0/24'
    116. '65.55.55.0/24'
    117. '65.55.213.0/24'
    118. '65.55.217.0/24'
    119. '131.253.24.0/22'
    120. '131.253.46.0/23'
    121. '40.77.167.0/24'
    122. '199.30.27.0/24'
    123. '157.55.13.0/24'
    124. '157.55.16.0/23'
    125. '157.55.18.0/24'
    126. '157.55.32.0/22'
    127. '157.55.36.0/24'
    128. '157.55.48.0/24'
    129. '157.55.109.0/24'
    130. '157.55.110.40/29'
    131. '157.55.110.48/28'
    132. '157.56.92.0/24'
    133. '157.56.93.0/24'
    134. '157.56.94.0/23'
    135. '157.56.229.0/24'
    136. '199.30.16.0/24'
    137. '207.46.12.0/23'
    138. '207.46.192.0/24'
    139. '207.46.195.0/24'
    140. '207.46.199.0/24'
    141. '207.46.204.0/24'
    142. '157.55.39.0/24'   
    143. ];    
    144. $batchSize = 100; // 设置批次大小   
    145. $outputFile = 'ip_ranges.txt';   
    146. batchProcessCidrs($cidrs, $batchSize, $outputFile); 
    满满的干货,应该是大家都需要的吧!小编手打码字辛苦就知识付费下吧!不要经常都想着白嫖的!也算是给小编继续原创写作的动力。
    【审核人:站长】

        标题:巧用宝塔计划任务的Shell脚本,守护网站安全,拉黑恶意采集IP

        本文链接:https://www.meiweny.cn/zazhi/zhongwangjiaocheng/577.html

        赞一下

        深度阅读

        • 您也可以注册成为美文苑的作者,发表您的原创作品、分享您的心情!

        阅读记录

          关注美文苑