Cumartesi, Aralık 21, 2013

inetd ve xinetd

Linux kullanan bilgisayarlar genelde sunucu olarak kullanılırlar, diğer bilgisayarların çoğu da en azından internet bağlantısına sahiptir. Böyle sistemlerde ağ güvenliği çok önemlidir çünkü yanlış yapılandırma sisteminize girişin yolunu açabilir.

Süper Sunucular (Super server): Çoğu ağ sunucusu ağ portlarını açar ve bağlantılar için bu portları dinler. Bazı programlar bu işi yapması için süper sunucuları kullanırlar. Süper sunucu başka programlar için ağ bağlantılarını dinler ve bağlantı sağlandığında kontrolü esas programa verir. Bunu avantajları şu şekildedir:

*Bellekte daha az yer kaplar.
*Güvenlik. Süper sunucuya güvenlik seçenekleri atanabilir.

İki tane önemli süper sunucu vardır: inetd ve xinetd. inetd'nin güvenlik seçenekleri TCPWrappers isimli bir paket yardımı ile yapılırken xinetd'nin güvenlik özellikleri kendi bünyesinde bulunur.

inetd'yi Yapılandırmak
Bilgisayarınızda hangi süper sunucunun çalıştığını öğrenmek için ps aux | grep inetd komutunu kullanabilirsiniz. bu komut inetd ya da xinetd içeren bir satır döndürür ekrana.

 inetd'yi Ayarlamak

inetd aracılığı ile çalışan sunucuları /etc/inetd.conf ya da /etc/inetd.d aracılığı ile kontrol edersiniz. /etc/inetd.conf dosyası satırlardan oluşan bir dosyadır ve her satır bir sunucuya karşılık gelir.

ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd -l

Tek bir /etc/inetd.conf dosyası kullanmak yerine inetd'nin son versiyonları yapılandırma dosyalarını /etc/inetd.d dizinin altında birden fazla dosyada tutmanıza izin verir. Böyle yapmak bir sunucuyu ekleme, değiştirme ya da silme işleminde direkt o dosyayı kullanmanızı sağlayarak kolaylık sağlar.

Her satır bir ya da daha fazla boşluktan oluşan alanlardan oluşur. Bu alanların anlamları aşağıdaki gibidir.

Servis adı İlk alan (örnekteki ftp) /etc/services dosyasında bulunduğu gibi servisin adıdır.

Soket tipi Soket tipi sistemin ne çeşit bağlantı tipi beklediğini gösterir - güvenilir iki yönlü bağlantı (stream), daha az ek yükü olan daha az güvenilir bağlantı (dgram), ağa alt seviye bağlantı (raw) ya da bunu gibi şeyler. Bu tipler arasındaki farklar oldukça teknik olduğu için bunu yazarken dikkat edilecek şey sunucunun belgelendirmesinde yazılan doğru değeri buraya girmektir.

Protokol ​ Bu satır kullanılan TCP/IP protokolünden hangisinin kullandığını belirtir, genelde tcp ya da udp.
 ​
Wait/no wait ​ dgram soket tipleri için bu girdi sunucunun istemciye bağlanıp soketi serbest bırakmasını (nowait) ya da bütün paketleri işleyip sonra serbest bırakmasını (wait) belirler. Diğer soket tiplerini kullanan sunucularda bu alan nowait olarak belirlenmelidir.

Kullanıcı Bu sunucuyu çalıştıracak kullanıcıdır. root ya da nobody kullanıcıları yaygın seçeneklerdir ama diğer seçenlerde kullanılabilir. Genel bir kural olarak uygun olduğu her durumda sunucuları olabilecek en düşük haklara sahip kullanıcı ile çalıştırmanız güvenlik önlemi olarak işe yarar. Bazı sunucular root erişimini talep edebilir, bunun için sunucunun belgelendirmesini kontrol etmeniz gerekir.

Sunucu adı Bu sunucunun dosya adıdır. Bizim örneğimizde bu /usr/sbin/tcpd yani TCP Wrappers programının konumudur. Programları inetd aracılığıyla çalıştırmak güvenlik için önemlidir.

Parametreler Sunucu adından sonra gelen her şey sunucuya gönderilen parametreleri içerir. Eğer TCP Wrappers kullanıyorsanız bu kısımda diğer parametrelerle birlikte gerçek hedef sunucuyu da buraya eklemeniz gerekir. (/usr/sbin/in.ftpd)

# sembolü /etc/inetd.conf için yorum satırını ifade eder. Bu sebeple eğer inetd ile çalışan bir sunucuyu devre dışı bırakmak isterseniz satır başına # eklemeniz gerekmektedir. Eğer bir sunucuyu inetd.conf dosyasına eklemek istiyorsanız bunun için bir girdi oluşturmanız gerekir. Çoğu sunucu belgelendirmesinde örnek bir inetd girdisini bulundurur. inetd ile gelen çoğu dağıtım yaygın sunucuların girdilerini inetd.conf dosyasına koymuştur ama çoğu yorum satırı olarak bulunur, sunucuları başlatmak için # işaretini kaldırıp sunucuyu aktive edebilirsiniz.

inetd.conf dosyasını değiştirdikten sonra inetd süper sunucunu tekrar çalıştırmanız gerekir. Bu süper sunucu normalde standart SysV sunucusu gibi çalışır bu sebeple şöyle bir şey yazarak tekrar başlatabilirsiniz:

# /etc/rc.d/init.d/inetd restart

Buna alternatif olarak sunucuyu yeniden başlatmak yerine inetd'ye yapılandırma dosyasını yeniden okumasını söyleyebilirsiniz. (SysV startup betiği ile) Yeniden başlatma sunucuyu kapatıp tekrar başlatır. Yeniden yüklemede ise sunucu çalışmayı durdurmaz sadece yapılandırma dosyasını tekrar okur ve değişiklikleri uygulamaya koyar. Pratik olarak ikisi birbirine benzer. Yeniden başlatma seçeneği genelde değişiklikleri daha doğru şekilde uygulamaya koyarken aynı zamanda var olan bağlantıların bölünmesine sebep olabilir.
SysV startup betiğini kullanmak yerine kill ya da killall komutlarını SIGHUP sinyaliyle birlikte inetd için kullanabilirsiniz. Bu sinyal inetd'de dahil olmak üzere çoğu sunucuya yapılandırma dosyalarını yeniden okumaları işine yarar.
kill -HUP pid (eğer süreç id'sini biliyorsanız)
killall -HUP inetd

TCP Wrappers Aracılığı ile Erişimi Kontrol Etmek

TCP Wrappers paketi tcpd olarak bilinen bir programı sunar. inetd'nin sunucuyu direkt çağırması yerine inetd tcpd'yi çağırır ve bu da iki şey yapar: İstemcinin sunucuya erişmek için yetkisinin olup olmadığını kontrol eder ve eğer istemcinin yetkisi varsa tcpd sunucu programını çağırır.

TCP Wrappers iki dosya aracılığı ile yapılandırılır: /etc/hosts.allow ve /etc/hosts.deny

Bunların ilki sisteme bir şekilde erişimine izin verilen bilgisayarları belirler, burada listelenmeyen sistemlerin erişiminin yasaklandığı anlamına gelir. Diğer dosya ise sisteme erişimin izin verilmediği bilgisayarları listeler, diğer herkes siteme erişebilir. Eğer bir bilgisayar her iki dosyada listelenmişse hosts.allow önceliklidir.
İki dosyada aynı basit biçimi kullanır. Dosyalar aşağıdaki biçimdeki satırları içerir:

daemon-list : client-list

daemon-list sunucuların bir listesidir, /etc/services dosyasında bulunan sunucu isimlerini kullanır. ALL gibi bazı özel biçimleri de kullanılabilir.
client-list belirli daemonlar için erişimin izin verildiği ya da reddedildiği bilgisayarların listesidir. Bilgisayarları isimlere ya da IP adreslerine göre yazabilirsiniz ve ağları belirtirken . işaretini kullanabilirsiniz. Örneğin;

.luna.edu satırı luna.edu alan adında olan tüm bilgisayarları reddeder.
192.168.7. satırı 192.168.7.0/24 ağındaki tüm bilgisayarları reddeder.

Client-list'te ALL gibi kelimeler kullanılabilir. EXCEPT istisna oluşturmaya yarar. Örneğin;

ALL: .foobar.edu EXCEPT terminalserver.foobar.edu

Satırı terminal.foobar.edu dışındaki tüm .foobar.edu alan adını kabul eder.

Daha fazla bilgi edinmek için hosts.allow ve hosts.deny'ın man sayfalarına bakabilirsiniz. (Bunlar aynı man sayfasıdır.)

xinetd'yi Yapılandırmak

xinetd programı genişletilmiş bir süper sunucudur. inetd'nin fonksiyonelliğini ve buna ek olarak TCP Wrappers'a benzeye güvenlik seçenekleri sunar.
xinetd'yi Ayarlamak

/etc/xinetd.conf dosyası xinetd'yi kontrol eder. xinetd'yi varsayılan olarak kullanan dağıtımlarda bu dosya sadece global varsayılan seçenekleri ve /etc/xinetd.d içine dosyaları eklemek için bir talimat içerir. xinetd aracılığı ile çalışması gereken sunucu kendi yapılandırma seçeneklerini içeren dosyayı /etc/xinetd.d dizinine eklemelidir.
Sunucunun yapılandırma seçenekleri ister /etc/xinetd.conf dosyasında ister /etc/xinetd.d dizini altında olsun, bu seçenekler inetd.conf dosyasında bulunanlara benzer bilgiler içerir. Ama xinetd yapılandırma dosyası bilgileri birden fazla satıra yayar ve daha ayrıntılı şekilde etiketler.
inetd.conf dosyasında bulunan satırın xinetd.conf karşılığı:

service ftp
{
socket_type        = stream
protocol        = tcp
wait            = no
user            = root
server            = /usr/sbin/in.ftpd
server_args        = -l
}

xinetd.conf dosyasında fazladan önemli bir parametre bulunur: disable. Eğer disable=yes satırını eklerseniz xinetd bu girdiyi yoksayar. Bazı sunucular startup dosyalarını /xinetd.d içine yükler ve varsayılan olarak disable=yes seçeneğini atar. Bu sunucuyu çalıştırmak için satırı disable=no olarak değiştirmeniz gerekir. Ayrıca bir dizi sunucuyu aynı anda ana xinetd.conf dosyasının içindeki defaul bölümünün içinde disabled satırına ekleyerek devre dışı bırakabilirsiniz.
inetd'de olduğu gibi xinetd'de de yapılandırmada değişiklik yaptığınızda süper sunucuyu tekrar başlatmanız gerekir.

# /etc/rc.d/init.d/xinetd restart

inetd'de olduğu gibi betik yardımıyla xinetd'nin yapılandırma dosyasını yeniden okumasını sağlayabilir ya da kill ve killall komutlarına SIGHUP sinyalini göndererek aynı işi yaptırabilirsiniz.

xinetd ile Erişimi Kontrol Etmek
Güvenlik /etc/xinetd.conf ya da sunucu-spesifik yapılandırma dosyalarında kullanılan yapılandırma parametreleriyle sunucu-sunucu temeliyle halledilir.

Ağ arayüzü bind seçeneği servis için xinetd'ye sadece bir ağ arayüzünden dinlemesini söyler. Bunu bir sunucuyu sadece loopback arayüzüne bağlayarak, sunucuyu sadece yerel olarak kullanılabili hale getirebilirsiniz.

Kabul edilen IP ya da ağ adresleri only_from seçeneğine IP adreslerini, ağları (192.168.78.0/24 gibi) ya da bilgisayar isimlerini yazarak xinetd'nin sadece bu adreslerden erişimi kabul etmesini sağlayabilirsiniz, TCP Wrappers'ın hosts.allow'da yaptığı gibi.

Kabul edilmeyen IP ya da ağ adresleri no_access seçeneği only_from'un tersidir; kara listeye eklemek istediğiniz bilgisayar ve ağları buraya yazarsınız. TCP Wrappers'ın hosts.deny dosyasına benzerdir.

Erişim zamanları access_times seçeneği hangi kullanıcıların sunucuya erişebileceği zamanı atar. Zaman aralığı şu şekilde belirlenir: saat:dakika-saat:dakika, 24 saatlik saate göre. Bu seçenek sadece hangi sunucunun o zaman aralığında yanıt vereceğini belirler. Eğer xinetd access_time seçeneği 8:00-17:00 olarak atanmışsa 16:59'da sisteme login olan birisi sistemin cevap verme süresinin dolduğu 17:00 saatinden sonra da kullanmaya devam edebilir.

Bu seçenekleri /etc/xinetd.d dizininde bulunan ve korumak istediğiniz sunucuya ait olan dosyaya girmelisiniz. Satırları service{} arasındaki yere yerleştirmelisiniz. Eğer bütün xinetd tarafından kontrol edilen sunucularınızı korumak istiyorsanız bu satırları /etc/xinetd.conf dosyasına yerleştirebilirsiniz.

2 yorum:

  1. Selam,

    Bloğunu takip etmek istiyorum fakat okurken çok göz yoruyor. Yazıların cok uzuyor. Bir yazının konularını gruplarsan okumak daha rahat olur. İyi çalışmalar.

    YanıtlaSil
    Yanıtlar
    1. Merhaba,

      Linux konuları genel olarak LPIC konularını içerdiği için her yazı bir konuyla ilgili oluyordu. Ama konuları kendi içlerinde bölmeye çalışırım önümüzdeki yazılar için. İlginiz ve uyarınız için teşekkür ederim.

      İyi çalışmalar

      Sil