Mart 2004
İlker Fıçıcılar
ilkerf@geocities.com
Web sayfalarımı her gün pek çok robot gezip bandwidth'den giderek daha fazla çalmaya başlayınca bir çözüm aramak gerekti. Web sunucularımın önünde squid bir httpd hızlandırıcı olarak çalışıyor. Uygun
refresh_pattern ayarlarıyla squid'in sunucuyu oldukça rahatlattığını söyleyebilirim. Squid'le mutluyuz ve mutluluk gölgeleyici bu kötü robotlardan kurtulmak istiyoruz.
Squid ile Apache bir denge içinde çalışmalı, aksi halde kullanıcılar, sayfayı gezenler istenmeyen sonuçlarla karşılaşıyorlar. Performans için gerek squid'de gerekse apache'de pek çok ayarı sınırlarında kullanmak gerekiyor. Örneğin apache'de
mod_gzip açtıysanız, apache'nin önündeki squid'in sayfaların farklı biçimlerini de önbellekte tutmasını sağlamalısınız, yoksa
gzip ile sıkıştırılmış sayfaları gösteremeyen bir tarayıcı sayfalarınızı okuyamayacaktır.
Benzer şekilde kötü robotları apache içinden engellerseniz ve uygun
Vary başlıkları eklemezseniz, ya robotlar squid'de daha önce normal kullanıcılarca önbelleklenmiş bilgiye ulaşacaklar ve engellenmemiş olacaklar, ya da ilk davranan kötü bir robotsa ve bu istek önbelleğe girdiyse normal kullanıcılar da
Erişim Yasak sayfası ile karşılaşacaklardır. Bunu önlemek için apache'ye
Header append "Vary:" "User-Agent" şeklinde bir ekleme yapabilirsiniz, ama bu da squid'in her sayfanın her tarayıcı için ayrı bir kopyasını önbellekte tutmasına yol açar. Bu ise, ziyaret eden farklı
user-agent sayısına göre, performansını on kattan daha fazla düşürüyor.
Bu durumda, apache'de
vary başlığı ayarı olarak sadece
Header append "Vary:" "Accept-Encoding" kullanmak, apache'de RewriteEngine ile
RewriteCond %{HTTP_USER_AGENT} EmailSiphon ve
RewriteRule .* - [F,L] biçimindeki yasaklamaları kullanmamak gerekiyor. Yapmak istediğimizi squid acl'leri ile halledeceğiz.
Önce, apache veya squid http_accelerator kayıtlarınızı inceleyerek sizi rahatsız eden robotları tesbit etmelisiniz. Aşağıdaki liste veya internetteki başka listeler yerine kendi istenmeyen robotlar listenizi oluşturmanız verimlilik açısından yararlı olacaktır. Yine de bu kısa listeyi kullanabilirsiniz:
EmailSiphonMicrosoft\ URL\ ControlNPBotWindows\ XPFrontPageMSIECrawlerHTTrack^Mozilla/4.0$SqwormWebCopierWebReaper
Bu listedeki
FrontPage sayfanızı editlemeye çalışıp başarılı olamadıkça tekrar tekrar deneyen acemileri engellemek için.
Windows XP yazısı ise hiçbir normal user-agent'ta görülmez. Diğerleri ise spam, casus ve offline robotları / agent'ları genelde. Sayfanızın
Teleport,
GetRight vb. programlarla sömürülmesini istemiyorsanız listeyi bunları da ekleyerek biraz daha genişletebilirsiniz:
DA\ GetRightFlashGetTeleportEmailSiphonMicrosoft\ URL\ ControlNPBotWindows\ XPFrontPageMSIECrawlerHTTrack^Mozilla/4.0$SqwormWebCopierWebReaper
Bu listeyi bir dosyaya yazıp kaydedin. Ben
/usr/local/share/koturobot.lst dosyasına yazıp,
squid.conf ayar dosyasına şu satırları ekledim:
acl koturobot browser "/usr/local/share/koturobot.lst"
http_access deny koturobot
Evet, hepsi bu. Eğer www sunucularınızın önünde bir squid httpd hızlandırıcı olarak çalışıyorsa, bu ayar sayfalarınızdan eposta adresi ve resim çalınması engellemek yönünde iyi bir adım olacak ve bandwidth'inizin de bir miktar rahatlamasını sağlayacaktır.
Eğer, squid'siz sadece apache sunucuyu kullanıyorsanız, virtual hostlarınız için aşağıdaki gibi bir ayar eklemesiyle apache'nin bu robotları engellemesini sağlayabilirsiniz:
RewriteEngine onRewriteCond %{HTTP_USER_AGENT} "DA " [OR]RewriteCond %{HTTP_USER_AGENT} GetRight [OR]RewriteCond %{HTTP_USER_AGENT} FlashGet [OR]RewriteCond %{HTTP_USER_AGENT} Teleport [OR]RewriteCond %{HTTP_USER_AGENT} EmailSiphon [OR]RewriteCond %{HTTP_USER_AGENT} "Microsoft URL Control" [OR]RewriteCond %{HTTP_USER_AGENT} NPBot [OR]RewriteCond %{HTTP_USER_AGENT} "Windows XP" [OR]RewriteCond %{HTTP_USER_AGENT} FrontPage [OR]RewriteCond %{HTTP_USER_AGENT} MSIECrawler [OR]RewriteCond %{HTTP_USER_AGENT} HTTrack [OR]RewriteCond %{HTTP_USER_AGENT} "^Mozilla/4.0$" [OR]RewriteCond %{HTTP_USER_AGENT} Sqworm [OR]RewriteCond %{HTTP_USER_AGENT} WebCopier [OR]RewriteCond %{HTTP_USER_AGENT} WebReaperRewriteRule .* - [F,L]
Bu yöntemle sadece
user-agent'inden tanınabilen robotları durdurabiliyoruz. Diğerleri,
user-agent bilgilerini normal olanlara benzeterek bu filtrelerden geçebiliyorlar. Bunları ise IP adreslerinden, IP bloklarından tanıyarak engellemek mümkün. Bu engeli de ister iptables ile, istersek de squid ile koyabiliriz. Kısa bir
Kötü Robot IP Listesi olarak şunlar kullanılabilir:
64.140.49.66/3012.148.196.128/2512.148.209.192/2663.148.99.224/27
Bu listeyi, /usr/local/share/koturobotip.lst gibi bir dosyaya kaydettikten sonra, iptables ile şu şekilde kullanıyoruz:
cat /usr/local/share/koturobotip.lst | while read iplerdoiptables -A INPUT -i $DEV -s $ipler -p tcp --destination-port 80 -j DROPdone
Squid içinden kullanabilmek için listeyi önce squid'in anlayabileceği biçime getirelim:
64.140.49.66-64.140.49.69/255.255.255.6912.148.196.128-12.148.196.255/255.255.255.25512.148.209.192-12.148.209.255/255.255.255.25563.148.99.224-63.148.99.255/255.255.255.255
Bu IP listesini
/usr/local/share/koturobotadres.lst dosyasına yazıp şu iki satırı da squid'e ekleyerek squid'in bu adresleri engellemesini sağlarız:
acl koturobotadres src "/usr/local/share/koturobotadres.lst"
http_access deny koturobotadres
Daha kapsamlı bir
Kötü Robotlar Listesi olarak aşağıdaki kullanılabilir:
almadenCherryPickerCrescentDA\ DIIbotEmailCollectorEmailSiphonEmailWolfExtractorP roFlashGetFrontPageGetRightHTTrackInternetSeer\.co mLinkWalkerMicrosoft\ URL\ ControlMozilla.*IndyMozilla.*NEWT^Mozilla/4.0$MSIECrawlerNICErsPRONPBotpsbotsitecheck\.inter netseer\.comSqwormTeleportWebBanditwebbanditWebCop ierWebEMailExtracWebReaperWindows\ XPZeus.*Webster
Son Not: Bazen çok ufak unutkanlıklar, sorunu yanlış yerde aramamıza ve epeyce bir zaman kaybetmemize yol açabilirler. Sözün özü, yukarıdaki değişiklikleri yaptıktan sonra squid ve/veya apache'yi yeniden başlatmayı unutmamakta yarar var.
Yardımcı Kaynaklar:
Mart 2004
İlker FIÇICILAR
ilkerf@geocities.com