F5 Belirli Node Hangi Pool’a üye Tesbiti

Pool altında node lar listeleniyor fakat büyük yapılarda her zaman hangi node hangi pool lara dahil buna da çok ihtiyaç duyulmakta. Kendi çalışmalarımdan biliyorum.
Tek tek tüm pool lara bakmak yerine ve gui de bir çözüm olmadığından dolayı 2 yöntem mevcut.

Bunlar ;

Yöntem – 1

#Full config Save eder.
tmsh save sys config file /tmp/1.txt
cat 1.txt|grep "ltm pool" -A10|grep ASLTEST01 -B10|grep "ltm pool"
 
#yada
 
cat 1.txt|grep "ltm pool" -A10|grep ASLTEST01 -B5|grep "ltm pool"

Gibi bakılabilir diye düşünüyorum. Parse edecek bir şey yazarak tespit edebilirsiniz bu yöntem grep After before fazla member ile bozulabilir. O yüzden parser yazmak daha mantıklı ben sadece örnek olarak bu şekilde bir yöntem ile bakılabildiğini göstermek istedim.

Yöntem – 2

2′nci yöntemimiz daha basit ve tek satır ile tespit fakat snmp aktif olması gerekiyor. F5-BIGIP-LOCAL-MIB mibi ile ltmpoolmemberpoolname ile hangi node hangi poola üye grep ile kesin görebiliyoruz.

#snmpwalk -v2c -c snmp_community lb_ip -m F5-BIGIP-LOCAL-MIB ltmPoolMemberPoolName|grep -i ASLTEST01
 
F5-BIGIP-LOCAL-MIB::ltmPoolMemberPoolName."/asltest/ap-test-ssl"."/asltest/ASLTEST01".8443 = STRING: /asltest/ap-test-ssl
F5-BIGIP-LOCAL-MIB::ltmPoolMemberPoolName."/asltest/ap-test-http"."/asltest/ASLTEST01".8080 = STRING: /asltest/ap-test-http
F5-BIGIP-LOCAL-MIB::ltmPoolMemberPoolName."/asltest/test_bandwith_vserver"."/asltest/ASLTEST01".8080 = STRING: /asltest/test_bandwith_vserver

F5 Irule Http url ve ip bazlı filtreleme

Http uri bazlı ip ye göre filtreleme kuralına bir örnek olarak ;

/ss uri si çağrıldığında eğer client ip adresi izinli_address listesinde yok ise (bu liste irule->data_group altında) reject ile atar eğer var ise izin verir ve arkadaki sunucuya istek ulaşır.

when HTTP_REQUEST {
   if { [HTTP::uri] starts_with "/ss" and ![class match [IP::client_addr] eq izinli_address] } {
reject
}
}

Kuralımızı test ettiğimizde ;

#Client ip Data group'a ekli değilken reject
 
#curl 10.35.97.102/ss
curl: (52) Empty reply from server
 
#Client ip Data group'a ekli iken geçerli response alıyoruz.
 
# curl 10.35.97.102/ss -I
HTTP/1.1 404 Not Found
Date: Sat, 23 Aug 2014 18:31:41 GMT
Server: Cherokee/1.2.101 (Debian GNU/Linux)
Content-Length: 345
Content-Type: text/html
Cache-Control: no-cache
Pragma: no-cache

F5 Irule Http Query filtreleme Örneği

Http Query string filtreleme örneklerinden bir tane örnek işliyoruz. Uyguladıklarımın bir benzerini paylaşmak istedim.

 
when HTTP_REQUEST {
 if {[string tolower [HTTP::query]] matches_regex {.*action:.*} | [string tolower [HTTP::query]] matches_regex {.*redirect:.*} | [string tolower [HTTP::query]] matches_regex {.*redirectaction:.*} } {
reject
}
}

Test ettiğimizde

# curl 10.35.97.102/ -I
HTTP/1.1 200 OK
Date: Sat, 23 Aug 2014 18:14:13 GMT
Server: Cherokee/1.2.101 (Debian GNU/Linux)
ETag: "51ecf5db=b1"
Last-Modified: Mon, 22 Jul 2013 09:05:31 GMT
Content-Type: text/html
Content-Length: 177
 
# curl 10.35.97.102/1?test -I
HTTP/1.1 404 Not Found
Date: Sat, 23 Aug 2014 18:14:19 GMT
Server: Cherokee/1.2.101 (Debian GNU/Linux)
Content-Length: 344
Content-Type: text/html
Cache-Control: no-cache
Pragma: no-cache
 
# curl 10.35.97.102/1?redirect: -I
curl: (52) Empty reply from server
 
# curl 10.35.97.102/1?redirectaction: -I
curl: (52) Empty reply from server
 
# curl 10.35.97.102/1?action: -I              
curl: (52) Empty reply from server

Örnekte görüldüğü gibi rule daki reject olan query string leri rejectleniyor. Farklı bir string query 404 alıyor olmadığından. Düz request te 200 alıyor. Yani test case başarılı şekilde çalışmaktadır.

F5 High Speed Logging Irule & Splunk Entegrasyonu

High speed logging özelliği F5 tarafından yüksek volume ve düşük yük için design edilmiştir. Açıkcası çokda başarılı olduğunu söylemeliyim.

https://devcentral.f5.com/wiki/irules.HSL.ashx

Ben F5 loglarını splunk tarafında topluyorum. Siz Splunk kullanmıyorsanız syslog-ng v.b. gibi bir çok seçenek kullanabilirsiniz. Ayrıca opensource log indexerlar olarak graylog, logstash2 de deneyebilirsiniz.

Splunk tarafı için hazırlıklarımız;

Settings -> Data -> Forwarding and receiving kısmına gidiyoruz.
Configure Receiving kısmında geçiyoruz. New seçerek yeni listener oluşturuyoruz.
Gerekli listen portunu yazıyoruz ve save diyoruz.

splunk1

Bizim örneğimizde bu port udp 515. Böylece F5 tarafından yollanan logları splunk listener olan 515 portuna gönderiyor olacağız.

splunk2Splunk tarafındaki ayarlamayı tamamladıktan sonra. Splunk indexer makinemizi F5 tarafına önce node olarak ekliyoruz.

f5_1

Ardından Bu node ile syslog poolumuzu oluşturuyoruz. Port 515 ile nodu poola ekliyoruz. Poolumuzun adı syslog

f5_2

En sonunda HSL Irule’u işleyelim.

Logu response ile yazıyoruz. Client accept ve http request tarafında değişkenleri set ediyoruz.

HSL::send $hsl "$clientip $host - \[$now\] \"$method $uri HTTP/[HTTP::version]\" [HTTP::status] $contentlength \"$referer\" \"$agent\"\n"

Bu HSL ile yer alan dizilim splunk access_combined log formatı ile birebir uyumlu olduğundan splunk indexer bunu access log olarak algılıyor ve ona göre indexliyor. Böylece useragent, uri, ident gibi tüm unsurları filtreleyerek arama konusunda hiç bir sorun yaşamıyoruz.

#HSL Loglama
when CLIENT_ACCEPTED {
   set hsl [HSL::open -proto UDP -pool syslog]
   set clientip [IP::remote_addr]
}
when HTTP_REQUEST {
   set method [HTTP::method]
   set uri [HTTP::uri]
   set host [HTTP::host]
   set referer [HTTP::header "Referer"]
   set agent  [HTTP::header "User-Agent"]
}
when HTTP_RESPONSE {
   set now [clock format [clock seconds] -format "%d/%b/%Y:%H:%M:%S %z"]
   set contentlength [HTTP::header "Content-Length"]
   HSL::send $hsl "$clientip $host - \[$now\] \"$method $uri HTTP/[HTTP::version]\" [HTTP::status] $contentlength \"$referer\" \"$agent\"\n"
}

Loglamak istediğiniz HTTP servis edilen vserver larınıza bind edebilirsiniz. Splunk bunları ident=http_host headerında yer alan domainlere göre size filtreleme imkanı veriyor.

Splunk örnek olarak bunu gösterebiliriz. 515 port udp ve access_combined olarak setli F5 tarafından HSL den gelen indexlenmiş bir satır log.

splunk3

Bir sonraki yazımızda HSL ile request ve response time larıda access log ile birlikte loglamayı sağlayan bir irule inceleyeceğiz. Böylece Farklı bir tool kullanmadan request/response time larınızı görebilir ve bunları grafiğe splunk tarafında dökebilirsiniz, en çok süren ve yavaş çalışan url yada iç servislerinizi görebilirsiniz.