3 yöntemini biliyorum, ilk yöntem tüm sunucu için, diğer ikisi site bazında yasaklama yapmak için.
1. ip tables ile tüm sunucu için yasaklama
2.
GeoIP apache modülü, .htacess ile de çalışıyor
3.
GeoIP PECL kütüphanesi (php modülü, php içinden 3-5 satır ile engellenebiliyor)
GeoIP'nin ücretsiz sürümü ülke bazında yasaklama için yeterli. Denediğim ücretsiz sürümün yaklaşık 350 kb lık bir veritabanı dosyası var. Bunun script bazında ürünlerini de görmüştüm, ancak her gelen talep için 350kb lık dosyanın include edilmesi bana sağlıklı gelmedi, sunucu RAM'inde durması daha mantıklı olabilir.
GeoIP veritabanı temini:
http://www.maxmind.com/app/geolitecountry
http://www.maxmind.com/app/geolitecity
Testlerimde apache modülü sanki biraz yavaşlatmıştı. Özellikle GeoIP veritabanın RAM cache yapılması RAM kullanımı arttırabiliyor.
Örneğin, PECL ile kurduğum PHP modülüm şu an çalışır durumda
Demo:
http://test.canversoft.net/geoip/geoip_test.php
kaynak kodum:
PHP:
<?php
if (function_exists('geoip_db_avail') && geoip_db_avail(GEOIP_COUNTRY_EDITION))
{
echo geoip_database_info(GEOIP_COUNTRY_EDITION) . '<br />';
//echo geoip_db_filename(GEOIP_COUNTRY_EDITION) . '<br />';
echo $_SERVER['REMOTE_ADDR'] . '<br />';
echo geoip_country_code3_by_name($_SERVER['REMOTE_ADDR']) . '<br />';
echo geoip_country_code_by_name($_SERVER['REMOTE_ADDR']) . '<br />';
echo geoip_country_name_by_name($_SERVER['REMOTE_ADDR']) . '<br />';
/*
$country = geoip_country_code_by_name($_SERVER["REMOTE_ADDR"]);
if (!(($country == "US") or ($country == "CA") or ($country == "GB") or ($country == "AU"))) { die("Service Unavailable!"); }
*/
}
?>