.htaccess ile Belirli IP Adreslerini veya Botları Engelleme

Web sunucunuza gereksiz veya zararlı trafik geldiğinde, hızlı ve etkili bir ilk müdahale yöntemi olarak .htaccess dosyasıyla IP veya bot engelleme yapılabilir. Bu rehberde hangi durumlarda .htaccess kullanmanız uygun olur, Apache sürüm farklılıkları, örnek kod parçacıkları, test yöntemleri ve dikkat etmeniz gereken sınırlamalar yer alır.

Ne zaman .htaccess ile engelleme tercih edilmeli?

  • Sunucu düzeyinde hızlı bir kural eklemek istiyorsanız (özellikle paylaşımlı hostinglerde).
  • Belirli bir IP, küçük bir IP aralığı veya tanımlı kötü niyetli botları engellemek istiyorsanız.
  • Ancak sürekli, yüksek hacimli saldırılarda veya IP spoofing durumlarında ağ / host firewall (ör. iptables, cloud WAF) daha uygundur.

Apache sürüm farkı ve önemli notlar

Apache 2.2 ve Apache 2.4 arasında erişim kontrolünde sözdizimi farkları vardır. Sunucunuzun Apache sürümünü bilmiyorsanız sağlayıcınıza veya sunucu yöneticinize danışın. Aksi halde eklediğiniz kurallar çalışmayabilir veya beklenmeyen erişim kısıtları oluşabilir.

Apache 2.4 örnekleri (önerilen)

# Tek IP engelleme
Require all granted
Require not ip 203.0.113.45

# Birden fazla IP veya ağ
Require all granted
Require not ip 203.0.113.0/24 198.51.100.23

Not: Apache 2.4'te Require direktifi tercih edilir. "Require not ip" ile tekil IP veya CIDR formatında ağlar belirtilebilir.

Apache 2.2 (eski sistemler)

Order Allow,Deny
Allow from all
Deny from 203.0.113.45
Deny from 203.0.113.0/24

Apache 2.2'de Deny from kullanılır; modern kurulumlarda mod_access_compat yüklü değilse çalışmayabilir.

Kötü niyetli botları user-agent ile engelleme

Kötü niyetli botları user-agent bilgisine göre engellemek için mod_rewrite kullanılabilir. Ancak user-agent kolayca taklit edilebilir; bu yüzden tek yöntem olarak güvenmeyin.

# Basit user-agent engelleme (mod_rewrite)
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (BadBot|EvilScraper|MJ12bot) [NC]
RewriteRule .* - [F,L]

Alternatif olarak birden fazla koşul kullanırken [OR] bayrağıyla zincir kurabilirsiniz:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} BadBot [NC,OR]
RewriteCond %{HTTP_USER_AGENT} EvilScraper [NC]
RewriteRule .* - [F,L]

Uygulama adımları (adım adım)

  • Yedek alın: Mevcut .htaccess dosyasının bir kopyasını indirin.
  • Dosya konumu: Genelde site kök dizininde (public_html/ veya www/) bulunur; alt dizinde farklı kurallar uygulamak istiyorsanız o dizine yerleştirin.
  • Dosya izinleri: Normalde 644 yeterlidir; yazma işlemlerini kontrol edin.
  • Değişiklikleri küçük adımlarla yapın: Her eklemeden sonra site erişimini kontrol edin, beklenmedik 403 hatalarını yakalayın.
  • Logları takip edin: access/error loglarıyla hangi IP'lerin engellendiğini test edin.

Test yöntemleri

Eklenen kuralların çalıştığını test etmek için terminalden basit HTTP istekleri kullanabilirsiniz (örneklerde kendi domaininizi kullanın):

# User-agent ile test
curl -I -A "BadBot" https://your-domain.com

# IP engellemeyi test etmek için yerel koşullarda IP taklidi daha zor; test amaçlı web sunucu loglarını kontrol edin.

Engellenen istekler için HTTP 403 (Forbidden) veya sunucu tarafından döndürülen uygun hata kodunu görmelisiniz.

Dikkat edilmesi gereken riskler ve sınırlamalar

  • Paylaşılan IP ve NAT: Bir IP'yi engellerseniz aynı IP arkasındaki meşru kullanıcıları da etkileyebilirsiniz.
  • CDN ve Reverse Proxy: Cloudflare vb. arkasındaysanız REMOTE_ADDR, gerçek istemciyi göstermeyebilir. Bu durumda mod_remoteip gibi çözümler veya CDN kontrol panelleri üzerinden engelleme tercih edilmelidir.
  • User-agent taklidi: Kötü niyetli botlar user-agent değiştirebilir; user-agent bazlı engellemeyi tek savunma hattı yapmayın.
  • IPv6: IPv6 trafiğini de göz önüne alın; sadece IPv4 bloklamak yeterli olmayabilir.
  • Performans: Çok uzun .htaccess dosyaları performansa etki edebilir; yoğun kurallarda sunucu düzeyinde firewall tercih edin.

Alternatifler ve tamamlayıcı önlemler

  • Sunucu/ ağ düzeyinde bloklama (ör. iptables, nftables).
  • Fail2ban gibi girişimleri otomatik engelleyen araçlar.
  • Web Application Firewall (WAF) ile kural setleri ve rate limiting.
  • Robots.txt, sadece iyi niyetli botlar için işe yarar; kötü amaçlı botlar bunu umursamaz.

Sonuç — En iyi uygulamalar özeti

  • Önce yedek alın. Değişiklikleri küçük adımlarla uygulayın.
  • Apache sürümünü bilin: 2.4 için Require, eski sürümler için Deny/Allow kullanın.
  • Log ve test: Erişim loglarını takip ederek yanlış engellemeleri hızlıca düzeltin.
  • CDN/Proxy farkındalığı: Eğer CDN arkasındaysanız gerçek istemci IP'sini dikkate alın.
  • Tam bir savunma katmanı oluşturun: .htaccess tek başına uzun süreli ve yüksek hacimli saldırılar için yeterli değildir; firewall, WAF ve izleme ile destekleyin.

.htaccess kısa vadede etkili ve hızlı bir araçtır; doğru uygulandığında siteyi stabil tutmaya yardımcı olur. Ancak her zaman riskleri ve sınırlamaları göz önünde bulundurup daha sağlam önlemlerle desteklemek en sürdürülebilir yaklaşımdır.