<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Irule &amp; LTM Policy &#8211; BNTPRO Bilgi ve İletişim Hizmetleri A.Ş</title>
	<atom:link href="https://www.bntpro.com/blog/f5/irule-ltm-policy/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bntpro.com</link>
	<description>.</description>
	<lastBuildDate>Tue, 27 Jan 2026 05:59:49 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Ya Cookie&#8217;nin içi Boşsa?</title>
		<link>https://www.bntpro.com/ya-cookienin-ici-bossa/</link>
		
		<dc:creator><![CDATA[Bntpro]]></dc:creator>
		<pubDate>Fri, 05 Nov 2021 13:00:55 +0000</pubDate>
				<category><![CDATA[Irule & LTM Policy]]></category>
		<category><![CDATA[F5 Networks]]></category>
		<guid isPermaLink="false">https://www.bntpro.com/?p=19775</guid>

					<description><![CDATA[Kullanıcılar birden çok BIG-IP F5 üzerinden geçerek bir sunucuya erişip hizmet alabiliyorlar. Çok karışık bir yapı olmasından dolayı standart “persistence metodları&#8221; ile servise gelen istekler düzgün şekilde dağıtılamıyor ve bu nedenle iRule ile sunucudan gelen “XSESSIONID” isimli bir cookie değerine göre F5&#8217;lerde persistence oluşturularak her durumda bir istemcinin hep aynı sunucuya gitmesi sağlanıyor. Ancak, son [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Kullanıcılar birden çok BIG-IP F5 üzerinden geçerek bir sunucuya erişip hizmet alabiliyorlar. Çok karışık bir yapı olmasından dolayı standart “persistence metodları&#8221; ile servise gelen istekler düzgün şekilde dağıtılamıyor ve bu nedenle iRule ile sunucudan gelen “XSESSIONID” isimli bir cookie değerine göre F5&#8217;lerde persistence oluşturularak her durumda bir istemcinin hep aynı sunucuya gitmesi sağlanıyor. Ancak, son yapılan güncellemeler ile sistemler yeni versiyona yükseltildikten sonra LTM log dosyalarında aşağıdaki gibi TCL Error hata mesajları görülmeye başlandı. Dahası servis sahipleri dağıtımın düzgün şekilde yapılamamasından dolayı, isteklerin olması gereken sunuculara gönderilmediğinden şikayet etmeye başladılar.</p>
<blockquote>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">01220001:3: TCL error: /Common/Xsession_mobilA &lt;HTTP_RESPONSE&gt; - Prerequisite operation not in progress (line 1) (line 1)     invoked from within "persist add uie [HTTP::cookie "XSESSIONID"]"</pre>
</blockquote>
<p>Ne var ki bu hata mesajı için bir düzenden bahsetmek pek mümkün değil. Tamamen rastgele zamanlarda ortaya çıkan &#8220;<strong>invoked from within</strong>&#8221; hatasını Google ile aratınca pek bir şey çıkmamasından dolayı, probleme daha yakından bakalım.</p>
<p>Daha önce programlama ile ilgilenenlerin tanıdığı bir durumdan bahsetmek gerekirse klavyeden bir değer girilmesini isteyen bir uygulama yazdığınızı düşünelim. Kullanıcılar genelde, herhangi bir tuş kombinasyonu ile anlamlı ya da anlamsız bir veri girip &#8220;ENTER&#8221; karakterine basarlar. Sistem, girilen değerin sonunda gönderilen &#8220;ENTER&#8221; karakterini aldığında, veriyi alır ve girişi okuma işlemini sonlandırır. Genelde bu bilgi bir değişken içinde saklanır ve uygulamayı geliştiren kişinin amacına göre işlenir. Sonrasında ne olduğu ile şu an ilgilenmiyoruz.</p>
<p>Buraya kadarki kısımda, ya kullanıcı klavyeden adını, soyadını, ya da istenen bilgiye karşılık gelen veriyi girmek yerine &#8220;CRTL + D&#8221; tuşlarına bassa ? Bu durum bir veri girişi yerine geçer ve sistem yine okuma işlemini tıpkı &#8220;ENTER&#8221; karakterine basmışsınız gibi sonlandırır. Ancak bu veri tampon bellekten okunmaya çalışıldığında &#8220;BOŞ&#8221; olarak adlandırılan bir değer döner. Bu durumda bir exception oluşur. Sonuç olarak bir değişkeniniz var fakat içi ‘<b>boş</b>’ ile doludur.</p>
<p>Burada verilen örnek ile yaşanılan sorun bire bir uyumlu ancak bu örnek bir web yazılımından ziyade daha alt seviyeli olan C ve C++ gibi dillerde görebileceğiniz bir durumdur. Örnek bir kod şöyle olabilir.</p>
<blockquote>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="droide">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
int main(int argc, char **argv){
char a[10] = "\0";
puts("Type any word : ");
fgets( a, 10, stdin);
puts(a);
return 0;
}</pre>
</blockquote>
<p>Yaşadığımız soruna geri dönersek, sorun sunucunun XSESSIONID isimli cookie’yi oluşturup içine herhangi bir veri yazmamasından dolayı oluşuyor. Örneği gerçek hayata uygulamak isterseniz, aşağıda php ile yazılmış basit bir web sayfası kodu var.</p>
<blockquote>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">&lt;?php
setcookie("XSESSIONID")
?&gt;</pre>
</blockquote>
<p>Temelde yaptığı şey sadece, istekte bulunan kişiye, ismi &#8220;XSESSIONID&#8221; olan içi boş bir cookie göndermek.</p>
<p>Bu kodu bu haliyle bir web sunucusuna aktarıp sayfayı curl ile çağıralım ve ne olduğunu görelim.</p>
<blockquote>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">[plymouth@red ~]$ curl -v "http://10.34.23.127/test1.php"
* About to connect() to 10.34.23.127 port 80 (#0)
*   Trying 10.34.23.127… connected
* Connected to 10.34.23.127 (10.34.23.127) port 80 (#0)
&gt; GET /test1.php HTTP/1.1
&gt; User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.18 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
&gt; Host: 10.34.23.127
&gt; Accept: */*
&gt;
&lt; HTTP/1.1 200 OK
&lt; Date: Mon, 16 Nov 2015 14:48:48 GMT
&lt; Server: Apache
&lt; X-Powered-By: PHP/5.3.3
&lt; Set-Cookie: XSESSIONID=
&lt; Content-Length: 0
&lt; Content-Type: text/html; charset=UTF-8
&lt;
* Connection #0 to host 10.34.23.127 left intact
* Closing connection #0</pre>
</blockquote>
<p>Dönen cevabın içindeki <i>XSESSIONID</i> cookie’sinin herhangi bir değer barındırmadığını &#8220;=&#8221; karakterinin sağ tarafının tamamen boş olmasından anlayabiliyoruz.</p>
<p>Şimdi F5 üzerinde basit bir virtual server oluşturup, pool’a kodumuzu çalıştırdığımız sunucuyu ekleyerek, testi aşağıdaki iRule ile tekrar edelim.</p>
<blockquote>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">when HTTP_RESPONSE {
if { [HTTP::cookie exists "XSESSIONID"] } {
   persist add uie [HTTP::cookie "XSESSIONID"]
   }
}
when HTTP_REQUEST {
HTTP::header insert "rlnclientipaddr" [IP::remote_addr] "CLIENTPORT" [TCP::remote_port] "Proxy-Client-IP" [IP::remote_addr]
   if { [HTTP::cookie exists "XSESSIONID"] } {
   persist uie [HTTP::cookie "XSESSIONID"]
  persist:[persist lookup uie [HTTP::cookie "XSESSIONID"]]"
   }
}</pre>
</blockquote>
<p>Eğer bu iRule’u oluşturduğunuz Virtual Server’a ekledikten sonra<b> /var/log/ltm</b> dosyasını<b> tail </b>ile açarsanız, her yeni istekle birlikte, içi boş olan <i>XSESSIONID</i> isimli cookilerin “TCL Error”  ile başlayan hata loglarının düşmesine neden olduğunu görmeniz mümkün.</p>
<p>Eğer PHP kodunu değiştirip aşağıdaki gibi düzenlerseniz, loglardaki hata mesajlarının artık gelmediğini görürsünüz.</p>
<blockquote>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">&lt;?php
setcookie("XSESSIONID", "TEST")
?&gt;</pre>
</blockquote>
<p>Bu kod ile XSESSIONID isimli cookie’ye TEST değerini atamış ve böylece F5 BIG-IP üzerinden geçecek bu tarz bir trafik için TCL Error hatası alınmadan oturumların başarılı bir şekilde kurulmasını sağlamış oluyoruz.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ltm Policy ve Irule ile http-https Redirect İşlemi</title>
		<link>https://www.bntpro.com/ltm-policy-ve-irule-ile-http-https-redirect-islemi/</link>
					<comments>https://www.bntpro.com/ltm-policy-ve-irule-ile-http-https-redirect-islemi/#respond</comments>
		
		<dc:creator><![CDATA[Bntpro]]></dc:creator>
		<pubDate>Wed, 05 May 2021 18:12:52 +0000</pubDate>
				<category><![CDATA[F5 Networks]]></category>
		<category><![CDATA[Irule & LTM Policy]]></category>
		<category><![CDATA[f5 http redirect]]></category>
		<category><![CDATA[htto to https redirect]]></category>
		<category><![CDATA[http den https e yönlendirme]]></category>
		<category><![CDATA[irule redirect]]></category>
		<category><![CDATA[uri redirect]]></category>
		<guid isPermaLink="false">https://www.bntpro.com/?p=13698</guid>

					<description><![CDATA[https://www.bntpro.com/deneme  şeklinde gelen istekleri https://www.bntpro.com/deneme adresine yönlendirmek için aşağıdaki policy kuralını kullanabilirsiniz. Policy ekran görüntüsünde yer alan tcl ile başlayan kısmında yazan kodu aşağıda bulabilirsiniz. tcl:https://[getfield [HTTP::host] : 1][HTTP::uri] Burada getfield ile host değerinin ilk kısmını alıyoruz. Yani host bilgisindeki olası port değerini almıyoruz . Bu konuyla ilgili daha detaylı bilgiye https://clouddocs.f5.com/api/irules/HTTP__host.html  linkinden ulaşabilirsiniz. Aynı [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>https://www.bntpro.com/deneme </strong> şeklinde gelen istekleri <strong>https://www.bntpro.com/deneme</strong> adresine yönlendirmek için aşağıdaki policy kuralını kullanabilirsiniz.</p>
<p><a href="https://www.bntpro.com/wp-content/uploads/2021/05/Bntpro-Ltm-Policy-ile-URI-Redirect-Islemi-1.png"><img fetchpriority="high" decoding="async" class="wp-image-13713 size-large aligncenter" src="https://www.bntpro.com/wp-content/uploads/2021/05/Bntpro-Ltm-Policy-ile-URI-Redirect-Islemi-1-1024x279.png" alt="Bntpro Ltm Policy ile URI Redirect Islemi 1" width="1024" height="279" srcset="https://www.bntpro.com/wp-content/uploads/2021/05/Bntpro-Ltm-Policy-ile-URI-Redirect-Islemi-1-1024x279.png 1024w, https://www.bntpro.com/wp-content/uploads/2021/05/Bntpro-Ltm-Policy-ile-URI-Redirect-Islemi-1-300x82.png 300w, https://www.bntpro.com/wp-content/uploads/2021/05/Bntpro-Ltm-Policy-ile-URI-Redirect-Islemi-1-768x209.png 768w, https://www.bntpro.com/wp-content/uploads/2021/05/Bntpro-Ltm-Policy-ile-URI-Redirect-Islemi-1-1536x418.png 1536w, https://www.bntpro.com/wp-content/uploads/2021/05/Bntpro-Ltm-Policy-ile-URI-Redirect-Islemi-1.png 1575w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></p>
<p>Policy ekran görüntüsünde yer alan tcl ile başlayan kısmında yazan kodu aşağıda bulabilirsiniz.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">tcl:https://[getfield [HTTP::host] : 1][HTTP::uri]</pre>
<p>Burada <strong>getfield</strong> ile host değerinin ilk kısmını alıyoruz. Yani host bilgisindeki olası port değerini almıyoruz . Bu konuyla ilgili daha detaylı bilgiye <a href="https://clouddocs.f5.com/api/irules/HTTP__host.html" rel="nofollow noopener" target="_blank">https://clouddocs.f5.com/api/irules/HTTP__host.html</a>  linkinden ulaşabilirsiniz.</p>
<p>Aynı işlemi irule ile aşağıdaki şekilde yapabiliriz.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">when HTTP_REQUEST { 
set hostname [string tolower [getfield [HTTP::host] ":" 1]]
if { ($hostname equals "bntpro.com") || ($hostname equals "www.bntpro.com") } { 
HTTP::redirect "https://$hostname[HTTP::uri]"
}
}</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bntpro.com/ltm-policy-ve-irule-ile-http-https-redirect-islemi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Source port bilgisi sunucuya nasıl iletilir?</title>
		<link>https://www.bntpro.com/source-port-bilgisi-sunucuya-nasil-iletilir/</link>
					<comments>https://www.bntpro.com/source-port-bilgisi-sunucuya-nasil-iletilir/#respond</comments>
		
		<dc:creator><![CDATA[Bntpro]]></dc:creator>
		<pubDate>Sat, 01 May 2021 19:17:23 +0000</pubDate>
				<category><![CDATA[F5 Networks]]></category>
		<category><![CDATA[Irule & LTM Policy]]></category>
		<category><![CDATA[client ip ve port bilgisi]]></category>
		<category><![CDATA[client source bilgisi iletmek]]></category>
		<category><![CDATA[ltm policy]]></category>
		<guid isPermaLink="false">https://www.bntpro.com/?p=13582</guid>

					<description><![CDATA[Aşağıdaki adımları uygulayarak, ltm policy ile Client IP adresini ve Source Port bilgisini HTTP Header bilgisi olarak sunucuya iletebilirsiniz. 1.Local Traffic Manager &#62; Policy &#62; Create yolunu izleyerek policy oluşturma sayfasından yeni bir policy oluşturun. Yaratma işlemini gerçekleştirdikten sonra yaratmış olduğunuz policy Draft Policies kısmında görünecek. İlgili policy&#8217;i tıklayarak Policy&#8217;nin özellikleri içinde Rules kısmından yeni [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Aşağıdaki adımları uygulayarak, ltm policy ile Client IP adresini ve Source Port bilgisini HTTP Header bilgisi olarak sunucuya iletebilirsiniz.</p>
<p><b>1.Local Traffic Manager &gt; Policy &gt; Create </b>yolunu izleyerek policy oluşturma sayfasından yeni bir policy oluşturun.</p>
<p>Yaratma işlemini gerçekleştirdikten sonra yaratmış olduğunuz policy <b>Draft Policies</b> kısmında görünecek. İlgili policy&#8217;i tıklayarak Policy&#8217;nin özellikleri içinde <b>Rules</b> kısmından yeni kural oluşturmak için <b>Create</b>&#8216;i tıklayıp yeni kural sayfasına açınız.</p>
<p><b>2.</b> Politika değişkenlerine ekte gönderdiğim aşağıdaki görüntüdeki gibi doldurunuz.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="generic">tcl:[IP::remote_addr]:[TCP::remote_port]</pre>
<p>Değişkenleri doldurduktan sonra <strong>Save</strong> butonuna tıklayınız.</p>
<p><a href="https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme.png"><img decoding="async" class="aligncenter wp-image-13585" src="https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme.png" alt="Pasted into Header icerisine source port bilgisini de ekleyerek sunucuya iletme" width="1011" height="242" srcset="https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme.png 1600w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-300x72.png 300w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1024x245.png 1024w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-768x184.png 768w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1536x368.png 1536w" sizes="(max-width: 1011px) 100vw, 1011px" /></a></p>
<p><b>3.</b> <b>Save</b> dedikten sonra Policy&#8217;nin <b>General Properties</b> kısmına geleceksiniz. General Properties alanın altında bulunan <b>Save Draft</b> butonunun yanında bulunan yön işaretini tıklayarak seçeneği genişletip <b>Save and Publish Policy</b>&#8216;i seçip, daha sonrasında ilgili virtual server üzerine atayabilirsiniz.</p>
<div></div>
<div><a href="https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1.png"><img decoding="async" class="wp-image-13586 aligncenter" src="https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1.png" alt="Pasted into Header icerisine source port bilgisini de ekleyerek sunucuya iletme 1" width="1032" height="247" srcset="https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1.png 1600w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1-300x72.png 300w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1-1024x245.png 1024w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1-768x184.png 768w, https://www.bntpro.com/wp-content/uploads/2021/05/Pasted-into-Header-icerisine-source-port-bilgisini-de-ekleyerek-sunucuya-iletme-1-1536x368.png 1536w" sizes="(max-width: 1032px) 100vw, 1032px" /></a></div>
<div>Yapılan bu ayarla client ip adresi ve source port bilgisini sunucu üzerinde görebilir ve gerekli loglama işlemini yapabilirsiniz.</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bntpro.com/source-port-bilgisi-sunucuya-nasil-iletilir/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
