Netscaler HTTP Callout ve PHP ile IP adresine göre coğrafik yönlendirme yapılması

NetScaler 9.0 versiyonu ile birlikte, gelen isteklerin NetScaler arkasındaki herhangi bir Virtual Server’a, back-end sunucuya veya 3. bir servise gönderilerek işlenmesi mümkün olabiliyor. Bu işleme “HTTP Callout” adı verilmiş. (Türkçe bu kadar kötü anlatılabilirdi.)

Bir HTTP callout işlemi aşağıdaki aşamalardan oluşuyor;

1. Kullanıcı isteği NetScaler tarafindan karşılanır.
2. Policy 3. parti servise önceden tanımlanmış bir HTTP (GET veya POST) isteği (HTTP CALLOUT) yapar.
3. Servisten dönen yanıta göre bir policy (responder, filter, rewrite) çalıştırılır.

Benim ihtiyacım ise, gelen isteklerin IP adresinden ülkelerini bulup kontrol etmek ve Türkiye dışındaki IP adreslerine girişi engellemek ve istekleri ülkelerine coğrafik olarak en yakın sisteme eriştirmekti. Biraz PHP bilgisi ve HTTP Callout ile bu oldukça basit bir çalışmayla mümkün.

Aşağıdaki örnekte Netscaler gurcanozturk.com adlı virtual servise gelen HTTP isteklerinin IP adresilerini 192.168.1.10 IP adresli HTTP sunucudaki geocheck.php scriptine göndermektedir. Callout sunucu isteği yapan IP adresinin hangi ülkeden geldiğini Maxmind GeoLite Country veritabanını kullanarak kontrol edip, istek Türkiye’den yapılmış ise isteği gurcanozturk.com.tr adresine yönlendirir, Türkiye dışından yapılmış ise kullanıcıyı gurcanozturk.com adresinde tutar.

add policy httpCallout redirect_callout
set policy httpCallout redirect_callout -IPAddress 192.168.1.10 -port 80 -returnType BOOL -hostExpr “”192.168.1.10″” -urlStemExpr “”/geocheck.php”” -headers Client_IP(CLIENT.IP.SRC) -parameters Client_IP(CLIENT.IP.SRC) -resultExpr “HTTP.RES.BODY(100).CONTAINS(“ULKE:TR”)”
add responder action callout_test_responder redirect “”http://www.gurcanozturk.com”” -bypassSafetyCheck YES
add responder policy callout_respond “SYS.HTTP_CALLOUT(redirect_callout)” callout_test_responder
bind lb vserver gurcanozturk.com.tr -policyName callout_respond -priority 100 -gotoPriorityExpression END

Bunun için öncelikle 192.168.1.10 IP adresli callout sunucuya Maxmind GeoLite Country veritabanı kurulmalı. Veritabanının binary halini http://www.maxmind.com/app/geolitecountry adresinden download edebilirsiniz. Ayrica bu veritabanını PHP ile kullanmak için http://geolite.maxmind.com/download/geoip/api/php/geoip.inc adresindeki GeoIP PHP API’ ye de ihtiyacınız var. Her iki dosyayı web sunucuda bir dizine koyduktan sonra aşağıdaki kodu geocheck.php olarak kullanabilirsiniz.

< ? include("geoip.inc"); $ip = $_GET["Client_IP"]; $handle = geoip_open("GeoIP.dat", GEOIP_LITE); $ulke = geoip_country_code_by_addr($handle, $ip); print "ULKE:$ulke"; geoip_close($handle); ?>

gurcan Written by:

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *