netscaler rate limit

14
RATE LIMIT Rate limit özeliği belirli bir zaman aralığında bir kaynağın kullanabileceği maksimum yükü belirterek ağ ve onun kaynaklarının bir saldırgan tarafından istilaya uğramasını önler. Örneğin ip temelli böcekler ve örümcekler (crawler/spider) t arafından ağ sunucularının aşırı yüklenmesinin önlenmesine yarımdımcı olur. Rate limit özelliği Citrix Netscaler üzerinde ki belirli bir network birimi veya virtual birim için maksimum yükü tanımlamamıza olanak sağlar. Bu özellik bize bu birim ile bağlantılı trafik oranını izlemek için Netscaler’i konfigüre etmemize ve trafik oranına göre gerçek zamanlı önleyici eylemler almamıza olanak sağlar. Bu özellik, Netscaler’a istekleri bir sel gibi gönderen bir saldırgan tarafından ağ saldırıya maruz kaldığında özellikle kullanışlıdır. Böylelikle istemciler için kaynak uygunluğunu etkileyen riskleri hafifletebilir ve Netscaler’ın yönettiği ağ kaynaklarını ve güvenirliğini iyileştirebilirsiniz. Virtual server, URL, domain ve domain ve URL kombinasyonlarını içeren kullanıcı tanımlı ve virtual birimlerle bağlantılı trafik oranlarını kontrol edebilir ve izleyebilirsiniz. Eğer trafik çok yüksek ise trafik oranını kısabilir ve trafik oranını önceden belirlenen limitleri aştıysa trafiği belirli bir virtual server’a yönlendirebilirsiniz. HTTP,TCP ve DNS istekleri için oran temelli İzleme uygulanabilir. Belirli senaryolar da trafik oranını izemek için bir “rate limit identifier” oluşturulmalıdır. “Rate limit identifier” “Time Slice” olarak adlandırılan belirli bir zaman aralığında özel bir tipte ki bağlantıların ve isteklerin maksimum değerleri gibi sayısal eşik değerlerini tanımlar.

Upload: veli-anlama

Post on 14-Apr-2017

536 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Netscaler Rate limit

RATE LIMIT Rate limit özeliği belirli bir zaman aralığında bir kaynağın kullanabileceği maksimum yükü belirterek ağ ve onun kaynaklarının bir saldırgan tarafından istilaya uğramasını önler. Örneğin ip temelli böcekler ve örümcekler (crawler/spider) tarafından ağ sunucularının aşırı yüklenmesinin önlenmesine yarımdımcı olur. Rate limit özelliği Citrix Netscaler üzerinde ki belirli bir network birimi veya virtual birim için maksimum yükü tanımlamamıza olanak sağlar. Bu özellik bize bu birim ile bağlantılı trafik oranını izlemek için Netscaler’i konfigüre etmemize ve trafik oranına göre gerçek zamanlı önleyici eylemler almamıza olanak sağlar. Bu özellik, Netscaler’a istekleri bir sel gibi gönderen bir saldırgan tarafından ağ saldırıya maruz kaldığında özellikle kullanışlıdır. Böylelikle istemciler için kaynak uygunluğunu etkileyen riskleri hafifletebilir ve Netscaler’ın yönettiği ağ kaynaklarını ve güvenirliğini iyileştirebilirsiniz. Virtual server, URL, domain ve domain ve URL kombinasyonlarını içeren kullanıcı tanımlı ve virtual birimlerle bağlantılı trafik oranlarını kontrol edebilir ve izleyebilirsiniz. Eğer trafik çok yüksek ise trafik oranını kısabilir ve trafik oranını önceden belirlenen limitleri aştıysa trafiği belirli bir virtual server’a yönlendirebilirsiniz. HTTP,TCP ve DNS istekleri için oran temelli İzleme uygulanabilir. Belirli senaryolar da trafik oranını izemek için bir “rate limit identifier” oluşturulmalıdır. “Rate limit identifier” “Time Slice” olarak adlandırılan belirli bir zaman aralığında özel bir tipte ki bağlantıların ve isteklerin maksimum değerleri gibi sayısal eşik değerlerini tanımlar.

Page 2: Netscaler Rate limit

İsteğe bağlı olarak “stream selector” olarak bilinen filitreler tanımlayabilir ve “rate limit identifier” ayarlandığı esnada “stream selector” ‘leri “rate limit identifier” ile ilişkilendirebilirsiniz. Isteğe bağlı “stream selector” leri oluşturup “limit identifier”’e bağladıktan sonra limit identifier’ı tanımladığınız bir policy içinden çağırmalısınız. Rate limit identifier’leri rewrite,responder, DNS ve integrated cache policy’lerinden çağırmanız bazı senaryolarda çok kullanışlı olacaktır. Rate limit kullanım senaryoları DNS rate limit Belirli bir DNS istemcisinin çok fazla DNS lookup isteği yapmasını önleyerek DNS base Dos saldırlar önlenebilir. Boot Limit Belirli bir kaynaktan elverişli olduğundan daha hızlı sunulan istekleri önlemeye yardımcı olur. Attack Prevention/Application Protection İşlemci yükünü arttıran CGI saldırılarını önler. Brute Force login girişimleri Tek bir kaynaktan bir login sayfasına erişimi sınırlar. Stream Selector Yapılandırma Trafik Stream Selector erişimi kısmak istenilen bir birimi belirtmek için tanımlanan isteğe bağlı bir filitredir. Selector isteğe ve yanıta uygulanır ve rate stream identifier tarafından analiz edilecek olan veri noktalarını seçer. Bu veri noktaları hemen hemen IP adresi, subnet, domain adı, TCP veya UDP identifier ve özel string veya URL’lerde ki uzantılar gibi karekteristik özellikleri temel alabilir. Bir stream selector birbirinden ayrı birleşik olmayan expression’lardan oluşur. Bir trafik stream selector maksimum beş adet expression içerebilir. Her bir expression birbirine AND ile bağlıdır. Örneğin aşağıda örneği incelersek top_client_url selector’ü birbirinden ayrı birleşik olmayan iki ayrı expression içermektedir. Bu selector özetle aynı istemci ip’sinden aynı url’e olan istekler için veri noktaları oluşturur. Örnek; HTTP.REQ.URL CLIENT.IP.SRC

HTTP.RE.URL

CLIENT.IP.SRC

Page 3: Netscaler Rate limit

Netscaler CLI’dan trafik stream selector yapılandırmak için;

add stream selector <name> <rule> ...

Örnek

Primary> add stream selector top_client_url HTTP.REQ.URL CLIENT.IP.SRC

Netscaler GUI’den trafik stream selector yapılandırmak için;

1. AppExpert > Rate Limiting > Selectors’den Add butonuna tıklayalım. HTTP.REQ.URL ve CLIENT.IP.SRC expression’larını Insert butonuna tıklayarak ekledikten sonra Ok butonuna tıklayalım.

Trafik Rate Limit Identifier Tanımlama Eğer stream selector ile ayarlanan trafik miktarı belirli bir zaman aralığında sayısal bir limiti aşıyorsa rate limit identifier maktıksal TRUE değerini döner. Netscaler CLI’dan traffic limit identifier tanımlama add ns limitIdentifier <limitIdentifier> -threshold <positive_integer> -timeSlice <positive_integer> -mode<mode> -limitType ( BURSTY | SMOOTH ) -selectorName <string> -maxBandwidth <positive_integer> -trapsInTimeSlice <positive_integer> SelectorName:Rate limit selector’ünün adıdır. Eğer bu alan NULL ise limit identifier’in virtual server’a veya global olarak bağlı olup olmamasına göre, rate limiting, virtual server veya Netscaler tarafından alınan bütün tafiğe herhangi bir filitre olmaksızın uygulanır. Limit Modes: Request Rate

Belirli bir zaman aralığında ki (time slice) istekleri izler.10 ms’nin katları olarak belirtilir.

-limit Type SMOOTH:

Page 4: Netscaler Rate limit

Bir Leaky Bucket yaklaşımıdır. Kullanıcın sabit oranda yeni bağlantı kurduğu trafik pattern’inde kullanışlıdır.Aralık boyunca eşit bir dağılım gösterir.(her on ms’de on istek gibi). Netscaler istekleri 10/ms’de bir izler. Örneğin 200 ms başına 4 istek belirtilmişseniz, Netscaler her 50 ms’de 1 istek oranını izler.

-limitType BURST: TimeSlice ile belirtilen zaman aralığında herhangi bir zaman istemcinin yaptığı istek sayısının istemciye tanımlanan kotayı doldurduğu Token Bucket yaklaşımıdır. Trafiğin çoğu belirli bir aralıkta tek bir noktaya gelir.(Örneğin bir saniyelik bir aralığın ilk 10 ms’si) .Kullanıcı eriştiğinde kısa ve şiddetli bir aktivite ve sonrasında kullanıcı sayfayı okurken aktivitenin olmadığı durum burst (patlamalı) uygulamaya güzel bir örnektir. Burda dikkat edilmesi gereken nokta TimeSlice olarak belirlediğimiz zaman aralığının herhanangi bir noktasında threshold değeri aşıldığında aşılan saniyeden TimeSlice süresinin sonuna kadar eğer responder action DROP seçilmişse drop’lanacaktır. Örneğin Aynı client ip’sinden aynı URL’e gelen istek oraını 10 dakikada 1000 istek olarak ayardıysak ve Beşinci dakikada bu şart sağlandıysa ve responder policy’de bu şart sağlandığında uygulanacak eylemi (action) bağlantıyı düşürmek (DROP) olarak ayarladıysak client beşinci dakikadan onuncu dakikaya kadar drop’lanacak ve onuncu dakikanın sonunda rate limit tekrar hesaplancaktır.

Limit Modes:Connection

İstemci için aktif işlem’leri (transaction) izler ve limiti belirler. Daima -limitType BURSTY için kullanılır.

Web böcekleri ve örümcekleri gibi pek çok eş zamanlı bağlantı açan web HTTP trafikleri için kullanışlıdır.

Limit Modes: -maxBandwitdh

İstemcinin başına bantgenişliği (kbits/sec) kullanımı

Threshold: İstekler (Eğer mode REQUEST_RATE seçili ise) her bir zaman aralığı için izlendiğinde belirlenen zaman aralığında izin verilen maksimum istek sayısıdır. Bağlantılar (mode CONNECTION seçildiyse) izlendiği zaman izin verilen toplam bağlantı sayısıdır. Time Slice:İsteklerin dip eşik değerini (threshold) aşıp aşmadığını kontrol etmek için izlendiği süre boyunca on milisaniyenin katları olarak milisaniye zaman aralığı. Maximum Bandwith:İzin verilen maksimum bantgenişliği (kbps) Traps:Konfigüre edilen zaman aralığında (timeslice) gönderilecek traps sayısını belirler. Eğer 0 ise trap disable edilir. Aşağıda rate limit’in oluşturduğu trap’lar görünmektedir.

Page 5: Netscaler Rate limit

Netscaler GUI’den 1. AppExpert > Rate Limiting > Limit Identifier’den Add butonuna tıklayalım. Selector

kutusundan daha önce oluşturduğumuz Top_Client_URL selector’ünü seçelim. Mode kutusundan REQUEST_RATE’i ve Limit Type olarak BURSTY seçelim. Time Slice kutucuğuna 60000 ms ve Threshold kutucuğuna 1000 yazarak bir dakikada aynı client’dan aynı URL’e yapılan istek eşik değerini 1000 olarak belirtmiş oluyoruz.

Page 6: Netscaler Rate limit

Limit Identifier Policy Uygun olan Netcaler özelliğinde (rewrite,responder, DNS ve integrated cache gibi) bu kuralın ayarlanmasıyla rate temelli uygulama davranışı yürürlüğe konulur. Trafik oranını analiz etmek için kural ifadesinde aşağıda ki ifade kulanılmalıdır. sys.check_limit(<limit_identifier>) limit identifier daha önce oluşturulan limit idenfier’ın adı olmalıdır.

Page 7: Netscaler Rate limit

Kural ifadesi en az iki komponent içeren birleşik bir ifade olmalıdır:

Kural’da ki İlk komponent rate limit identifier’ın uygulandığı trafiği belirtmek için kullanılan ifade olmaldır. Örneğin: http.req.url.contains("my_aspx.aspx")

Kuralda ki ikinci komponent rate limit identifier’i belirten ifade olmalıdır. Örneğin; sys.check_limit("Top_Client_Url_Limit_Identifier ") . Bu kural’daki son ifade olmalıdır.

Netscaler CLI ile rate-based policy konfigurasyonu add cache|dns|rewrite|responder policy <policy_name> -rule expression && sys.check_limit("<LimitIdentifierName>") [<feature-specific information>]

add responder policy rate_limit_responder_policy "HTTP.REQ.URL.CONTAINS(\"my_aspx.aspx\") && SYS.CHECK_LIMIT(\"Top_Client_Url_Limit_Identifier\")" NOOP -logAction rate_limit_msg_act

Netcaler GUI ile rate-based policy konfigurasyonu

1. Rate limit’i entegre etmek istediğiniz Netscaler özelliğini (Örneğin Integrated Caching,

Rewrite veya Responder) açalım ve Policies’e tıklayalım. 2. Deyay panosu’ndan Add butonuna tıklayalım. Name alanına tanımlayacağımız kural için

bir isim yazalım 3. Expression alanine poicy rule’unu yazalım ve sys.check_limit’i içerdiğinden emin olalım.

Action alanina rate limit identifier gerçekleştiğinde alınması gereken aksiyonu seçelim. Action kısmı DROP ve RESET olabileceği gibi herhang bir sayfaya yönlendirmede olabilir. Bizim örneğimizde NOOP seçerek herhangi bir aksiyon almasını istemediğimiz belirtiyoruz. Bu karşın Log Action alanında rate limit sağlandığında ns.log ve newnslog’a loglanmasını custom message action ile ayarlıyoruz. Özetle bu rate limit sağlandığında herhangi bir aksiyon almayacak ama Netscaler /var/log altında ki ns.log’a istemci ip ve istekte bulunduğu URL’ı yazacak. İlk aşamada action’ı DROP moda almamalı ve belirlenen bir süre (bir gün veya bir hafta gibi ) sadece log action’ın ns.log’a yazdığı custom message action çıktısı incelenerek en uygun threshold ve timeslice değerleri belirlenmelidir.

Page 8: Netscaler Rate limit

4. Hazırladığımız responder policy üzerine sağ tıklayıp Policy Manager’ı seçelim

5. Rate limit responder policy’sini atamak istediğimiz atama noktasını seçelim. Bu örnekte Load balancing virtual server’u seçiyoruz. Protokol olarak HTTP ve virtual server olarak load balancing virtual server’umuzu seçelim.

Page 9: Netscaler Rate limit

6. Bu kısımda hazırladığımız rate limit responder policy’i seçip Bind butonuna tıklamalıyız.

Page 10: Netscaler Rate limit
Page 11: Netscaler Rate limit

Netscaler CLI ile Auditing Message Action ayarlanması

add audit messageaction rate_limit_msg_act ALERT "\"Max request attempts detected from \" + CLIENT.IP.SRC + \" to \" + HTTP.REQ.URL + \" within a 60 sec period. Possible brute force attack

Netscaler GUI ile Auditing Message Action ayarlanması

1. Auditing>Message Action’a tıklayalım.Yeni bir message action eklemek için Add butonuna tıklayalım. Log level kutusundan log ALERT’i seçelim. Expression alanına rate limit sağlandığında ns.log’a yazılmasını istediğimiz mesaj’ı yazalım ve Create butonuna tıklayalım.

Trafik Oranını Görmek Eğer bir veya daha fazla virtual server üzerinden akan trafik rate-based policy’ye match ediyorsa bu trafik oranını görebiliriz. Rate istatistik bilgileri rate-based policy içinde kullandığımız limit identifier içinde bulunmaktadır. Netscaler CLI ile trafik oranını görüntülemek

show ns limitSessions <limitIdentifier>

Primary> sh ns limitsessions Top_Client_Url_Limit_Identifier

1) Time Remaining: 109 secs Hits: 2 Action Taken: 0

Total Hash: 23768 Hash String: /common.js

IPs gathered:

Page 12: Netscaler Rate limit

1) 192.168.3.251

Active Transactions: 0

2) Time Remaining: 108 secs Hits: 2 Action Taken: 0

Total Hash: 656362 Hash String: /

IPs gathered:

1) 192.168.3.251

Active Transactions: 0

3) Time Remaining: 109 secs Hits: 2 Action Taken: 0

Total Hash: 664527 Hash String: /images/Green_citrixlogo.jpg

IPs gathered:

1) 192.168.3.251

Active Transactions: 0

Done Netscaler GUI ile trafik oranını görüntülemek 1. AppExpert > Rate Limiting > Limit Identifiers gidelim ve trafik oranını görüntülemek

istediğimiz limit identifier’ı seçip mouse ile üzerinde sağ tıkladığımızda çıkan menüden Show Sessions’ı seçelim.

Page 13: Netscaler Rate limit

Rate Limit’i Message Audit Action’dan görüntülemek, Rate limit’in tetiklenip tetiklenmediğini ns.log dosyasından custom message action oluşturuken kullandığımız "brute force attack" kelime dizisini grep’leyerek görebiliriz. Burda hangi client ip’den hangi URL’e limit identifier’de belirlediğimiz limiti aştığını görebiliriz. Dikkat edilmesi gereken önemli bir nokta ise şube bazlı çalışan müşteri ortamlarında NAT üzerinden çıkan istemcilerin oluşturulan rate limit’i tetikleyebileceğidir. Bu nedenle şubelerin internet çıkış ipleri ve merkez ofis internet çıkış ip’si özellikle false positive olduğu düşünülerek responder rate-based policy’de rate limit dışında bırakılmalıdır. root@ns# cd /var/log root@ns# cat ns.log | grep "brute force attack" Jan 5 22:50:50 <local0.alert> 127.0.0.2 01/05/2016:20:50:50 GMT 0-PPE-0 : default RESPONDER Message 1856947 0 : "Max request attempts detected from 192.168.3.251 to / within a 60 sec period. Possible brute force attack" Jan 5 22:50:50 <local0.alert> 127.0.0.2 01/05/2016:20:50:50 GMT 0-PPE-0 : default RESPONDER Message 1856950 0 : "Max request attempts detected from 192.168.3.251 to /css/defaultstyles.css within a 60 sec period. Possible brute force attack" Jan 5 22:50:50 <local0.alert> 127.0.0.2 01/05/2016:20:50:50 GMT 0-PPE-0 : default RESPONDER Message 1856952 0 : "Max request attempts detected from 192.168.3.251 to /common.js within a 60 sec period. Possible brute force attack" Jan 5 22:50:50 <local0.alert> 127.0.0.2 01/05/2016:20:50:50 GMT 0-PPE-0 : default RESPONDER Message 1856954 0 : "Max request attempts detected from 192.168.3.251 to /images/index.jpg within a 60 sec period. Possible brute force attack" Rate-Based Policy Örnekleri Bir URL’den saniye başına isteklerin sayısının sınırlanması add stream selector ipStreamSelector http.req.url "client.ip.src" add ns limitIdentifier ipLimitIdentifier -threshold 4 -timeSlice 1000 -mode request_rate -limitType smooth -selectorName ipStreamSelector add responder action myWebSiteRedirectAction redirect "\"http://www.mycompany.com/\"" add responder policy ipLimitResponderPolicy "http.req.url.contains(\"myasp.asp\") && sys.check_limit(\"ipLimitIdentifier\")" myWebSiteRedirectAction bind responder global ipLimitResponderPolicy 100 END -type default ----------------------------------------------------------------------------------------------------------------- Eğer istekte bulunan URL 20000 ms başına 5’i geçiyorsa response’un

cache’lenmesi add stream selector cacheStreamSelector http.req.url add ns limitidentifier cacheRateLimitIdentifier -threshold 5 -timeSlice 2000 -selectorName cacheStreamSelector

Page 14: Netscaler Rate limit

add cache policy cacheRateLimitPolicy -rule "http.req.method.eq(get) && sys.check_limit(\"cacheRateLimitIdentifier\")" -action cache bind cache global cacheRateLimitPolicy -priority 10 -------------------------------------------------------------------------------------------------------------------- Eğer istekler rate limiti aşıyorsa www.yourcompany.com ‘dan isteklerde alınan

cookie’yi baz alarak bağlantının DROP’lanması. add stream selector reqCookieStreamSelector "http.req.cookie .value(\"mycookie\")" "client.ip.src.subnet(24)" add ns limitIdentifier myLimitIdentifier -Threshold 2 -timeSlice 3000 -selectorName reqCookieStreamSelector add responder action sendRedirectUrl redirect '\"http://www.mycompany.com\" + http.req.url' -bypassSafetyCheck YES add responder policy rateLimitCookiePolicy "http.req.url.contains(\"www.yourcompany.com\") && sys.check_limit(\"myLimitIdentifier\")" sendRedirectUrl ---------------------------------------------------------------------------------------------------------------------- Belirli bir istemci ip’si ve DNS alanadından istekler rate limiti aşıyorsa bir DNS

paketinin DROP’lanması add stream selector dropDNSStreamSelector client.udp.dns.domain client.ip.src add ns limitIdentifier dropDNSRateIdentifier -timeslice 20000 -mode request_rate -selectorName dropDNSStreamSelector -maxBandwidth 1 -trapsintimeslice 20 add dns policy dnsDropOnClientRatePolicy "sys.check_limit (\"dropDNSRateIdentifier\")" -drop yes ------------------------------------------------------------------------------------------------------------------------ Aynı subnet’ten (32 subnet mask) aynı hedef IP adresine gelen HTTP istek

sayısının limitlenmesi. add stream selector ipv6_sel "CLIENT.IPv6.src.subnet(32)" CLIENT.IPv6.dst Q.URL add ns limitIdentifier ipv6_id -imeSlice 20000 -selectorName ipv6_sel add lb vserver ipv6_vip HTTP 3ffe::209 80 -persistenceType NONE -cltTimeout 180 add responder action redirect_page redirect "\"http://redirectpage.com/\"" add responder policy ipv6_resp_pol "SYS.CHECK_LIMIT(\"ipv6_id\")" redirect_page bind responder global ipv6_resp_pol 5 END -type DEFAULT