Web sunucunuza her gün yüzlerce, hatta binlerce bot geliyor. Bunların bir kısmı Google ve Bing gibi meşru arama motoru botları, bir kısmı SEO araçları, bir kısmı ise sisteminizi yorup bant genişliğinizi tüketen kötü niyetli tarayıcılar. OpenLiteSpeed, bu bot trafiğini yönetmek için oldukça güçlü araçlar sunuyor. Doğru yapılandırılmış bir OLS kurulumunda hem arama motoru botlarına kapıyı açık tutarsınız, hem de sunucunuzu gereksiz yükten kurtarırsınız.
Neden Bot Yönetimi Bu Kadar Önemli?
Bir üretim sunucusunda çalışırken fark ettiğim en ilginç şeylerden biri şu: access log’larına baktığınızda gerçek insan trafiğinin toplam isteğin bazen sadece yüzde 30-40’ını oluşturduğunu görürsünüz. Geri kalanı botlar. Bu botların hepsini engellemek istemezsiniz elbette, çünkü Googlebot’u engellediğinizde siteniz arama sonuçlarından düşer. Ama kontrolsüz bıraktığınızda da sunucunuz gereksiz yük altında kalır, veritabanı bağlantılarınız tükenir, CDN maliyetleriniz artar.
OpenLiteSpeed bu konuda Apache’ye göre çok daha esnek. Kendi içinde gelen rewrite kuralları, access kontrol mekanizmaları ve throttling özellikleriyle merkezi bir bot yönetim katmanı oluşturabilirsiniz.
Mevcut Bot Trafiğini Analiz Etmek
Önce ne ile karşı karşıya olduğunuzu anlamak gerekiyor. OLS log formatını doğru ayarlamak bu analizin temelini oluşturur.
# Access log'dan user agent bazlı istek sayısını çıkar
grep -oP '"[^"]*" [0-9]+ [0-9]+ "[^"]*" "K[^"]+' /var/log/ols/access.log |
sort | uniq -c | sort -rn | head -30
# Sadece bot trafiğini filtrele
grep -i "bot|crawler|spider|slurp|bingbot|googlebot" /var/log/ols/access.log |
awk '{print $1}' | sort | uniq -c | sort -rn | head -20
Bu çıktılara baktığınızda genellikle şunları görürsünüz: Googlebot ve Bingbot makul aralıklarla geliyor, SEMrush veya Ahrefs botları saniyede birden fazla istek atıyor, bir sürü bilinmez IP farklı user-agent’larla sisteminizi tarıyor.
Log Formatını Geliştirmek
OLS’nin varsayılan log formatı yeterince detaylı değil. /usr/local/lsws/conf/httpd_config.conf dosyasına girerek log formatını genişletebilirsiniz:
# httpd_config.conf içindeki accessLog bloğunu düzenle
sudo nano /usr/local/lsws/conf/httpd_config.conf
Log formatı için şu satırı bulun ve güncelleyin:
logFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i" %T %D"
Buradaki %T toplam işlem süresini saniye cinsinden, %D ise mikrosaniye cinsinden veriyor. Bot isteklerinin ne kadar kaynak tükettiğini bu sayede ölçebilirsiniz.
OpenLiteSpeed’de Access Control Yapılandırması
OLS’de bot yönetiminin ilk katmanı, Web Admin Panel üzerinden yapılandırılan access control kurallarıdır. Ancak gerçek güç, konfigürasyon dosyalarında yatıyor.
IP Bazlı Engelleme
Kötü niyetli IP adreslerini engellemek için önce bir blocklist oluşturun:
# Kötü niyetli IP listesi için dosya oluştur
sudo mkdir -p /usr/local/lsws/conf/rules
sudo touch /usr/local/lsws/conf/rules/bad_bots.conf
Virtual host konfigürasyonunuza şu bloğu ekleyin:
# /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
context / {
rewrite {
enable 1
rules <<<END_rules
# Bilinen kötü bot IP aralıklarını engelle
RewriteCond %{REMOTE_ADDR} ^185.220. [OR]
RewriteCond %{REMOTE_ADDR} ^194.165.
RewriteRule .* - [F,L]
END_rules
}
}
User-Agent Bazlı Filtreleme
Bu kısım biraz hassas çünkü çok agresif filtreler meşru botları da etkileyebilir. Ben genellikle şu yaklaşımı kullanıyorum: önce izin verilenler listesi oluşturun, sonra geri kalanı değerlendirin.
# Virtual host rewrite kuralları - user-agent kontrolü
rewrite {
enable 1
rules <<<END_rules
# Boş user-agent'ları engelle
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule .* - [F,L]
# Bilinen zararlı bot imzalarını engelle
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python-requests|go-http-client) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (masscan|nikto|sqlmap|nmap) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (zgrab|nuclei|dirbuster|gobuster) [NC]
RewriteRule .* - [F,L]
END_rules
}
Dikkat edin: wget ve python-requests bazen meşru otomasyon araçları tarafından da kullanılır. Kendi geliştirme ortamınızda veya CI/CD pipeline’ınızda bu araçları kullanıyorsanız IP whitelisting ile koruyun.
Crawl Rate Sınırlandırma
İşte burada OLS’nin gerçek gücü ortaya çıkıyor. Throttling mekanizmasıyla belirli user-agent’lar veya IP’ler için istek hızını sınırlandırabilirsiniz.
OLS Web Admin’de Throttling Ayarları
Web Admin Panel’de Server Configuration > Tuning bölümünde connection throttling ayarlarını bulabilirsiniz. Ama config dosyası üzerinden daha granüler kontrol mümkün:
# /usr/local/lsws/conf/httpd_config.conf
# Global throttling parametreleri
connTimeout 300
maxConnections 2000
maxSSLConnections 1000
# Bot'lar için özel connection limit
# connLimit bloğu ile IP bazlı sınırlama
Bot-Spesifik Rate Limiting
OLS’nin mod_security entegrasyonu olmadan da basit rate limiting yapabilirsiniz. Bunun için virtual host seviyesinde rewrite kuralları ve özel header kontrolü kullanın:
# Belirli botlara rate limit uygula
# /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
rewrite {
enable 1
rules <<<END_rules
# SEO botlarını belirli path'lere yönlendir ve yavaşlat
RewriteCond %{HTTP_USER_AGENT} (SemrushBot|AhrefsBot|MJ12bot|DotBot) [NC]
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteRule .* - [E=BOT_THROTTLE:1]
END_rules
}
Gerçek throttling için OLS’nin perClientConnLimit parametresini kullanmak daha etkili:
# httpd_config.conf içinde
perClientConnLimit {
staticReqPerSec 10
dynReqPerSec 2
outBandwidth 0
inBandwidth 0
softLimit 15
hardLimit 20
blockTime 10
gracePeriod 15
}
Bu yapılandırmada şunlar oluyor:
- staticReqPerSec: Statik dosyalar için saniyede maksimum 10 istek
- dynReqPerSec: Dinamik içerik için saniyede maksimum 2 istek
- softLimit: Bu sınırı aşınca uyarı moduna geçer
- hardLimit: Bu sınırı aşınca bağlantı kesilir
- blockTime: Limit aşımında kaç saniye engelleneceği
- gracePeriod: Soft limit’ten hard limit’e geçiş süresi
robots.txt ile Crawl Rate Yönetimi
Teknik engellerden önce, arama motorlarına crawl rate direktifi vermek en temiz yöntemdir. OLS bu dosyayı statik olarak sunduğu için çok hızlı yanıt verir.
# /var/www/example.com/public_html/robots.txt
User-agent: Googlebot
Crawl-delay: 1
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /?s=
Disallow: /search
User-agent: Bingbot
Crawl-delay: 2
Disallow: /wp-admin/
User-agent: SemrushBot
Crawl-delay: 10
Disallow: /wp-admin/
Disallow: /wp-json/
User-agent: AhrefsBot
Crawl-delay: 10
User-agent: MJ12bot
Crawl-delay: 30
# Tamamen engellenmesi gereken botlar
User-agent: DotBot
Disallow: /
User-agent: BLEXBot
Disallow: /
User-agent: MegaIndex
Disallow: /
Önemli not: Google, Crawl-delay direktifini robots.txt’te artık desteklemiyor. Google’ın crawl hızını ayarlamak için Google Search Console’u kullanmanız gerekiyor. Ama diğer botların çoğu bu direktife uyuyor.
Gelişmiş Bot Tespiti
Gerçek dünyada bot tespiti sadece user-agent kontrolüyle olmuyor. Sofistike botlar browser gibi davranabiliyor. İşte daha güvenilir tespitler için bazı teknikler.
Honeypot Endpoint Kurma
# Virtual host config'e ekle
context /trap/ {
type NULL
location /var/www/trap/
rewrite {
enable 1
rules <<<END_rules
# Bu path'e gelen tüm istekleri logla ve engelle
RewriteRule .* - [F,L]
END_rules
}
}
HTML’inize gizli bir link ekleyin:
# Ana sayfanızın HTML'ine eklenecek (CSS ile gizlenmiş)
# <a href="/trap/hidden-page" style="display:none">Link</a>
# Bu linke gelen IP'ler kesinlikle bot
Header Anomalisi Tespiti
Meşru tarayıcılar belirli header’ları her zaman gönderir. Bunların yokluğu bot işareti olabilir:
rewrite {
enable 1
rules <<<END_rules
# Accept header olmayan istekleri engelle (çoğu bot göndermiyor)
RewriteCond %{HTTP_ACCEPT} ^$
RewriteCond %{HTTP_USER_AGENT} !^$
RewriteRule .* - [F,L]
# Accept-Language olmayan şüpheli istekler
RewriteCond %{HTTP:Accept-Language} ^$
RewriteCond %{HTTP_USER_AGENT} !(Googlebot|Bingbot|Slurp) [NC]
RewriteRule .* - [F,L]
END_rules
}
Gerçek Dünya Senaryosu: E-ticaret Sitesi Bot Saldırısı
Geçen yıl yönettiğim bir e-ticaret sitesinde ilginç bir durumla karşılaştım. Ürün sayfalarına saniyede 50-60 istek geliyordu ve bunların tümü farklı IP’lerden geldiği için klasik IP engelleme işe yaramıyordu. Distributed scraping saldırısıydı.
Çözüm için OLS üzerinde şu stratejiyi uyguladım:
# /usr/local/lsws/conf/vhosts/shop.example.com/vhconf.conf
# Ürün sayfaları için agresif throttling
context /urun/ {
type NULL
location /var/www/shop/public/urun/
rewrite {
enable 1
rules <<<END_rules
# Bilinen iyi botlara izin ver
RewriteCond %{HTTP_USER_AGENT} (Googlebot|Bingbot|YandexBot) [NC]
RewriteRule .* - [L]
# Diğer tüm botları yavaşlat
RewriteCond %{HTTP_USER_AGENT} (bot|crawler|spider|scraper) [NC]
RewriteRule .* /bot-check.php [L]
END_rules
}
}
Bu senaryo için bir bot-check sayfası oluşturdum:
# /var/www/shop/public/bot-check.php
<?php
// Rate limiting için geçici yönlendirme
http_response_code(429);
header('Retry-After: 60');
header('X-RateLimit-Limit: 10');
header('X-RateLimit-Remaining: 0');
header('Content-Type: application/json');
echo json_encode([
'error' => 'Too Many Requests',
'message' => 'Crawl rate limit exceeded. Please respect robots.txt.',
'retry_after' => 60
]);
exit;
Sonuç: Bot trafiği yüzde 80 azaldı ve meşru kullanıcılar hiçbir etki hissetmedi.
OpenLiteSpeed ModSecurity Entegrasyonu
OLS, ModSecurity’yi destekliyor ve bu, bot yönetimi için çok güçlü bir silah.
# ModSecurity kurulumu (Ubuntu/Debian)
sudo apt-get install libmodsecurity3 libmodsecurity-dev
# OLS için modsecurity modülünü etkinleştir
# Web Admin: Server > Modules > ModSecurity
OWASP Core Rule Set ile birlikte şu özel kuralları ekleyebilirsiniz:
# /usr/local/lsws/conf/modsecurity/custom_bot_rules.conf
# Kötü bot user-agent kuralı
SecRule REQUEST_HEADERS:User-Agent "@pmFromFile /usr/local/lsws/conf/rules/bad_bots.txt"
"id:1001,
phase:1,
deny,
status:403,
log,
msg:'Blocked Bad Bot',
tag:'bot-management'"
# Crawl rate limit - aynı IP'den gelen hızlı istekler
SecRule IP:REQUEST_COUNTER "@gt 100"
"id:1002,
phase:1,
deny,
status:429,
log,
msg:'Crawl Rate Limit Exceeded'"
Arama Motoru Botlarını Doğrulama
Bir IP Googlebot olduğunu iddia ediyorsa gerçekten Google’dan mı geliyor, bunu doğrulamak kritik. Sahte Googlebot’lar gerçek botlardan çok daha agresif davranır.
#!/bin/bash
# Google bot doğrulama scripti
# /usr/local/bin/verify_googlebot.sh
LOG_FILE="/var/log/ols/access.log"
VERIFY_LOG="/var/log/bot_verification.log"
# Son 1 saatte Googlebot olduğunu iddia eden IP'leri çıkar
grep "Googlebot" $LOG_FILE |
grep "$(date -d '1 hour ago' '+%d/%b/%Y:%H')" |
awk '{print $1}' | sort -u | while read ip; do
# Reverse DNS kontrolü
hostname=$(dig -x $ip +short)
# Google domain'i mi?
if echo "$hostname" | grep -qE ".google(bot)?.com$"; then
# Forward DNS doğrulaması
forward_ip=$(dig +short $hostname)
if [ "$forward_ip" = "$ip" ]; then
echo "VERIFIED: $ip -> $hostname" >> $VERIFY_LOG
else
echo "FAKE: $ip claims to be Googlebot but DNS mismatch" >> $VERIFY_LOG
fi
else
echo "FAKE: $ip claims to be Googlebot, resolves to: $hostname" >> $VERIFY_LOG
fi
done
Bu scripti cron job olarak çalıştırın:
# crontab -e
0 * * * * /usr/local/bin/verify_googlebot.sh
Sahte Googlebot IP’lerini otomatik olarak engelleme listesine ekleyebilirsiniz.
OLS Cache ile Bot Etkisini Azaltma
Bot trafiğini engellemenin yanında, botların sunucunuza maliyetini düşürmenin en etkili yolu cache kullanmaktır. OLS’nin yerleşik LSCache motoru bu konuda mükemmel iş çıkarıyor.
# Virtual host cache ayarları
# /usr/local/lsws/conf/vhosts/example.com/vhconf.conf
module cache {
checkPrivateCache 1
checkPublicCache 1
maxCacheObjSize 10000000
maxStaleAge 200
qsCache 1
reqCookieCache 1
# Bot istekleri için özel cache politikası
storedQueryString utm_source,utm_medium,utm_campaign
}
Cache sayesinde bot istekleri backend’e hiç ulaşmadan karşılanıyor. Bu hem sunucu yükünü düşürüyor hem de meşru botların isteklerini daha hızlı yanıtlıyor.
Monitoring ve Alerting
Bot yönetimi bir kez yapıp bırakılan bir şey değil. Sürekli izleme gerekiyor.
#!/bin/bash
# /usr/local/bin/bot_monitor.sh
# Her 5 dakikada bir çalıştır
THRESHOLD=1000
LOG_FILE="/var/log/ols/access.log"
ALERT_EMAIL="[email protected]"
# Son 5 dakikadaki bot istek sayısını kontrol et
BOT_COUNT=$(grep -i "bot|crawler|spider" $LOG_FILE |
awk -v d="$(date -d '5 minutes ago' '+%d/%b/%Y:%H:%M')"
'$0 >= d' | wc -l)
if [ $BOT_COUNT -gt $THRESHOLD ]; then
echo "ALERT: Son 5 dakikada $BOT_COUNT bot isteği tespit edildi!" |
mail -s "OLS Bot Alert - $(hostname)" $ALERT_EMAIL
# Otomatik throttling'i geçici olarak artır
# Bu örnekte basit bir log entry oluşturuyoruz
echo "$(date): High bot traffic detected: $BOT_COUNT requests" >> /var/log/bot_alerts.log
fi
# crontab -e
*/5 * * * * /usr/local/bin/bot_monitor.sh
Yapılandırma Sonrası Test
Tüm kuralları uyguladıktan sonra mutlaka test edin. Meşru botları yanlışlıkla engelliyor olabilirsiniz.
# Googlebot simülasyonu ile test
curl -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
-H "Accept: text/html,application/xhtml+xml"
-H "Accept-Language: en-US,en;q=0.9"
-v https://example.com/
# Zararlı bot simülasyonu - engellenmeli
curl -A "masscan/1.0" -v https://example.com/
# Boş user-agent - engellenmeli
curl -A "" -v https://example.com/
Response code’larına bakın: meşru botlar 200 almalı, zararlılar 403 veya 429 almalı.
OLS Yapılandırmasını Reload Etme
Değişiklik yaptıktan sonra OLS’yi restart etmenize gerek yok, graceful reload yeterli:
# Graceful reload - mevcut bağlantıları kesmez
sudo /usr/local/lsws/bin/lswsctrl reload
# Veya systemd üzerinden
sudo systemctl reload lsws
# Config syntax kontrolü (OLS henüz ayrı bir syntax check komutu sunmuyor
# ama web admin üzerinden kontrol edebilirsiniz)
# Web Admin: Actions > Graceful Restart
Sonuç
OpenLiteSpeed ile bot yönetimi, katmanlı bir yaklaşım gerektiriyor. Tek bir kural veya tek bir araç yeterli olmuyor. Şu adımları sırayla uygulamanızı öneririm:
- Önce mevcut bot trafiğinizi analiz edin ve neyle karşı karşıya olduğunuzu anlayın
- robots.txt ile meşru botlara açık direktifler verin
- OLS throttling parametrelerini sunucunuzun kapasitesine göre ayarlayın
- User-agent ve header bazlı rewrite kurallarıyla bilinen kötü botları engelleyin
- ModSecurity entegrasyonuyla daha gelişmiş tespit mekanizmaları kurun
- Cache’i agresif kullanarak bot isteklerinin backend maliyetini minimize edin
- Sürekli monitoring yapın çünkü bot taktikleri değişiyor
Bu yapılandırmaları uyguladığınızda hem arama motoru performansınızın korunduğunu hem de sunucu kaynaklarınızın çok daha verimli kullanıldığını göreceksiniz. Benim deneyimlerimde bu tür bir yapılandırma, ortalama sunucu yükünü yüzde 20-30 oranında düşürdü ve bu da hem performans hem de maliyet açısından ciddi bir fark yarattı.