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.htmlvetheme/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.
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:
…ya da hiçbir koda dokunmadan, .htaccess üzerinden:
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:
| # | Durum | Sonuç |
|---|---|---|
| 1 | Sayfa değil (varlık, XHR, webhook, wp-cron) | Dokunulmaz |
| 2 | Kendi allow_ips listeniz | Geçer |
| 3 | Kendi deny_ips listeniz | Reddedilir |
| 4 | Tuzak yol (/.env, /.git/…) | Reddedilir, izin verdiyseniz raporlanır |
| 5 | Doğrulanmış arama motoru (ters DNS teyitli) | Geçer |
| 6 | Listede, ya da puan block_score üzerinde | Markalı 403 sayfası |
| 7 | Puan challenge_score üzerinde ya da istek seli | Basılı tut + iş kanıtı, istenirse captcha |
| 8 | Geri kalan herkes | Bir 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
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ı
feedmodunda ziyaretçi hakkında hiçbir şey sunucunuzdan çıkmaz.apivebothmodunda 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_proxiesiç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.phpvecache/dizinini HTTP üzerinden erişilemez tutun; kitcache/içine kendi reddet-hepsini.htaccessdosyası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-storegönderir ama bazı önbellekler bunu yok sayar;auto_prepend_fileile 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 —
--statushangisi 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.
Yorumlar 0
Sorunu, deneyimini ya da düzeltmeni paylaş. Kayıtlı ya da anonim yorum yapabilirsin.
Henüz yorum yok. İlk yorumu sen yaz.