<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//TR"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=iso-8859-9"> <META NAME="GENERATOR" CONTENT="lfparser_2.9"> <META NAME="LFCATEGORY" CONTENT="System Administration"> <TITLE>lf175, System Administration: xinetd</TITLE> <!-- stylesheet added by lfparser: --> <style type="text/css"> <!-- pre { font-familiy:monospace,Courier } --> </style> </HEAD> <BODY bgcolor="#ffffff" text="#000000"> <!-- this is generated html code. NEVER use this file for your translation work. Instead get the file with the same article number and .meta.shtml in its name. Translate this meta file and then use lfparser program to generate the final article --> <!-- lfparser can be obtained from http://main.linuxfocus.org/~guido/dev/lfparser.html --> <!-- 2pdaIgnoreStart --> <MAP name="top"> <AREA shape="rect" coords="367,9,418,30" alt="Home" href="../index.shtml"> <AREA shape="rect" coords="423,9,457,30" alt="Map" href="../map.html"> <AREA shape="rect" coords="463,9,508,30" alt="Index" href="../indice.html"> <AREA shape="rect" coords="514,9,558,30" alt="Search" href="../Search/index.shtml"> </MAP> <MAP name="bottom"> <AREA shape="rect" coords="78,0,163,15" alt="News" href="../News/index.html"> <AREA shape="rect" coords="189,0,284,15" alt="Archives" href="../Archives/index.html"> <AREA shape="rect" coords="319,0,395,15" alt="Links" href="../Links/index.html"> <AREA shape="rect" coords="436,0,523,15" alt="About LF" href="../aboutus.html"> </MAP> <!-- IMAGE HEADER --> <CENTER> <IMG src="../../common/images/Topbar-tr.gif" width="600" height="40" border="0" alt="[Top bar]" ismap usemap="#top" ><BR> <IMG src="../../common/images/Bottombar-tr.gif" width="600" height="21" border="0" alt="[Bottom bar]" ismap usemap="#bottom"> </CENTER> <!-- SSI_INFO --> <!-- tr_staticssi include virtual --> <!-- tr_staticssi exec cmd --> <!-- addedByLfdynahead ver 1.4 --><TABLE ALIGN="right" border=0><TR><TD ALIGN="right"><FONT SIZE="-1" FACE="Arial,Helvetica">Bu makalenin farklı dillerde bulunduğu adresler: <A href="../../English/November2000/article175.shtml">English</a> <A href="../../Castellano/November2000/article175.shtml">Castellano</a> <A href="../../Deutsch/November2000/article175.shtml">Deutsch</a> <A href="../../Francais/November2000/article175.shtml">Francais</a> <A href="../../Nederlands/November2000/article175.shtml">Nederlands</a> <A href="../../Turkce/November2000/article175.shtml">Turkce</a> </FONT></TD></TR></TABLE><br> <!-- 2pdaIgnoreStop --> <!-- SHORT BIO ABOUT THE AUTHOR --> <TABLE ALIGN=LEFT BORDER=0 hspace=4 vspace=4 WIDTH="30%" > <TR> <TD> <!-- 2pdaIgnoreStart --> <!-- PALM DOC --> <TABLE BORDER=0 hspace=4 vspace=4> <TR> <TD> <font size=1> <img src="../../common/images/2doc.gif" width=34 align=left border=0 height=22 alt="convert to palm"><a href="http://cgi.linuxfocus.org/cgi-bin/2ztxt">Convert to GutenPalm</a><br>or <a href="http://cgi.linuxfocus.org/cgi-bin/2pda">to PalmDoc</a></font> </TD> </TR> </TABLE> <!-- END PALM DOC --> <!-- 2pdaIgnoreStop --> <br> <img SRC="../../common/images/Frederic_Raynal.png"> <BR>tarafından <a href="mailto:pappy@users.sourceforge.net">Frédéric Raynal</a> <BR><BR> <I>Yazar hakkında:</I><BR> Frédéric Raynal parmak sayısal resimlerin watermarking'i hakkında INRIA (Institut National de Recherche en Informatique et Automatique)'da bir tez hazırlıyor. <BR><i>İçerik</i>: <UL> <LI><A HREF="#lfindex0">Bu xinetd nedir?</A></LI> <LI><A HREF="#lfindex1">Derleme ve Yükleme</A></LI> <LI><A HREF="#lfindex2">Yapılandırma</A></LI> <LI><A HREF="#lfindex3">Access Control</A></LI> <LI><A HREF="#lfindex4">Service defaults </A></LI> <LI><A HREF="#lfindex5">Servisin Yapılandırılması</A></LI> <LI><A HREF="#lfindex6">Port binding: the bind attribute</A></LI> <LI><A HREF="#lfindex7">Dieğr makinaya servis redirection : redirect bileşeni</A></LI> <LI><A HREF="#lfindex8">Special services</A></LI> <LI><A HREF="#lfindex9">Let's play a bit...</A></LI> <LI><A HREF="#lfindex10"> Starting with a riddle </A></LI> <LI><A HREF="#lfindex11">chroot service</A></LI> <LI><A HREF="#lfindex12">Sonuç</A></LI> <LI><A HREF="#lfindex13">pop3 server</A></LI> <LI><A HREF="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=175&lang=tr">Bu yazı için görüş bildiriminde bulunabilirsiniz</A></LI> </UL> </TD></TR></TABLE> <!-- HEAD OF THE ARTICLE --> <H2> xinetd</H2> <h3> Çeviri : Kadriye Öztürk </h3> <IMG alt="security" border=0 height=100 src="../../common/images/illustration175.gif" width=100> <!-- ABSTRACT OF THE ARTICLE --> <P><i>Özet</i>: <P> <P>xinetd - genişletilmiş Internet servisleri daemon'ı (eXtended InterNET services daemon) - içeri sokulmaya karşı iyi bir güvenlik sağlar ve <I>Servislerin reddi- Deny of services</I> (<I>DoS</I>) nin risklerini azaltır. En iyi bilinen çift gibi (<FONT face="Courier New,Courier">inetd</FONT>+<FONT face="Courier New,Courier">tcpd</FONT>), verilen bir makinanın erişim haklarını düzenlemeye izin verir, ama o bundan daha fazlasını da yapabilir. Bu makalede onun birçok özelliğini keşfedeceğiz. </P></P> <HR size="2" noshade align="right"><BR> <!-- BODY OF THE ARTICLE --> <A NAME="lfindex0"> </A> <H3>Bu xinetd nedir?</H3> Klasik olarak <FONT face="Courier New,Courier">inetd</FONT> bir bilgisayarın ağ bağlantılarını kontrol etmeye yardım eder. <FONT face="Courier New,Courier">inetd</FONT> tarafından yönetilen bir porta istek geldğinde, inetd bunu tcpd denilen bir programa gönderir. Tcpd, isteğe izin verilip verilmeyeceğini <FONT face="Courier New,Courier">hosts.{allow, deny}</FONT> dosyalarındaki kurallara göre karar verir. İsteğe izin verilirse, ilgili sunucu süreci (process) başlatılır (e.g ftp). Bu mekanizma <FONT face="Courier New,Courier">tcp_wrapper</FONT> olarak da bilinir. <P>xinetd, <FONT face="Courier New,Courier">tcp_wrapper</FONT>'ın sağladığına benzer erişim kontrolü yeteneklerine sahiptir. Bununla birlikte, onun yetenekleri daha fazladır: <UL> <LI> TCP, UDP and RPC servisleri için erişim kontrolü (Sonuncular henüz iyi desteklenmiyorlar.) <LI>zaman bölümü (time segments) tabanlı erişim kontrolü <LI>tam giriş yapma, bağlantı başarılı veya hatalı olsa da <LI> <I>Deny of Services</I> (DoS) ataklarına (kaynaklarını doyurarak bir makinayı dondurmaya(freeze) çalışan ataklar) karşı etkin içerik : <UL> <LI>aynı zamanda çalışan benzer tip sunucuların sayısında sınırlama <LI>sunucuların toplam sayısında sınırlama <LI>log dosyalarının boyutunda sınırlama. </LI></UL> <LI>özel bir arayüze bir servisin bağlanması: Bu size, örneğin servislerin dışarıda değil sizin özel ağınızda kullanılabilir olmasına izin verir. <LI>diğer sistemlere proxy gibi kullanılabilir. İç ağa erişebilmek için IP maskelendirmesi - ip_masquerading (veya Ağ Adres Çevirici - Network Address Translation - NAT) ile oldukça kullanışlı bir birliktelik. </LI></UL>Ana geriçekilim, az önce bahsedilen, zayıf desteklenmiş RPC çağrılarını ilgilendirir. Bununla birlikte, <FONT face="Courier New,Courier">portmap</FONT> ve xinetd birlikte iyi çalışırlar. <P>Bu makalenin ilk bölümü xinetd'nin nasıl çalıştığını anlatır. Servis biçimlendiriminde ve bazı özel seçeneklerde (Bir arayüze bağlama (binding), redirection) zaman harcayacağız, sonra bunları örneklerin yardımıyla uygulamayla açılayacağız. İkinci bölüm ise xinetd'nin çalışmasını, yarattığı logları gösteriyor ve kullanışlı ipuçlarıyla da bitiyor. <A name=lfindex1> </A> <A NAME="lfindex1"> </A> <H3>Derleme ve Yükleme</H3> xinetd'yi şu adresten elde edebilirsiniz: <A href="http://www.xinetd.org/">http://www.xinetd.org/</A>. Bu makale için 2.1.8.9pre10 sürümünü kullanıyoruz. <BR>Derleme ve yükleme klasik yolla yapılır: alışılmış komutlar <FONT face="Courier New,Courier">./configure; make; make install</FONT> hepsini yapın :) <FONT face="Courier New,Courier">configure</FONT> alışılmış seçenekleri desteklerler. Üç özel seçenek derleme anında kullanılabilir: <OL> <LI><FONT face="Courier New,Courier">--with-libwrap</FONT> : bu seçenekle, xinetd, <FONT face="Courier New,Courier">tcpd</FONT> biçimlendirim dosyalarını (<FONT face="Courier New,Courier">/etc/hosts.{allow, deny}</FONT>) kontrol eder ve erişim kabul edilirse kendi kontrol usullerini kullanır. Bu seçenğin çalışması için, tcp_wrapper ve kütüphanelerinin makinaya yüklenmiş olması gerekmektedir. (Yazarın notu: wrapper ile ne yapılabiliyorsa xinetd ile de yapılabilir. Buna izin vermek, config dosyalarının çoğalmasına ve yönetimin daha güç olamsına yol açar. Özetle tavsiye etmiyorum.) <LI><FONT face="Courier New,Courier">--with-loadavg</FONT> : bu seçenek xinetd'nin max_load configuration seçeneğini kullanmasına izin verir. Bu size makinaya fazla yüklenildiğinde bazı servisleri yeniden aktive etmenizi sağlar. Bazı DoS ataklarını (<FONT face="Courier New,Courier">max_load</FONT> niteliğini <A href="#tableau1">table 1</A> de kontrol edin) önlemek için gerekli bir seçenek. <LI><FONT face="Courier New,Courier">--with-inet6</FONT> : eğer IPv6 'yı kullanacağınızı düşünüyorsanız, bu seçenek onu desteklemenize izin verir. IPv4 <B>ve</B> IPv6 bağlantıları yönetilir ama IPv4 adresleri IPv6 şekline dönüştürülür. </LI></OL>xinetd 'yi başlatmadan önce, inetd 'yi durdurmanıza gerek yoktur. Yine de iki deamon'ın umulmayan davranışlarda bulunmasına yol açmaya gerek yok! <P>Bazı sinyaller xinetd 'nin davranışlarını nitelemek için kullanılır: <UL> <LI>SIGUSR1 : yazılım tekrar biçimlendirimi : Biçimlendirim dosyası tekrar okunur ve servis parametreleri buna göre değiştirilir <LI>SIGUSR2 : donanım tekrar biçimlendirimi: yukarıdaki gibi, ama daha fazlası kullanım dışı deamonlar öldürülür <LI>SIGTERM : xinetd 'yi ve yarattığı deamonları öldürür </LI></UL>Daha başkalrı da var (gelin belgelemedeki ve man sayfalarındaki bir hatadan bahsedelim: SIGHUP çöplerini (dump) <FONT face="Courier New,Courier">/var/run/xinetd.dump</FONT> dosyasına yazar,<FONT face="Courier New,Courier">/tmp/xinetd.dump</FONT> dosyasına değil), ama yukarıda bahsedilen üçü start, stop, restart, soft, hard seçeneklerini (son ikisi sırasıyla SIGUSR1 ve SIGUSR2 ile ilgilidir) içeren küçük bir program parçacığıyla kolayca yönetilebilir. <A name=lfindex2> </A> <A NAME="lfindex2"> </A> <H3>Yapılandırma</H3> <FONT face="Courier New,Courier">/etc/xinetd.conf</FONT> dosyası xinetd deamon'ı (bir komut satırı seçeneği bir başkasına sağlamasına izin verir) için benimsenmiş biçimlendirim dosyasıdır. xinetd biçimlendirimi çok zor değil ama, uzun bir iş olabilir ve söz dizimi ne yazık ki atası <FONT face="Courier New,Courier">inetd</FONT> den daha farklıdır. <P>İki yararlı özellik (<FONT face="Courier New,Courier">itox</FONT> ve <FONT face="Courier New,Courier">xconv.pl</FONT>) xinetd ile sağlanır ve <FONT face="Courier New,Courier">/etc/inetd.conf </FONT> dosyasını xinetd için bir biçimlendirim dosyasına dönüştürmeye izin verir. Açıkçası bu, wrapper biçimlendirim dosyasında belirtilen kurallar önemsenmediğinden beri yeterli değildir. <CODE>itox</CODE> programı hala korunmasına rağmen uzun süredir geliştirilmemiştir. <FONT face="Courier New,Courier">xconv.pl </FONT> programı iyi bir çözümdür, sonuç, xinetd'nin <FONT face="Courier New,Courier">inetd</FONT> den farklı olarak sahip olduğu özelliklerden dolayı belirtilmek zorunda olsa da.: <BR> <BLOCKQUOTE><FONT face="Courier New,Courier">>>/usr/local/sbin/xconv.pl < /etc/inetd.conf > /etc/xinetd.conf</FONT></BLOCKQUOTE>Biçimlendirim dosyası defaults (benimsenmişler) bölümüyle başlar. Bu bölümdeki nitelikler xinetd'nin yönettiği her serviste kullanılacaktır. Bundan sonra, servisler gibi birçok bölüm bulacaksınız, onların her biri özel seçenekleri benimsenmiş olanlarla ilişkili olarak tekrar tanımlayabiliyor. <P>defaults bölümü şuna benzer: <BLOCKQUOTE><I><FONT face="Courier New,Courier">defaults</FONT></I> <BR><FONT face="Courier New,Courier">{</FONT> <BR><FONT face="Courier New,Courier"> attribute operator value(s)</FONT> <BR><FONT face="Courier New,Courier"> ...</FONT> <BR><FONT face="Courier New,Courier">}</FONT></BLOCKQUOTE>Bu bölümde tanımlanan her nitelik sağlanmiş değer(ler)i sonra tanımlancak servislerin hepsi için saklar. Bunun için, <FONT face="Courier New,Courier">only_from</FONT> niteliği, sunucuya bağlanabilecek yetkilendirilmiş adreslerin bir listesini vermeye izin verir: <BLOCKQUOTE><FONT face="Courier New,Courier">only_from = 192.168.1.0/24 192.168.5.0/24 192.168.10.17</FONT></BLOCKQUOTE> Sonra, her bildirilen servis, listede olan bır adrese sahip makinaların erişimine izin verir. Bununla birlikte, bu benimsenmiş değerler her servis için nitelendirilmelidir (biraz aşağıda açıklanan işlemcileri kontrol edin). Yine de bu süreç biraz riskli. Gerçekçi olursak, kolay ve gizli bir şekilde birşeyleri saklamak yerine, benimsenmiş değerleri tanımlamamak ve onları sonra servislerin içinde değiştirmek daha iyidir. Örneğin, erişim hakları hakkında konuşursak en kolay politika herkese erişimi yasaklamak sonra da gerçekten gereksinimi olanların herbir servise erişimine izin vermekten meydana gelir. (tcp_wrapper ile , Bu <font face="Courier New,Courier">ALL:ALL@ALL</font> içeren <font face="Courier New,Courier">hosts.deny</font> dosyasıyla ve sadece yetkilendirilmiş (authorized) servis ve adresleri sağlayan <font face="Courier New,Courier">hosts.allow</font> dosyasıyla yapılabilir. <p>config dosyasındaki servisi anlatan her bölüm şuna benzer: <blockquote><font face="Courier New,Courier"><i>service</i>service_name</font> <br><font face="Courier New,Courier">{</font> <br><font face="Courier New,Courier"> attribute operator value(s)</font> <br><font face="Courier New,Courier"> ...</font> <br><font face="Courier New,Courier">}</font></blockquote> Üç operatör mevcuttur: '=', '+=' and '-='. Niteliklerin çoğu sadece '=' işlemcisini destekler. Bu niteliğe sabit bir değer veir.'-=' işlemcisi bir maddeyi silerken, '+=' işlemcisi bir madde ekler. <p> <a href="#tableau1">table 1</a> bu özelliklerin bazılarını kısaca anlatıyor. Sonra da bunları nasıl kullanıcağımızı birkaç örnekle görüceğiz. <font face="Courier New,Courier">xinetd.conf</font>'un <font face="Courier New,Courier">yardım sayfaları</font> size daha fazla bilgi verecektir. <br> <br> <a name="tableau1"> </a> <center><table BORDER WIDTH="100%" NOSAVE bgcolor="#9999BB"> <tr> <td><b>Nitelik</b></td> <td><b>Değerler ve açıklamalar</b></td> </tr> <tr> <td><font face="Courier New,Courier">flags</font></td> <td>Sadece en geçerli değerler burada bahsedilecektir, diğerleri için belgelendirmeye başvurun: <ul> <li> IDONLY : Sadece bir kimlik sunucusuna sahip istemcilerden gelen bağlantıları kabul eder; </li> <li> NORETRY : hata halinde yeni bir sürecin (process) tekrar çatallaşmasını (fork) önler; </li> <li> NAMEINARGS : <font face="Courier New,Courier">server_args</font> niteliğinin ilk bileşeni <font face="Courier New,Courier">sunucu</font> için <font face="Courier New,Courier">argv[0]</font> olarak kullanılır. Bu <font face="Courier New,Courier">tcpd</font>'yi <font face="Courier New,Courier">server</font> niteliğine yerleştirerek kullanmanıza izin verir ve sonra <font face="Courier New,Courier">inetd</font> de yaptığınız gibi sunucu adı ve bileşenlerini <font face="Courier New,Courier">server_args</font> gibi yazarsınız.</li> </ul> </td> </tr> <tr> <td><font face="Courier New,Courier">log_type</font></td> <td>xinetd benimsenmiş olarak <font face="Courier New,Courier">syslogd</font> <font face="Courier New,Courier">daemon.info</font> 'yu kullanır. <ul> <li> SYSLOG selector [düzey] : <font face="Courier New,Courier">syslogd</font> dan <font face="Courier New,Courier">daemon</font>, <font face="Courier New,Courier">auth</font>, <font face="Courier New,Courier">user</font> veya <font face="Courier New,Courier">local0-7</font> den birini seçmenize izin verir; </li> <li> FILE [max_size [absolute_max_size]] : belirtilmiş dosya bilgi alır. İki seçenek dosyanın boyutunun sınırını belirler. Bu boyuta gelindiğinde, ilk seçenek syslogd 'ye bir mesaj gönderir, ikincisi de bu servise girişi durdurur Eğer bu bir ortak dosya ise - veya sabitleştirilmiş - farklı servisler ilgilenebilir). </li> </ul> </td> </tr> <tr> <td><font face="Courier New,Courier">log_on_success</font></td> <td>Bir sunucu çalıştığında farklı bilgiler giriş yapabilir: <ul> <li> PID : sunucunun PID'i (Eğer bu bir iç xinetd servisi ise PID nın değeri 0 olur);</li> <li> HOST : istemci adresi;</li> <li> USERID : <a href="http://www.ietf.org/rfc/rfc1413.txt">RFC1413</a> kimlik belirleme protokolüne göre uzaktaki kullanıcının kimliği belirlenir; </li> <li> EXIT : sürecin (process) çıkış durumu;</li> <li> DURATION : oturum süresi. </li> </ul> </td> </tr> <tr> <td><font face="Courier New,Courier">log_on_failure</font></td> <td>Burada tekrar, sunucu kaynaklarının eksikliğinden veya giriş kurallarından dolayı çalışmadığı zaman xinetd birçok bilgi girişi alır: <ul> <li> HOST, USERID : yukarıda bahsedildiği gibi;</li> <LI>ATTEMPT : bir erişim teşebbüsünü girer. Başka bir değer atanana kadar bu benimsenmiş bir değerdir; <LI>RECORD : istemcide mümkün olan her bilgiyi girer. </LI></UL></TD></TR> <TR> <TD><FONT face="Courier New,Courier">nice</FONT></TD> <TD> <FONT face="Courier New,Courier">nice</FONT> komutunun yaptığı gibi sunucunun üstünlük hakkını değiştirir.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">no_access</FONT></TD> <TD>Bu servise erişim hakkı olmayan kullanıcıların listesi.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">only_from</FONT></TD> <TD>Yetkilendirilmiş (authorized) istemcilerin listesi. Bu niteliğe hiç bir değer atanmadıysa servişe erişim reddedilir.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">port</FONT></TD> <TD>Servise ilgili portlar. Bu <FONT face="Courier New,Courier">/etc/services</FONT> dosyasında da tanımlandıysa, her iki port numarası eşleşmelidir.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">protocol</FONT></TD> <TD>Belirtilmiş protokol <FONT face="Courier New,Courier">/etc/protocols</FONT> dosyasında olmalıdır. Eğer hiçbir protokol verilmemişse, yerine servisin benimsenmiş birtanesi kullanılır.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">server</FONT></TD> <TD>Sunucunun yolu.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">server_args</FONT></TD> <TD>Sunucuya verilen bileşenler.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">socket_type</FONT></TD> <TD>stream (TCP), dgram (UDP), raw (IP direkt erişimi) veya seqpacket ().</TD></TR> <TR> <TD><FONT face="Courier New,Courier">type</FONT></TD> <TD>xinetd 3 tip servisi yönetebilir: <OL> <LI>RPC : <FONT face="Courier New,Courier">/etc/rpc</FONT> dosyasında tanımlananlar için... ama çok iyi çalışmaz; <LI>INTERNAL : xinetd tarafından direkt olarak yönetilen servisler için (<FONT face="Courier New,Courier">echo</FONT>, <FONT face="Courier New,Courier">time</FONT>, <FONT face="Courier New,Courier">daytime</FONT>, <FONT face="Courier New,Courier">chargen</FONT> ve <FONT face="Courier New,Courier">discard</FONT>); <LI>UNLISTED : <FONT face="Courier New,Courier">/etc/rpc</FONT> <FONT face="Courier New,Courier">/etc/services</FONT> dosyalarından birinde tanımlanmayan servisler için; </LI></OL>Not edelim, <FONT face="Courier New,Courier">servers</FONT>, <FONT face="Courier New,Courier">services</FONT> ve <FONT face="Courier New,Courier">xadmin</FONT> iç servislerinde gördüğümüz gibi çeşitli değerleri birleştirmek mümkündür.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">wait</FONT></TD> <TD>Servislerin threadlere doğru olan davranışlarını tanımlar. İki değer kabul edilebilirdir: <UL> <LI>yes : servis mono-thread dir, sadece bu tipin bir bağlantısı servis tarafında yönetilebilir; <LI>no : bir yeni servis, tanımlanan maksimum sınıra göre her yeni servis isteği için xinetd tarafından başlatılır. (<FONT color=#ff0000>Uyarı</FONT>, benimsenmiş olarak bu değer sınırsızdır). </LI></UL></TD></TR> <TR> <TD><FONT face="Courier New,Courier">cps</FONT></TD> <TD>Gelen bağlantıların sayısının sınırı. İlk bileşen bu sayının kendisidir. Sınır aşıldığında, ikinci bileşenin sağladığı saniyelerle ifade edilen bir sürede servis tekrar etkin hale geçer. </TD></TR> <TR> <TD><FONT face="Courier New,Courier">instances</FONT></TD> <TD>Aynı anda çalışabilecek aynı tip sunucuların maksimum sayısını belirler.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">max_load</FONT></TD> <TD>Bu bir sunucun için gerçek maksimum yüklemeyi verir (örneğin, 2 veya 2.5). Bu sınırın ötesinde, bu sunucuya gelen istekler reddedilir.</TD></TR> <TR> <TD>per_source</TD> <TD>Bir tamsayı veya UNLIMITED(sınırsız), bir sunucuya aynı kaynaktan gelen bağlantıların sayısını sınırlamak için kullanılır. </TD></TR> <CAPTION align=bottom><A href="#tableau1">Tab. 1</A> : xinetd için birkaç nitelik</CAPTION></TABLE></CENTER> <P> <A href="#tableau1">tablo1</A> de gösterilen son dört nitelik, bir sunucuya bağlı olan kaynakların kontrolüne izin verir. Bu <I>Denial of Service - Servis reddi</I> (DoS) ataklarından (bütün kaynaklarını kullanarak makinayı dondurma) korunmanın en etkili yoludur. <P>Bu bölüm birkaç xinetd özelliğini sundu.Bir sonraki bölüm onu nasıl kullanacağımızı gösterecek ve düzgün bir şekilde çalışması için birkaç kural verecektir.<A name=lfindex3> </A> <A NAME="lfindex3"> </A> <H2>Access Control</H2> <P>Daha önce de gördüğümüz gibi, IP adreslerini kullanarak makinanıza erişimleri kabul (red) edebilirsiniz.Bununla birlikte xinetd daha fazla özelliğe izin verir: <UL> <LI>erişim kontrolünü makina adı çözünürlülüğüyle yapabilirsiniz. Bunu yaparken, xinetd her_bağlantı_için belirlenmiş makina ad(lar)ı üzerinde arama yapar ve bağlantı adreslerini, makina adlarından dönen adreslerle karşılaştırır; <LI>erişim kontrolünü .domain.com ile yapabilirsiniz. İstemci bağlandığında, xinetd bağlantı adresini yerdeğiştirir ve belirlenmiş alan adında olup olmadığına bakar. </LI></UL>Bunları açığa kavuşturmak için, açıkçası IP adresleri daha iyidir, bu yolla bu servise gelen bağlantılarda isim arama(lar)yı önlemiş olursunuz. Erişim kontrolünü makina adı ile yapmak zorunda iseniz, yerel bir isim sunucusu (en azında bir caching) çalıştırırsanız, işler daha hızlı olur. Adres çözünürlüğünüzü yapmak için alan adı yuvalarını (socket) kullanmanız daha iyidir (<CODE>/etc/resolv.conf</CODE>'un içine bir <CODE>nameserver- isim sunucusu</CODE> girişi yerleştirmeyiniz). <P></P><A name=lfindex4> </A> <A NAME="lfindex4"> </A> <H2>Service <I>defaults </I> </H2> <FONT face="Courier New,Courier">defaults</FONT> bölümü, niteliklerin bir sayısı için değerleri atamanıza izin verir (bütün liste için belgelendirime göz atınız). Bu özelliklerden bazıları (<FONT face="Courier New,Courier">only_from</FONT>, <FONT face="Courier New,Courier">no_access</FONT>, <FONT face="Courier New,Courier">log_on_success</FONT>, <FONT face="Courier New,Courier">log_on_failure</FONT>, ...) eş zamanlı olarak bu bölümde atanmış değerleri ve servis tarafından sağlananları tutar. <P>Benimsenmiş olarak, Bir makinaya erişimin reddi, gerçekçi bir güvenlik politikasının ilk adımıdır. Sonra, servislere göre erişimlere izin vermek yeterlidir. Şİmdi bir makinaya erişimi kontrol etmeye izin veren IP tabanli iki niteliği inceleyeceğiz: <FONT face="Courier New,Courier">only_from</FONT> ve <FONT face="Courier New,Courier">no_access</FONT>. İkincisini seçersek ve şöyle yazarsak: <BLOCKQUOTE><FONT face="Courier New,Courier">no_access = 0.0.0.0/0</FONT></BLOCKQUOTE> servislere erişimi tamamen engelleriz. Bununla birlikte herkese izin vermek istiyorsanız örneğin <FONT face="Courier New,Courier">echo (ping)</FONT>'e erişebilmek için, echo servisinde şöyle yazmalısınız: <BLOCKQUOTE><FONT face="Courier New,Courier">only_from = 0.0.0.0/0</FONT></BLOCKQUOTE> Bu biçimlendirmeyle elde edeceğiniz giriş şöyledir: <BLOCKQUOTE><FONT face="Courier New,Courier">Sep 17 15:11:12 charly xinetd[26686]: Service=echo-stream: only_from list and no_access list match equally the address 192.168.1.1</FONT></BLOCKQUOTE> Gerçekçi olursak, erişim kontrolü her iki nitelikteki adreslerin karşılaştırılmasıyla yapılır. İstemci adresi her 2 listede eşleşiyorsa en az genel olanı tercih edilir. Eşitlik halinde, örnekteki gibi, xinetd seçim yapamayacaktır ve bağlantıyı reddecektir. Bu belirsilikten kurtarmak için şöyle yazmalısınız: <BLOCKQUOTE><FONT face="Courier New,Courier">only_from = 192.0.0.0/8</FONT></BLOCKQUOTE> Erişimi sadece nitelikle kontrol etmek için daha kolay bir yöntem: <BLOCKQUOTE><FONT face="Courier New,Courier">only_from =</FONT></BLOCKQUOTE> Değer vermemek her bağlantıyı koparmaz :) Sonra, her servis erişimi kabul eder. <P>Söylenmesi gerek: Verilen bir servis (direkt olarak veya <FONT face="Courier New,Courier">default</FONT> ile tahsis edilmiş olan) bölümü için <FONT color=#ff0000>hiçbir kuralın olmadığı durumda </FONT>(ne bu <FONT face="Courier New,Courier">only_from</FONT> ne de ötekinde <FONT face="Courier New,Courier">no_access</FONT>) <FONT color=#ff0000> servise erişime izin verilir!</FONT> <P><FONT face="Courier New,Courier">defaults</FONT>'un bir örneği burda: <BLOCKQUOTE><FONT face="Courier New,Courier">defaults</FONT> <BR><FONT face="Courier New,Courier">{</FONT> <BR><FONT face="Courier New,Courier"> instances = 15</FONT> <BR><FONT face="Courier New,Courier"> log_type = FILE /var/log/servicelog</FONT> <BR><FONT face="Courier New,Courier"> log_on_success = HOST PID USERID DURATION EXIT</FONT> <BR><FONT face="Courier New,Courier"> log_on_failure = HOST USERID RECORD</FONT> <BR><FONT face="Courier New,Courier"> only_from =</FONT> <BR><FONT face="Courier New,Courier"> per_source = 5</FONT> <P><FONT face="Courier New,Courier"> disabled = shell login exec comsat</FONT> <BR><FONT face="Courier New,Courier"> disabled = telnet ftp</FONT> <BR><FONT face="Courier New,Courier"> disabled = name uucp tftp</FONT> <BR><FONT face="Courier New,Courier"> disabled = finger systat netstat</FONT> <P><FONT face="Courier New,Courier"> #INTERNAL</FONT> <BR><FONT face="Courier New,Courier"> disabled = time daytime chargen servers services xadmin</FONT> <P><FONT face="Courier New,Courier"> #RPC</FONT> <BR><FONT face="Courier New,Courier"> disabled = rstatd rquotad rusersd sprayd walld</FONT> <BR><FONT face="Courier New,Courier">}</FONT></P></BLOCKQUOTE> iç servislerin arasında, <FONT face="Courier New,Courier">servers</FONT>, <FONT face="Courier New,Courier">services</FONT>, ve <FONT face="Courier New,Courier">xadmin</FONT> xinetd'yi yönetebilmenize olanak sağlar.Daha fazlası sonra. <A NAME="lfindex5"> </A> <H2>Servisin Yapılandırılması</H2> Bir sevisi biçimlendirmek için ihtiyaç duyduğumuz ... hiçbirşey yoktur :) Gerçekte, herşey benimsenmiş değerdeki gibi çalışır: Siz sadece servisi yönetmek için doğru nitelik ve değerlerini kullanmalısınız. Bu, benimsenmiş değerlerdeki bir değişimi veya bu servis için başka bir niteliği ifade eder. Bazı nitelikler servisin tipine (INTERNAL, UNLISTED veya RPC) göre sunulmalıdır: <BR> <BR> <A name=tableau2></A> <CENTER> <TABLE width="60%" bgColor=#9999bb border=1 NOSAVE> <TBODY> <TR> <TD><B>Nitelik</B></TD> <TD><B>Açıklama</B></TD></TR> <TR> <TD><FONT face="Courier New,Courier">socket-type</FONT></TD> <TD>Her servis.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">user</FONT></TD> <TD>Sadece İÇ olmayan servisler için</TD></TR> <TR> <TD><FONT face="Courier New,Courier">server</FONT></TD> <TD>Sadece İÇ olmayan servisler için</TD></TR> <TR> <TD><FONT face="Courier New,Courier">wait</FONT></TD> <TD>Her servis.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">protocol</FONT></TD> <TD>Her RPC servisi ve <FONT face="Courier New,Courier">/etc/services</FONT> da olmayanlar için.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">rpc_version</FONT></TD> <TD>Her RPC servisi.</TD></TR> <TR> <TD><FONT face="Courier New,Courier">rpc_number</FONT></TD> <TD><FONT face="Courier New,Courier">/etc/rpc</FONT> de yer almayan her RPC servisi için. </TD></TR> <TR> <TD><FONT face="Courier New,Courier">port</FONT></TD> <TD><FONT face="Courier New,Courier">/etc/services</FONT>de bulunmayan her RPC olmayan servis için. </TD></TR> <CAPTION align=bottom><A href="#tableau2">Tab. 2</A>: gereksinilen nitelikler</CAPTION></TABLE></CENTER> <P>Bu örnek servisleri nasıl tanımlayacağınızı gösteriyor: <BLOCKQUOTE><FONT face="Courier New,Courier">service ntalk</FONT> <BR><FONT face="Courier New,Courier">{</FONT> <BR><FONT face="Courier New,Courier"> socket_type = dgram</FONT> <BR><FONT face="Courier New,Courier"> wait = yes</FONT> <BR><FONT face="Courier New,Courier"> user = nobody</FONT> <BR><FONT face="Courier New,Courier"> server = /usr/sbin/in.ntalkd</FONT> <BR><FONT face="Courier New,Courier"> only_from = 192.168.1.0/24</FONT> <BR><FONT face="Courier New,Courier">}</FONT> <P><FONT face="Courier New,Courier">service ftp</FONT> <BR><FONT face="Courier New,Courier">{</FONT> <BR><FONT face="Courier New,Courier"> socket_type = stream</FONT> <BR><FONT face="Courier New,Courier"> wait = no</FONT> <BR><FONT face="Courier New,Courier"> user = root</FONT> <BR><FONT face="Courier New,Courier"> server = /usr/sbin/in.ftpd</FONT> <BR><FONT face="Courier New,Courier"> server_args = -l</FONT> <BR><FONT face="Courier New,Courier"> instances = 4</FONT> <BR><FONT face="Courier New,Courier"> access_times = 7:00-12:30 13:30-21:00</FONT> <BR><FONT face="Courier New,Courier"> nice = 10</FONT> <BR><FONT face="Courier New,Courier"> only_from = 192.168.1.0/24</FONT> <BR><FONT face="Courier New,Courier">}</FONT></P></BLOCKQUOTE> Not edin bu servisler sadece yerel ağda kullanılabilirler (192.168.1.0/24). FTP hakkında, biraz daha fazla sınırlama beklenir: sadece 4 kez izin verilir ve bu sadece zaman dilimi sırasında mümkündür. <A name=lfindex6> </A> <A NAME="lfindex6"> </A> <H3>Port binding: the <I>bind</I> attribute</H3> Bu nitelik bir servisi belirli bir IP adresine bağlamanıza (bind) izin verir. Eğer makina sadece bir adrese sahipse, bu kullanışsızdır. Diğer taraftan, bir yerel ağın parçası olan ve Internete bağlı olan bir makinanın en azından iki adrese sahiptir. <P>Örneğin, bir şirket müşterileri için bir FTP sunucusu yüklemek istiyor ( erişebilmek ve belgeleri okumak için). Bu şirket aynı zamanda kendi ürünlerine doğru FTP erişimi yapmak isteyen istemcileri önlemek istiyor: <FONT face="Courier New,Courier">bind</FONT> bu şirket için yapıldı :) Çözüm iki ayrı FTP servisi tanımlamaktır: biri genel erişim için, diğeri de sadece şirket içi erişim için. Bununla birlikte, xinetd bunları ayırabilmelidir: çözüm <FONT face="Courier New,Courier">id</FONT> niteliğini kullanmaktır. Bu bir servisi tek bir yolla tanımlar (Servis içinde tanımlanmadıysa, değeri servisin adına doğru kayar). <BR> <BLOCKQUOTE><FONT face="Courier New,Courier">service ftp</FONT> <BR><FONT face="Courier New,Courier">{</FONT> <BR><FONT face="Courier New,Courier"> id = ftp-public</FONT> <BR><FONT face="Courier New,Courier"> wait = no</FONT> <BR><FONT face="Courier New,Courier"> user = root</FONT> <BR><FONT face="Courier New,Courier"> server = /usr/sbin/in.ftpd</FONT> <BR><FONT face="Courier New,Courier"> server_args = -l</FONT> <BR><FONT face="Courier New,Courier"> instances = 4</FONT> <BR><FONT face="Courier New,Courier"> nice = 10</FONT> <BR><FONT face="Courier New,Courier"> only_from = 0.0.0.0/0 #her istemciye izin verir</FONT> <BR><FONT face="Courier New,Courier"> bind = 212.198.253.142 #bu sunucu için genel IP adresi</FONT> <BR><FONT face="Courier New,Courier">}</FONT> <p><font face="Courier New,Courier">service ftp</font> <br><font face="Courier New,Courier">{</font> <br><font face="Courier New,Courier"> id = ftp-public</font> <br><font face="Courier New,Courier"> wait = no</font> <br><font face="Courier New,Courier"> user = root</font> <br><font face="Courier New,Courier"> server = /usr/sbin/in.ftpd</font> <br><font face="Courier New,Courier"> server_args = -l</font> <br><font face="Courier New,Courier"> instances = 4</font> <br><font face="Courier New,Courier"> nice = 10</font> <br><font face="Courier New,Courier"> only_from = 0.0.0.0/0 #sadece iç kullanım için</font> <br><font face="Courier New,Courier"> bind = 212.198.253.142 #bu servis için yerel IP adresi</font> <br><font face="Courier New,Courier">}</font></blockquote> <font face="Courier New,Courier"> bind</font> ın kullanımı paketlerin hedefine göre yerini tutan daemon'ın çağırımına izin verir. Böylelikle bu biçimlendirim ile yerel ağdaki bir istemci, iç verilere erişebilmek için yerel adresi (veya ilgili adı) vermeleri gerekmektedir. log dosyasında okuyabilirsiniz: <blockquote><font face="Courier New,Courier">00/9/17@16:47:46: START: <font color="#00AA55">ftp-public</font> pid=26861 from=212.198.253.142</font> <br><font face="Courier New,Courier">00/9/17@16:47:46: EXIT: <font color="#00AA55">ftp-public</font> status=0 pid=26861 duration=30(sec)</font> <br><font face="Courier New,Courier">00/9/17@16:48:19: START: <font color="#0088FF">ftp-internal</font> pid=26864 from=192.168.1.1</font> <br><font face="Courier New,Courier">00/9/17@16:48:19: EXIT: <font color="#0088FF">ftp-internal</font> status=0 pid=26864 duration=15(sec)</font></blockquote> İlk bölüm <font face="Courier New,Courier" color="#00AA55">ftp 212.198.253.142</font> komutundan gelir, ikinci bölüm ise <font face="Courier New,Courier">charly</font> den kendisine doğru olan komut hakkındadır:<font face="Courier New,Courier" color="#0088FF">ftp 192.168.1.1</font>. <p>Açıkçası, eğer bir makina durağan iki IP adresine sahip değilse bir sorun meydana gelir. Bu <font face="Courier New,Courier">ppp</font> bağlantılarıyla veya <font face="Courier New,Courier">dhcp</font> protokolünü kullanıyorsanız ortaya çıkar.Servisleri adreslere değil arayüzlere bağlamak daha iyi gibi gözüküyor. Bununla birlikte bu hala xinetd'den beklenmiyor ve gerçek bir sorun (örneğin, bir arayüze veya OS'e bağlı adrese ki xinetd birçok OS'i destekler erişebilmek için bir C modulü yazmak). Bir program parçacığı kullanmak bu sorunu çözmemize izin verir: <blockquote><font face="Courier New,Courier">#!/bin/sh</font> <p><font face="Courier New,Courier">PUBLIC_ADDRESS=`/sbin/ifconfig $1 | grep "inet addr" | awk '{print $2}'| awk -F: '{print $2}'`</font> <br><font face="Courier New,Courier">sed s/PUBLIC_ADDRESS/"$PUBLIC_ADDRESS"/g /etc/xinetd.base > /etc/xinetd.conf</font></blockquote> Bu program parçacığı, dinamik adres için bir yedekleme olan PUBLIC_ADRESS'li istenen biçimlendirimi içeren <font face="Courier New,Courier">/etc/xinetd.base</font> dosyayı alır. Sonra bunu, program parçacığına bir bileşen gibi geçen arayüzle ilgili adresi içeren <font face="Courier New,Courier">PUBLIC_ADDRESS</font> katarını belirten <font face="Courier New,Courier">/etc/xinetd.conf</font> dosyasında değiştirir. Sonra, program parçacığına çağrı bağlantının tipine bağlıdır: en kolayı çağrıyı <font face="Courier New,Courier">ifup-*</font> dosyasının sağına eklemek ve xinetd yi tekrar başlatmaktır. <A NAME="lfindex7"> </A> <H2>Dieğr makinaya servis redirection : <i>redirect</i> bileşeni</H2> xinetd saydam bir proxy gibi kullanılabilir, bununla redirect niteliğinden ayrılır (hemen hemen, sonra görüceğiz). Bu, istenen kapıya (port) bir başka makinaya doğru bir servis isteği göndermenize izin verir. <blockquote><font face="Courier New,Courier">telnet service</font> <br><font face="Courier New,Courier">{</font> <br><font face="Courier New,Courier"> flags = REUSE</font> <br><font face="Courier New,Courier"> socket_type = stream</font> <br><font face="Courier New,Courier"> wait = no</font> <br><font face="Courier New,Courier"> user = root</font> <br><font face="Courier New,Courier"> server = /usr/sbin/in.telnetd</font> <br><font face="Courier New,Courier"> only_from = 192.168.1.0/24</font> <br><font face="Courier New,Courier"> redirect = 192.168.1.15 23</font> <br><font face="Courier New,Courier">}</font></blockquote> Neler olduğuna gelin bir göz atalım: <blockquote><font face="Courier New,Courier">>>telnet charly</font> <br><font face="Courier New,Courier">Trying 192.168.1.1...</font> <br><font face="Courier New,Courier">Connected to charly.</font> <br><font face="Courier New,Courier">Escape character is '^]'.</font> <br> <p><font face="Courier New,Courier">Digital UNIX (sabrina) (ttyp1)</font> <p><font face="Courier New,Courier">login:</font></blockquote> Gerçekçi olursak, <font face="Courier New,Courier">charly</font> de bağlantı kurulmuş gibi gözüküyor, ama aşağıdaki, <font face="Courier New,Courier">sabrina</font> ("<font face="Courier New,Courier">Digital UNIX</font>") nın idareyi elinde tuttuğunu gösteriyor. Bu mekanizma aynı anda kullanışlı ve tehlikeli olabilir. Kurulduğunda, giriş bağlantının her iki sonunda da yapılmalıdır. Daha ötesi, bu tip servisler için, DMZ ve firewall oldukça tercih edilir.;-) <A NAME="lfindex8"> </A> <H3>Special services</H3> Üç servis sadece xinetd'ye aittir. Bu servisler /etc/rpc ve /etc/services de bulunmadığından dolayı UNLISTED bayrağına (flag) sahip olmalıdırlar (INTERNAL bayrağının yanında bilgilendiren). <ol> <li> servers: kullanımda olan sunucular hakkında bilgi verir; </li> <li> services: mümkün olan servisler hakkında protokolleri ve kapıları (port) hakkında bilgi verir; </li> <li> xadmin: önceki iki tanesinin fonksıyonlarını birleştirir. </ol> Açıkçası, <font color="#FF0000"> Bu servisler bilgisayarınızı daha fazla zarar verilebilir hale getirir.</font> Önemli bilgiler sağlarlar. Şimdilik erişim korunmuyor (şifre koruması mesela). Onları sadece biçimlendirim zamanında kullanmalısınız. Sonra, <font face="Courier New,Courier">defaults</font> bölümünde, onların kullanışını yasaklamalısınız: <blockquote><font face="Courier New,Courier">defaults {</font> <br><font face="Courier New,Courier"> ...</font> <br><font face="Courier New,Courier"> disabled = servers services xadmin</font> <br><font face="Courier New,Courier"> ...</font> <br><font face="Courier New,Courier">}</font></blockquote> Onları aktif hale getirmeden önce, birtakım önlemler almalısınız: <ol> <li> xinetd'nin çalıştığı makina, bu servislere girebilecek tek makina olmak zorundadır </li> <li> Buna girişlerin sayısı sınırlandırın </li> <li> Sunucudan çalışan makinadan erişime izin verin. </li> </ol> Gelin <font face="Courier New,Courier">xadmin</font> servisinin bir örneğini ele alalım. (diğer ikiside aynı yolla biçimlendirilebilir, kapı (port) sayısı hariç;-): <blockquote><font face="Courier New,Courier">service xadmin</font> <br><font face="Courier New,Courier">{</font> <br><font face="Courier New,Courier"> type = INTERNAL UNLISTED</font> <br><font face="Courier New,Courier"> port = 9100</font> <br><font face="Courier New,Courier"> protocol = tcp</font> <br><font face="Courier New,Courier"> socket_type = stream</font> <br><font face="Courier New,Courier"> wait = no</font> <br><font face="Courier New,Courier"> instances = 1</font> <br><font face="Courier New,Courier"> only_from = 192.168.1.1 #charly</font> <br><font face="Courier New,Courier">}</font></blockquote> <font face="Courier New,Courier">xadmin</font> servisi 5 komuta sahip: <ol> <li> <font face="Courier New,Courier">help</font> ...</li> <li> <font face="Courier New,Courier">show run</font> : <font face="Courier New,Courier">servers</font> servisi gibi, şu anda çalışan sunucular hakkında bilgi verir </li> <li> <font face="Courier New,Courier">show avail</font> : <font face="Courier New,Courier">services</font> servisi gibi mümkün olan servisler hakkında bilgi verr (ve biraz daha fazla) </li> <li> <font face="Courier New,Courier">bye</font> veya <font face="Courier New,Courier">exit</font> ...</li> </ol> Şimdi onların var olduğunu biliyosunuz: unutun ;-) Bu servisler olmadan test edebilirsiniz. (<font face="Courier New,Courier">netstat</font>, <font face="Courier New,Courier">fuser</font>, <font face="Courier New,Courier">lsof</font>, ... ) gibi komutlar makinanızda neler olduğunu, bu servisleri kullanırken olduğu gibi onu zarar verilebilir hale getirmeden öğrenmenize izin verir! <A NAME="lfindex9"> </A> <H3>Let's play a bit...</H3> <A NAME="lfindex10"> </A> <H2> Starting with a riddle </H2> Burada kurtarılan birkaçı için küçük bir örnek ;-) Önce bu örnekte kullanılan biçimlendirimi açıklayacağım sonra da neler olduğunu ve neden çalışmadığını bulmaya çalışacağız. <p>Biz sadece <font face="Courier New,Courier">finger</font> servisine ihtiyaç duyarız: <blockquote><font face="Courier New,Courier">finger service</font> <br><font face="Courier New,Courier">{</font> <br><font face="Courier New,Courier"> flags = REUSE NAMEINARGS</font> <br><font face="Courier New,Courier"> server = /usr/sbin/tcpd</font> <br><font face="Courier New,Courier"> server_args = in.fingerd</font> <br><font face="Courier New,Courier"> socket_type = stream</font> <br><font face="Courier New,Courier"> wait = no</font> <br><font face="Courier New,Courier"> user = nobody</font> <br><font face="Courier New,Courier"> only_from = 192.168.1.1 #charly</font> <br><font face="Courier New,Courier">}</font></blockquote> xinetd <font face="Courier New,Courier">--with-libwrap</font> seçeneğiyle derlenmedi (<font face="Courier New,Courier">server</font> niteliğini kontrol edin). <font face="Courier New,Courier">defaults</font> bölümü daha önce sağlananlarla aynı tip: bağlantı nerden gelirse gelsin <font face="Courier New,Courier">charly</font>'ye her giriş yasaklandı. Yine de <font face="Courier New,Courier">finger</font> servisi tekrar aktif olmadı: <blockquote><font face="Courier New,Courier">pappy@<i>charly</i> >> finger pappy@charly</font> <br><font face="Courier New,Courier">[charly]</font> <br><font face="Courier New,Courier">pappy@<i>charly</i> >></font> <p><font face="Courier New,Courier">pappy@<i>bosley</i> >> finger pappy@charly</font> <br><font face="Courier New,Courier">[charly]</font> <p><font face="Courier New,Courier">pappy@<i>bosley</i> >></font></blockquote> <p><br>İstek, ne yetkilendirilmiş (authorized) makina olan <font face="Courier New,Courier">charly</font> (192.168.1.1)'de ne de <font face="Courier New,Courier">bosley</font> de düzgün çalışıyormuş gibi gözükmüyor. log dosyalrına bir göz atalım: <blockquote><b><font face="Courier New,Courier">/var/log/servicelog :</font></b> <br><font face="Courier New,Courier">00/9/18@17:15:42: START: finger pid=28857 from=192.168.1.1</font> <br><font face="Courier New,Courier">00/9/18@17:15:47: EXIT: finger status=0 pid=28857 duration=5(sec)</font> <br><font face="Courier New,Courier">00/9/18@17:15:55: FAIL: finger address from=192.168.1.10</font></blockquote> <font face="Courier New,Courier">charly</font>'den gelen istek (ilk iki satır) xinetd'ye göre iyi çalışıyor gözüküyor: girişe izin verildi ve istek 5 saniye sürdü. Diğer taraftan, <font face="Courier New,Courier">bosley</font>'den gelen istek ise reddedildi (<font face="Courier New,Courier">FAIL</font>). <br>Eğer <font face="Courier New,Courier">finger</font> servisinin biçimlendirimine bakarsak, sunucunun kullandığı <font face="Courier New,Courier">in.fingerd</font> değil <font face="Courier New,Courier">tcp_wrapper tcpd</font> servisidir. wrapper log dosyası şöyle diyor: <blockquote><b><font face="Courier New,Courier">/var/log/services :</font></b> <br><font face="Courier New,Courier">Sep 18 17:15:42 charly in.fingerd[28857]: refused connect from 192.168.1.1</font></blockquote> Görüldüğü gibi bizim iki sorgulamamızla eşleşen sadece bir satır var! <font face="Courier New,Courier">bosley</font>'den gelen (ikincisi) ise xinetd tarafından kesilmiş, bu yüzden bunu kog dosyasında bulamamak normaldir. Seçilen satır gerçektende xinetd'nin izin verdiği <font face="Courier New,Courier">charly</font>'den <font face="Courier New,Courier">charly</font>'e gönderilen isteğe (ilki) benziyor:zaman ve PID leri aynı. <p>Elimizde ne olduğunu gelin özetleyelim: <ol> <li> xinetd isteğe izin verdi;</li> <li> <font face="Courier New,Courier">finger</font> isteği <font face="Courier New,Courier">tcpd</font>'ye doğru gitti;</li> <li> <font face="Courier New,Courier">in.fingerd</font> bu isteği reddetti. </li> </ol> Peki sonra neler oluyor? İstek xinetd tarafından kabul edildikten sonra belirtilmiş sunucuya gönderildi (burda <font face="Courier New,Courier">tcpd</font>). Yine de, <font face="Courier New,Courier">tcpd</font> bu bağlantıyı reddetti. Sonra, <font face="Courier New,Courier">hosts.{allow,deny}</font> dosyasına bir göz atmak zorundayız. Eğer <font face="Courier New,Courier">/etc/hosts.deny</font> dosyası sadece <font face="Courier New,Courier">ALL:ALL@ALL</font> içeriyorsa bu, isteğin neden wrapper tarafından reddedildiğini açıklar! <p> Yola göre, <font face="Courier New,Courier">server</font> ve <font face="Courier New,Courier">server_args</font> servis satırları tanımlandı, wrapper özelliği hala erişilebilirdir (<font face="Courier New,Courier">banner</font> - xinetd'de <font face="Courier New,Courier">banner</font> niteliği var-, <font face="Courier New,Courier">spawn</font>, <font face="Courier New,Courier">twist</font>, ...). Hatırlayın; --with-libwrap derleme seçeneği, xinetd süreci başlamadan önce sadece erişim hakları kontrolünü ekler (<font face="Courier New,Courier">hosts.{allow,deny}</font> dosyalarının yardımıyla). Bu örnekte, bu biçimlendirim bize tcp wrapper özelliklerini kullanmaya devam etmemize izin verir. </p><p> Bu özelliklerin üst üste gelmesi çalışsa bile garip davranışlara yol açabilir. xinetd'yi <font face="Courier New,Courier">inetd</font> ve <font face="Courier New,Courier">portmap</font> ile birlikte kullanmak yerine, bir servisi bu "super-daemons" dan <u>sadece biriyle</u> yönetmek daha iyidir. </p> <A NAME="lfindex11"> </A> <H2>chroot service</H2> Bazı servislerin alanlarını sınırlamak veya yeni bir çevre (environment) yaratmak önerilir. <font face="Courier New,Courier">chroot</font> komutu, bir komutla (veya program parçacığı) süper kullanıcı (root) dizinin değiştirmeye izin verir: <blockquote><font face="Courier New,Courier">chroot [options] new_root</font></blockquote> Bu özellikle bind/DNS veya ftp gibi servisleri korumak için kullanılır. xinetd 'nin özelliklerinden yararlanarak bu davranşın bir kopyasını çıkarmak için, <font face="Courier New,Courier">chroot</font>'u bir sunucu gibi bildirmeniz gerekmektedir. Sonra sadece bileşenleri server_ags niteliğiyle aktarmnız gerekmektedir. <blockquote><font face="Courier New,Courier">service ftp</font> <br><font face="Courier New,Courier">{</font> <br><font face="Courier New,Courier"> id = ftp</font> <br><font face="Courier New,Courier"> socket_type = stream</font> <br><font face="Courier New,Courier"> wait = no</font> <br><font face="Courier New,Courier"> user = root</font> <br><font face="Courier New,Courier"> server = /usr/sbin/chroot</font> <br><font face="Courier New,Courier"> server_args = /var/servers/ftp /usr/sbin/in.ftpd -l</font> <br><font face="Courier New,Courier">}</font></blockquote> Böylelikle, bu servise bir istek gönderildiğinde, ilk adımın kullandığı <font face="Courier New,Courier">chroot</font>'tur. Sonra, ona gönderilen ilk bileşen, <font face="Courier New,Courier">server_args</font> satırında ilk yer alandır ve bu yeni süper kullanıcıdır (root). Son olarak, sunucu başlatılır. <A NAME="lfindex12"> </A> <H3>Sonuç</H3> <p> Şimdi, xinetd veya inetd daemonlarından hangisini kullanmanız gerektiğini sorabilirsiniz. Gerçekçi olursak, xinetd biraz daha fazla yönetim istiyor, özelliklede dağıtımlarda yer almadığı süre içinde (Red Hat 7.0 da var). Genel erişimli (Internet gibi) bilgisayarlarda, daha fazla koruma sunduğu için xinetd'yi kullanmak en güvenli çözümdür. Yerel ağdaki makinalara <font face="Courier New,Courier">inetd</font> yeterlidir. <p> <hr width="50%"> <A NAME="lfindex13"> </A> <H3><code>pop3</code> server</H3> <p> <code>pop3</code> oldukça ilgi görüyor gibi gözüküyor: Onu <code>xinetd</code> ile nasıl idare edileceğini soran iletiler aldım.Burada kolay bir biçimlendirim: <pre> service pop3 { disable = no socket_type = stream wait = no user = root server = /usr/sbin/ipop3d # log_on_success += USERID # log_on_failure += USERID } </pre> Elbette ki, <code>server</code> niteliğine kendi yolunuzu yazmanız gerekmektedir. <p> <code>xinetd</code>'den <code>pop3</code> kullanımı, giriş için kullandığınız değerlere bağlı olduğundan zahmetli olabilir. Örneğin, <code>USERID</code> kullanımı, <code>xinetd</code>'nizden istemcideki pop'ta yer alan bir <code>identd</code> sunucusuna bir istek gönderir. Eğer hiçbir sunucu mümkün değilse, timeout 30 saniye bekler. <p> Bu yüzden, birisi iletilerini almaya çalıştığında, <code>identd</code> sunucusu cevap verene kadar en azından 30 saniye beklemek zorunda kalacaktır. Bunu önlemek için ikisinden birini seçmek zorundasınız: <ol> <li>bütün istemcilere bir <code>identd</code> sunucusu yükleyin böylelikle loglarınız oldukça keskin olacaktır (dikkatli olun, biri <code>identd</code> tarafından sağlanan bilgileri değiştirebilir); <li>bu servis için giriş özelliklerini azaltın ki kulllanıcılarınız iletilerini hızlıca alabilsinler. </ol> <br> <!-- 2pdaIgnoreStart --> <A NAME="talkback"> </a> <h2>Bu yazı için görüş bildiriminde bulunabilirsiniz</h2> Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz. <center> <table border="0" CELLSPACING="2" CELLPADDING="1"> <tr BGCOLOR="#C2C2C2"><td align=center> <table border="3" CELLSPACING="2" CELLPADDING="1"> <tr BGCOLOR="#C2C2C2"><td align=center> <A href="http://cgi.linuxfocus.org/cgi-bin/lftalkback?anum=175&lang=tr"><b> talkback page </b></a> </td></tr></table> </td></tr></table> </center> <HR size="2" noshade> <!-- ARTICLE FOOT --> <CENTER><TABLE WIDTH="95%"> <TR><TD ALIGN=CENTER BGCOLOR="#9999AA"> <A HREF="../../common/lfteam.html">Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır</A> <BR><FONT COLOR="#FFFFFF">© Frédéric Raynal, <a href="../../common/copy.html">FDL</a> <BR><a href="http://www.linuxfocus.org">LinuxFocus.org</a></FONT> <BR><a href="http://cgi.linuxfocus.org/cgi-bin/lfcomment?lang=tr&article=article175.shtml" target="_TOP">Burayı klikleyerek hataları rapor edebilir ya da yorumlarınızı LinuxFocus'a gönderebilirsiniz</A><BR></TD> <TD BGCOLOR="#9999AA"><!-- TRANSLATION INFO --> <font size=2>Çeviri bilgisi:</font><TABLE> <tr><td><font size=2>fr</font></td> <td><font size=2>-></font></td> <td><font size=2>--</font></td> <td><font size=2><a href="mailto:pappy@users.sourceforge.net"><FONT COLOR="#FFFFFF">Frédéric Raynal</FONT></a></font></td> </tr> <tr><td><font size=2>fr</font></td> <td><font size=2>-></font></td> <td><font size=2>en</font></td> <td><font size=2><a href="mailto:georges.t@linuxfocus.org"><FONT COLOR="#FFFFFF">Georges Tarbouriech</FONT></a></font></td> </tr> <tr><td><font size=2>en</font></td> <td><font size=2>-></font></td> <td><font size=2>tr</font></td> <td><font size=2><a href="mailto:ozturkka@saneg.itu.edu.tr"><FONT COLOR="#FFFFFF">Kadriye Öztürk</FONT></a></font></td> </tr> </TABLE></TD> </TR></TABLE></CENTER> <p><font size=1>2001-03-17, generated by lfparser version 2.9</font></p> <!-- 2pdaIgnoreStop --> </BODY> </HTML>