Rehber

IP-DB Shield Kurulumu: Kendi Sunucunuzda Çalışan Ziyaretçi Kapısı

Üç dakikalık PHP kurulumu, monitor modu, karar sırası, feed/api kaynakları, özel panel ve SEO ile gizlilik ayrıntıları.

IP-DB Ekibi 6 dk okuma 25 okunma 0 yorum

Büyük CDN'lerden bildiğiniz bir ekran var: siteye girerken bir saniyelik "kontrol ediliyor" sayfası, sonra içeri. O ekranın iki işi vardır — bilinen kötü adresi hiç içeri almamak, şüpheli olanı bir eşikten geçirmek. İşe yaramasının sebebi ise ekranın kendisi değil, arkasındaki listedir.

IP-DB Shield aynı kapıyı sizin sunucunuzda, sizin adınızla çalıştırır. DNS değişmez, trafik kimsenin üzerinden geçmez, bir hesabı yükseltmek gerekmez: karar, diskinizdeki blok listesi kopyasından, kendi PHP sürecinizin içinde verilir. Tek dosya, bağımlılık yok, PHP 7.0 ve üzeri, MIT lisansı.

Kutuda ne var

  • ipdb-shield.php — kapının kendisi; tek dosya, bağımlılıksız.
  • config.php — düzenlemeniz gereken tek dosya.
  • theme/screen.html ve theme/strings.json — üç ziyaretçi ekranı ve metinleri (Türkçe, İngilizce, Almanca, İspanyolca). İstediğiniz gibi biçimlendirin.
  • static/ipdb-shield.js — hiç PHP'si olmayan siteler için sürüm.
  • examples/ — .htaccess, nginx, cron ve WordPress parçacıkları.

Üç dakikalık kurulum

Kiti Shield sayfasından indirin, API anahtarınızı panelden alın.

# 1) klasörü sitenize yükleyin, örn. /home/siz/public_html/ipdb-shield/ # 2) bir gizli anahtar üretin ve config.php'ye yazın php ipdb-shield.php --secret # 3) listeyi bir kez indirin ve kurulumu doğrulayın php ipdb-shield.php --refresh php ipdb-shield.php --status

config.php içinde yalnızca iki değer zorunludur: api_key ve üretilen secret. Sonra kapıyı devreye alın — ya sitenizin çalıştırdığı ilk satır olarak:

require __DIR__ . '/ipdb-shield/ipdb-shield.php';

…ya da hiçbir koda dokunmadan, .htaccess üzerinden:

php_value auto_prepend_file "/home/siz/public_html/ipdb-shield/ipdb-shield.php"

Son adım listenin kritik yolun dışında tazelenmesi için examples/cron.txt içindeki cron satırını eklemek.

İlk gün: kimseyi engellemeyin

Kit 'mode' => 'monitor' ile gelir ve bir gün öyle kalmalı. Monitor modunda hiç kimse durdurulmaz, ama her karar kaydedilir: --status komutunun bastığı özel panel adresinde kimin engellenecek olduğunu, hangi sebeple ve kaç kez olduğunu görürsünüz. Gerçek trafiğinizde bir gün okuyup sonra 'protect'e geçmek, eşikleri tahminle açmaktan çok daha iyi bir karardır.

Bir istek nasıl karara bağlanıyor

Sıra sabittir ve ilk eşleşen kazanır:

#DurumSonuç
1Sayfa değil (varlık, XHR, webhook, wp-cron)Dokunulmaz
2Kendi allow_ips listenizGeçer
3Kendi deny_ips listenizReddedilir
4Tuzak yol (/.env, /.git/…)Reddedilir, izin verdiyseniz raporlanır
5Doğrulanmış arama motoru (ters DNS teyitli)Geçer
6Listede, ya da puan block_score üzerindeMarkalı 403 sayfası
7Puan challenge_score üzerinde ya da istek seliBasılı tut + iş kanıtı, istenirse captcha
8Geri kalan herkesBir saniyelik otomatik kontrol, sonra imzalı çerez

POST istekleri asla araya girilerek kesilmez — bir form gönderimi ara ekrandan sağ çıkmaz — ama reddedilen bir adres, yöntemi ne olursa olsun reddedilir.

Listeyi nereden okuyor: feed, api, both

feed (varsayılan): blok listesinin yerel kopyası, birkaç saatte bir tazelenir. Ziyaretçi beklerken sunucunuzdan dışarı hiçbir şey çıkmaz, ziyaret başına kota harcanmaz ve arama sıralı bir dizin üzerinde ikili aramadır: sabit bellek, mikrosaniyeler.

api: yakın zamanda görülmemiş her adres için bir /check sorgusu, cache_ttl süresince önbelleklenir. Daha zengin (puan, ülke, ağ) ve her zaman güncel, ama günlük kotanızdan harcar ve adres ilk kez göründüğünde bir gidiş-dönüş ekler.

both: önce liste; listede olmayan adresler için günde api_daily_budget kadar sorgu, sonrası yalnızca liste.

Komut satırı ve özel panel

php ipdb-shield.php --refresh # listeyi indir/tazele php ipdb-shield.php --status # sağlık, sayaçlar, panel adresi php ipdb-shield.php --test 1.2.3.4 # bu adrese ne olurdu? php ipdb-shield.php --verify # yerel listeyi baştan sona okut php ipdb-shield.php --secret # yeni gizli anahtar

Panel adresi gizli anahtarınızdan türetilir; bir parola gibi saklayın, döndürmek isterseniz anahtarı değiştirmek yeterli. Panelde mod, yerel listenin yaşı ve boyutu, bugünün sayaçları, son yedi gün ve en son kararlar sebepleriyle birlikte durur.

SEO ve erişilebilirlik

Bir ziyaretçi kapısının siteyi arama sonuçlarından düşürmesi mümkündür; bu yüzden ayrıntılar önemli. Arama motorları yalnızca ters DNS adı operatörün alan adıyla bitiyor ve o ad aynı adrese geri çözülüyorsa geçirilir. Kontrol ekranı 503 ve Retry-After ile yanıt verir, noindex taşır — tarayıcı geçici bir kapı gördüğünü anlar, sizin başlığınızı taşıyan bir 200 sayfası indekslemez. Ekranlar klavyeyle kullanılabilir, ekran okuyuculara kendini tanıtır, prefers-reduced-motion ve koyu temaya uyar, telefon genişliğinde çalışır; JavaScript'i olmayan ziyaretçiye bir dönen çarkın başında bırakmak yerine durumu kendi dilinde söyler.

Gizlilik ve güvenlik notları

  • feed modunda ziyaretçi hakkında hiçbir şey sunucunuzdan çıkmaz. api ve both modunda yalnızca IP adresi gönderilir: URL yok, User-Agent yok, çerez yok, sayfa içeriği yok. Ekranlar hangisinin geçerli olduğunu ziyaretçinin dilinde yazar.
  • Ziyaretçinin değiştirebileceği tek şey başlıklardır, bu yüzden varsayılan olarak yalnızca REMOTE_ADDR'a güvenilir. İletilen başlık, bağlantı trusted_proxies içindeki bir vekilden geliyorsa okunur — aksi halde herkes istediği adresi yazıp kapıdan geçerdi.
  • Her meydan okuma imzalıdır, on dakikada sona erer, tarayıcıya bağlıdır ve bir kez çözülebilir: yakalanmış bir iş kanıtı ikinci kez işe yaramaz.
  • config.php ve cache/ dizinini HTTP üzerinden erişilemez tutun; kit cache/ içine kendi reddet-hepsini .htaccess dosyasını bırakır, Apache ve nginx kuralları examples/ içindedir.

Geri katkı ve kota

Kit 'report' => true ile gelir: yalnızca iki şey raporlanır — hiçbir tarayıcının istemeyeceği bir tuzak yolun istenmesi ve bir saat içinde onlarca kez meydan okumayı geçemeyen bir adres. Adres başına altı saatte en fazla bir rapor; sıradan ziyaretçiler asla raporlanmaz ve sayfalarınız hakkında hiçbir şey gönderilmez. İstemiyorsanız config.php içinde false yapın.

Raporlayan bir kurulum, doğrulanmış hesabınızı katkıda bulunan kademesine taşır: günde 1.000 yerine 30.000 sorgu, kurulum son 7 gün içinde rapor gönderdiği sürece.

Sık rastlanan üç sorun

  • Cron ya da API ucum HTML sayfası alıyor. O yolu skip_paths'e ekleyin. Makine tarafından çağrılan her şey oraya aittir.
  • Sayfa önbelleği kontrol ekranını herkese servis ediyor. Ekranlar no-store gönderir ama bazı önbellekler bunu yok sayar; auto_prepend_file ile kurulduğunda kapı önbellekten önce çalışır.
  • "blocklist: 0 entries". Ya API anahtarı yok, ya dışa HTTPS kapalı, ya da önbellek dizini yazılabilir değil — --status hangisi olduğunu söyler.

Sık sorulan sorular

Trafiğim bir yerden mi geçiyor? DNS değiştirmem gerekir mi?

Hayır. Shield kendi sunucunuzdaki PHP sürecinin içinde çalışır; DNS kaydı değişmez, trafik kimsenin üzerinden geçmez. Varsayılan 'feed' kaynağında karar diskteki blok listesi kopyasından verilir, yani bir ziyaretçi beklerken sunucunuzdan dışarı hiçbir şey çıkmaz.

Google'ı engeller mi? SEO'ya zarar verir mi?

Arama motorları geçirilir, ama yalnızca adres gerçekten onlara aitse: ters DNS adı operatörün alan adıyla bitmeli ve o ad yeniden çözüldüğünde aynı adrese dönmeli. Googlebot olduğunu söyleyen bir User-Agent hiçbir şey kanıtlamaz. Kontrol ekranı ayrıca 200 değil, Retry-After başlıklı 503 ve noindex döndürür — geçici bir kapı için tarayıcının görmesi gereken tam olarak budur.

Kendimi kilitlersem ne olur?

config.php içindeki allow_ips listesine kendi adresinizi ekleyin; kurulumda ilk gün 'monitor' modunda bırakmanın sebebi de bu. Kilitlendiyseniz cache/ dizinini silip modu monitor'a almak yeterli. Her hata yolu da açık fail eder: liste eksikse, API ulaşılmazsa ya da önbellek yazılamazsa site ayakta kalır, sebep PHP hata günlüğüne yazılır.

Ziyaretçi her sayfada kontrol ekranı görüyor, neden?

Çerez geri gelmiyor demektir. Sunucu saatini, Set-Cookie başlığını kesen bir önbellek/CDN olup olmadığını ve pass_hours değerinin sıfırdan büyük olduğunu kontrol edin. Tam sayfa önbelleği kullanıyorsanız ipdb_pass çerezi olmayan ziyaretçiler için önbelleği devre dışı bırakın.

WordPress kullanıyorsanız kapı yerine eklenti rehberi daha uygun; listeyi doğrudan güvenlik duvarına vermek isterseniz IP engelleme yazısına, kendi sunucunuzu sensöre çevirmek için honeypot rehberine bakın.

Paylaş

Yorumlar 0

Sorunu, deneyimini ya da düzeltmeni paylaş. Kayıtlı ya da anonim yorum yapabilirsin.

Henüz yorum yok. İlk yorumu sen yaz.

Düz metin; bağlantılar kabul edilmez. Yorumlar hemen yayınlanır ve denetlenebilir. Kayıtlı yorum için giriş yap