<?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>Tickhi.com &#187; Sunucu Güvenlik</title>
	<atom:link href="http://www.tickhi.com/category/sunucu-guvenlik/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tickhi.com</link>
	<description>Sinan Uzunoglu Kişisel Blog sayfası</description>
	<lastBuildDate>Sun, 05 Sep 2010 18:44:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Mysql Root Şifresini Resetlemek – Password Recovery</title>
		<link>http://www.tickhi.com/mysql-root-sifresini-resetlemek-%e2%80%93-password-recovery.html</link>
		<comments>http://www.tickhi.com/mysql-root-sifresini-resetlemek-%e2%80%93-password-recovery.html#comments</comments>
		<pubDate>Fri, 07 May 2010 22:17:41 +0000</pubDate>
		<dc:creator>Tickhi</dc:creator>
				<category><![CDATA[Sunucu Güvenlik]]></category>

		<guid isPermaLink="false">http://www.tickhi.com/?p=814</guid>
		<description><![CDATA[Şifrelerinizi herhangi bir mecrada (password managerler dahil) yazılı bir şekilde tutmamak güvenlik tedbirlerinin başında gelen bir konudur. Ancak uzun zamandır uğrayıp hatrını sormadığınız bir mysql sunucunuz olabilir ve hatta bu nedenle zamanında belirlediğiniz şifreyi de unutmuş olabilirsiniz. İşte bu gibi durumlarda yapılabilecek şeylerden biri şifreyi hatırlamak bir diğeri ise şifreyi resetlemektir. Neyseki mysql’in şifre resetleme [...]]]></description>
			<content:encoded><![CDATA[<p>Şifrelerinizi herhangi bir mecrada  (password managerler dahil) yazılı bir şekilde tutmamak güvenlik  tedbirlerinin başında gelen bir konudur.  Ancak uzun zamandır uğrayıp  hatrını sormadığınız bir mysql sunucunuz olabilir ve hatta bu nedenle  zamanında belirlediğiniz şifreyi de unutmuş olabilirsiniz.</p>
<p>İşte bu gibi durumlarda yapılabilecek şeylerden biri şifreyi  hatırlamak <img src='http://www.tickhi.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  bir diğeri ise şifreyi resetlemektir. Neyseki mysql’in  şifre resetleme prosedürü bir iki adımda halledilebilecek kadar basit  bir olay. İnternette konu ile ilgili bulabileceğiniz bir çok dökümanın  bir benzeri olan ve kendime not olması açısından yazdığım bu postta da,  mysql şifrelerinin kolayca nasıl resetlenebileceği anlatılmaktadır.</p>
<p>İzlenmesi gereken adımlar şöyle:</p>
<p>Mysql’i durdurun.</p>
<pre># /etc/init.d/mysqld stop

Stopping MySQL:            [  OK  ]</pre>
<p>Şimdi, skip-grant özelliği ile tekrar başlatın:</p>
<pre># mysqld_safe --skip-grant-tables &amp;

Starting mysqld daemon with databases from /var/lib/mysql</pre>
<p>Mysql’e passwordsüz bağlanın.</p>
<pre># mysql -u root

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.0.45 Source distribution

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql&gt;</pre>
<p>Aşağıdaki komutları sırası ile vererek yeni şifrenizi belirleyin.</p>
<pre>mysql&gt; use mysql;
mysql&gt; update user set password=PASSWORD("<strong>Yeni_Sifreniz</strong>") where User='root';
mysql&gt; flush privileges;
mysql&gt; quit;</pre>
<p>Mysql’i yeniden stop edin.</p>
<pre># /etc/init.d/mysqld stop

Stopping MySQL:      [  OK  ]
[1]+  Done mysqld_safe --skip-grant-tables</pre>
<p>Son olarak normal bir şekilde başlatın.</p>
<pre># /etc/init.d/mysqld start</pre>
<p>Hepsi bu.<br />
Artık yeni şifreniz ile login olabiliyor olmalısınız.</p>
<p>Bu işlem bir CentOS üzerinde yapıldı, kullanığınız dağıtıma göre init  scriptinin yeri değişebilir. Ayrıca, mesela FreeBSD kullanıyorsanız  start stop scripti bildiğiniz gibi /usr/local/etc/rc.d/mysql-server  şeklindedir. Bunun dışında kalan diğer her adım aynıdır.</p>
<p>Kaynak:</p>
<p><a href="http://www.cyberciti.biz/tips/recover-mysql-root-password.html" target="_blank">http://www.cyberciti.biz/tips/recover-mysql-root-password.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tickhi.com/mysql-root-sifresini-resetlemek-%e2%80%93-password-recovery.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GreenSQL DB Firewall ile Sql Injection Önlemi</title>
		<link>http://www.tickhi.com/greensql-db-firewall-ile-sql-injection-onlemi.html</link>
		<comments>http://www.tickhi.com/greensql-db-firewall-ile-sql-injection-onlemi.html#comments</comments>
		<pubDate>Fri, 07 May 2010 22:05:43 +0000</pubDate>
		<dc:creator>Tickhi</dc:creator>
				<category><![CDATA[Sunucu Güvenlik]]></category>

		<guid isPermaLink="false">http://www.tickhi.com/?p=810</guid>
		<description><![CDATA[GreenSQL, sql injection saldırıları için database’leri koruma altına almak üzere geliştirilmiş bir database firewall uygulamasıdır. MySQL ve PostgreSQL’ler için destek sunan GreenSQL temel olarak proxy olarak çalışarak gerçek database’in önünde durur ve web uygulamasından gelen sql bağlantı isteklerini karşılayarak SQL komutlarını inceler ve bir risk scoring matrix kullanarak ilgili sql cümlelerini analiz ederek aksiyon alır. [...]]]></description>
			<content:encoded><![CDATA[<p><object style="width: 71px; height: 70px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="71" height="70" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.syslogs.org/wp-content/uploads/2010/02/greensql-rhino.gif" /><embed style="width: 71px; height: 70px;" type="application/x-shockwave-flash" width="71" height="70" src="http://www.syslogs.org/wp-content/uploads/2010/02/greensql-rhino.gif"></embed></object></p>
<p>GreenSQL,  sql injection saldırıları için database’leri koruma altına almak üzere  geliştirilmiş bir database firewall uygulamasıdır. MySQL ve  PostgreSQL’ler için destek sunan GreenSQL temel olarak proxy olarak  çalışarak gerçek database’in önünde durur ve web uygulamasından gelen  sql bağlantı isteklerini karşılayarak SQL komutlarını inceler ve bir  risk scoring matrix kullanarak ilgili sql cümlelerini analiz ederek  aksiyon alır.</p>
<p>Bu şekilde, web uygulamanızda bir sql injection açığı bulunsa dahi  GreenSQL sayesinde açıktan etkilenmemeniz mümkün olabilir.  Detaylarına  yazının devamında değineceğim GreenSQL temel olarak, default 3305  portunu dinler ve gelen sql istekleri için risk analizi yapar;  güvenli  olmaları durumunda komutları arkadaki sql sunucusuna iletir, eğer sql  cümleleri güvenli değil ve daha önceden de Whitelist’e eklenmemişlerse  blocklar ve uygulamaya boş bir cevap döndürür. GreenSQL’in IPS, IDS,  Firewall ve Learning gibi modlarda çalıştırabilirsiniz. Özellikle  learning modu false positive durumların önüne geçmek için çok  kullanışlıdır. Ayrıca GreenSQL fiziksel olarak database sunucunuz ile  aynı makinada çalışabilir ya da ayrı bir makina üzerine  konumlandırabilirsiniz.</p>
<h2>GreenSQL Çalışma Mantığı</h2>
<p>Bu bölümde yukarıda kısaca değindiğim  konuların detaylarını aktaracağım sonraki bölümlerde de kurulum ve  yapılandırmaya değineceğim.</p>
<p>GreenSQL reverse proxy olarak uygulamanıza ait database’in önünde  çalışmaktadır. Bu şekilde uygulama üzerinden yapılan SQL işlemleri  gerçek database’de çalıştırılmaktansa GreenSQL’e gelir ve burada analiz  edilmesi sağlanır. Aşağıdaki şemada GreenSQL’in çalışma mantığı daha net  anlaşılmaktadır.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="173" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.greensql.net/files/images/greensql-architecture.preview.jpg" /><embed type="application/x-shockwave-flash" width="640" height="173" src="http://www.greensql.net/files/images/greensql-architecture.preview.jpg"></embed></object></p>
<p>Şemada da görüldüğü üzere web uygulaması  sql işlemlerini doğrudan GreenSQL’e göndermektedir; sql query’ler burada  analiz edildikten sonra arkadaki gerçek database’e iletilir.  GreenSQL’in güzel yanlarından birisi de gerçek database’in bulunduğu  fiziksel sunucuda kullanılabilmesidir. Default olarak 3305. portu  dinlediğinden dolayı Sql sunucusu ile aynı makina üzerinde çalışabilir,  böylece herhangi bir donanım yatırımına gerek kalmaz. Yapmanız gereken  tek şey web uygulamanızın sql connection ayarlarını GreenSQL’e  bağlanacak şekilde set etmektir. Örnek olarak web uygulamanız ile sql  sunucu aynı makinada çalışıyorsa, web uygulamasının sql connection  satırını 127.0.0.1:3306 yerine 127.0.0:3305 yapmaniz yeterli olacaktır.</p>
<p>Ayrıca, GreenSQL’i dedice bir sunucuya kurup birden fazla database  server için merkezi proxy olarak da kullanmanız mümkündür. Böylece web  uygulamalarınızın sql bağlantı ayarlarını GreenSQL’in ipsi ve 3305. port  olarak set etmeniz yeterli olacaktır.</p>
<h2>GreenSQL Çalışma Mod’ları</h2>
<p>GreenSQL’i bir kaç farklı modda  çalıştırabiliyorsunuz. Bu modlar ve açıklamaları şöyle:</p>
<ul>
<li><strong>Simulation Mode (database IDS) </strong><strong> </strong><strong> </strong>Bu modda, grensql herhangi bir blocklama işlemi yapmaz. Sadece  web uygulamasından gelen sql işlemlerini alır inceler ve sonucu loglar,  daha sonra da database’e iletir. Bu şekilde çalıştırılan şüpheli sql  cümlelerinden haberdar olursunuz.  Herhangi blocklama işlemi de  yapılmadığından false positive durumlarla karşılaşmazsınız.</li>
<li><strong>Blocking Suspicious Commands (database IPS) </strong><strong> </strong>Bu modda, illegal sql komutları blocklanmaktadır.  Sisteme  illegal bir query geldiği zaman öncelikli olarak Whitelist kontrolü  yapılır. Eğer ilgili query listede bulunamazsa, komut blocklanır ve web  uygulamasına boş bir cevap döndürülür. Bu modda false positive ya da  false negative durumlarla karşılaşılabilir.</li>
<li><strong>Learning Mode </strong><strong> </strong>Learning modu,  yukarıdaki iki moda nazaran en kullanışlı olanıdır. GreenSQL’i belirli  bir süre için learning moda aldığınız zaman gelen tüm sql komutları  whitelist’e alınır, learning periyodu bittiğinde ise <strong>Active  protection from unknown queries</strong> denilen moda geçer. Bu aşamada  white listte olmayan tüm queryler blocklanırlar.  Learning modu süresiz  olarak devreye alabilir sonra istediğiniz bir zamanda manuel olarak  Active Protection moduna sokabilirsiniz. Veya 3 ya da 7 günlük Learning  Mod seçenekleri bulunmaktadır. Bu durumda belirlenen süre sonunda  GreenSQL otomatik olarak ilgili db için Active Protection moduna  geçer.Learning modunu kullanarak, GreenSQL’in web uygulamanıza ait doğru  sql komutlarını öğrenmesini ve learning mode sonunda, öğrenilen  komutlar dışında kalan daha önce rastlanılmamış sql cümlelerini  blocklamasını sağlayabilir ve false positive durumları en aza  indirgeyebilirsiniz.</li>
</ul>
<p>Bu modların yanı sıra, GreenSQL CREATE, DROP vs. gibi bilinen  database yönetim komutlarını da tamamen blocklayabilmektedir.  İhtiyacınıza göre bu özellikten de faydalanabilirsiniz.</p>
<h2>Illegal Querylerin Tespiti</h2>
<p>GreenSQL bir query’nin illegal olup  olmadığınu tespit etmek için aşağıdaki metodları kullanır.</p>
<ul>
<li><strong>Yönetimsel ve Sensitive Query’lerin saptanması</strong>GreenSQL  imza tabanlı bir sistem kullanır ve querylerin, database yapısını  değiştirmek, sistem dosyalarına erişmek vs. gibi yönetimsel ve hassas  işlev içerip içermediğin tespit eder ve bu tip query’leri illegal olarak  değerlendirir. Eğer web uygulamanız böyle query’ler çalıştırıyorsa,  bunları spesifik olarak whiteliste’e ekleyerek false positive durumların  önüne geçebilirsiniz.</li>
<li><strong>Query Risk Hesaplaması<br />
</strong><strong><br />
</strong>GreenSQL, bir query’inin risk derecesini hesaplamak için örnek  olarak aşağıdaki faktörleri göz önüne alır.</p>
<ol>
<li>Users, Accounts vs. gibi hassas tablolara erişim.</li>
<li>Sql komutlarının içinde yorum ifadeleri bulunması.</li>
<li>Boş password stringi.</li>
<li>Query içerisinde “or” token’i bulunması.</li>
<li>SQL tautology</li>
</ol>
</li>
</ul>
<p>GreenSQL ile ilgili teorik bilgiler hemen hemen bu kadar. Şimdi  kurulum ve yaplandırma işlemlerine geçelim.</p>
<h2>GreenSQL Kurulumu</h2>
<p>GreenSQL RedHat, CentOS, Fedora, SuSe,  Mandriva, Debian, Ubuntu gibi GNU/Linux dağıtımları ve FreeBSD sistemler  için pre-compiled paketi bulunuyor.  Böylece kurulumu, sisteminizin  paket yöneticisini kullanarak yapabiliyorsunuz. Ben burada Greensql’in  CentOS 5.2 üzerine kurulumundan bahsedeceğim ancak siz download  sayfasından kendi dağıtımınıza ait pre-compiled paketi  indirebilirsiniz.  Paketin yüklenmesi dışındaki tüm işlemler aynıdır.</p>
<p>Ayrıca, GreenSQL’in web tabanlı bir yönetim arayüzü bulunduğundan  dolayı, sunucunuzda apache, php ve mysql bileşenleri bulunmalıdır.  Dolayısı ile şimdi bahsedeceğim işlemlere başlamadan önce sunucunuzda bu  bileşenlerin bulunduğuna emin olun.</p>
<p><a name="download"></a><a name="toc-anchor-5237-5"></a></p>
<h3>Download</h3>
<p>Sisteminize uygun paketi, http://www.greensql.net/download adresinden  download edebilirsiniz. Ben CentOS 5.2 kullandığım için  greensql-fw-1.2.2-17.1.i386.rpm isimli rpm paketini indiriyorum.</p>
<p><a name="kurulum"></a><a name="toc-anchor-5237-6"></a></p>
<h3>Kurulum</h3>
<p>Kurulumu herzamanki rpm install yönetimi ile yapıyoruz.</p>
<div>Komut</div>
<pre># rpm -ihv greensql-fw-1.2.2-17.1.i386.rpm
</pre>
<p><a name="yapilandirma"></a><a name="toc-anchor-5237-7"></a></p>
<h3>Yapılandırma</h3>
<p>GreenSQL, yapılandırma ayarları ve alert loglarını bir database’de  (MySQL ya da PostgreSQL) tutuyor. Database ayarlamalarını ve temel  yapılandırma için /usr/sbin/greensql-config betiğini çalıştırmak yeterli  oluyor.</p>
<div>Komut</div>
<pre># /usr/sbin/greensql-config
</pre>
<p>Bu komutu çalıştırdığınız zaman yapılandırma ile ilgili bir iki soru  soruluyor. Üzerinde MySQL server çalışan bir makinadaki örnek bir ekran  çıkıtısı aşağıdaki gibidir.</p>
<div>Çıktı</div>
<pre>executing /usr/bin/greensql-create-db.sh
which: no psql in (/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

mysql binary file located: /usr/bin/mysql
mysqladmin binary file located: /usr/bin/mysqladmin

Database type (mysql or pgsql) [mysql]:
MySQL server address [127.0.0.1]:
MySQL port number [3306]:
MySQL admin user [root]:
MySQL admin password [<strong>root-sifreniz</strong>]:
GreenSQL config db name [greendb]:
GreenSQL DB user name [green]:
GreenSQL DB user password [pwd]:
Would you like to set up the database and tables automatically [Y/n]:

Creating MySQL database...
Adding MySQL user green...
Creating MySQL tables...
Modifing /etc/greensql/greensql.conf...
</pre>
<p>Görüldüğü gibi GreenSQL yapılandırma aracı sistemde PostgreSQL ve  MySQL kontrolü yapıyor ve bizim örneğimizde MySQL sunucusunu tespit  ederek sunucuya ait bilgileri girmenizi istiyor. Daha sonra da öntanımlı  greendb isimli bir database oluşturup, bir kullanıcı ve şifre atıyor.  (Default olarak user: green  pass: pwd) Daha sonra da greenSQL için  gerekli olan database’in otomatik olarak set edilmesini isteyip  istemediğimizi soruyor.</p>
<p>Son olarak da işlemleri gerçekleştirip yapılandırmayı  /etc/greensql/greensql.conf dosyasına yazıyor.</p>
<p><a name="greensql-servisinin-start-edilmesi"></a><a name="toc-anchor-5237-8"></a></p>
<h3>GreenSQL servisinin  start edilmesi</h3>
<p>Yapılandırma işlemlerinden sonra servisi başlatıyoruz.</p>
<div>Komut</div>
<pre># /etc/init.d/greensql-fw start
</pre>
<p>Servis sorunsuz başladıysa, şimdi web tabanlı yönetim konsolunu  devreye alabiliriz.</p>
<p><a name="greensql-management-console-yapilandirmasi"></a><a name="toc-anchor-5237-9"></a></p>
<h3>GreenSQL Management  Console Yapılandırması</h3>
<p>Bu web konsolu, GreenSQL firewall tanımlamalarının yapılması ve  hertürlü yönetim işleminin gerçekleştirilmesi için kullanılmaktadır.  Burada, back-end database’lerinizi tanımlayarak bu database’ler için  GreenSQL’in hangi modda çalışacağını ayrı ayrı belirleyebilirsiniz.</p>
<p>GreenSQL web interface’ine ait dosyalar öntanımlı olarak  /usr/share/greensql-fw/ dizininde bulunmaktadır. Bu dizini web  sunucunuzun document root’una taşıyarak ya da document root’tan orjinal  dizine link yaratarak kolayca devreye alabilirsiniz.<br />
Örnek olarak CentOS 5.2′de apache 2.2′nin default document root’u  /var/www/html’dir. Bu durumda linkleme işlemini şu şekilde yapabilirim:</p>
<div>Komut</div>
<pre># cd /var/www/html
# ln -s /usr/share/greensql-fw/ greensql
</pre>
<p>Son olarak da greensql dizini içinde bulunan templates_c dizinine  yazma izni vermek gerekiyor. Bu dizinde cachelenen sayfalar tutulacağı  için web suncusunun bu dizine yazabilmesi gerekir.</p>
<div>Komut</div>
<pre># cd /var/www/html/greensql
# chmod 0777 templates_c
</pre>
<p>Herşey yolunda gittiyse, web interface erişileiblir durumdadır.  Browser’ınıza http://sunucu-ip-adresi/greensql yazarak interface’e  erişebilirsiniz. Herhangi bir sorun varsa, greensql dizinindeki  config.php dosyasında mysql bağlantı bilgilerinizi kontrol  edebilirsiniz.</p>
<p>Login ekrani aşağıdaki gibidir ve default kullanıcı “<strong>admin</strong>”  şifre “<strong>pwd</strong>” dir.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100" height="100" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.greensql.net/files/screenshots/login.jpg" /><embed type="application/x-shockwave-flash" width="100" height="100" src="http://www.greensql.net/files/screenshots/login.jpg"></embed></object></p>
<p>Web interface’i ile ilgili apache  ayarlarınızı düzenleyebileceğiniz bir de  /etc/greensql/greensql-apache.conf isimli dosya bulunmaktadır. Buradan  ihtiyacınız olan düzenlemeleri yapabilirsiniz.</p>
<p>Bir testlik yoksa, GreenSQL şu an çalışmaktadır ve tcp 3305 portunu  dinlemektedir. Kontrol etmek için netstat komutundan  yararlanabilirsiniz.</p>
<div>Komut</div>
<pre># netstat -anp |grep 3305
tcp        0      0 127.0.0.1:3305              0.0.0.0:*                   LISTEN      8296/greensql-fw
</pre>
<p>Görüldüğü gibi GreenSQL 127.0.0.1′e bind edilmiş 3305′i dinlemekte.</p>
<p>Ayrıca, sql komut satırına da bağlanarak durumu check edebilirsiniz.</p>
<div>Komut</div>
<pre># nmysql -h 127.0.0.1 -P 3305 -u root -p
</pre>
<p><strong>Önemli Not</strong>: Mysql’e <strong>localhost </strong>şeklinde  değil de <strong>127.0.0.1</strong> olacak şekilde bağlantı kurmanız  gerekir. Zira eğer localhost derseniz bağlantı tcp stack yerine unix  domain socket kullanacaktır. Ancak GreenSQL şu an unix domain socket  desteklemiyor. Bu nedenle bağlantıyı tcp stack ile yapmak için -h  parametresi kullanarak 127.0.0.1 şeklinde yapmanız gerekir.</p>
<p>Çıktı şuna benzer olacaktır:</p>
<div>Çıktı</div>
<pre>Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 174
Server version: 5.0.77 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql&gt;
</pre>
<p>Normal mysql komut satırından farklı olmayan bu ekranda aslında  GreenSQL’in komut satırına bağlanmış bulunuyoruz. Burada örnek olarak  sunucu üzerindeki db’leri görüntülemek istersek aşağıdaki gibi boş sonuç  döndürülecektir.</p>
<div>Komut</div>
<pre>mysql&gt; show databases;
Query OK, 0 rows affected (0.00 sec)
</pre>
<p>Bunun nedeni, sensitive bilgilere erişmek istememiz nedeni ile  GreenSQL’in bu isteği (default olarak) blocklamış olmasıdır. Block  durumunu web interface’in Alerts kismindan gözlemleyebilirsiniz.</p>
<p>Temel yapılandırma işlemleri bu kadar. Bundan sonra web interface’i  kullanarak, proxy uygulaması yapılacak db’lerinizi GreenSQL’e tanımlamak  ve web uygulamanızın mysql connection ilgilerini 3305′e bağlanacak  şekilde değiştirmekten ibaret.</p>
<p>Örnek olarak web uygulamanızın sql connection satırı aşağıdaki  gibiyse:</p>
<div>Çıktı</div>
<pre>$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
</pre>
<p>şu şekilde bir değişiklik yapmanız yeterli olacaktır:</p>
<div>Çıktı</div>
<pre>$link = mysql_connect('127.0.0.1:3305', 'mysql_user', 'mysql_password');
</pre>
<p>Web interface’de düzenleme yapmadan önce GreenSQL’in demosuna  aşağıdaki adresten erişip, genel ayarlara göz atabilirsiniz.</p>
<p><a href="http://demo.greensql.net/login.php" target="_blank">http://demo.greensql.net/login.php</a></p>
<p><a name="performans"></a><a name="toc-anchor-5237-10"></a></p>
<h2>Performans</h2>
<hr />Son olarak, web uygulamanız ve database’inizin arasında  GreenSQL’i sokarak, bir katman daha eklediğiniz için performansla  ilgili kaygılarınız olabilir. Bu nedenle performans değerlendirmelerine  göz atmak isteyebilirsiniz:</p>
<p><a href="http://www.greensql.net/publications/greensql-performance-test" target="_blank">http://www.greensql.net/publications/greensql-performance-test</a></p>
<p>Daha fazla bilgi için bkz:<br />
<a href="http://www.greensql.net/" target="_blank"> http://www.greensql.net </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tickhi.com/greensql-db-firewall-ile-sql-injection-onlemi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IPFIREWALL ve Snort_Inline ile IPS &#8211; Part 1: IPFW Kurulumu</title>
		<link>http://www.tickhi.com/ipfirewall-ve-snort_inline-ile-ips-part-1-ipfw-kurulumu.html</link>
		<comments>http://www.tickhi.com/ipfirewall-ve-snort_inline-ile-ips-part-1-ipfw-kurulumu.html#comments</comments>
		<pubDate>Thu, 29 Jan 2009 12:58:15 +0000</pubDate>
		<dc:creator>Tickhi</dc:creator>
				<category><![CDATA[Sunucu Güvenlik]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[Freebsd]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[IPFIREWALL]]></category>
		<category><![CDATA[IPFW]]></category>
		<category><![CDATA[kurulum]]></category>
		<category><![CDATA[Packet Filter]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.tickhi.com/?p=104</guid>
		<description><![CDATA[Bir kaç gündür IPFW ve Snort_Inline ile oluşan open source bir IPS sistemini devreye almak için uğraşıyordum. Bu iki bölümlük yazıda kurulumun nasıl yapıldığı ve konfigurasyonlarla ilgili notları paylaşacağım. Siz de networkünüzde IPS olarak IPFW/Snort_Inline ikilisinden yararlanmak isterseniz belki bu döküman işinize yarayabilir.Zira binlerce dolar ödeyip karşılığında alacağınız bir hardware IPS yerine hiç bir ücret [...]]]></description>
			<content:encoded><![CDATA[<table border="0" cellspacing="0" cellpadding="0" width="0">
<tbody>
<tr>
<td></td>
<td></td>
<td style="text-align: justify;">Bir kaç gündür IPFW ve Snort_Inline ile oluşan open source bir IPS sistemini devreye almak için uğraşıyordum. Bu iki bölümlük yazıda kurulumun nasıl yapıldığı ve konfigurasyonlarla ilgili notları paylaşacağım. Siz de networkünüzde IPS olarak IPFW/Snort_Inline ikilisinden yararlanmak isterseniz belki bu döküman işinize yarayabilir.Zira binlerce dolar ödeyip karşılığında alacağınız bir hardware IPS yerine hiç bir ücret ödemeden bir IPS sistemine sahip olmak cazip bir seçenek olabilir.  Kaldıki Snort’un sektörde artık bir standart haline gelmiş olması kafanızdaki şüpheleri ortadan kaldırabilir</p>
<p>Önce IPFIREWALL.</td>
</tr>
</tbody>
</table>
<p><br class="spacer_" /></p>
<p><span style="font-weight: bold;">IPFIREWALL</span><strong> NEDİR ? </strong></p>
<p>Namı diğer IPFW, FreeBSD tarafından geliştirilen hem Stateless hem de Statefull firewall mimarisini üzerinde barındıran güzel bir ip tabanlı firewall yazılımıdır. Ayrıca,  traffic shaping, transparent forwarding ile NAT ve PATgibi özellikler sağlar. Bu özellikler ile ilgili detayli bilgiyi, dökümanın “ipfw komutları” bölümünde bulabilirsiniz. Öncelikle nasıl kurulduğuna değineceğim.</p>
<p><strong>NASIL KURULUR</strong> <strong>?</strong></p>
<p>Aslında IPFW, FreeBSD ile birlikte loadable module olarak geldiği için NAT uygulaması kullanmak istemeniz haricinde ekstradan herhangi bir kuruluma ihtiyaç duymazsınız. Açılışta firewall’un devreye girmesi için <strong>rc.conf </strong>dosyasına aşağıdaki satırı girmeniz yeterlidir.</p>
<table style="width: 242px; height: 19px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>firewall_enable="YES"</pre>
</td>
</tr>
</tbody>
</table>
<p>Ancak NAT kullanmak istemeniz durumunda (ki snort_inline için gerekmektedir.) kernelinize <strong>options</strong> <strong>IPDIVERT</strong> satırını eklemeniz ve yeniden derlemeniz gerekmektedir.  Kernelinizi yeniden nasıl derleyebileceğiniz ile ilgili bilgiye, daha önce yazmış olduğum <a href="http://blog.cagriersen.net/2007/12/freebsd-custom-kernel/">Custom Kernel</a> dökümanından ulaşabilirsiniz.</p>
<p>NAT dışında gerekli olmasa da bilgi olması açısından IPFW’nin kernel opsiyonları şu şekilde.</p>
<p><br class="spacer_" /></p>
<p><strong>KERNEL OPTIONS:</strong></p>
<p><span style="color: #993300;"><strong>options    IPFIREWALL</strong></span><span style="color: #993300;"><br />
</span>Firewall’un enable edilmesi için.</p>
<p><span style="color: #993300;"><strong>options    IPFIREWALL_VERBOSE</strong></span><br />
Firewall’un üzerinden geçen trafiği loglamak için kullanılır. Kurallarınızın nasıl işlediğini /var/log/security isimli log dosyasından takip edebilirsiniz.</p>
<p><span style="color: #993300;"><strong>options    IPFIREWALL_VERBOSE_LIMIT=200</strong></span><br />
Bir kurala ait işlemin kaç kez loglanacağını belirler. Bu örnekte 200 satır. Herhangi bir kuralla ilgili olarak loglanan bir işlem 200 kere tekrarlandığı zaman, loglama işlemi o kural için durdurulur. Loglama işlemine kısıtlama getirerek servera binen işlemci yükünü hafifletebilirsiniz. Ayrıca birinin firewall’unuza devamli paket göndermesi ve bunların hepsini loglamanız durumunda oluşacak syslog flooading (DoS) saldırısının da önüne geçmiş olabilirsiniz.</p>
<p><span style="color: #993300;"><strong>options    IPFIREWALL_DEFAULT_TO_ACCEPT</strong></span><br />
Bu opsiyon default olarak gelen ve giden herşeyin kabul edilmesini sağlar. Bu opsiyon aktifleştirilmezse firewall’unuz closed modda çalışacaktır. Yani herşey deny edilecektir. Bu durumda izin vermek istediğiniz bağlantılar için rulelar oluşturmanız gerekir.<br />
<strong>NOT:</strong> Eğer firewall ile ilgili işlemleri SSH bağlantısı ile uzaktan yapıyorsanız, bu seçeneği aktif etmemeniz ya da kendiniz için SSH bağlantısına izin veren bir rule tanımlamamanız durumunda bindiğiniz dalı kesmiş olursunuz. Bir console bağlantısına sahip olmanız yararınızadır  Ya da kerneli yeniden derlemeden önce rc.conf dosyanıza <strong>firewall_type=”open”</strong> satırını ekleyip gelen giden herşeye izin verebilirsiniz. Firewall_Type ile ilgili rc.conf seçeneklerini bir sonraki bölümde bulabilirsiniz. <strong> </strong></p>
<p><span style="color: #993300;"><strong>options    IPV6FIREWALL<br />
options    IPV6FIREWALL_VERBOSE<br />
options    IPV6FIREWALL_VERBOSE_LIMIT<br />
options    IPV6FIREWALL_DEFAULT_TO_ACCEPT</strong></span><br />
IP Version6 için gerekli opsiyonlar. Gördüğünüz gibi IPv4 opsiyonları ile aynı.</p>
<p><span style="color: #993300;"><strong>options    IPDIVERT</strong></span><br />
NAT (Network Address Translation) yapabilmek için gerekli opsiyon. Ayrıca, Snort_Inline gibi Divert soketinden paketleri alıp inceleyen yazılımlara yönlendirme yapmak için de gerekiyor. Bu özellik default olarak gelmemekte, devreye almak için bu kernel parametresini girip kerneli yeniden derlemeniz gerekmektedir.</p>
<p><strong><span style="color: #993300;">options    DUMMYNET</span></strong><span style="color: #993300;"><br />
<span style="color: #000000;">Trafik shaping yapmak için. Banwith limitlemesi ya da queue düzenlemesine olanak sağlar. </span><br />
</span></p>
<p><strong>RC.CONF SEÇENEKLERİ</strong><strong>:</strong></p>
<p><span style="color: #993300;"><strong>firewall_enable=”YES”</strong></span><br />
Açılışta firewall’u devreye alır.</p>
<p><span style="color: #993300;"><strong>firewall_type=”open”</strong></span><br />
Firewall’un hangi tipte çalışacağını belirler.<strong> </strong>Seçenekler ve ne iş yaptılkları şöyle:</p>
<p><strong>open </strong>: Gelen giden herşeye izin ver.<br />
<strong>client</strong> : Sadece bu makineyi koru.<br />
<strong>simple</strong> : T0üm ip networkünü koru.<br />
<strong>closed</strong> : Loopback interfacei hariç gelen giden herşeyi yasakla.<br />
<strong>filename</strong> : firewall rulelarini içeren dosya.</p>
<p>Kurallarınızı firewall’a uygulamanız için iki yol bulunmaktadır. Birincisi rc.conf dosyasında</p>
<pre>firewall_type="filename"</pre>
<p>parametresi ile belirttiğimiz rule dosyamıza yazacağımız rulların açılışta devreye alınmasını sağlamak.</p>
<p>Mesela, <strong>/etc </strong>dizini altında ipfw.rules isimli bir dosya oluşturalım ve içerisine aşağıdaki “gelen giden herşeye izin ver” anlamındaki firewall rulelarını yazalım.</p>
<table style="width: 242px; height: 19px;" border="0" cellspacing="0" cellpadding="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>add any in  all
add any out all</pre>
</td>
</tr>
</tbody>
</table>
<p>Sonra /etc/rc.conf dosyamıza  <strong>firewall_type=”/etc/ipfw.rules”</strong> satırını ekleyip kaydedelim. Bu durumda serverı restart ettiğiniz zaman açılışta firewall devreye alınacak  ve type satırında yazan pathteki dosyada bulunan rulelar sisteme eklenecektir.  Bu şekilde herhangi bir command-line komutu kullanmadan rulelarınızı devreye alabilirsiniz.</p>
<p>Bir diğer yöntem ise bir shell script oluşturup ruleları sisteme eklemektir:<br />
Gene <strong>/etc</strong> altında ipfw.rules isimli bir dosya oluşturup içerisine aşağıdaki satırları girelim.</p>
<table style="width: 242px; height: 19px;" border="0" cellspacing="0" cellpadding="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>#!/bin/sh
ipfw -q flush
ipfw add block in  all
ipfw add block out all</pre>
</td>
</tr>
</tbody>
</table>
<p>Daha sonra<strong> /etc/rc.conf </strong>dosyasına <strong>firewall_script=”/etc/ipfw.rules” </strong>yazalım.</p>
<p>Şimdiki yöntemde rc.conf dosyasında firewall’a ruleları içeren script dosyasının yerini söyleyip restart ettiğiniz zaman, açılışta firewall devreye alındıktan sonra bu script dosyası çalıştırılacak ve rulelar sisteme eklenecektir. Bu yöntemin güzel bir özelliği rule scriptinde herhangi bir değişiklik yaptıktan sonra sistemi restart etmenize gerek kalmaksızın script dosyasını çalıştırmak suretiyle değişiklikleri devreye almanıza izin vermesidir. Rule Script’ konusunda detaya “Ipfw komutları” bölümünde yer vereceğim.</p>
<p><span style="color: #993300;"><strong>firewall_logging=”YES”</strong></span><br />
Firewall üzerinden geçen trafiği loglamak için. Bu noktada dikkat etmek gereken bir şey var. Normalde bu satırı eklediğiniz zaman <strong>net.inet.ip.fw.verbose</strong> isimli sysctl variable’ı 1 olarak set ediliyor ve devreye alınıyor.Ancak log limiting için herhangi bir rc.conf ayarı yok. Eğer kernelinizi <strong>options IPFIREWALL_VERBOSE_LIMIT=200 </strong>satırı ile yeniden derlemediyseniz, bu ayarı <strong>/etc/sysctl.conf</strong> dosyanızda manuel olarak girmeniz gerekiyor.</p>
<table style="width: 242px; height: 19px;" border="0" cellspacing="0" cellpadding="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>net.inet.ip.fw.verbose_limit=5</pre>
</td>
</tr>
</tbody>
</table>
<p><strong>Not:</strong> Benim kurulumunda, kernel’i log limit seçeneği ile yeniden derlemiş olmama rağmen logginde sorun çıkmıştı. Bu nedenle sysctl.conf dosyasına <strong>net.inet.ip.fw.verbose=1</strong> satırını manuel olarak ekledim. Ayrıca limit işlemi için de script dosyası içerisinde “<strong>logamount</strong>” isimli ipfw komutunu kullanıyorum. Bu komutla ilgili bilgi “ipfw komutları” kısmında bulunuyor.</p>
<p><span style="color: #993300;"><strong>gateway_enable=”YES”</strong></span><br />
Bu parametre, FreeBSD’yi gateway olarak kullanmak ve ethernet kartları arasında geçiş sağlamak için gereklidir. Bir firewall kurduğumuza ve muhtemelen networkümüzün çıkış kapısı olarak kullanacağımıza göre bu FreeBSD’yi gateway olarak kullanmanız gerekecektir.</p>
<p><span style="color: #993300;"><strong>tcp_drop_synfin=”YES”</strong></span><br />
SYN+FIN içeren TCP paketlerini drop eder. Bu özelliğin nmap ile işletim sisteminizin algılanmaması gibi işlevleri vardır.</p>
<p><strong>ÇALIŞMA PRENSİBİ</strong></p>
<p>IPFW’yi devreye aldıktan sonra, sıra  networkümüze ve güvenlik politikamıza göre kurallar oluşturmaktan ibaret geliyor. Ancak önce ipfw’nin mantığından ve söz diziminden bahsedelim. Öncelikle yazının başında adı geçen statless ve stateful firewall kavramlarına değinmekte yarar var. Zira bu her iki firewall kavramını IPFW’de uygulamanız mümkün.</p>
<p><strong>Sateless Firewall:</strong></p>
<p>Stateles (durum kontrolsüz) firewall, kuralların statik olarak tanımlandığı temel paket filtreleme yöntemidir. Ancak eski ve çeşitli alanlar haricinde pek güven vermeyen bir yöntemdir. Zira ilk nesil paket filtreleme teknolojisi olan bu yöntem, IP ve transport layer’da çalışan ve gelen paketlerin sadece header bilgilerinden hareketle karar veren bir yapı olduğu için oldukça basit olarak çalışır. Data akışını kontrol etmeksizin gelen ya da giden paketlerin kaynak ipsini, ulaşmak istediği port ve protokolünü inceler.  Eğer üzerinde  bağlantı isteğine uyan bir  kural varsa , kuralın aksiyon bölümünden hareketle paketi geçirir ya da keser. Bağlantının akışını takip etmediğinden dolayı, firewall’dan daha önceden geçerek kurulmuş bir bağlantının abuse edilmesi suretiyle sisteme saldırıda bulunulmasının önüne geçemez.</p>
<p>Eski olmasına ve güven vermemesine rağmen çeşitli ortamlarda halen kullanmak mümkündür. Örneğin iki farklı lokasyonunuz olması durumunda lokasyonlar arası trafik için stateless kurallar kullanabilirsiniz. Zira kendi kendinize saldırmak gibi bir durum söz konusu olmaz heralde.</p>
<p><strong>Stateful Firewall:</strong></p>
<p>Stateful inspection (durum kontrolü) olarak da anılan Stateful (dinamik filtreleme) yapısı, stateless yapısından ayrı olarak bağlantı oturumlarını da gözeterek kuralları bu doğrultuda uygulayan bir yöntemdir ve dinamik kurallar oluşturarak işlem yapabilen mimarilerdir.  Bu yapıya ait örnekleri söz dizimi ve komutlar kısmında bulabilirsiniz.</p>
<p>Stateful ve Stateless kavramlarına kısaca değindikten sonra, firewall’un çalışma prensibine geçelim.</p>
<p>Her bir rule için bir kural numarasına ihtiyaç vardır ve ipfw 65535 adet kural tanımlamasına izin vermektedir. Firewall tipini closed olarak tanımladıysanız. 65535 nolu kural <strong>“deny ip from any to any</strong>“<strong> </strong>olacak ve gelen giden herşeyi yasaklayacaktır. Firewall mantığında gelen paketler kural numaralarına göre yukarıdan aşağıya doğru adım adım incelenir, paket birinci kural ile eşleşmiyorsa ikinci kurala ikinci ile eşleşmiyorsa üçüncü, dördüncü vs. şeklinde incelenir. Eğer hiçbir kural ile eşleşmeyen bir paket varsa o zaman 65535 no’lu kural devreye girer ve paket bu kurala göre muamele görür. Eğer kernelinizi <strong>IPFIREWALL_DEFAULT_TO_ACCEPT</strong> opsiyonu ile yeniden derlediyseniz 65535. kural herşeyi geçir manasına gelen <strong>“allow ip from any to any”</strong> olacaktır.</p>
<p>Bence bir firewall uygulamasında izlenmesi gereken yöntem. Firewall’u closed modda çalıştırmak ve daha sonrasında izin vermek istediğimiz bağlantı çeşitleri için kurallar oluşturmaktır. Ancak henuz bu konuda pek tecrübeli değilseniz başlangıç için firewall’unuzu open modda çalıştırmak ve yasaklamak istediğiniz bağlantılar için kurallar oluşturarak denemeler yapmak iyi bir fikirdir. Konuyu özümsedikten sonra firewall’unuzu closed moda alıp kurallarınızı yeniden oluşturabilirsiniz.</p>
<p><strong>SÖZ DİZİMİ VE KOMUTLAR</strong>:</p>
<p>Temel olarak ipfw söz dizimi şu şekildedir.</p>
<p><span style="font-weight: bold;">K</span><strong>omut Kural_Numarası Aksiyon Loglama</strong> <strong>Seçenek</strong></p>
<p>İşte bu söz dizimine uygun stateles bir ipfw kuralı.</p>
<table style="width: 312px; height: 25px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>#ipfw add 00010 allow log all from any to any</pre>
</td>
</tr>
</tbody>
</table>
<p>Bu komutu command-line’dan girdiğiniz zaman firewall’a  gelen ve giden tüm paketler için izin ver manasına gelen bir rule tanımlamış olursunuz.</p>
<p>Söz dizimine ait açıklamalar şöyle;</p>
<p><strong>Komut: </strong>Örnekte kural eklemek için ipfw add, silmek için ipfw delete.</p>
<p><strong>Kural_Numarası:</strong> Her bir kuralın bir numarası olması gerektiğini söylemiştik. 1 ile 65534 (65535 default kural için kullanılır) arasında olabilir. Eşleştirme işlemi kural numaralarına göre yukarıdan aşağıya doğru yapıldığından sıralamaya dikkat etmeniz gerekmektedir.</p>
<p><strong>Aksiyon:</strong></p>
<p>Bir çok aksiyon seçeneği bulunmaktadır.</p>
<p><span style="text-decoration: underline;">allow </span>: Paketin geçmesine izin verir. Allow yerine aynı anlama gelen “accept”, “pass” ya da “permit” kelimelerini de kullanabilirsiniz.<br />
<em><strong><br />
</strong></em><span style="text-decoration: underline;">deny</span> : Paketin geçnesine izin vermez. Ilgili paket silinir. deny yerine aynı anlama gelen “drop” kelimesini de kullanabilirsiniz.<br />
<strong><br />
</strong><span style="text-decoration: underline;">c<em>heck-state</em></span> :<strong> </strong>Stateful kurallar aracılığı ile oluşturulmuş dinamik rulların kontrol edilmesini sağlar. Paker dinamik kurallar ile eşleşmezse bir sonraki kuraldan arama devam eder.<em><strong></strong></em></p>
<p><em><strong></strong></em><span style="text-decoration: underline;"><em>count</em> </span>: Kuralla eşleşen paketleri saymak için kullanılır. Arama işlemi sonraki kuraldan devam eder.</p>
<p><span style="text-decoration: underline;">divert</span> (port):  Divert soketi kullanan herhangi bir yazılıma port yönlendirmesi yapmak için kullanılır. Eşleşen paketler kuralda belirtilen porta yönlendirilir. Bu özelliği snort_inline için kullanacağız. Yazının başında bahsettiğim gibi bu özellikten yararlanmak için kernelinize <strong>options IPDIVERT</strong> satırını ekleyip yeniden derlemeniz gerekmektedir.</p>
<p><span style="text-decoration: underline;">fwd</span> (ipaddr[port]): Paketi herhangi bir porta ya da ip adresine yönlendirir. Bu sayede belirlediğiniz tarzdaki bağlantılar için routing işlemi yapabilir birden çok gateway kullanabilirsiniz. Ayrıca mesela hedefi 80 olan istekleri port forwarding ile proxy serverınızın portuna yönlendirebilir ve transparent proxy uygulaması yapabilirsiniz.</p>
<p><span style="text-decoration: underline;">nat</span> (numara): Network address translation için kullanılır.</p>
<p><span style="text-decoration: underline;">pipe</span> (numara):<strong> </strong>Bantgenişliğini düzenlemek için kullanılır. Bu sayede limitleme işlemi yapabilirsiniz.</p>
<p><span style="text-decoration: underline;">queue</span> (numara):  Paket kuyruklarını düzenlemek için kullanılır.</p>
<p><span style="text-decoration: underline;">skipto</span> (numara): Paketin diğer kurallarla eşleştirilmeden verilen numaradan başlayarak incelenmesini sağlar.</p>
<p><span style="text-decoration: underline;">reset</span> : Eşleşen paketin reddedilmesini sağlar ve karşı tarafa TCP reset (RST) uyarısı gönderir.</p>
<p><span style="text-decoration: underline;">tee</span> (port): Eşleşen paketin bir kopyasını divert kullanan bir yazılıma ait porta gönderir. Arama bir sonraki kuraldan devam eder.</p>
<p><strong>Log</strong> : İlgili kurala ait işlemlerin loglanmasını sağlar. log logamount (numara) derseniz ilgilil kuralın kaç satır boyunca loglanacağını belirtmiş olursunuz.</p>
<p><strong>Seçenek</strong> : Bu kısımda protokol’ü, (tcp/udp/icmp), kaynağı, hedefi, port numarasını, geliş ya da gidişi, hangi interface üzerinden geçtiğini, TCP bağlantı requesti olması durumunda SYN flag ile başlaması gerektiğini ve ilgili kural için dinamik kural oluşturulup oluşturulmayacağını belirleyebilirsiniz.</p>
<p>Temel olarak söz dizimi ile ilgili bilgiler hemen hemen bu kadar. Daha fazlası için <a onclick="javascript:pageTracker._trackPageview('a/http://www.freebsd.org/cgi/man.cgi?query=ipfw&amp;sektion=8');" href="http://www.freebsd.org/cgi/man.cgi?query=ipfw&amp;sektion=8" target="_blank">ipfw(8)</a> man dosyasını okuyabilirsiniz.</p>
<p>IPFW’nin durumu ile ilgili bilgi almak için komutlar ise şu şekilde:</p>
<p><strong>ipfw list</strong> : Kuralları listeler.</p>
<p><strong>ipfw -d list</strong> : Dinamikler de birlikte olmak üzere tüm kuralları listeler.</p>
<p><strong>ipfw -d -e list</strong> : Expire olmuş dinamik kuralları listeler.</p>
<p><strong>ipfw show</strong> : Kuralları, sayaçlarla birlikte listeler.</p>
<p><strong>ipfw zero</strong> : Sayaçları resetler.</p>
<p><strong>ipfw resetlog</strong> : Log sayaçlarını resetler. (kernelinize, <span>options IPFIREWALL_VERBOSE_LIMIT=200 satırını eklediyseniz ya da logamount ile loglanacak kurallar için satır sınırlaması yaptığınız zaman bu komut oldukça işinize yarayacaktır.</span>)</p>
<p>Söz dizimi ve temel komutlar bu şekildeydi.</p>
<p>Şimdiki aşamada örnek olması açısından kendi kurduğum IPFW konfigurasyonu ve açıklamalarına değinmek istiyorum.</p>
<p>Öncelikle Firewall için kurduğum FreeBSD’nin kerneli’ni aşağıdaki parametrelerle yeniden derledim. Kernel derlemek adetimdir</p>
<table style="width: 399px; height: 110px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=200
options         IPFIREWALL_FORWARD
options         IPDIVERT
options         DUMMYNET
options         IPSTEALTH</pre>
</td>
</tr>
</tbody>
</table>
<p>Serverın gateway olarak kullanılması ve açılışta firewall’un devreye girerel kuralların sisteme tanımlanması için <strong>/etc/rc.conf </strong>dosyasına  aşağıdaki  satırları ekledim.</p>
<table style="width: 293px; height: 85px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>gateway_enable="YES"
firewall_enable="YES"
firewall_script="/etc/ipfw.rules"
firewall_logging="YES"
tcp_drop_synfin="YES"</pre>
</td>
</tr>
</tbody>
</table>
<p style="text-align: left;"><strong>/etc/ipfw.rules</strong> isimli bir script dosyası yaratarak içerisine kurallar ile ilgili tanımlamaları girdim.<br />
Script dosyasının örnek içeriği şu şekilde.</p>
<table style="width: 403px; height: 192px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre># FW Listesini sil..
ipfw -q -f flush

# Prefixler 

lanif="fxp0"
wanif="fxp1"
lan="192.168.0.0/24"
cmd="ipfw -q add"
log="log logamount 200"

#KURALLAR
$cmd 00010 allow all from any to any via lo0
$cmd 00020 allow all from $dmz to $lan
$cmd 00030 allow all from $lan to $dmz
$cmd 00040 check-state
$cmd 00050 allow tcp from 192.168.0.199 to me 22 setup keep-state</pre>
</td>
</tr>
</tbody>
</table>
<p>Şimdi açıklamalar.</p>
<p>Bu yapıda FreeBSD restart olduğu zaman rc.conf dosyasında belirtilmiş olan script dosyası çalıştırılıyor ve kural tanımlamaları otomatik olarak yapılıyor. Yazının başında kurallar için izlenebilecek iki yöntem olduğunu bahsetmiştim ve ikinci yöntem olan script ile kural tanımlamanın daha iyi bir yol olduğunu, çünkü kural tanımlamalarında yapılan değişikliklerden sonra sistemi reboot etmeye gerek kalmadığını söylemiştim.</p>
<p>Herhangi bir ayar değişikliği yapmanız durumunda, yeni ayarlar için script dosyasını çalıştırmanız yeterlidir.</p>
<table style="width: 242px; height: 19px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>sh /etc/ipfw.rules</pre>
</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki örnek script dosyasının içeriğine dair açıklamalar ise şöyle;</p>
<p><strong>ipfw -q -f flush</strong><br />
Daha önceden eklenmiş kuralları siler.</p>
<p><strong>Prefixler:</strong><br />
Script dosyasına bir kural eklerken işin tembelliğine kaçmak için güzel bir yol. Örnekte gördüğünüz gibi kendi network kartlarınızı ve ip networklerinizi prefix olarak ekleyebilirsiniz. Ayrıca ipfw -q add ve log logamount komutunu da ekleyip, kural tanımlamasında $lan vs. gibi bu prefixleri kullanabilirsiniz.</p>
<p><strong>$cmd 00010 allow all from any to any via lo0<br />
</strong>Bu kural ile Firewall’un loopback interfaceindeki işlemlerin hepsine izin vermiş oluyoruz.</p>
<p><strong>$cmd 00020 allow all from $dmz to $lan<br />
$cmd 00030 allow all from $lan to $dmz</strong><br />
DMZ’ten LAN’a, LAN’dan DMZ’te gidiş geliş full erişim sağlayan stateless kural.</p>
<p><strong>$cmd 00040 check-state</strong><br />
Daha önceden oluşturulmuş dinamik rulların kontrol edilmesini sağlayan tanımlama. (Stateful)</p>
<p><strong>$cmd 00050 allow tcp from $lan to me 22 setup keep-state</strong><br />
LAN’dan gelip Firewall’un 22.(SSH) portuna erişmek isteyen paketler için izin veren stateful kural.</p>
<p>Bu örnek script dosyası ile firewall’a SSH ve LAN DMZ arası trafik için izin verdik. Firewall closed olarak çalıştığı için geri kalan herşer yasaklı durumda. Gördüğünüz gibi yukarıdaki 00040 ve 00050 numaralı kurallar stateful. Bu kurallarda geçen stateful firewalling için kullanılan kelimelerin anlamlarına bakarak bu mimari konusunda daha iyi fikir sahibi olabiliriz.</p>
<p><span style="color: #993300;"><strong>keep-state</strong></span><strong> </strong>:<br />
0005o numaralı kuralda geçen <strong>keep-state</strong> ibaresi bu kural ile eşleşen paketler için birer dinamik kural oluşturulmasını söylüyorlar. Yani siz LAN’dan firewall’un 22. portuna doğru bir bağlantı açarsanız şu şekilde bir kural oluşturulur.</p>
<p><strong>00050    158    18403 (300s) STATE tcp 192.168.0.254 7313 &lt;-&gt; 192.168.0.1 22</strong></p>
<p>SSH bağlantısı kurdunuz ve dinamik rule oluşturuldu. Artık sizin ip’niz ve source portunuz ile serverin 22. portu arasında tcp trafiğine izin veren bir kural oluşmuş bulunuyor. Kuralın lifetime’ı süresince -ki birazdan lifetime konusunda değineceğim.- ilgili kural sistemde tanınımlı olarak bulunacaktır. 00040 numaralı kural, daha önceden oluşturulan dinamik kuralları check et manasına geldiği için bu tcp bağlantısında giden gelen paketler, dinamik kural ile eşleşecek ve izin verilecektir.</p>
<p>Oluşturulan her dinamik kuralın bir lifetime’ı bulunmaktadır ve süresi biten kurallar sistemden silinir. Lifetime’lar ise paket içeriklerine göre sysctl variable’larıyla belirlenir. Default olarak tanımlanmış bu variableları görmek için aşağıdaki komutu kullanabilirsiniz.</p>
<table style="width: 242px; height: 19px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre># sysctl -a | grep 'dyn.*lifetime'</pre>
</td>
</tr>
</tbody>
</table>
<p>Default değerler şöyledir.</p>
<table border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_ack_lifetime: 300</pre>
</td>
</tr>
</tbody>
</table>
<p>Yukarıdaki dinamik rule örneğinde<span style="font-weight: bold;"><strong> </strong></span>lifetime olarak belirlenen <span style="font-weight: bold;"><strong> </strong></span><strong>(300s)</strong>, açılan oturum için gerçekleştirilen three-way handshake işleminin son adımı olan, client tarafından servera gönderilen ACK paketinden kaynaklanmaktadır. Yani client olarak siz servera bir ACK paketi gönderdiniz ve oturumu açmış oldunuz. Bu durumda firewall sizin bağlantınız için ömrü 300 s olan bir dinamik rule oluşturdu. Söz konusu olan işlem SYN paketi içeren bir bağlantı isteğine ait olsaydı kuralın lifetime’ı 20 saniye olacaktı. Çıktıda gördüğünüz gibi UDP bağlantılar için 10 saniye süre belirlenmiş durumda. short_lifetime değeri ise ICMP paketleri için kullanılıyor.</p>
<p><span style="color: #993300;"><strong>setup</strong></span><strong> </strong>:<br />
Yukarıda, three-way handshake işleminden bahsettim, setup’in tam olarak ne işlevi olduğunu idrak etmek için bu handshake olayına da değinmek gerekiyor. Normalde bir yerden bir yere bir tcp bağlantısı kurmak istediğiniz zaman gerçekleşen adımlar şöyle:</p>
<p>1 &#8211; Client bligisayar, bağlantı kurma isteğini belirtmek için bir SYN (Synchronization) paketi gönderir.<br />
2 &#8211; Server SYN paketini aldığını belirtmek üzere cliente bir ACK (Acknowledge) paketi ve bir SYN paketi gönderir. (ACK+SYN)<br />
3 &#8211; Son adım olarak client, servera bir ACK paketi gönderir ve oturum başlatılmış olur.</p>
<p>Dolayısı ile bu three-way handshaking işlemi bir oturum açmak üzere izlenmesi gereken bir durumdur. Aksi data transferi için bir oturum açılamaz. İşte stateful bir mimari, yukarıda bu konu ile ilgili kısa bilgi verdiğim bölümde de söylediğim gibi bu oturum durumlarını inceleyerek usulsüz bir durum oluşması durumunda gelen paketi otomatik olarak engelleyebilir. Setup ibaresi bu durumu göz eder ve mesela eğer bir SYN/ACK paketi bir oturumun devamı olmaması durumunda engellenmesini sağlar. Ya da bağlantı isteğinin nereden başlatılması gerektiğini belirleyebilir ve aksi durumlarda engellenmesini sağlayabilir. Bu ifade TCP flaglarının kullanımından da anlaşıldığı üzere sadece tcp bağlantılar için oluşturulan kurallar da kullanılmaktadır.</p>
<p>check-state, keep-state ve setup ifadeleri kullanılarak oluşturulmuş güzel bir örnek var. Bu örnek üzerenden ifadelerin çalışma prensibini inceleyelim.</p>
<table style="width: 406px; height: 55px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>$cmd 01000 check-state
$cmd 02000 allow tcp from any to any 22 in setup keep-state</pre>
</td>
</tr>
</tbody>
</table>
<p>Firewall closed modda çalışıyor ve bu iki kural tanımlanmış durumda. Bu senaryoya göre, firewall’a hedef portu 22 olan bir paket ulaştığı zaman oluşacak işlem adımları şu şekilde.</p>
<p>1 &#8211; 172.16.0.1 ip adresli bir bilgisayarın 1234 numaralı portundan, firewall’un arkasında bulunan 192.168.0.1 ip’li bir serverın 22. portuna erişmek üzere legal bir bağlantı isteği (SYN) içeren bir paket geliyor.</p>
<p>2 &#8211; 01000 numaralı kural, dinamik ruleları check eden kural olduğundan dolayı kaynağı  172.16.0.1:1234 ve hedefi 192.168.0.1:22 olan hanhangi bir dinamik rule olup olmadığını kontrol ediyor ve daha önce böyle bir bağlantı kurulmamış olduğundan bulamıyor.</p>
<p>3 &#8211; Dinamik bir rule bulunamamasından dolayı arama işlemi 02000 numaralı kuraldan devam ediyor. Paket bu kuralda kontrol ediliyor ve eşleşme sağlanıyor. Ayrıca kuralın söz diziminde “keep-state” ifadesi kullanıldığı için bu bağlantı için 20 saniye lifetime’ı olan dinamik bir kural oluşturuluyor. (daha önce bahsettiğim gibi SYN paketleri için default sysclt variable’i 20 saniyedir.)</p>
<p>4 &#8211; Şimdiki aşamada, Server, cliente onay niteliğindeki bir ACK paketini gönderiyor.(Ayrıca bir de SYN paketi gönderiyor.)</p>
<p>5 -  Normal şartlarda client, serverdan gelen SYN paketini aldığını belirten bir ACK paketi gönderiyor. Bu paket firewall’a ulaştığı zaman tekrar arama işlemi yapılıyor 01000 numaralı kural dinamik ruleları check ediyor ve paket daha önce oluşturulan ve lifetime’ı bitmemiş dinamik rule ile eşleşiyor ve paket firewall üzerinden geçiriliyor. Bu durumda da oturum başlatılmış oluyor.</p>
<p>6 &#8211; Eğer 5. adımda client tarafından gönderilen ACK paketi spoof edilmiş olsaydı ve firewall stateless olarak çalışsaydı, spoof edilen paketin geçişine izin verilecekti.</p>
<p>7 &#8211; Ama 5. adımda gönderilen ACK paketi spoof edilerek gönderildi ve firewall stateful kurallarımız var. Bu durumda ilgili paket firewall’a geldiğinde 01000 numaralı kural, dinamik ruleları kontrol edecek, ancak herhangi eşleşen bir kayıt bulamayacak. Zira spoof edilmiş paketlerin hedef ip ve portu aynı olmasına rağmen kaynak ip ve portu atakta bulunan kişiler tarafından değiştirilir. Bu durumda 01000 ile eşleşmeyen paket için arama bir sonraki kuraldan devam edecektir.</p>
<p>8 &#8211; 02000 numaralı kurala gelen paket, içerisinde SYN flagi içermediğinden dolayı bu kural ile de eşleşmeyecektir. (Zira bu kuralda setup ifadesini kullandık ama bu paketin içeriğinde SYN değil ACK paketi var ve kaynak ip ve portu elimizdeki dinamik ruleda belirtilen kaynak ip ve port numarası ile uyuşmuyor.) Haliyle arama işlemi bir sonraki kuraldan devam edecek.</p>
<p>9 &#8211; Firewall closed olduğu ve 65535 numaralı son kuralımız herşeyi yasaklıyor olduğundan dolayı spoof edilen paket bu kurala takılacak ve sistemden geçirilmeyecektir.</p>
<p>Böylece, stateful mimari kullanan iki adet rule ile bir spoof atağı kesmiş olduk. Ancak elbette IPFW ile DoS atakları kesme konusunda belli bir oranda başarı sağlayabilrisiniz. Zira çok yüklü miktarda istek geldiği zaman başetmek de o oranda zorlaşacaktır ki DoS atakların temeli, çok hızlı ve fazla sayıda istekte bulunarak karşı tarafın kaynaklarını tüketmekten ibarettir. Ayrıca her türlü DoS atağı kesmek de pek mümkün değildir.</p>
<p><span style="color: #993300;"><strong>established</strong></span> :<br />
Son olarak, yukarıdaki örnekte geçmeyen ancak stateful mimarisinde kullanılan “<strong>established</strong>” ifadesine de değinmek istiyorum. Daha önceden kurulmuş olan bir oturuma ait paketlere default izin vermek için kullanılan established ifadesininin geçtiği kuralın söz dizimi şöyledir.</p>
<table style="width: 329px; height: 40px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>$cmd 00500 allow tcp from any to any established</pre>
</td>
</tr>
</tbody>
</table>
<p>Bu kural daha önceden kurulmuş bağlantılara ait paketlerin geçişine izin veren genel geçer bir durum olduğundan dolayı, hedef ve kaynak any olarak kullanılmaktadır. Ancak bir önceki spoof edilmiş paket ile ilgili anlatılan örnekte, eğer bu kuralı da kullanmış olsaydık, spoof edilmiş ilgili paket SYN içermemesine rağman, zaten kurulmuş bir bağlantıya ait olduğu gerekçesi ile 00500 tarafından sistemden geçirilecekti.</p>
<p>Stateful ve Stateles firewalling konusuna değindikten sonra, biraz da IPFW’nin trafik limitleme ve kullanım kolaylığı sağlayarak çok işe yarayan table kullanımıyla ilgili örneklere yer vermek istiyorum.</p>
<p><span style="font-weight: bold;">P</span><strong>ipe </strong>:</p>
<p>Mesela, kullanıcılarınızdan bazıları tüm interneti download etmek için yanıp tutuşuyor ve internete çıkmak için kullandığınız hatlarda hep bir satürasyon durumu yaşıyorsunuz. Bu durumda bazı kullanıcılar, servisler vs. için bandwidth limitleme ihtiyacı hissedebilirsiniz. Bu işlem için firewallunuza pipe ifadesi içeren rulelar girmeniz ve istediğiniz tipteki trafik için limitleme yapmanız gerekecektir. İşte bir torrent yazılımının kullandığı portlar için uygulanan bir limitleme işlemine ait kurallar.</p>
<table style="width: 316px; height: 70px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>
<pre>$cmd pipe 1 tcp from $lan to any 43871
$cmd pipe 2 udp from any to $lan 20228
ipfw pipe 1 config bw 1024Kbit/s
ipfw pipe 2 config bw 512Kbit/s</pre>
</td>
</tr>
</tbody>
</table>
<p>1. satır lokal networkten, bir torrent yazılımının download için kullandığı 43871 numaralı porta doğru olan tarfik için bir pipe tanımlamasından ibaret.</p>
<p>2. satır ise, aynı torrent yazılımının upload için default olarak kullandığı 20228 numaralı port için pipe işlemi.</p>
<p>3. satırda, torrent download için 1Mbit sınırlama getiriliyor.</p>
<p>4. satır ise torrent upload için 512Kbit sınırlama getiren tanımlama.</p>
<p><strong>Table :<br />
</strong></p>
<p>Kaynak adresi ya da hedef adresi birden cok ip’den olusan kurallar girmeye ihtiyacınız olabilir. Normalde bu işi subneting ile yapmak mümkün. Ama bir server farmınız olduğunu ve bu farmdaki serverların bazıları için uygulanacak ortak bir kural girmeniz gerektiğini ancak ilgili serverlara ait ip adreslerinin ardaşık ve subneting ile ifade edilemeyecek adresler olduğunu düşünelim. Bu durumda her bir server için bir kural tanımlamak mi gerekiyor ? IPFW’nin table özelliğini kullanırsanız hayır.<br />
Aynı şey birden çok ip networkü tanımlamak için de geçerlidir.</p>
<p>İşte şöyle.:</p>
<p><strong>ipfw table &lt;tablo_numarası&gt; add &lt;Ip adresi ya da (ip network/subnet)&gt;</strong></p>
<p>Eklemek istediğiniz ip adresi ya da networkleri bu komut ile bir tabloya atayabilirsiniz. Sonra ipfw’ye</p>
<p><strong>ipfw add 00500 allow all from “table(0)” to any keep-state</strong></p>
<p>gibi bir kural girip 0 numaralı tablo içerisinde bulunan tüm ipler için tek kural ile tanımlama yapabilirsiniz. Sisteme 0 ile 127 aralığında ancak 128 adet tablo ekleyebilirsiniz. Tablo kullanımı ile ilgili diğer temel kurallar ise şöyle;</p>
<p>Tablodaki kayıtları görmek için:<br />
<strong>ipfw table &lt;tablo_no&gt; list<br />
</strong></p>
<p>Tablodan bir kayıt silmek için:<strong><br />
ipfw table &lt;tablo_no&gt; delete &lt;ip adresi ya da (ip network/subnet)&gt;</strong></p>
<p>Herhangi bir tabloyu sıfırlamak.<br />
<strong>ipfw table &lt;tablo_no&gt; flush<br />
</strong></p>
<p>Tablo kullanımı ile ilgili dikkat edilmesi gereken bir şey var. Tablolarınızı ilgili komutları vererek oluşturup, table ifadesi içeren kurallarınızı yazdınız. Herşer serverı ilk reboot edişinize kadar güzel çalışacaktır. Ancak reboottan sonra tablo kayıtları uçacağı için yazdığınız kurallar bir şey ifade etmeyecektir.</p>
<p>Bu durumu aşmanın yolu ise, açılış sırasında (firewall kurallarının eklenmesi gibi) tabloların da sisteme eklenmesini sağlamaktır. Ben bu iş için gene bir script dosyası kullanıyorum.</p>
<p><strong>/etc/</strong> altında <strong>ipfw.tablolar </strong>isimli bir dosya açın ve tablo tanımlarınızı girin; mesela şöyle.</p>
<table style="width: 318px; height: 100px;" border="0" bgcolor="#ebebeb">
<tbody>
<tr>
<td>#Oncelikle tabloları sifirla.<br />
ipfw table 0 flush<br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p>#Heryere erisenler<br />
ipfw table 0 add 192.168.0.5<br />
ipfw table 0 add 192.168.0.199<br />
ipfw table 0 add 192.168.0.122<br />
ipfw table 0 add 192.168.0.150</td>
</tr>
</tbody>
</table>
<p>Bu dosya gördüğünüz gibi önce eski tabloların içeriğini siliyor; sonra ekleme işlemlerini yapıyor.</p>
<p>Daha sonra, sistem açılışında çalışığ, fw kurallarını otomatik olarak tanımlamak için <strong>rc.conf</strong> dosyana yazdığımız  <strong>ipfw.rules</strong> dosyasının içerisine (kural satırlarından önce)  <strong>/etc/ipfw.tablolar</strong> satırını girin. Bu şekilde, sistem açılırken ipfw.rules dosyası çalışacak ve ipfw.tablolar scriptini çalıştırarak tabloları oluşturacak ve kuralları devreye alacaktır.</p>
<p>Not: Eğer table kullanımında, ilk önce tabloları flush etmezseniz ya da daha script içerisinde ayni ifade iki kere geçerse, bu nedenle hata alır ve sorun yaşarsınız. bu konuya dikkat etmeniz iyi olur</p>
<p>IPFW ile ilgili kurulum notları, açıklamalar ve örnekler bu kadar. Bu yazının ikinci bölümünde IPFW kullanarak divert ile snort_inline kurulumu ve konfigurasyonuna ait notları paylaşacağım.</p>
<p>Bkz:  <a href="http://blog.cagriersen.net/2008/07/snort_inline-kurulumu/">http://blog.cagriersen.net/2008/07/snort_inline-kurulumu/</a></p>
<p>Kaynaklar:</p>
<p><a onclick="javascript:pageTracker._trackPageview('a/http://www.freebsd.org/doc/en/books/handbook/firewalls-ipfw.html');" href="http://www.freebsd.org/doc/en/books/handbook/firewalls-ipfw.html" target="_blank">http://www.freebsd.org/doc/en/books/handbook/firewalls-ipfw.html</a><br />
<a onclick="javascript:pageTracker._trackPageview('a/http://en.wikipedia.org/wiki/Ipfw');" href="http://en.wikipedia.org/wiki/Ipfw" target="_blank">http://en.wikipedia.org/wiki/Ipfw</a><br />
<a onclick="javascript:pageTracker._trackPageview('a/http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO');" href="http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO" target="_blank">http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO</a><br />
<a onclick="javascript:pageTracker._trackPageview('a/http://www.enderunix.org/docs/ipfwbook/');" href="http://www.enderunix.org/docs/ipfwbook/" target="_blank">http://www.enderunix.org/docs/ipfwbook/</a><br />
<a onclick="javascript:pageTracker._trackPageview('a/http://www.enderunix.org/docs/ipfw/');" href="http://www.enderunix.org/docs/ipfw/" target="_blank">http://www.enderunix.org/docs/ipfw/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tickhi.com/ipfirewall-ve-snort_inline-ile-ips-part-1-ipfw-kurulumu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux’larda SSH Key Saldırısı</title>
		<link>http://www.tickhi.com/linux%e2%80%99larda-ssh-key-saldirisi.html</link>
		<comments>http://www.tickhi.com/linux%e2%80%99larda-ssh-key-saldirisi.html#comments</comments>
		<pubDate>Thu, 29 Jan 2009 12:53:25 +0000</pubDate>
		<dc:creator>Tickhi</dc:creator>
				<category><![CDATA[Sunucu Güvenlik]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[secure shell]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[ssh client]]></category>

		<guid isPermaLink="false">http://www.tickhi.com/linux%e2%80%99larda-ssh-key-saldirisi.html</guid>
		<description><![CDATA[Bilindiği gibi, *nix tabanlı işletim sistemlerine güvenli bir şekilde uzaktan erişmek için kullanılan SSH (Secure Shell), telnet ve rlogin gibi alternatiflerin tersine, bağlantı sırasında her türlü veri trafiğini şifreleyerek güvenliği had safhaya çıkarıyor. Bu nedenle de hemen her sistem yöneticisi remote erişim için SSH’ı tercih ediyor. Bir SSH bağlantısını, bağlanılmak istenen sisteme direk olarak kullanıcı [...]]]></description>
			<content:encoded><![CDATA[<p>Bilindiği gibi, *nix tabanlı işletim sistemlerine güvenli bir şekilde uzaktan erişmek için kullanılan SSH (Secure Shell), telnet ve rlogin gibi alternatiflerin tersine, bağlantı sırasında her türlü veri trafiğini şifreleyerek güvenliği had safhaya çıkarıyor. Bu nedenle de hemen her sistem yöneticisi remote erişim için SSH’ı tercih ediyor.</p>
<p>Bir SSH bağlantısını, bağlanılmak istenen sisteme direk olarak kullanıcı adı ve şifre göndermek sureti ile gerçekleştirebildiğimiz gibi bağlantıyı SSH Key-Based Authentication isimli yöntemle kullanıcı adı ve şifreye gerek kalmaksızın sağlayabiliyoruz. Yönetiminden sorumlu olduğunuz birden çok *nix tabanlı serverınız olması durumunda Key-Based kimlik doğrulama yöntemi elbette işleri epey kolaylaştırıyor.</p>
<p>Bu yöntemde, uzaktaki sisteme bağlantıda bulunacağınız bilgisayarda public ve private key diye tabir edilen iki adet anahtar dosyası oluşturuyorsunuz, Public Key uzaktan erişim sağlanacak hedef bilgisayarda tutuluyor ve Private Key de, key’i oluşturduğunuz bilgisayarda kalıyor.  Kullanıcı private key’ini kullanarak bağlantı isteğinde bulunduğu zaman hedef bilgisayar gelen isteği elindeki public key ile karşılaştırıp doğruluyor bağlantıyı gerçekleştiriyor. Bağlantı sırasında bilmeniz gereken tek şey keyleri oluşturma sırasında belirlenen Passphrase denilen private key şifresi oluyor. Hatta isterseniz Passphrase dahi kullanmayabilirsiniz. Bu uygulamayı *nix tabanlı sistemlerinizde yaptığınız zaman uzaktan erişim işlemlerinde herserverin kullanıcı adı ve şifresini teker teker girmenize gerek kalmıyor.</p>
<p>Ancak, elbette bu uygulama tahmin edebileceğiniz gibi bazı güvenlik açıklarına neden olabiliyor; bu yazının ana konusu da aslında bu.</p>
<p>Key-Based Authentication kullanışlı olmasına rağmen aynı zamanda sistem güvenliğinizin yumuşak karnı da olabilecek bir potansiyele sahiptir. Zira client bilgisayarda bulunan bir private key başkalarının eline geçerse aynen sizin gibi o kişiler de sistemlerinize kullanıcı adı ve şifre olmaksızın bağlanabileceklerdir.</p>
<p>Bunun yanı sıra aslında bu bu yazıyı yazmamın ana nedeni yukarıdaki yumuşak karın mevzusundan çok, US-CERT tarafından 26 Ağustos’ta açıklanan, Linux Tabanlı işletim sistemleri için, key-based erişim uygulamasında keşfedilen bir saldırı yöntemi.</p>
<p><a onclick="javascript:pageTracker._trackPageview('a/http://www.us-cert.gov/current/index.html#ssh_key_based_attacks');" href="http://www.us-cert.gov/current/index.html#ssh_key_based_attacks" target="_blank">http://www.us-cert.gov/current/index.html#ssh_key_based_attacks</a> adresinde yayınlanan rapora göre, Linux tabanlı sistemlerde SSH Key-Based authentication kullanılması durumunda ortaya çıkabilecek yeni bir saldırı şekli tespit edilmiş. Buna göre saldırı şekli, ilk olarak SSH keyleri çalarak sisteme login olunup, sonrasında lokal kerneldeki zayıflıklardan yararlanılarak root erişiminin sağlanmasıymış. Root olarak sisteme erişildikten sonra ise sisteme “phalanx2″ isimli bir rootkit kurulduğu söyleniyor.</p>
<p>Raporda, Phalanx2′nin amacının sistematik olarak, -key-based auth. konfigurasyonları nedeni ile- güvenilir olarak algılanan diğer sistemlerin SSH keylerini çalmak ve atakta bulunan kişiye göndermekten ibaret olduğu açıklandı. Böylece attacker bu keylerle, ilgili tüm sistemlere erişimde bulunmayı deneyerek sonuca ulaşmaya çalışıyormuş.</p>
<p>Sisteminizde bu rootkitin yüklü olup olmadığını anlamak için aşağıdaki adımlar işinize yarayabilir.</p>
<ul>
<li><span style="font-family: Arial,Geneva,Helvetica;">rootkit /etc/khubd.p2/ dizininde bulunabiliyormuş. Ancak ls komutu ile bu dizini görmek mümkün değil; bu nedenle cd komutu ile dizinin içerisine girmek gerektiği söyleniyor. </span></li>
<li><span style="font-family: Arial,Geneva,Helvetica;">/dev/shm/ dizini altında atakla ilgili dosyaların bulunabileceği belirtiliyor. </span></li>
<li><span style="font-family: Arial,Geneva,Helvetica;">Ayrıca sistemde çalışan gizli bir proses olup olmadığının araştırılması,</span></li>
<li><span style="font-family: Arial,Geneva,Helvetica;"> /etc’nin alt dizinlerini count ederek adet bilgisini “ls /etc” çıktısında belirtilen rakamla tutup tutmadığının kontrol edilmesi öneriliyor.</span></li>
</ul>
<p>Hal böyle olunca bu ataktan etkilenmemek için, Key’lere muhakkak Passphrase tanımlamak, Tcp erişimlerini gözden geçirmek, sisem patchlerini düzenli geçmek gibi önlemler almak gerekiyor. Hatta belki de key-based authentication yöntemini rafa kaldırmak en iyisi gibi görünüyor.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tickhi.com/linux%e2%80%99larda-ssh-key-saldirisi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Sunucunuz için Antivirüs Programı BitDefender</title>
		<link>http://www.tickhi.com/linux-sunucunuz-icin-antivirus-programi-bitdefender.html</link>
		<comments>http://www.tickhi.com/linux-sunucunuz-icin-antivirus-programi-bitdefender.html#comments</comments>
		<pubDate>Sat, 13 Dec 2008 20:59:15 +0000</pubDate>
		<dc:creator>Tickhi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sunucu Güvenlik]]></category>
		<category><![CDATA[Linux Sunucunuz için Antivirüs Programı BitDefender]]></category>

		<guid isPermaLink="false">http://www.tickhi.com/?p=40</guid>
		<description><![CDATA[Öncelikle uygulamamızı SSH a bağlanıp download edelim.. wget http://www.ni.net.tr/dosya/Linux/Bit&#8230;cc29x.i586.rpm işlem bittikten hemen sonra rpm dosyamızı install edelim rpm -i BitDefender-Console-Antivirus-7.0.1-3.linux-gcc29x.i586.rpm Hata verirse herhangi bir paketin yüklü olmadığını söylerse yum -y ile hata veren paketi install yada upgrade edelim… Hatasız bir şekilde yüklendiyse nasıl kullanacağınızı biraz anlatayım bdc &#8211;update Yukarıda yer alan komut ile öncelikle virüs [...]]]></description>
			<content:encoded><![CDATA[<p>Öncelikle uygulamamızı SSH a bağlanıp download edelim..</p>
<p>wget <a rel="nofollow" href="http://www.ni.net.tr/dosya/Linux/BitDefender-Console-Antivirus-7.0.1-3.linux-gcc29x.i586.rpm" target="_blank">http://www.ni.net.tr/dosya/Linux/Bit&#8230;cc29x.i586.rpm</a></p>
<p>işlem bittikten hemen sonra rpm dosyamızı install edelim</p>
<p>rpm -i BitDefender-Console-Antivirus-7.0.1-3.linux-gcc29x.i586.rpm</p>
<p>Hata verirse herhangi bir paketin yüklü olmadığını söylerse yum -y ile hata veren paketi install yada upgrade edelim…</p>
<p>Hatasız bir şekilde yüklendiyse nasıl kullanacağınızı biraz anlatayım</p>
<p>bdc &#8211;update</p>
<p>Yukarıda yer alan komut ile öncelikle virüs veritabanını güncelliyoruz..</p>
<p>bdc &#8211;files /home</p>
<p>yukarıda yer alan ise &#8211;files sonrası yazılan dizinde tarama yapar bunu özelleştirebilirsiniz örneklersek /home/kullaniciadi/public_html gibi..</p>
<p>bdc &#8211;delete silincek dosya yolu</p>
<p>üst kısımda yer alan komut ilede listelenen virüslerin dizinlerini &#8211;delete den sonra yazarak silme işlemini yapabilirsiniz.</p>
<p>Yükleme Sırasında hata alırsanız sırasıyla şu komutları uygulayın ve yüklemeyi tekrar deneyin :</p>
<p>yum -y install libstdc++-libc6.2-2.so.3</p>
<p>rpm -i BitDefender-Console-Antivirus-7.0.1-3.linux-gcc29x.i586.rpm</p>
<p>rpm -Uvh BitDefender-Console-Antivirus-7.0.1-3.linux-gcc29x.i586.rpm</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tickhi.com/linux-sunucunuz-icin-antivirus-programi-bitdefender.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>r57 ve c99 Shell Engelleme</title>
		<link>http://www.tickhi.com/r57-ve-c99-shell-engelleme.html</link>
		<comments>http://www.tickhi.com/r57-ve-c99-shell-engelleme.html#comments</comments>
		<pubDate>Sat, 13 Dec 2008 20:52:42 +0000</pubDate>
		<dc:creator>Tickhi</dc:creator>
				<category><![CDATA[Sunucu Güvenlik]]></category>
		<category><![CDATA[r57 ve c99 Shell Engelleme]]></category>
		<category><![CDATA[shell bulma]]></category>
		<category><![CDATA[shell engelleme]]></category>
		<category><![CDATA[shell koruması]]></category>
		<category><![CDATA[shell silme]]></category>

		<guid isPermaLink="false">http://www.tickhi.com/?p=35</guid>
		<description><![CDATA[Öncelikle R57 için WHM Panelinizden &#8220;Security&#8221; başlığında yer alan &#8220;Security Center&#8221; bölümüne giriniz. Daha sonra burada &#8220;PHP open_basedir Tweak&#8221; bölümünde en başta yer alan Enable php open_basedir Protection. seçeneyini aktif yaparak Save butonuna basınız.. Daha sonra aynı bölümden (Security Center) &#8220;mod_userdir tweak&#8221; bölümüne geçiş yaparak Enable mod_userdir Protection. seçeneyini aktif yapıp Save butonuna basıyoruz. sunucumuzda [...]]]></description>
			<content:encoded><![CDATA[<p>Öncelikle R57 için WHM Panelinizden &#8220;Security&#8221; başlığında yer alan &#8220;Security Center&#8221; bölümüne giriniz.</p>
<p>Daha sonra burada &#8220;PHP open_basedir Tweak&#8221; bölümünde en başta yer alan Enable php open_basedir Protection. seçeneyini aktif yaparak Save butonuna basınız..</p>
<p>Daha sonra aynı bölümden (Security Center) &#8220;mod_userdir tweak&#8221; bölümüne geçiş yaparak Enable mod_userdir Protection. seçeneyini aktif yapıp Save butonuna basıyoruz.</p>
<p>sunucumuzda Zend kurulu ise</p>
<p>/usr/local/Zend/etc/php.ini</p>
<p>bölümünde bulunan php.ini dosyamızı açıyoruz (Zend dışında farklı bir modül kurulu ise veya hiçbir modül kurulu değil ise php.ini yolunu &#8221; &lt;?php phpinfo() ?&gt; &#8221; bu php kodu ile bulabilirsiniz)</p>
<p>nano /usr/local/Zend/etc/php.ini</p>
<p>php.ini dosyamızda yer alan safe_mode bölümünü On yapıyoruz.. ve sonra yine php.ini içinde yer alan disable_functions karşısına = işaretinden sonra bir alt satıra inmeksizin alt kısımda yer alan kodları yazıyoruz.</p>
<p><em>restore_ini,glob,hopenbasedir,f_open,system,dl,pas sthru,cat,exec,popen,proc_close,proc_get_status,pr oc_nice,proc_open,escapeshellcmd,escapeshellarg,sh ow_source,posix_mkfifo,mysql_list_dbs,get_current_ user,getmyuid,pconnect,link,symlink,pcntl_exec,ini _alter,parse_ini_file,leak,apache_child_terminate, posix_kill,posix_setpgid,posix_setsid,posix_setuid ,proc_terminate,syslog,fpassthru,stream_select,soc ket_select,socket_create,socket_create_listen,sock et_create_pair,socket_listen,socket_accept,socket_ bind,foreach,socket_strerror,pcntl_fork,pcntl_sign al,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited ,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig ,pcntl_wtermsig,openlog,apache_get_modules,apache_ get_version,apache_getenv,apache_note,apache_seten v,virtual</em></p>
<p>php.ini dosyamızı kaydediyor ve apache&#8217;yi yeniden başlatıyoruz</p>
<p>/etc/init.d/httpd restart</p>
<p>bununla beraber R57.php yi önlemiş bulunuyoruz C99.php için Mod Security&#8217;ye ihtiyacımız olacak bunun için WHM den Mod Security kurulumu yapmamız gerekiyor WHM panel de Cpanel bölümü altında yer alan &#8220;Plugins&#8221; bölümüne giriyor ve Mod Security&#8217;yi seçip kaydediyoruz kurulum bitince whm panelden çıkıp tekrar giriyoruz kurulumun sorunsuz şekilde olup olmadığını En alt kısımdan görebiliriz menü olarak &#8220;Mod Security&#8221; bölümünün gelmiş olması gerek.</p>
<p>sonrasında ssh dan işlemlerimize devam ediyoruz..</p>
<p>cd /usr/local/apache/conf/<br />
rm -rf modsec.conf<br />
wget <a rel="nofollow" href="http://www.ni.net.tr/dosyalar/modsec.conf.txt" target="_blank">www.ni.net.tr/dosyalar/modsec.conf.txt</a><br />
mv modsec.conf.txt modsec.conf</p>
<p>yukarda yer alan komutları sırası ile yaptıktan sonra tekrar apache&#8217;yi restart ediyoruz</p>
<p>/etc/init.d/httpd restart</p>
<p>ve modsec.conf sayesinde c99.php&#8217;yi de önlemiş oluyoruz..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tickhi.com/r57-ve-c99-shell-engelleme.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows sunucunuzu SYN ve DOS saldırısına karşı koruyun</title>
		<link>http://www.tickhi.com/windows-sunucunuzu-syn-ve-dos-saldirisina-karsi-koruyun.html</link>
		<comments>http://www.tickhi.com/windows-sunucunuzu-syn-ve-dos-saldirisina-karsi-koruyun.html#comments</comments>
		<pubDate>Sat, 13 Dec 2008 20:33:43 +0000</pubDate>
		<dc:creator>Tickhi</dc:creator>
				<category><![CDATA[Sunucu Güvenlik]]></category>
		<category><![CDATA[dos saldırısı engelleme]]></category>
		<category><![CDATA[syn koruma]]></category>
		<category><![CDATA[windows sunucu güvenlik]]></category>

		<guid isPermaLink="false">http://www.tickhi.com/?p=32</guid>
		<description><![CDATA[SYN (TCP bağlantı isteği), aşağıdaki karakteristiklere sahip çok yaygın bir DoS saldırısıdır. Saldırgan bu şekilde sisteminizin kaynaklarını boş yere meşgul ederken, yetkili kullanıcıların bile makinaya bağlanmasına engel olur. Sisteminizde firewall varsa sizi koruyabilir ama bu saldırıyı engellemenin bir yolu da registry anahtarlarında yapacağınız bir işlemdir. Bu işlemi yazımından öğrenebilirsiniz. SYN (TCP bağlantı isteği), aşağıdaki karakteristiklere [...]]]></description>
			<content:encoded><![CDATA[<p><strong>SYN (<abbr title="Transmission Control Protocol">TCP</abbr> bağlantı isteği), aşağıdaki karakteristiklere sahip çok yaygın bir <abbr title="Denial of Service">DoS</abbr> saldırısıdır. Saldırgan bu şekilde sisteminizin kaynaklarını boş yere meşgul ederken, yetkili kullanıcıların bile makinaya bağlanmasına engel olur. Sisteminizde firewall varsa sizi koruyabilir ama bu saldırıyı engellemenin bir yolu da registry anahtarlarında yapacağınız bir işlemdir. Bu işlemi yazımından öğrenebilirsiniz.<br />
</strong></p>
<p>SYN (<abbr title="Transmission Control Protocol">TCP</abbr> bağlantı isteği), aşağıdaki karakteristiklere sahip çok yaygın bir <abbr title="Denial of Service">DoS</abbr> saldırısıdır:</p>
<p>1. Saldırgan Internette kullanılmayan <abbr title="Internet Protocol">IP</abbr> adreslerini aldatma ile kullanarak (kaynak adresi olarak kullanarak &#8211; spoof) birçok SYN paketini hedef makinaya yollar.</p>
<p>2. Alınan her SYN pakedi için, hedef makina kaynak ayırır ve onay paketini (SYN-ACK) (SYN pakedinin yollandığı) kaynak <abbr title="Internet Protocol">ip</abbr> adresine yollar.</p>
<p>3. Hedef makina, saldırı yapı<abbr title="Local Area Network">lan</abbr> makinadan yanıt alamayacağından dolayı, SYN-ACK paketini 5 kez tekrar edecektir. Bunun tekrar süreleri, 3, 6, 12, 24 ve 48 saniyedir. Ayırdığı kaynağı boşa çıkartmadan evvel, 96 saniye sonra son bir kez SYN-ACK denemesi yapacaktır. Hepsini topladığınızda, görüldüğü gibi hedef makina ayırdığı kaynakları 3 dakika gibi bir süre tutacaktır. Bu sadece her bir SYN atağı için gerçekleşecek süredir.</p>
<p>Saldırgan bu tekniği tekrarlanan bir şekilde gerçekleştirdiği zaman, hedef makina ayırdığı kaynaklardan dolayı kaynak yetersizliğine kadar ulaşır ve artık yeni bir bağlantı karşılayamayacak duruma gelir. Ve bu durumda yetkili kullanıcılar bile makinaya bağlanamaz.<br />
<a rel="nofollow" href="http://indirkamil.com/" target="_blank"><img src="http://www.indirkamil.com/images/720783syn_dos_saldirisi.gif" border="0" alt="" /></a></p>
<p>Sisteminizde böyle bir atakla karşı karşıya olup olmadığınızı anlamak için, komut satırında :</p>
<p>netstat -n -p <abbr title="Transmission Control Protocol">tcp</abbr></p>
<p>yazmanız yeterli olacaktır. Çıkan sonuca bakıp, SYN_RECEIVED durumunda olan çıkışları kontrol edebilirsiniz. Eğer bu tip duruma sahip birçok bağlantı varsa, sisteminiz bu saldırıya maruz kalmıştır.</p>
<p>Sisteminizi korumak için: Ateş duvarları (firewall) tabii ki sisteminizi bu tip saldırılardan koruyacaktır, ve eğer mümkünse ateş duvarı kullanmanız gerekmektedir. Fakat, windows da hali hazırda zaten bu saldırılara karşı korunmanın bir yolu mevcuttur ve SYN isteklerini daha çabuk zaman aşımına uğratabilirsiniz. Bu özelliği çalışır duruma getirebilmek için izlenmesi gereken adımlar şunlardır:</p>
<p>1. Registry editörünüzü çalıştırın ve HKLM(HKEY_Local_Machine)/SYSTEM/CurrentControlSet/Services/TcpipParameters değerini bulun</p>
<p>2. Edit menüsünden Yeni bir DWORD değeri oluşturmayı seçin ve</p>
<p>3. Adını &#8220;SynAttackProtect&#8221; verin.</p>
<p>4. Yarattığınız anahtarın üzerinde çift tıklayın ve değerini &#8220;2&#8243; verin..</p>
<p>5. Registry editörünü kapatın ve makinanızı tekrar başlatın.</p>
<p>Burada &#8220;SynAttackProtect&#8221; değişkeninin kabul edilen başlangıç değeri 0 (sıfır) dır. Ve koruma kapalıdır.</p>
<p>Verilecek &#8220;1&#8243; değeri ise en yüksek <abbr title="Transmission Control Protocol">TCP</abbr> bağlantı değerine ulaşıldığında (Örneğin; bağlantının SYN_RECEIVED durumu TcpMaxHalfOpen olarak bilinir) ve tekrar ile karşılaşıldığında (Örneğin; TcpMaxHalfOpenRetried) SYN tekrarını ve yönlendirme bellek değerinin bekleme süresini limitler.</p>
<p>Eğer &#8220;SynAttackProtect&#8221; değeri &#8220;2&#8243; olursa, sonuç 1 verildiğindekine benzer olacaktır fakat SYN işlemindeki 3-yollu el sıkışma bitene kadar bekleyen bir geciktirilmiş Winsock notification içerir.</p>
<p>Çünki Windows &#8220;SynAttackProtect&#8221; değerini, &#8220;TcpMaxHalfOpen&#8221; ve &#8220;TcpMaxHalfOpenRetried&#8221; da tanımlanan değerlere ulaştığında çağırıp kullanacaktır. Size tavsiyemiz bu iki değeride aynı registry konumunda (HKLMSYSTEMCurrentControlSetServicesTcpipPara meters) oluşturmanız ve değerlerini aşağıdaki gibi girmenizdir.</p>
<p>TcpMaxHalfOpen=100<br />
TcpMaxHalfOpenRetried=80</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tickhi.com/windows-sunucunuzu-syn-ve-dos-saldirisina-karsi-koruyun.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
