Night Watch
የስክራፐር ጎርፎችን አልፎ ጣቢያዎችዎን በላይ ያስቆዩ፡ የአገልግሎት ጊዜ ክትትል፣ የCloudflare ነጻ-ዕቅድ ጋሻ እና የቦት ገደብ።
- Linux
- Python 3.10+
- Cloudflare Free plan
- ASGI or WSGI apps

ምን ያደርጋል
የክትትል ስርዓት (Night Watch) የሚያከናውኗቸውን ሁሉንም ጣቢያዎች እንደ ጎብኚ በየአምስት ደቂቃው ይከፍታል፣ አንዱ መክፈት ሲቆም እና ሲመለስ ወዲያውኑ ይነግርዎታል። አንድ ጣቢያ ስክሬፐር (scraper) በሚያጠለፍበት ጊዜ ሲወድቅ፣ የክትትል ስርዓቱ ወደፊት (edge) ላይ ጎርፉን የሚያስቆም የCloudflare ደንብ ያብራል፣ እርስዎም መተግበሪያዎ በዚህ ጊዜ ውስጥ ለሰዎች አገልግሎት መስጠቱን ይቀጥላል።
- እያንዳንዱ ጣቢያ፣ በየአምስት ደቂቃው። በCloudflare መለያዎ ውስጥ ያሉት ሁሉም ዞኖች (zones)፣ እንዲሁም የዘረዘሯቸው ማንኛውም ገጾች (በአማራጭ ገጹ ሊኖረው የሚገባው ጽሑፍ ጋር)። አንድ ጣቢያ ሲወድቅ አንድ መልእክት፣ ሲመለስ ደግሞ ምን ያህል ጊዜ እንደወደቀ ጋር አንድ መልእክት፣ እየወደቀ ሲቆይም ማስታወሻ። በኢሜይል፣ በቻት ዌብሁክ (webhook)፣ ወይም በሁለቱም።
- በነጻ (Free) ዕቅድ ላይ ያለ መከላከያ። ሶስት የWAF ልዩ ደንቦች፡ እውነተኛ Chrome የሚልካቸውን ራስጌዎች (headers) ያልላቸው Chrome የተጠቃሚ አገንቢ (user agent) ተጠያቂ ይሆናል፣ ከስክሬፐር ደመናዎች የሚመጡ የገጽ ጥያቄዎች ተጠያቂ ይሆናሉ፣ እና አንድ የአስቸኳይ ጊዜ ደንብ በጎርፍ ወቅት ኩኪ ወይም ማገናኛ (link) የሌላቸውን እንግዶች ተጠያቂ ያደርጋል።
- በራሱ የሚብራ። አንድ ጣቢያ ከከባድ ጫና ምክንያት ሲወድቅ፣ የክትትል ስርዓቱ የአስቸኳይ ጊዜ ደንቡን ያብራል እና በማንቂያው ይናገራል፤ ጣቢያው ከተመለሰ በኋላ ከጥቂት ሰዓታት በኋላ ያጠፋዋል። እርስዎ በራስዎ ያብሩት መከላከያ ግን የበራ ሆኖ ይቆያል።
- በመተግበሪያዎ ውስጥ ያለ በር። ለFastAPI፣ Starlette፣ Django፣ Flask ወይም ለማንኛውም ASGI ወይም WSGI መተግበሪያ የሚሆን አንድ ፋይል፣ ያለ ጥገኝነት (dependencies)። ኮድዎ ከመሥራቱ በፊት ሐሰተኛ አሳሾችን ይከለክላል፣ እንዲሁም እንግዶችን እያንዳንዱ ሠራተኛ (worker) ሊያገለግለው ከሚችለው በላይ እንዳይደርጉ ያስቆያል። ኩኪ ያላቸው ወይም በማገናኛ የሚመጡ ሰዎች ፈጽሞ አያስተውሉትም።
- ምን እንደሚያጠለፍዎ ይመልከቱ። በየነጻ (Free) ዕቅዱ የሚፈቀዱትን ጥሬ ክስተቶች (raw events) በማንበብ፣ በየቀጠሉት ደቂቃዎች የCloudflare ፋየርዎል በደንብ፣ በአውታረ መረብ፣ በአገር፣ በተጠቃሚ አገንቢ (user agent) እና በመንገድ (path) ምን እንደተጠየቀ።
- የተገነባ መመለሻ (Undo)። እያንዳንዱ የደንብ ለውጥ በመጀመሪያ የዞኑን ደንቦች ያስቀምጣል፣ የእርስዎ ደንቦች ከእኛ በፊት ተቀምጠው ይቆያሉ፣ እና አንድ ትዕዛዝ የተቀመጡትን ደንቦች ወደ ኋላ ይመልሳል።
በራሳችን ጣቢያዎች ላይ ተሞክሮአል
- እውነተኛ ጎርፍ፣ አንድ ሰዓት፡ በራሳችን ጣቢያ ላይ፣ የሐሰተኛ አሳሽ ደንቡ ከ10,000 በላይ ጥያቄዎችን ተጠያቂ አደረገ። Cloudflare ማንበብ የሚፈቅድልን 10,000 ጥያቄዎች ከ9,627 የቤት ብሮድባንድ አድራሻዎች የመጡ ነበሩ፣ ማንም ከ4 በላይ አልላከም፡ በአድራሻ ላይ የተመሠረተ የፍጥነት ገደብ ፈጽሞ አይሰራም ነበር።
- እያንዳንዱ ደንብ፣ በነጻ (Free) ዕቅድ ላይ በቀጥታ ተፈትሿል፡ የአስቸኳይ ጊዜ ደንቡ ሲበራ እንግዳ ተጠያቂ ሆኖ ኩኪ ወይም ማገናኛ ሲኖረው ተፈቅዶለታል፤ የአሳሽ ራስጌዎች (headers) የሌሉት Chrome የተጠቃሚ አገንቢ ተጠያቂ ሆኗል፤ Googlebot አልፏል። ከዚያም የዞኑ ቀደምት ደንቦች በትክክል ተመልሰዋል።
- በuvicorn ላይ በሰከንድ ከ1,747 ጥያቄዎች በታች የሚሰራው መስኮት፡ የብራውዘር ራስጆች (headers) የሌላቸው ሁሉም ስክራፐሮች ተከልክለዋል፣ እንግዶች አፑ ሊያቀርብባቸው ከሚችላቸው ነገሮች ብቻ ተገድበዋል፣ እና እያንዳንዱ ተመላሽ ጎብኚ፣ የአገናኝ ጎብኚ እና የGooglebot ጥያቄ በአማካይ 0.20 ሰከንድ፣ የገጹ ራሱ ጊዜ ተሰርቷል።
ውስጡ ምን አለ?
የክትትል ስርዓት
ከCloudflare መለያዎ እና ከዝርዝር የሚመጡ ጣቢያዎች፣ እንደ ጎብኚ የሚመስሉ ምርመራዎች፣ በኢሜይል ወይም በwebhook የሚላኩ መልዕክቶች፣ እና "ሁሉም ወድቀዋል" ከ"ይህ ማሽን ኦፍላይን ነው" የሚለዩት ሙከራ።
የደህንነት ገደብ
ለአንድ ወይም ለሁሉም ዞኖች መጫን፣ ሁኔታ፣ ማብራት፣ ማጥፋት፣ ማስወገድ እና መመለስ፣ እያንዳንዱ ለውጥ በመጀመሪያ ምትኬ (backup) ሲደረግለት።
መስኮት
ASGI እና WSGI middleware፣ ሰዎችን ኩኪ የሚሰጥ 2-ሰከንድ "አንድ ጊዜ ይጠብቁ" ገጽ፣ እና በደቂቃ አንድ የሎግ መስመር።
የአሠራር መመሪያ
ጣቢያ ቀርፋፋ ወይም ወድቆ ሲሆን ምን ማድረግ እንዳለብዎት፣ የጥያቄ ሞገድን (flood) እንዴት ማንበብ እንደሚቻል፣ እና በCloudflare ዳሽቦርድ ላይ ምን ማብራት እንደሌለብዎት።
ድንጋጌዎች
- systemd እና Python 3.10 ወይም ከዚያ በላይ ያለው Linux፤ ከpip ምንም ማስገባት የሌለበት።
- ለደህንነት ገደብ እና ለክስተት እይታ፣ በCloudflare ላይ ያሉ ጣቢያዎች (ማንኛውም እቅድ፣ ነፃ እቅድ ጨምሮ) እና የAPI ቶከን።
- ጣቢያዎችዎን ከሚያገለግለው ማሽን በተጨማሪ ሌላ ማሽን፣ ያ ማሽን ወድቆ ሲሆን እንዲነግርዎት።
መገደብ ያለባቸው ነገሮች
- የአስቸኳይ ህጉ አዲስ ብራውዘር ውስጥ አድራሻዎን የሚያስገባ ሰውንም ይፈትሻል፣ ስለዚህ በጥያቄ ሞገድ (flood) ጊዜ ብቻ ነው የሚበራው።
- የተረጋገጡ ቦቶች እና ራሳቸውን የሚገልጹ ሮቦቶች ፈጽሞ አይፈተሹም፣ እና መስኮቱ የፍለጋ ሞተሮችን ፈጽሞ አይቀርም።
- የደህንነት ገደቡ በነፃ እቅድ ለአንድ ዞን የሚፈቀዱትን ከአምስት ልዩ ህጎች መካከል ሶስቱን ይጠቀማል።
From our field notes
ጥያቄዎች
የተከፈለ የCloudflare እቅድ ያስፈልገኛል?
አይ። Night Watch የሚያደርገው ሁሉም ነገር በነፃ እቅድ ላይ ይሰራል፡ ሶስቱ ህጎች፣ የክስተት እይታ እና አውቶማቲክ መቀያየር። የተከፈለ እቅድ ከእኛ ጎን ተጨማሪ የህግ ቦታዎችን ብቻ ይሰጥዎታል።
Googleን ወይም የAI ፍለጋ ሰብሳቢዎችን (crawlers) ይከለክላል?
አይ። የCloudflare የተረጋገጡ ቦቶች እና በuser agent ውስጥ ራሳቸውን የሚገልጹ ሁሉም ሮቦቶች የደህንነት ገደቡን ያልፋሉ፣ እና መስኮቱ የፍለጋ ሞተርን ወይም የአገናኝ ቅድመ-እይታ (link preview) ፈጽሞ አይቀርም። የAI ሰብሳቢዎችን ለመከልከል ከፈለጉ፣ ይህ በCloudflare ዳሽቦርድ ላይ የተለየ ምርጫ ነው።
ጣቢያዬ በCloudflare ላይ አይደለም። ጠቃሚ ሆኖ ይገኛል?
የክትትል ስርዓቱ እና መስኮቱ በየትኛውም ቦታ ይሰራሉ፡ የክትትል ስርዓቱ ማንኛውንም URL ይከፍታል፣ መስኮቱም ማንኛውንም የPython ዌብ አፕ ይጠብቃል። የደህንነት ገደቡ እና የክስተት እይታ Cloudflare ይፈልጋሉ።
ይህ ከአገልግሎት መከታተያ ምን ይለያል?
አገልግሎት መከታተያ አንድ ጣቢያ መዘጋቱን ይነግርዎታል። ናይት ዋች ደግሞ ይህን ይነግርዎታል፣ ከዚያም በተደጋጋሚ የምናየውን ዋና ምክንያት ለመቅረፍ ይሰራል፡ በCloudflare ጠርዝ ላይ የጋራዙን ይከፍታል፣ እና በሂደቱ ወቅት ማግኙ የሚፈልጓቸውን ሰዎች መተግበሪያዎ እንዲያገለግል ያደርጋል።
ተሻሽሏል: