Gerçek GPTBot mu Sahte mi? User-Agent Taklidi ve IP Doğrulama
Kısaca: User-Agent başlığı HTTP isteğinde kolayca değiştirilebilir bir metin olduğundan, herhangi bir bot kendini GPTBot, Googlebot veya başka bir tarayıcı gibi gösterebilir. Gerçek kimliği doğrulamak için isteğin geldiği IP adresinin resmi sağlayıcı aralığında olup olmadığını kontrol etmeli ve reverse DNS sorgusuyla IP'nin gerçekten o şirkete ait olduğunu teyit etmelisiniz. Robots.txt kuralları yalnızca dürüst botlar için geçerlidir; taklit yapan veya kötü niyetli botları sunucu veya güvenlik duvarı seviyesinde engellemek gerekir.
User-Agent Taklidi Neden Bu Kadar Kolay?
HTTP protokolünde User-Agent bir başlık satırıdır ve istemci tarafından serbestçe ayarlanabilir. Curl, wget, Python requests gibi araçlarla herhangi bir User-Agent değeri göndermek birkaç saniye sürer:
curl -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; GPTBot/1.2; +https://openai.com/gptbot" https://example.com/
Bu komut sunucuya GPTBot gibi görünür, ancak gerçekte tamamen farklı bir kaynaktan gelmiş olabilir. Sunucu loglarında yalnızca User-Agent başlığını görecekseniz, hangi isteğin gerçek OpenAI tarayıcısından geldiğini ayırt edemezsiniz. Bu nedenle User-Agent tek başına güvenilir bir kimlik kanıtı değildir.
Resmi IP Aralıkları ve Reverse DNS ile Doğrulama Mantığı
Büyük arama motorları ve AI sağlayıcıları, tarayıcılarının hangi IP bloklarından çalıştığını yayınlar veya reverse DNS kayıtlarını standart hale getirir. Doğrulama iki adımda yapılır:
1. Reverse DNS Sorgusu (PTR Kaydı)
İsteğin geldiği IP adresine reverse DNS sorgusu yaparak hangi alan adına işaret ettiğini öğrenirsiniz. Örneğin Googlebot için IP'nin PTR kaydı *.googlebot.com veya *.google.com döner. Ardından bu alan adının A/AAAA kaydını sorgulayarak aynı IP'ye geri dönüp dönmediğini kontrol edersiniz (forward-confirmed reverse DNS).
2. Resmi IP Aralığı Kontrolü
Bazı sağlayıcılar JSON veya metin formatında IP listesi yayınlar. İsteğin geldiği IP'nin bu listedeki bir CIDR bloğuna dahil olup olmadığını kontrol edersiniz. Örneğin OpenAI, GPTBot IP aralıklarını JSON dosyasında sunar; Anthropic ve Perplexity de benzer listeler sağlar.
Her iki yöntem de IP sahteciliğine (IP spoofing) karşı TCP el sıkışması gerektirdiğinden, saldırganın hem IP'yi hem de ağ yolunu taklit etmesi pratikte çok zordur. Bu nedenle IP tabanlı doğrulama User-Agent'tan çok daha güvenilirdir.
Komut Satırı ile Doğrulama Örnekleri
Googlebot Doğrulama (Linux/macOS)
Sunucu loglarında 66.249.66.1 IP'sinden Googlebot User-Agent'lı bir istek gördüğünüzü varsayalım:
# 1. Reverse DNS sorgusu
host 66.249.66.1
# Çıktı: 1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
# 2. Forward DNS sorgusu (doğrulama)
host crawl-66-249-66-1.googlebot.com
# Çıktı: crawl-66-249-66-1.googlebot.com has address 66.249.66.1
IP adresi googlebot.com alan adına işaret ediyor ve alan adı da aynı IP'ye geri dönüyorsa, bu gerçek bir Googlebot isteğidir. Eğer PTR kaydı başka bir alan adı gösteriyorsa veya forward sorgu farklı bir IP dönüyorsa, sahte bir User-Agent'tır.
GPTBot IP Aralığı Kontrolü
OpenAI, GPTBot IP'lerini şu adreste yayınlar: https://openai.com/gptbot.json. Dosyayı indirip bir IP'nin bu aralıklarda olup olmadığını kontrol edebilirsiniz:
# JSON dosyasını indirin
curl -s https://openai.com/gptbot.json > gptbot.json
# Örnek IP: 20.171.210.5
# Python ile kontrol (ipaddress modülü)
python3 <<EOF
import json, ipaddress
with open("gptbot.json") as f:
data = json.load(f)
ip = ipaddress.ip_address("20.171.210.5")
ranges = [ipaddress.ip_network(r["ipv4Prefix"]) for r in data["prefixes"] if "ipv4Prefix" in r]
if any(ip in net for net in ranges):
print("✓ Gerçek GPTBot IP aralığında")
else:
print("✗ GPTBot IP aralığında değil")
EOF
Bu script, verilen IP'nin OpenAI'ın yayınladığı CIDR bloklarından birine dahil olup olmadığını kontrol eder. Benzer JSON dosyaları Anthropic (ClaudeBot) ve Perplexity (PerplexityBot) için de mevcuttur.
Bingbot ve Diğer Microsoft Botları
Bingbot için reverse DNS yöntemi kullanılır; PTR kaydı *.search.msn.com döner:
host 40.77.167.1
# Çıktı: 1.167.77.40.in-addr.arpa domain name pointer msnbot-40-77-167-1.search.msn.com.
host msnbot-40-77-167-1.search.msn.com
# Çıktı: msnbot-40-77-167-1.search.msn.com has address 40.77.167.1
Sunucu veya WAF Seviyesinde Engelleme
Robots.txt yalnızca iyi niyetli botlar için bir nezaket protokolüdür. Taklit yapan veya kötü niyetli botları engellemek için sunucu yapılandırması veya web uygulama güvenlik duvarı (WAF) kuralları kullanmalısınız:
Nginx Örneği
# Yalnızca doğrulanmış Googlebot IP'lerine izin ver
geo $is_googlebot {
default 0;
66.249.64.0/19 1;
# Diğer Google IP blokları...
}
server {
location / {
if ($http_user_agent ~* "Googlebot") {
set $bot_check "A";
}
if ($is_googlebot = 0) {
set $bot_check "${bot_check}B";
}
if ($bot_check = "AB") {
return 403;
}
}
}
Bu yapılandırma, User-Agent'ta "Googlebot" geçen ancak IP adresi Google aralığında olmayan istekleri reddeder.
Cloudflare WAF
Cloudflare, cf.bot_management.verified_bot alanını kullanarak doğrulanmış botları otomatik tanır. Özel bir kural oluşturarak sahte User-Agent'ları engelleyebilirsiniz:
(http.user_agent contains "GPTBot" and not cf.bot_management.verified_bot)
Bu kural, GPTBot User-Agent'ı kullanan ancak Cloudflare'in doğrulama sisteminden geçemeyen istekleri engeller veya challenge ile karşılar.
Hangi Botlar İçin Hangi Yöntem?
| Bot | Doğrulama Yöntemi | Kaynak |
|---|---|---|
| Googlebot | Reverse DNS (*.googlebot.com) | Google Dokümanı |
| Bingbot | Reverse DNS (*.search.msn.com) | Bing Dokümanı |
| GPTBot | IP aralığı JSON | https://openai.com/gptbot.json |
| ClaudeBot | IP aralığı JSON | https://docs.anthropic.com/en/ip-addresses |
| PerplexityBot | IP aralığı JSON | https://docs.perplexity.ai/docs/perplexitybot |
| Applebot | Reverse DNS (*.applebot.apple.com) | Apple Dokümanı |
Sık Sorulan Sorular
Reverse DNS sorgusu her zaman güvenilir mi?
Reverse DNS, DNS kayıtlarının doğru yapılandırıldığı ve saldırganın DNS sunucusunu ele geçirmediği sürece güvenilirdir. Forward-confirmed reverse DNS (hem PTR hem A/AAAA kaydı kontrolü) yaparak güvenilirliği artırırsınız. Ancak DNS kayıtları da teoride manipüle edilebileceğinden, kritik uygulamalarda IP aralığı listesi ve reverse DNS'i birlikte kullanmak en sağlam yaklaşımdır.
IP aralığı listeleri ne sıklıkla güncellenir?
OpenAI, Anthropic ve Perplexity gibi sağlayıcılar IP listelerini düzenli güncellerler, ancak güncelleme sıklığını garanti etmezler. Sunucu tarafında bu listeleri haftada bir veya ayda bir otomatik olarak çekip önbelleğe almanız önerilir. Google ve Bing gibi büyük sağlayıcılar ise IP aralıklarını nadiren değiştirdiğinden, reverse DNS yöntemi daha pratiktir.
Robots.txt'te User-Agent engellemek yeterli değil mi?
Hayır. Robots.txt yalnızca iyi niyetli botlar için bir yönergedir ve hiçbir teknik zorlama mekanizması içermez. Kötü niyetli bir bot robots.txt'i tamamen görmezden gelebilir veya başka bir User-Agent kullanarak erişmeye devam edebilir. Gerçek engelleme için sunucu yapılandırması, güvenlik duvarı kuralları veya WAF kullanmalısınız.
Cloudflare veya CDN kullanıyorsam gerçek IP'yi nasıl görürüm?
Cloudflare gibi reverse proxy'ler, gerçek ziyaretçi IP'sini CF-Connecting-IP veya X-Forwarded-For başlığında iletir. Sunucu loglarınızı bu başlıkları okuyacak şekilde yapılandırmalısınız. Nginx için real_ip_header CF-Connecting-IP; ve set_real_ip_from direktifleriyle Cloudflare IP aralıklarını tanımlayın. Aksi takdirde tüm istekler Cloudflare'in kendi IP'lerinden geliyormuş gibi görünür ve bot doğrulaması yapılamaz.