Web Sitelerinde Spam Trafiğini Engelleme (2025 Rehberi)

Neden “bot” ≠ tek tip? (Tehdit modelini oturt)

Spam trafiği; credential stuffing, carding, scraping, brute force, form spam, API kötüye kullanımı gibi farklı otomasyon davranışlarından oluşur. OWASP’ın Automated Threats to Web Applications (OAT) sınıflandırması, hangi uç noktalar için hangi saldırıların tipik olduğuna dair ortak bir dil sağlar; savunmayı tek bir CAPTCHA’ya indirgemek yerine tehdit odaklı düşünmeyi kolaylaştırır. owasp.org+1

Ana savunma katmanları (özet strateji)

  1. WAF + kural setleri: ModSecurity ile OWASP Core Rule Set (CRS) başlangıç bariyeri sağlar; SQLi/XSS gibi klasik istismarlara ek olarak brute force ve hız sınırlamaya yardımcı kurallar içerir. owasp.org+1

  2. Oran sınırlama (rate limit) / bağlantı kotası: Nginx’in limit_req ve limit_conn modülleri IP ya da özel anahtarlar (örn. IP+username) üzerinden istek hızını düşürür; leaky-bucket algoritması kullanır. nginx.org+1

  3. Risk skorlu doğrulama: Cloudflare Turnstile gibi “sessiz” tarayıcı sinyali tabanlı çözümler; düşük güven hâlinde hafif challenge göstererek sürtünmeyi azaltır. Google reCAPTCHA (Enterprise), OAT kategorilerine göre akış bazlı öneriler sunar. Cloudflare Docs+2Cloudflare Docs+2

  4. Honeypot/decoy taktikleri: Görünmeyen form alanları, sahte endpoint’ler ve (Cloudflare tarafında) AI Labyrinth gibi “yönlendirip oyalayan” çözümlemeler, robots.txt’ye uymayan yeni nesil tarayıcılara karşı etkili bir ek katmandır. The Cloudflare Blog

  5. Scraper ekosistemi ve robots.txt gerçekliği: 2024–2025’te yayıncılar ve altyapı sağlayıcıları, robots.txt’yi yok sayan ve kimliğini gizleyen AI tarayıcılarına karşı (örn. varsayılan engelleme, “Pay Per Crawl” gibi) daha agresif önlemler duyurdu; robots.txt tek başına yeterli değil. The Verge+2Reuters+2

  6. Ölçüm temizliği: Başarıyı ölçmek için GA4’te internal ve developer trafiğini filtrele; aksi hâlde bot azaltma etkisini göremezsin. Google Yardım

  7. API’lere özel sıkılaştırma: 2024’te web saldırıları %33 artarken API’ler birincil hedef hâline geldi; rate limit + kimlik doğrulama + davranışsal sinyaller şart. vmblog.com+1


Uygulanabilir kontrol listesi (Hızlı başlangıç)

  • Kritik uçları çıkar: /login, /signup, ödeme/form akışları, /search, ürün beslemeleri ve API uçları; her birini OAT kategorisiyle eşleştir. owasp.org

  • WAF/CRS’i aç ve tuning yap: Hatalı pozitifleri azaltmak için istisna kuralları tanımla. CRS Project

  • Oran sınırla: Nginx ile IP ve akışa özgü anahtarlarla rate limiting uygula. nginx.org

  • Riskli akışlarda challenge: Turnstile/reCAPTCHA’yı login, kayıt ve ödeme gibi yüksek riskli akışlarda puan/karar mekanizmasıyla devreye al. Cloudflare Docs+1

  • Honeypot/decoy ekle: Form honeypot’ları + (Cloudflare kullanıyorsan) AI Labyrinth. The Cloudflare Blog

  • Scraper yönetimi: ASN/ülke/UA sinyalleriyle kurallar, hız limitleri, JSON/Feed uçlarına Accept/Referer hijyeni.

  • Ölçüm temizliği: GA4 iç/developer trafiğini dışla. Google Yardım

  • Sürekli gözlem: 429/5xx oranları, çerezsiz istek patlamaları, belirli ASN/ülkelerden ani sıçramalar için alarmlar kur.

  • Trendleri izle: Akamai’nin yıllık/çeyreklik SOTI raporları API/bot eğilimlerini takip için iyi bir referans. Akamai


Uygulama Taslağı (kopyala–uyarla)

A) Nginx: Oran sınırlama ve basit işaretler

Login akışı için IP + kullanıcı adı birleşik anahtar:

# X-Real-IP varsa onu kullan
map $http_x_real_ip $client_ip { default $remote_addr; }
# IP + username kombinasyonu (query/body'den 'username' geldiğini varsayalım)
map "$client_ip:$arg_username" $login_key { default $request_uri; }

# Limit alanları
limit_req_zone $client_ip zone=perip:20m rate=10r/m;
limit_req_zone $login_key zone=peruser:20m rate=5r/m;
limit_conn_zone $client_ip zone=ipconn:10m;

server {
location = /login {
limit_req zone=perip burst=20 nodelay;
limit_req zone=peruser burst=5;
limit_conn ipconn 20;

# Basit bot işaretleri (örnek)
if ($http_user_agent ~* "(curl|wget|bot|spider)") { return 429; }
proxy_pass http://app_upstream;
}
}

Nginx’in limit_req modülü leaky-bucket yöntemiyle çalışır; anahtar seçiminde IP’nin NAT arkasında paylaşılıyor olabileceğini unutma. nginx.org+1

Form spam için honeypot + hız limiti:

# /contact/submit için IP başına saatlik limit
limit_req_zone $binary_remote_addr zone=formip:10m rate=30r/h;

location = /contact/submit {
limit_req zone=formip burst=10;
# 'hp_field' honeypot alanı dolu geldiyse reddet
if ($arg_hp_field != "") { return 403; }
proxy_pass http://app_upstream;
}

Sık kazınan uçlar (search/feed/sitemap) için dar boğaz:

limit_req_zone $binary_remote_addr zone=scrape:20m rate=1r/s;

location ~ ^/(search|feed|sitemap\.xml|products\.json)$ {
limit_req zone=scrape burst=10 nodelay;
proxy_pass http://app_upstream;
}

B) Cloudflare: Turnstile + WAF mantığı + AI Labyrinth

Turnstile entegrasyonu (özet):

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<form id="login-form" method="POST" action="/login">
<!-- alanlar -->
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY" data-theme="auto"></div>
<button type="submit">Giriş</button>
</form>

Sunucuda (ör. Node) doğrularken token’ı /siteverify ile kontrol et; puan düşükse ek doğrulama iste. Turnstile, Cloudflare CDN’i kullanmasan bile gömülebilir; önce sessiz sinyaller toplar, gerekirse hafif bir challenge gösterir. Cloudflare Docs+1

AI Labyrinth (decoy sayfalarla oyalama): robots.txt’ye uymayan/bilinen AI tarayıcılarına karşı botu “labirente” sokarak kaynaklarını tüketen yeni savunma; Cloudflare üzerinde ücretsiz/opt-in sunuluyor. The Cloudflare Blog

Güncel bağlam: Cloudflare 2025’te AI crawler’ları varsayılan engelleme ve Pay Per Crawl seçeneklerini duyurdu; robots.txt’yi yok sayan botlara karşı altyapı seviyesinde kontrol sağlıyor. The Verge+1

C) AWS WAF: Bot Control + yönetilen kurallar

  • AWS WAF Bot Control: Bilinen bot kategorilerini (iyi/kötü) ayıran yönetilen kurallar; özel kurallarla birleştirilebilir. docs.aws.amazon.com+1

Örnek (IP başına /login rate limit + Bot Control):

[
{
"Name": "AllowPartners",
"Priority": 0,
"Statement": { "IPSetReferenceStatement": { "ARN": "arn:aws:wafv2:...:ipset/partners" } },
"Action": { "Allow": {} },
"VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AllowPartners" }
},
{
"Name": "AWSBotControl",
"Priority": 1,
"Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesBotControlRuleSet" } },
"OverrideAction": { "None": {} },
"VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "BotControl" }
},
{
"Name": "RateLimitLoginPerIP",
"Priority": 10,
"Statement": {
"RateBasedStatement": {
"Limit": 300,
"AggregateKeyType": "IP",
"ScopeDownStatement": {
"ByteMatchStatement": {
"SearchString": "/login",
"FieldToMatch": { "UriPath": {} },
"TextTransformations": [{ "Type": "NONE", "Priority": 0 }],
"PositionalConstraint": "STARTS_WITH"
}
}
}
},
"Action": { "Block": {} },
"VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "RateLogin" }
}
]

D) Google reCAPTCHA (Enterprise): OAT uyumlu mimari

Google’ın OAT tehditlerine göre en iyi uygulamalar kılavuzu, kart dolandırıcılığı, credential stuffing vb. senaryolarda puan tabanlı karar akışları ve “ek doğrulama” önerir. Uygulamada, skor/bağlama göre “izin ver / MFA iste / insan doğrulaması iste / reddet” kuralı tanımla. Google Cloud+1

E) GA4: İç/developer trafiğini dışla (ölçüm temizliği)

  • Internal traffic: IP’leri “Define internal traffic” ile tanımla, ardından Data Filters’ta Exclude olarak aktif et. Google Yardım

  • (İpucu) GA4, iç trafikten gelen vuruşlara tt=internal işareti koyar; validasyonu kolaylaştırır. selnekovic.com

F) İzleme & alarm fikirleri

  • 429/5xx oranı ve endpoint başına z-skor sapmaları.

  • Cookie-less istek oranı, ASN/ülke bazlı patlamalar.

  • Decoy/honeypot isabetleri metriki (AI Labyrinth/honeypot sayfalarına giriş).

  • API saldırı trendleri için Akamai’nin SOTI raporlarını periyodik takip. vmblog.com


Neden robots.txt tek başına yetmiyor?

Son 1 yılda; kimliğini gizleyen, robots.txt’yi görmezden gelen ya da UA/başlık taklidi yapan AI tarayıcılarına dair çok sayıda bulgu paylaşıldı. Bu yüzden altyapı seviyesinde engelleme (WAF/ASN/UA/Rate limit/Decoy) gereklidir. arstechnica.com+1


Kullanıcı deneyimi: “kademeli sürtünme” prensibi

  • Herkese CAPTCHA göstermek yerine, risk skorlu ve kademeli zorlaştırma kullanın: düşük riskli akışlarda sürtünme yok; risk yükseldikçe MFA / challenge / manuel inceleme. Turnstile ve reCAPTCHA bu modeli destekler. Cloudflare Docs+1


Ek: Somut “kural seti” taslağı (özet)

  1. Nginx: /login için IP+username anahtarıyla limit_req; form uçlarına honeypot + saatlik limit; “sıcak” scraping uçlarına 1 r/s sınırı. nginx.org

  2. Cloudflare: Turnstile’ı yalnızca login/signup/ödeme gibi riskli akışlara yerleştir; AI Labyrinth’i aç; bilinen AI UA’ları ve “şüpheli oran” için WAF’ta Managed Challenge uygula. Cloudflare Docs+1

  3. AWS WAF: Önde Allowlist → Bot ControlCommon Rule Set → akışa özel rate limit. docs.aws.amazon.com

  4. GA4: Internal/Developer filtreleri Active; bot benzeri oturumlar için ayrı segment oluştur. Google Yardım

  5. Sürekli iyileştirme: Hatalı pozitif vakalarını toplayıp istisnalar yaz; eşikleri haftalık gözden geçir.

  6. Trend takibi: API saldırıları ve scraper davranışlarına dair Akamai SOTI raporlarını takip et. Akamai

İlginizi Çekebilir:PrestaShop’ta “500 Internal Server Error” Hatası: Nedenleri, Teşhis ve %100 Çözüm Kılavuzu
share Paylaş facebook pinterest whatsapp x print

Benzer İçerikler

Snuffleupagus ile PHP Güvenliği: Adım Adım Kurulum Rehberi ve Avantajları (2025)
WordPress CPU Kullanımı Masterclass: Sunucunuzun Nefesini Kesen Sorunlara Derinlemesine Bakış ve Kanıtlanmış Çözüm Yöntemleri
Hosting Değişikliği Sonrası SEO Organik Trafik Kaybı Yaşanır mı?
Imunify360 vs CSF + Maldet + Fail2Ban + ClamAV
500 Plesk\Exception\Database Hatası (SQLSTATE 2002) – Kesin Çözüm Rehberi
500 Internal Server Error: Neden Olur, Nasıl Çözülür? (cPanel, WordPress, Nginx/Apache Rehberi)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


Saviorhost İnternet Hizmetleri | © 2025 |