Geri İleri İçindekiler

8. TCP/IP

Diğer açık sistemler gibi Linux'un da en büyük özelliklerinden biri ağ protokolleri ve uygulamalarının sistemin en doğal parçalarından biri olmasıdır. Dolayısıyla ağ yapısını bilmeyen bir yöneticinin, açık sistemler üzerindeki bilgisini daha da geliştirebilmesi mümkün değildir. Bu bölümde anlatılacaklar Linux üzerinde TCP/IP'ye bir giriş yapılmasını sağlayacaktır. Ayrıntılı bilgi TCP/IP servislerinin ve uygulamalarının anlatıldığı diğer bölümlerden ve aşağıda sözü edilen kitap ve dökümanlardan edinilebilir.

TCP/IP üzerine önerebileceğimiz bir kitap, ilk baskıları TÜBİTAK tarafından bastırılan, ve büyük bir okuyucu kitlesi bulmuş Herkes İçin İnternet (Kürşat Çağıltay) 'tir. Bunun dışında İngilizce Prentice Hall tarafından yayınlanan Internetworking with TCP/IP Volume I (D.E. Comer), O'Reilly & Associates tarafından yayınlanan, TCPIP Network/ Administration (Craig Hunt) ve Linux Network Administrator's Guide (NAG - Olaf Kirsh). NAG, Linux Documentation Project'in bir parçası olduğundan elektronik kopyası İnternet üzerinden ücretsiz olarak edinilebilir.

Linux Documentation Project grubunun hazırladığı NET-3-HOWTO, TCP/IP temelleri ve ağ uygulamalarını örnekleriyle işlemiş. Bu dökümanı nasıl temin edebileceğinizi kitabın sonunda bulabilirsiniz. NET-3, TCP/IP ve buna bağlı protokollerin Linux için geliştirilen bölümüne verilen isimdir.

8.1 Temel TCP/IP

TCP/IP, ilk defa ABD'de ARPANet (Advanced Research Projects Agency Network) adı altında, askeri bir proje olarak geliştirildi. Önceleri askeri amaçlı düşünülen proje önce ünivesiteler tarafından kullanılmaya başlandı. Ardından ABD'nin dört bir yanında birbirinden bağımsız geliştirilen ağlar, tek bir omurga altında NSFNet olarak adlandırıldı ve ulusal boyutu aşarak dünyaya yayıldı. İnternet'in doğuşu da bu tarihe denk gelir.

Bir sokak üzerinde yeralan evlerin adresleri gibi, İnternet'e bağlı olan her makinanın da bir adresi vardır. Bu adres sayesinde bir bilgisayardan diğerine ulaşmak mümkün olur. İnternet adresi 4 bayttan (32 bit) ibaret olup yazılırken her bayt arasına bir nokta konulur. En çok kullanılan bu gösterim şekline örnek olarak, ODTÜ'deki bir bilgisayarın adresi olan 144.122.199.20'yi verebiliriz.

Bununla beraber, 4 baytlık numaraların kolayca hatırlanmasının mümkün olmadığından, İnternet üzerindeki makinalara alfanümerik adlar da verilebilir. Yukarıda örneğini verdiğim adresin ismi, knidos.cc.metu.edu.tr'dır. ilk noktaya kadar olan kelime, makina adıdır(yukarıdaki örnekte knidos), bundan sonraki noktayla ayrılmış bölümler özelden genele doğru makinanın ait olduğu kurum, kurumun tipi ve ülke gibi bilgiler içerir. Bu adlandırma yöntemiyle ilgili ayrıntılı bilgiyi Alan İsimlendirme Sisteminin (Domain Name System - DNS) anlatıldığı bölümde bulabilirsiniz.

8.2 İnternet Adresleri

İnternet üzerinde 3 sınıf adres vardır. Avrupa'da RIPE (Réseaux IP Européens) tarafından dağıtılan bu adresler daha sonra o yerin ağ yöneticisi tarafından uygun şekilde bölünebilir. Bu bölümlendirmeye ``subnetting'' işlemi adı verilir. Bu sayede ağlar gruplanarak herbirisinin yönetimi bağımsız hale getirilmiş, aynı zamanda da kısıtlı olan IP adresleri daha verimli bir şekilde kullanılmış olur.

Üç çeşit İnternet adresi şunlardır :

A ve B sınıfı adreslerin hepsi dağıtılmış ve şu anda intenet C sınıfı adreslerde de sıkıntı çekilmektedir. Adres yetersizliğine çözüm getirmek amacıyla IPv6 ya da IPNG adlarıyla daha uzun İnternet adresleri kullanan protokoller geliştirilme ve test aşamasındadır.

Bir İnternet adresi iki kısımdan meydana gelir: ağ adresi ve düğüm adresi. Her makina, bir ağ üzerinde bulunur ve bu adres ``ağ adresi'' olarak adlandırılır. Üç sınıf (A, B ve C) İnternet adresinin ağ ve düğüm adresleri farklı farklıdır. A sınıfı İnternet adreslerinde ağ adresini 1 bayt tayin eder. Örnek olarak hayali yazılan 74.198.59.33 makinasını tanımlayan ağ adresi 74'tür. Ağ adresi uzun halde yazıldığı zaman kalan 3 baytın yerine 0 konur. Bu durumda yukarıda adı geçen makinaya ait ağ adresi 74.0.0.0 olacaktır.

Ağ adresinden geriye kalan düğüm adresi, bir makinanın İnternet sınıfına göre 1,2 veya 3 bayttan ibaret olabilir. Örnek olarak,

195.12.288.3 makinasının (C sınıfı) ağ adresi 195.12.288.0, düğüm adresi 3'tür.

130.11.195.62 makinasının (B sınıfı) ağ adresi 130.11.0.0, düğüm adresi 195.62'dir.

Düğüm adresleri yerine 4 baytı da kullanmak da olası. Yukarıdaki iki örnek için düğüm adreslerini sırasıyla 195.12.288.3 ve 130.11.195.62 olarak kabul edebiliriz.

Yukarıda sözedilen subnetting (alt ağlara ayırma), çok sıkça kullanılan bir yöntem olup getirdiği birtakım kolaylıklar vardır. Büyük bir iletişim ağı alt ağlara ayrılırsa, kontrol edilmesi daha kolaylaşır.

Bir kuruluş, kendine ait olan B sınıfı adresi subnetlere bölmek isteyebilir. Gerekli düzenlemeleri yaparak bir B sınıfı adresi (örneğin) 255 adet alt adrese ayırabilir. ODTÜ'nün NIC'den aldığı 144.122.0.0 ağı, 254 parçaya bölünmüş, bu parçalardan 144.122.71.0 alt ağı Bilgisayar Mühendisliği bölümüne, 144.122.34.0 alt ağı Kimya Mühendisliği bölümüne verilmiştir. Bundan sonra her bölüm kendi ağı ve üzerindeki makinalardan sorumlu olur.

8.3 Protokoller

Internet protokollerinin yaygınlaşmasındaki en önemli etkenlerden biri herhangi bir ağ donanımına ya da firmaya özel olmamalarıdır. Bilgisayarınız, işletim sistemiz ya da ağ bağlanma yönteminiz ne olursa olsun intenete bağlamanız mümkündür. İnternet protokolleri RFC adı verilen dökümanlarda açıklanır, bu dökümanlar herkese açıktır ve ücretsizdir. RFC'lere NIC ya da ODTÜ'deki yansısından erişebilirsiniz.

Internet protokollerinin temeli Intenet Protocol (IP)'dir. İnternet üzerinde yönlendirme(routing) gibi temel ağ işlemlerinin gerçekleştirildiği protokol katmanıdır. IP paketlerinin her biri kendi başlarına aradaki ağ cihazları tarafından yönlendirileren paket içinde belirtilen adrese ulaştırılır. Bu sırada fiziksel ağ farklılıklarından kaynaklanan paket parçalanmaları(fragmentation) ve bunların yeniden birleştirilmeleri aradaki ağ cihazlarının aşırı yüklenmelerini önlemek gibi görevler de IP katmanı tarafından gerçekleştirilir.IP bağlantı temelli(connection oriented) bir ağ protokolü değildir. Bunun yanı sıra IP paketlerin içeriklerinin doğruluğunu da garanti etmez. IP katmanı sadece başlık kısmında oluşan hataları bulur ve düzeltir. Internet üzerinde yönlendirme, yukarida sözü edilen adreslerden yararlanılarak yapılır.

Kullanıcı uygulamalarının IP katmanına doğrudan ulaşımları yoktur. IP ve uygulama programları arasındaki bağlantıyı sağlayan iki protokol vardır: Transmission Control Protocol (TCP) ve User Datagram Protocol (UDP). TCP, İnternet protokolleri arasındaki en önemli protokollerden biridir (İnternet protokol ailesi bu nedenle TCP/IP diye adlandırılır.). TCP, IP katmanının sağlamadığı bağlantı temelli, güvenilir servisi sağlar. TCP kullanarak ağ üzerinden veri aktaran programlar, bir dosyadan okuyormuş ya da yazıyormuş gibi güvenle ağ bağlantısını kullanabilirler. Arada oluşan hatalar TCP tarafından onarılır. IP protokol katmanına uygulma programları doğrudan erişemediklerinden, hata kontrolü ve bağlantı gerektirmeyen ya da bu işlemleri kendileri gerçekleştirmek isteyen uygulamalar UDP kullanarak ağ üzerinden iletişim sağlarlar.

Yukarıdaki protokollerin yanı sıra İnternet standardı olmuş birçok uygulama protokolü de vardır. Bunlar arasında, TELNET, FTP, SMTP ve HTTP gösterilebilir.

İnternet üzerinde paketler son makinaya ulaştıktan sonra, ilgili uygulama programına ulaşabilmesi için port adı verilen sanal numaralar kullnılır. Servis veren uygulamalar, önceden belirlenmiş standart port numraları kullanırlar. Örnek olarak SMTP 25 numaralı TCP portunu, talk ise 518 numaralı UDP portunu kullanır. Sisteminizin kullandığı port numaraları ve bunların isimlerini /etc/services dosyasından görebilirsiniz.

8.4 İnternet'e Bağlanma

Linux'u İnternet'e bağlamak ilk aşamada biraz zor görünse de biraz teori, biraz pratik yardımıyla mantık kolayca anlaşılabiliyor. Ağlar, bilgisayar sistemlerinde hata olma olasılığı en yüksek, en çok sorunun çıktığı alandır. Bu bölüm, özelde bir ethernet kartı ile bağlantı yapıldığı varsayılarak anlatılmıştır. Ancak anlatılan birçok kavram herhangi bir yapıdaki İnternet bağlantısı için geçerli olacaktır.

Öncelikle çekirdeği -daha önce yapmamışsanız- ağ bağlantısına destek verecek şekilde tekrar derleyin. Bunun için gerekli birkaç soruya "y" cevabı vermek yeterli olacaktır :

CONFIG NET ? [Y/n] y
...
TCP/IP networking (CONFIG_INET) [Y/n/?] y
...
Network device support (CONFIG_NETDEVICES) [Y/n/?]
...
Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [N/y/?] y
...
Other ISA cards (CONFIG_NET_ISA) [N/y/?] y
...
NE2000/NE1000 support (CONFIG_NE2000) [N/y/m/?] y

Yukarıdaki örnekte ethernet kartınızın ne2000/ne1000 ya da uyumlu bir kart olduğu var sayılıyor. Kartınızın marka/modeline uygun seçeneneğe `y' cevabı vermelisiniz. Ethernet kartlarının dışında bağlanma yönteminize bağlı olarak çekirdeği PPP, SLIP, Token Ring gibi bir destekle derlemeniz gerekebilir. Bunları modül olarak derlemeniz de mümkün. Çekirdek derlemek konusunda daha ayrıntılı bilgiyi bu kitabın ilgili bölümünde bulabilirsiniz.

Tabi ki çekirdeği derlemek yetmiyor, derleme aşamasından sonra ağ desteğine sahip olan çekirdek ile makinanın açılması gerekir.

Bağlantıyı gerçekleştirmek için ağ sorumlusundan bazı önemli bilgileri almalısınız. Makinanızın IP adresi bunların başında gelir. Diğer gerekli bilgiler de subnet mask ve broadcast adresidir.

DNS adres çözümleyici olarak çalışan DNS makinası ve makinanızı İnternet'e bağlayacak olan yönlendiricinin IP adreslerini de biliyor olmalısınız.

Bu aşamadan sonra konfigürasyon işlemlerine geçilebilir.

Ağ Konfigürasyonu

Bu bölümde anlatılan rc.* konfigürasyon dosyaları Slackware dağıtımına özeldir. Diğer dağıtımlarda da açılışta çalışan benzeri rc dosyaları değiştirilerek, ya da sistemle birlikte gelen sistem yönetim araçları kullanılarak istediğiniz konfigürasyonu yapabilirsiniz.

Linux, açılırken bazı dosyalara bakarak düzgün çalışması için gerekli konfigürasyonu yapar ve bazı yazılımları çalıştırır. Bu dosyalar /etc/rc.d dizini altında yeralır. İnternet bağlantısı için sadece iki dosyaya gerek duyulur. Slackware dağıtımı içinde bunlar, konfigürasyonu yapan /etc/rc.d/rc.inet1 ve temel ağ programlarını çalıştıran /etc/rc.d/rc.inet2 dosyalarıdır.

Bu dosyadaki değerleri gerektiği şekilde düzenleyerek İnternet'e bağlanacağız. Öncelikle rc.inet1 dosyasının içeriğine göz atalım:

HOSTNAME=`cat /etc/HOSTNAME`

/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0

IPADDR="144.122.71.55"
NETMASK="255.255.255.0" 
NETWORK="144.122.71.0"  
BROADCAST="144.122.71.255"
GATEWAY="144.122.71.1"  

/sbin/ifconfig eth0 $IPADDR broadcast $BROADCAST netmask $NETMASK
/sbin/route add -net $NETWORK netmask $NETMASK
/sbin/route add default gw $GATEWAY metric 1

ifconfig komutu, ağ bağlantısı yapan kartın belirli parametreler ile konfigürasyonunun sağlar. Kart kimliğini bilgisayara tanıtmak için bu komut kullanılır.

İlk satırdaki ifconfig programı, makinanın kendisiyle haberleşmesini sağlamak amacıyla kendi ağ adresini (loopback device) 127.0.0.1 olarak tanıtmıştır. İnternet üzerindeki her makinanın loopback adresi 127.0.0.1 'dir. 127 ile başlayan hiç bir adres, İnternet üzerinde gerçek bir adres olarak kullanılamaz.

Her paket, gönderileceği adrese gitmeden önce bir tabloya bakar. Bu tablo, paketin muhtemel rotasını içerir. route komutu yardımıyla bu tablo oluşturulur veya kontrol edilir. Genellikle bir kart için bir ifconfig kullanılırken, paketin yollanacağı birden fazla rotanın olması durumunda rc.inet1 dosyasında birden fazla route komut girdisi yapılacaktır.

Kullanılan her ağ kartının bir veya birden fazla internet adresi olabilir. Linux'a takılan birinci kart eth0 ismini alırken ikinci karta eth1, üçüncüye eth2 ... denir. Loopback cihazının ismi lo dur. ifconfig komutunu parametre vermeden kullanırsanız, Linux'a tanıtılan çevresel birimlerin listesi ekrana gelir.

$ ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:493 errors:0 dropped:0 overruns:0
          TX packets:493 errors:0 dropped:0 overruns:0

eth0      Link encap:10Mbps Ethernet  HWaddr 48:54:33:00:E8:3A
          inet addr:144.122.71.55  Bcast:144.122.71.255 Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:171956 errors:0 dropped:0 overruns:0
          TX packets:113212 errors:3 dropped:0 overruns:0
          Interrupt:3 Base address:0x300 

cclub.metu.edu.tr makinasının ifconfig bilgisi yukarıdaki şekildedir. Bu makina üzerinde tek ethernet kartı olup, ifconfig bilgisinde ikinci sırada yeralıyor. Kartla ilgili detaylı bilgi (her kart özgü donanım numarası, alınan ve verilen paket sayısı gibi) ifconfig çıktısında var.

route komutunun genel kullanımı şu şekildedir:

route [add | del] [-net | -host] varis_adresi [gw yonlendirici] secenekler...

host: paketin gideceği yer başka bir makina
net: paketin gideceği yer başka bir ağ
varış_adresi: paketin gideceği yer
yönlendirici: bu paketin gidebilmesi için geçmesi gereken yönlendirici
add: tabloya ekle
del: tablodan sil

Tablonun genel durumunu kontrol etmek için route komutuna parametre vermeden komut satırından yazın:

cclub:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
localnet        *               255.255.255.0   U     0      0       67 eth0
loopback        *               255.0.0.0       U     0      0        3 lo
default         router71.ceng.m 0.0.0.0         UG    1      0      404 eth0

Örnek tabloda üç ayrı yönlendirme girişi vardır. Birincisi, makinanın kendisi ile haberleşmesini sağlayacak olan loopback. İkinci satırda, yerel ağa gidecek olan tüm paketlerin yönlendiriciye verilmeden ağa yönlendirilmesi söylenmiş. Son sırada ise (default) paket ilk iki satırda yeralan varış adresinden farklı bir adrese gidecekse, önce yönlendiriciden geçip sonra dış dünyaya açılacağından yönlendiricinin IP adresi yazılmıştır.

ifconfig, biraz karmaşık bir komuttur. Sistem yöneticisinden öğrenmeniz gereken subnet maskesi, broadcast adresi ve IP adresini kullanıp kartların konfigüre eder.

ifconfig eth0 144.122.71.55 netmask 255.255.255.0 broadcast 144.122.71.255

Yukarıda ifconfig yardımıyla eth0 kartına hem bir IP adresi verilmiş, hem de bilgisayarın bulunduğu ağın özellikleri tanıtılmıştır.

Bu andan sonra istendiği kadar route komutu ile makinadan çıkacak paketler için yeni yollar tanımlanabilir.

route add -net ...
route add -host ...

Dosyanın içeriğini sistem görevlisinin verdiği bilgiler doğrultusunda değiştirdikten sonra komut satırından çalıştırmanız, İnternet'e bağlantı için yeterli olacaktır.

# /etc/rc.d/rc.inet1

Bağlantıyı kontrol etmek İnternet adresini bilip çalıştığından emin olduğunuz bir makinaya telnet ile bağlantı yapmaya çalışın :

$ telnet orca.cc.metu.edu.tr
Connected to orca.cc.metu.edu.tr
Escape character is ^]

Ethernet kartının bağlantısını yazılım yoluyla kesmenin yolu ifconfig 'in down seçeneğidir. Örneğin tek ethernet kartı üzerinden İnternet bağlantınız var ve bunu hemen kesmek için aşağıdaki satırı yazın.

# ifconfig eth0 down

ethernet bağlantısını yeniden açmak için

# ifconfig eth0 up
komutunu girmelisiniz. Bu işlem sonrasında yönlendirme bilgilerini yeniden girmeniz gerekebilir.

ping komutu, bağlantıları ve aynı zamanda bağlantı hızını ölçmek için kullanılan bir komuttur. Ping, ICMP protokolü yardımıyla hedef makinaya belirli uzunlukta paketler gönderir. Karşıdaki makina bunları aldığı anda bekletmeden geri yollar. Arada geçen zaman farklı, iki makina arasındaki bağlantı hızı hakkında fikir verir.

cclub:~# ping knidos.cc.metu.edu.tr
PING knidos.cc.metu.edu.tr (144.122.199.20): 56 data bytes
64 bytes from 144.122.199.20: icmp_seq=0 ttl=253 time=34.0 ms
64 bytes from 144.122.199.20: icmp_seq=1 ttl=253 time=487.7 ms
64 bytes from 144.122.199.20: icmp_seq=2 ttl=253 time=3.6 ms

--- knidos.cc.metu.edu.tr ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 3.6/175.1/487.7 ms

netstat komutu, makinanın ağ kartı üzerinden yapılan bağlantıların dökümünü çıkarır.

cclub:~# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 cclub.metu.edu.tr:1947  ftp02.quicktime.appl:20 ESTABLISHED 
tcp        0      0 cclub.metu.edu.tr:1943  despair.thebandit.c:ftp ESTABLISHED 
tcp        0      0 cclub.metu.edu.tr:1424  despair.thebandit.co:20 ESTABLISHED 
tcp        0      0 cclub.metu.edu.tr:1932  ftp02.quicktime.app:ftp ESTABLISHED 
tcp        0      0 cclub.metu.edu.tr:1407  165.113.58.253:20       ESTABLISHED 
tcp        0      0 cclub.metu.edu.tr:1392  165.113.58.253:ftp      ESTABLISHED
tcp        0      0 cclub.metu.edu.tr:1377  ppp23.cc.metu.ed:telnet ESTABLISHED 
tcp        0      0 cclub.metu.edu.t:telnet pclabI_23.feas.met:7075 ESTABLISHED 
tcp        1      0 cclub.metu.edu.t:telnet ppp23.cc.metu.edu.:1054 TIME_WAIT   
tcp        0      0 cclub.metu.edu.t:telnet labmonitor.feas.m:10345 ESTABLISHED 
tcp        0   9495 cclub.metu.edu.t:telnet a5-03-asy27.bil-ro:1026 ESTABLISHED 
tcp        0      0 cclub.metu.edu.t:telnet pclabI_14.feas.me:15694 ESTABLISHED 
tcp        0      0 cclub.metu.edu.t:telnet stu21.math.metu.e:16158 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  1      [ ]         STREAM     CONNECTED     232    
unix  1      [ ]         STREAM     CONNECTED     299   
unix  1      [ ]         STREAM     CONNECTED     327    
unix  1      [ ]         STREAM                   591    

İkinci önemli dosya olan /etc/rc.d/rc.inet2, belli başlı tüm İnternet sunucularını çalıştırır. Aşağıda bu dosyanın bir kısmı görülüyor.

#!/bin/sh

NET="/usr/sbin"
IN_SERV="lpd"
LPSPOOL="/var/spool/lpd"

echo -n "Starting daemons:"

# inetd calistiriliyor.
if [ -f ${NET}/inetd ]; then
  echo -n " inetd"
  ${NET}/inetd
else
  echo "no INETD found.  INET cancelled!"
  exit 1
fi

# degisik internet servisleri sirasiyla calistiriliyor.
for server in ${IN_SERV} ; do
  if [ -f ${NET}/${server} ]; then
    echo -n " ${server}"
    ${NET}/${server}
  fi
done

Bu açılış dosyası, ağ üzerinden servs veren bir dizi sunucu programı çalıştırıyor ve hataları engellemek için programların yerinde olup olmadığına da bakıyor.

Kontrol Dosyaları

Konfigürasyonu tamamlamak için /etc dizini altında yeralan bazı dosyaların elden geçirilmesi gerekir. Bu dosyalar sistemin daha güvenli ve verimli çalışmasına yardım eder. Bu dosyaların belli başlı olanları ve ne işe yaradıklarını görelim.

/etc/hosts dosyasında makinaların IP numaraları ve İnternet adresleri yazılır. Buraya sürekli kullanılan belli başlı önemli makinaların girişi yapılabilir. Her makinanın uzun isimleri yerine kısa bir kelime yazılarak sözkonusu makinaya ulaşılabilir. Örnek bir /etc/hosts dosyası :

127.0.0.1               localhost
144.122.199.20     knidos.cc.metu.edu.tr knidos

İlk satırda loopback IP numarası ve buna karşılık gelen makina ismi vardır. Bu satırı silmemelisiniz. İkinci satırda ise knidos.cc.metu.edu.tr makinasının IP numarasını 144.122.199.20 olarak belirtilmiş ve bu bilgisayara "knidos" ismi ile de ulaşılabilmesi sağlanmıştır.

/etc/hosts.allow ve /etc/hosts.deny konfigürasyon dosyaları, başka bir makinadan Linux'unuza yapılan bağlantıları denetler. /etc/hosts.deny içine, sınırlandırılma getirmek istediğiniz İnternet servislerini ve hangi makinalar için sınırlandırma istediğinizi yazabilirsiniz.

$ cat /etc/hosts.deny
#

in.fingerd: ALL except localhost, localhost : \
        echo "request from %d@%h" >> /tmp/req; 
in.telnetd : .net.tr

Yukarıdaki hosts.deny dosyasında dışarıdan gelebilecek finger istekleri filtreleniyor ve bu istekler hakkında detaylı bilgi (hangi kullanıcı, hangi makinadan) /tmp/req dosyasına ekleniyor.

Sonraki satır in.telnetd yazılımını çalıştıran isteklerin *.net.tr adreslerinden gelmesi halinde bunların gözardı edileceğini belirtir.

hosts.allow dosyasında, genellikle hosts.deny dosyasına gruplanan makina isimlerinin sınırlandırma istenmeyen bir veya birkaç tanesi yazılır. Eğer bir makina ismi ve karşılık gelen İnternet adresi her iki dosyada da varsa, sözkonusu servise izin verilir.

Daha fazla bilgiyi hosts_access(5) man sayfalarından bulabilirsiniz.

/etc/resolv.conf dosyasında alan adı ve alan adı sunucusunun IP numarası yazılır.

$ cat /etc/resolv.conf
domain linux.org.tr
nameserver 144.122.199.20

Yukarıdaki satırlardan üzerinde bulunduğum makinanın alan adının (domain name) linux.org.tr, alan adı sunucusunun ise 144.122.199.20 IP numaralı knidos makinası olduğu anlaşılıyor.

8.5 Yönlendirme

Daha önce de belirtildiği gibi birden fazla ağa fiziksel bağlantısı bulunan ve ağlar arası bilgi paketlerinin geçişine olanak tanıyan araçlara yönlendirici (router) adı verilir.

İki ayrı ağda yeralan makinaların haberleşmesine imkan tanıyan yönlendiriciler, kendilerine gönderilen paketleri bir ağdan diğerine iletirler.

Herhangi bir ağ içerisinde yer alan makinalar aynı IP ağ içerisinde bulunan makinalarla (ağ konfigürasyonları doğru olduğu sürece) haberleşebilirler. Başka adreslere ulaşabilmek için bulunulan ağ dışındaki ağlarla bağlantısı olan ve o ağ üzerinde bulunan bir makina ile haberleşmeleri gereklidir. Bu makina bilgisayar tanımlarında gateway (yönlendirici, arabirim, arayol) olarak verilir.

Minimum yönlendirme, bir ağa bağlı olmayan makinalarda, ifconfig yardımıyla yapılan yönlendirmedir. En çok kullanılan statik yönlendirme çeşidinde, az sayıda arayol ile dışarıya bağlı olan bir makinada, route komutuyla yapılır. Aynı adrese ulaşan birden fazla arayol olması durumunda ise, kendi yönlendirme tablosunu ağın durumuna göre değiştirebilen dinamik yönlendirmeye başvurulabilir.

Linux'un yönlendirici olarak kullanılmasına bir örnek verilebilir. Elimizde var olduğunu bildiğimiz iki ağ olsun. Bu ağlardan birincisini, 144.122.71.0 ağı, diğeri de 144.122.1.0 ağı olarak kabul edelim. 144.122.71.0 ağının İnternet'e bağlanabilmesi için 144.122.1.0 ağına ulaşması gereklidir. Yönlendirici olarak kullanılacak makinayı 71.0 ağında kurup gerekli yönlendirme talimatları verildiği anda bu ağa bağlı olan diğer makinalar da İnternet'e açılabilecektir.

Örnek olarak 144.122.71.0 ağı üzerindeki bir makina için ifconfig satırı

ifconfig eth0 144.122.71.1 broadcast 144.122.71.255 netmask 255.255.255.0

olarak görünüyor. Bu makinanın yönlendirici görevi yapabilmesi için route komutu kullanılır. Bu sayede bu bilgisayar, diğerlerine ulaşacaktır.

route add -net 144.122.71.0 netmask 255.255.255.0 dev eth0

Bu, 144.122.71.0 ağında olan makinaların eth0 kartı üzerinden erişilebileceğini gösterir. Diğer adreslere erişebilmek için ise bir çıkışa (gateway) ihtiyaç duyulmaktadır.

route add default gw 144.122.71.1 dev eth0

Bu satır sayesinde eldeki tablo yardımıyla çözümlenemeyen adreslere gitmesi gereken tüm paketler 144.122.71.1 üzerinden gönderilmektedir. Bu durumda bu makinanın paketleri nereye göndereceğini bildiği varsayılmaktadır.

Bu makina içinde iki adet ethernet bağlantısı bulunmaktadır. Bunlardan biri yönlendiriciyi 144.122.71.0 ağına bağlarken diğeri 144.122.1.0 ağına bağlamaktadır. İlk olarak bu iki kart için gereken tanımlamalar /etc/rc.d/rc.inet1 içerisinde aşağıdakine benzer şekilde tanımlanmıştır.

ifconfig eth0 144.122.71.1 broadcast 144.122.71.255 netmask 255.255.255.0
ifconfig eth1 144.122.1.200 broadcast 144.122.71.255 netmask 255.255.255.0

Birinci ethernet kartı için eth0, ikinci ethernet kartı için de eth1 kısaltmaları kullanılabilir. Doğal olarak her iki ağ için bir 'route' satırı gerekmekte :

route add -net 144.122.71.0 netmask 255.255.255.0 dev eth0
route add -net 144.122.1.0 netmask 255.255.255.0 dev eth1

Bu sayede diğer makinalardan farklı olarak yönlendirici hem 144.122.1.0 ağı, hem de 144.122.71.0 ağı üzerindeki adreslere direk ulaşabilmektedir. Diğer adreslere ulaşabilmek için benzer bir yöntem ile 144.122.1.0 ağı üzerindeki arayola (gateway) yönlendirme yapılır.

route add default gw 144.122.1.200 dev eth1

Bu çeşit yönlendirmeye statik yönlendirme adı verilir. Burada tüm bağlantılar bir tablo halinde verilmiştir. Birbiri arkasına ağ eklendiği zaman statik yönlendirme basitlik avantajını kaybetmeye başlar. Bu amaçla yönlendiricilerin kendi aralarında bildikleri yolları (yönlendirme bilgilerini) birbirlerine aktardıkları dinamik yönlendirme kullanılır.

Ağa bağlanmak amacıyla birden fazla kart kullanıyorsanız, arp komutunu incelemenizi tavsiye ederim. Bu komut pekçok opsiyon alır ve sistem yöneticisinin Linux üzerindeki ağı kontrolünü kolaylaştırır.

# arp -a
           IP address      HW type                 HW address
           191.72.1.3      10Mbps Ethernet         00:00:C0:5A:42:C1
           191.72.1.2      10Mbps Ethernet         00:00:C0:90:B3:42
           191.72.2.4      10Mbps Ethernet         00:00:C0:04:69:AA

Birden Fazla Ethernet Kartının Tanıtılması

Yukarıda örneğini verdiğimiz Linux yönlendirici üzerinde iki ethernet kartı bulunuyor. Bu sayede Linux makinası iki ethernet ağı arasında bir yönlendirici olarak kullanılabilmektedir. Bir Linux'a birden fazla ethernet kartı takmak mümkündür. Bu kartları takarken aşağıdaki maddelere dikkat etmek gerekir:

  1. Çekirdek içerisinde her iki kart için destek bulunmalıdır.
  2. Ethernet kartları sistemdeki diğer IO ve IRQ ayarlarını çakışmayacak şekilde ve farklı değerlerde olmalıdır.

Birden fazla ethernet kartı (ya da gibi herhangi iki veya daha fazla PPP, SLIP gibi ağ bağlantısı) olan makina bir yönlendirici olarak kullanılacaksa, çekirdek IP FORWARDING desteğiyle derlenmelidir. Bunun yanı sıra Linux'unuzun birinci görevi yönlendiricilik olacaksa optimize as router sorusuna da `y' yanıtı vermeniz yararlı olacaktır.

IP: forwarding/gatewaying (CONFIG_IP_FORWARD) [N/y/?] y
...
IP: optimize as router not host (CONFIG_IP_ROUTER) [N/y/?] y

Linux açılırken çekirdek tanıdığı donanımları teker teker arayarak bulmaya çalışır (probing). Birden fazla ethernet kartı kullanımına sık raslanmadığından Linux ilk ethernet kartını bulduktan sonra ikinci ve daha fazla ethernet kartı aramadığından iki kartınız bile olsa Linux sadece birini görecektir. Çekirdeğe ethernet kartı ile ilgili parametreler vererek birden fazla ethernet kartının açılışta bulunması sağlanabilir. LILO kullanıldığı zaman /etc/lilo.conf içinde

append="ether=0,0,eth1"

Yukarıdaki paramatre ile çekirdek ikinci bir ethernet kartını (eth1) da arayacaktır. Ayni şekilde arka arkaya ether=.... parametreleri vererek varsa üçüncü, dördüncü ve daha fazla ethernet kartının aratılması da mümkündür. Ethernet kartlarınızın adreslerini biliyorsanız, kartların yanlış sırayla bulunması tehlikesini de önlemek için,

append="ether=5,0x340,eth0 ether=15,0x300,eth1"

gibi bir satır eklenmesi yeterli olacaktır. Burada eth0 isimli bağlantı IRQ 5 ve IOBASE 0x340 ve diğer ethernet bağlantısı eth1 IRQ 15 ve IOBASE 0x300 olacak şekilde ayarlanır, bu durumda çekirdek bir daha kartların hangi adres ve IRQ'da olduğuna dair tahmin yürütmez, girilen değerlerde bulunan kartları bulmaya çalışır.

Sistem açıldıktan sonra gerçekten istenen kartların istenen adreste çalıştığına emin olmak için /var/adm/messages dosyasına bakabilirsiniz, ya da dmesg komutuyla çekirdek mesajlarını görebilirsiniz.

8.6 NFS

NFS (Network File System), bir ağ üzerinden disklerin paylaşımını sağlamak üzere geliştirilmiştir. NFS sayesinde bir makinada yeralan belirli bir disk bölümü, başka makinalar tarafından okunabilir veya yazılabilir. Bu işleme özellikle büyük organizasyonlarda, disk alanından tasarruf etmek için başvurulur. Her makinada aynı dosyalar, çalıştırılabilir programlar olması yerine bunlar tek sunucuda toplanır, diğer bilgisayarlar bu alanı ortaklaşa paylaşırlar. Paylaşılan dizin, sanki yerel makinanın bir diziniymiş gibi davranır. Kendi disk alanını paylaştıran makinaya NFS sunucusu, bu diske erişim yapan makinalara da NFS istemcisi adı verilir.

NFS kullanımının pek çok avantajı sayılabilir. Bunlar kısaca:

Ağ Üzerinde Paylaşım

NFS'in çalışması, yerel bir diskin mount edilmesi kadar kolaydır. Örnek olarak NFS sunucusu olan aspendos makinasında yeralan /home dizinini, yerel makinadaki /users dizinine yerleştirmek için :

# mount -t nfs aspendos:/home /users

kullanılır. mount, karşı makinanın erişim izinleri doğru olduğunu teyit ettiği anda bu işlemi gerçekleştirir. Sunucu ile istemci arasındaki mesaj alış-verişini mountd programı üstlenir.

NFS kullanabilmek için çekirdekte NFS desteği olması şarttır. Çekirdeğin hangi dosya sistemlerini desteklediğini /proc dosya sistemi altındaki filesystems dosyasını okuyarak anlayabilmek mümkündür. Eğer aşağıdaki satırlarda nfs kelimesi geçmiyorsa çekirdeğe NFS desteği verilerek tekrar derlenmesi gerekir.

$ cat /proc/filesystems
        minix
        ext2
        msdos
nodev   proc
nodev   nfs

NFS için mount programının genel kullanımı şu şekildedir :

mount -t nfs <sunucu-adresi:paylasma-dizini> <yerel-dizin> -o <secenekler>

Sistem açılırken /etc/fstab dosyasında yeralan bilgilerle uzak makinanın diski otomatik olarak paylaştırılabilir. Mount programı bazı seçenekleri destekler. Bu seçenekler -o yardımıyla komut satırında verilebildiği gibi /etc/fstab içinde de belirtilebilir. Her iki durumda da birden fazla seçenek kullanılırsa bunlar birbirlerinden virgülle ayrılırlar.

Açılış sırasında news makinasındaki /usr/spool/news dosyasını yerel makinadaki /usr/spool/news dizini altına yerleştiren /etc/fstab satırı

news:/usr/spool/news  /usr/spool/news   nfs   timeo=20 

şeklinde yazılır. NFS ile kullanılan timeo seçeneğinin karşısında yeralan sayı (saniyenin onda biri olarak), bağlantının kurulabilmesi için geçecek maksimum zamanı gösterir. Bu zamanın aşılması halinde sunucuyla bağlantı kesilir.

NFS Kurulumu

Yerel makinanın sunucu olabilmesi için nfsd ve mountd programlarının çalıştırılması gerekir. Bu yazılımlar açılış esnasında aşağıda görülen /etc/rc.d/rc.inet2 dosyasından başlatılırlar. telnetd, fingerd ve benzeri süreçlerin aksine bu iki program inetd tarafından yönetilmezler. Dikkat etmeniz gereken bir durum da nfsd ve mountd programlarının rpc.portmap programından sonra çalıştırılması gerektiğidir :

if [ -x /usr/sbin/rpc.mountd ]; then                    
# (rpc.mountd programi var ve calistirilabilir mi ?)
        /usr/sbin/rpc.mountd; echo -n " mountd" 
fi
if [ -x /usr/sbin/rpc.nfsd ]; then                      
# (rpc.nfsd programi var ve calistirilabilir mi ?)
        /usr/sbin/rpc.nfsd; echo -n " nfsd"
fi

Sunucunun hangi dizinlerini, hangi istemci(ler) tarafından paylaşılabileceği /etc/exports dosyasında belirtilir. Örnek bir exports dosyasının görünümü aşağıdaki gibidir :

/home            davul.cclub.metu.edu.tr, ordek.cclub.metu.edu.tr
/usr/ftp         (ro)
/cdrom           *.edu.tr

Her satır, yerel makinadaki dizin ismi ile başlar, bu dizini mount etmeye izin verilen bilgisayar isimleri ile devam eder. Makina isimlerinde ? veya * joker karakterleri kullanılabilir. Dosyanın üçüncü satırı, sonu .edu.tr ile biten tüm makinaların /cdrom dizinine ulaşabileceğini belirtir.

Aynı dizini paylaşacak birden fazla makina adı, aralarında virül konarak yazılabilir. Parantez içinde yeralan ro kelimesi, dizinlerin salt okunur mount edilmesi gerektiğini belirtir.

Daha geniş bilgi için mount programının man dosyasına göz atmanızı tavsiye ederim.

8.7 Uzaktan Bağlantı Kurulması

İnternet üzerinde kesinlikle yanlız olmadığınıza göre, kimi durumlarda kendi Linux'unuz dışındaki sistemlere girmek isteyeceksiniz. Bunun için uyarlanmış çeşitli komutlar mevcuttur. Bu komutlar sadece bağlanmak için değil, iki makina arasında birtakım dosya transferi gerçekleştirmek için de kullanılabilir.

Linux (ve UNIX) için ağ uygulamalarında kullanılmak üzere geliştirilen temel olarak iki sistem vardır. Bunlardan UUCP (Unix to Unix CoPy), genel olarak iki makina arasında bir kere bağlantı kurup veriyi iletir ve bağlantıyı kapatır. Eski bir protokol olan UUCP, genellikle modemler arası veri iletişiminde işe yarar.

TCP/IP ise daha önce de belirtildiği gibi yerel ağ veya İnternet üzerinde rahatlıkla kullanılabilen bir protokoldür. TCP / IP 'nin uzaktan bağlantı komutları "r" harfi ile başlar. Örneğin rlogin (remote login) bir sistemden diğerine telnet bağlantısı yaparken rcp (remote copy) ise bir makinadan diğerine dosya kopyalar. Bu ve buna benzer uzaktan bağlantı komutları iyi bilmeniz size çalışmalarınız sırasında zaman kazandıracaktır.

"r" komutlarını kullanabilmeniz için kesinlikle TCP/IP protokolünü tanıyan bir ağ (PPP, Ethernet, SLIP gibi) üzerinde olmalısınız.

rlogin : Geçerli bir hesabınızın olduğu makinaya girmenizi sağlar. telnet komutuyla benzerlik gösterir. Ayrıldıkları nokta, karşıdaki sisteme girerken gerekli konfigürasyonlar yapılırsa şifre sormamasıdır. Bu kısma ileride değineceğim.

Aşağıdaki komut ile ordek isimli makinaya giriş yapılıyor.

$ rlogin ordek

Eğer yukarıdaki gibi yazarsanız, ordek makinasına ait IP numarası veya bu adresin tam isminin, örneğin ordek.cclub.metu.edu.tr/etc/hosts dosyasında yeraldığına emin olmanız gerekir. Karşı makinada bağlanılacak kullanıcı ismi de komut satırından belirlenebilir.

cclub:~$ rlogin ordek -l httpd
Password: 
Last login: Fri Feb 21 22:02:46 from cclub.metu.edu.tr
Linux 2.0.27.
ordek:~$ 

Yukarıda yaptığımız, cclub makinasından ordek isimli makinadaki httpd kullanıcısına bağlanmak oldu. Üzerinde Linux çalışan ordek makinası doğal olarak bana bu kullanıcıya ait şifreyi sordu. ordek makinasında yeralan bir dosya üzerinde değişiklik yaparak istersem şifre sorulmadan anında girilmesini sağlayabilirim. Bunu .rhosts (remote hosts) dosyası sağlar.

.rhosts dosyasında makinaya bağlanabilecek olan kullanıcılar ve bunların hangi makinalardan bağlanacaklarını gösteren bir liste vardır. Biraz karışık mı oldu ? Şu örneği inceleyelim :

ordek:~$ uname -a
Linux ordek 2.0.27 #1 Sun Jan 19 13:06:08 EET 1997 i486
ordek:~$ whoami
httpd
ordek:~$ cat ~/.rhosts
cclub.metu.edu.tr gorkem

Yukarıda ördek makinası üzerindeki httpd kullanıcısının çalışma dizininde bulunan .rhosts dosyasında iki sütun yeralıyor. İlki, güvenilen makinanın ismi (cclub.metu.edu.tr), ikincisi de bu makina üzerindeki güvenilen kullanıcı (gorkem). .rhosts dosyası şifrenizi başkalarına vermeden istediğiniz makinadaki bir kullanıcının hesabınızı kullanmasını sağlar. Kısaca bir satırda herhangi bir kullanıcının makina ismi ve hesap ismi bu dosyada varsa, sisteme giriş izni verilir.

Bu aşamadan sonra cclub.metu.edu.tr adresindeki gorkem kullanıcısı şifre girmeden ordek.cclub.metu.edu.tr adresindeki httpd kullanıcısı olarak çalışmak isterse yapması gereken :

cclub:~$ whoami
gorkem
cclub:~$ rlogin ordek.cclub.metu.edu.tr -l httpd
Last login: Sun Feb 23 11:19:04 from cclub.metu.edu.tr
Linux 2.0.27.
ordek:~$

Artık ordek makinası üzerindeyiz. Şifre girmeden bir makinadan diğerine atlamış olduk. .rhosts dosyasında eğer makina ismi yerine "+" işareti kullanılırsa her makinanın veya kullanıcı ismi yerine "+" işareti kullanılırsa her kullanıcının giriş izni olduğu anlaşılır. Makina isimleri yerine IP adreslerini de kullanabilirsiniz. Birkaç örnek :

144.122.71.55  +        
# (144.122.71.55 makinasi uzerindeki tum kullanicilara giris izni ver)
+ murat 
# Butun makinalar uzerindeki murat kullanicilarina giris izni ver. 
# (Cok buyuk bir guvenlik acigi)

rsh : Bazı durumlarda çalıştığınız makinada dışındaki bir sistemde bir veya birkaç kısa komut çalıştırmak isteyebilirsiniz. Örneğin karşı sistemde kimler, hangi işleri yapıyor veya çalışma dizininde yeralan dosyaları görmek gibi. Bütün bunlar telnet veya rlogin programına gerek duymadan rsh (remote shell) ile yapılabilir. Tek şart, üzerinde komut işletilecek makinadaki .rhosts dosyasında gerekli makina ve kullanıcı ismi girişi olmasıdır.

Diyelim ki davul.cclub.metu.edu.tr makinası üzerindeki /home/gorkem dizininde yeralan tüm dizin ve dosyaları görmek için :

$ rsh davul.cclub.metu.edu.tr ls -al /home/gorkem

komutunu girmelisiniz. rsh komutundan sonra uzaktaki sistemin ismi, ardından da çalıştırılacak olan komut gelmelidir. Diğer bir örnek

$ rsh davul.cclub.metu.edu.tr cat README | lpr

karşı sisteme giriş yapmadan README dosyasını yazıcıdan çıkmasını sağlayacaktır.

8.8 Linux'ta Örnek Ağ Uygulamaları

Aşağıda, Linux ile gerçekleştirilebilecek birkaç örnek ağ uygulamaları yeralmaktadır. Her konu ile ilgili ayrıntılı bilgileri HOWTO dosyalarından öğrenebilirsiniz.

IP Accounting

IP accounting özelliği, çekirdeğin ağ üzerindeki trafiğin analizini yapmasını sağlar. Toplanan veriler, makinanın açıldığı andan itibaren kart üzerinden geçen paket ve toplam bayt sayısıdır. Bir konfigürasyon dosyası yardımıyla bu bilgiler belirli sınıflara ayrılabilir. Çekirdeğin derlenmesi aşamasında IP accounting seçeneği kullanılmalıdır.

* Networking options
...
IP: accounting (CONFIG_IP_ACCT) [N/y/?] y

Çekirdeğin derlenmesinden ve makinanın yeni çekirdekle açılmasından sonra, ipfwadm komutu ile IP accounting işlemlerine başlanabilir. ipfwadm paketi standart Slackware dağıtımı ile beraber gelmektedir.

IP Aliasing

Tek ağ arabirimi (örneğin ethernet veya seri bağlantı) kartı için birden fazla IP numarası gereken durumlarda IP Aliasing kullanılır. Genellikle İnternet Servis Sağlayıcıları, müşterilerinin ftp ve www sunucularını tek makina üzerinde toplamak için bu yola başvururlar. Bu sayede bir makinaya atanmış birden fazla www adresi ve herbirinin ayrı html dosyaları farklı makinalardaymış gibi kullanılabilir.

Bu özellikten yararlanabilmek için çekirdekte IP Aliasing desteği vermelisiniz.

*
* Networking options
...
Network aliasing (CONFIG_NET_ALIAS) [N/y/?] y
...
IP: aliasing support (CONFIG_IP_ALIAS) [N/y/m/?] y

Her sanal ağ adresi için bir arabirim (interface) tanımlamalısınız. Bu sayede aynı bilgisayarda 255 adede kadar sanal makinaya izin verilebilir. Her sanal arabirim, bağlı bulunduğu gerçek arabirim üzerinden işgörür.

Örnek olarak, elimizde kullanabileceğimiz ikinci adres (örnek olarak 100.100.100.101) ve tek ethernet kartı bulunsun. İnternet üzerindeki diğer makinaların, bu iki adrese ulaşabilmeleri için şu satırlar yeterli olacaktır :

# ifconfig eth0:0 100.100.100.101 netmask 255.255.255.0 up
# route add -net 100.100.100.0 netmask 255.255.255.0 eth0:0

Sanal bir arabirimi kaldırmak için ise, ismin sonuna '-' karakteri getirmek yeterli olur.

# ifconfig eth0:0- 0

IP Masquerading

IP Masquerading, bir ağın arkasındaki birden fazla makinanın bir Linux üzerinden dışarıya bağlanmasıdır. Tüm makinalar dışarıdan aynı IP adresi gibi görünürler.

Örnek olarak İnternet'e bağlandınız. İnternet Servis Sağlayıcınız size sadece bir IP numarası verdi ve odanızda İnternet'e bağlanmayı bekleyen birden fazla bilgisayar var. Servis Sağlayıcıya her makina için para ödeyip bir hesap ismi almaktansa odadaki tüm makinalar bir Linux ve telefon bağlantısı yardımıyla İnternet'e erişebilirler.

IP Masquerading kullanabilmek için çekirdekte bu desteğin verilmesi gerekiyor. Bunun için IP Forwarding, IP Firewalling ve IP Masquerading seçeneklerini açık tutmalısınız.

IP Masquerading için gerekli yazılımlar Slackware dağıtımı ile birlikte gelmektedir.

SAMBA (NetBEUI ve NetBios desteği)

SMB, Windows 3.11, NT ve 95 tarafından kullanılan ve disk ve yazıcı paylaşımına olanak veren bir protokoldür. Linux, Samba desteği ile bu işletim sistemleri veya kendi üzerinde bulunan disk ve yazıcıların tüm makinalar tarafından paylaşılmasını sağlar.

Samba ile 4 işlem gerçekleştirilebilir : Windows makinalarının Linux diskini paylaşmaları, Linux makinalarının Windows sistemi diskini paylaşmaları, Windows makinalarının Linux yazıcısını paylaşmaları ve Linux makinalarının Windows yazıcısını paylaşmaları.

Yine bu özelliği kullanabilmek için çekirdekte Samba desteği vermeniz gerekecektir.

SMB filesystem support (to mount WfW shares etc..) (CONFIG_SMB_FS) [Y/m/n/?]

smbfs, SMB protokolünü tanıyan dosya sistemine verilen isimdir. smbfs servisi verebilmek için smbfs.tgz paketini indirip derlemelisiniz.

smbfs.tgz paketini ftp.metu.edu.tr adresinden bulabilirsiniz.

Novell Desteği

NCP (NetWare Core Protocol), IPX üzerinde yeralan ve Novell NetWare istemcilerinin sunucularla konuşmasını sağlayan protokole verilen isimdir. Bu seçenek ile, NetWare dosya sunucularına diğer Unix makinalardaki gibi bağlanmak olasıdır.

NetWare dosya sistemlerine erişebilmek için özel bir mount programı (ncpmount/ncpumount) kullanmanız gerekecektir. Bu ve diğer programlar, ncpfs paketinin içinde vardır. Bunun için çekirdekte

The IPX protocol (CONFIG_IPX) [Y/m/n/?]

ve

NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS) [Y/m/n/?]

desteğini vermelisiniz.

lwared ve mars_nwe paketleri, Linux İşletim Sistemi'ne Novell sunucu olma özelliği verir.

Apple desteği

Aynı ağ üzerinde yeralan Apple Macintosh makinaları ile aynı disk ve yazıcıların paylaşımını sağlayan pakete netatalk ismi verilir. Bu desteği kullanabilmek için çekirdeğin derlenmesi sırasında

IP: multicasting (CONFIG_IP_MULTICAST) [Y/n/?]
...
The IPX protocol (CONFIG_IPX) [Y/m/n/?]
...
Appletalk DDP (CONFIG_ATALK) [Y/m/n/?]

parametrelerine evet cevabı vermelisiniz. Appletalk için daha fazla bilgiye ve disk ile yazıcı paylaşımı yapan pakete http://www.umich.edu/~rsug/netatalk adresinden erişebilirsiniz.

8.9 NIS

NIS Network Information Service kelimelerinin baş harflerinden oluşmaktadır. Amacı bir ağ üzerindeki bütün makinalara, bütün ağ tarafından bilinmek kaydıyla bilgi akışı sağlamaktır. NIS tarafından dağıtılacak bilgiler, hesap isimleri, şifreler, kullanıcı dizinleri ve grup bilgileri olabilir.

NIS yardımıyla, örneğin size ait şifre NIS veri tabanında kayıtlı ise, ağ üzerinde NIS istemci programlarını çalıştıran bütün makinalara girebilirsiniz.

NIS'in biraz daha gelişmiş bir sürümü olan NIS+ , verileri korumak amacıyla şifreleme yöntemi kullanır. Bu avantajına rağmen NIS+ 'ın kurulumu ve kullanımı daha zordur.

NIS'in Çalışma Prensipleri

Bir ağ üzerinde en az bir makina NIS sunucusu olmak zorundadır. İster herbiri farklı NIS ``domain'' lerine hizmet eden çoklu NIS sunucularına sahip olabilirsiniz, ya da beraber çalışan NIS sunucularınız olur. Bu durumda sunuculardan biri ana NIS sunucusu, diğerleri ise ikincil (slave) NIS sunucusu olabilirler.

İkincil sunucular sadece NIS veritabanının kopyalarına sahiptirler ve bu kopyaları ana NIS sunucusunda bulunan veri tabanlarında değişiklik yapıldığı zaman ana sunucudan alırlar. Ağ üzerinde bulunan makina sayısına ve ağ güvenliğine bağlı olarak bir veya daha fazla ikincil sunucu kurulabilir. Bir NIS sunucusu kapandığında veya çok yavaş cevap verdiğinde, diğer NIS istemcileri çalışan veya daha hızlı bir sunucu bulmaya çalışacaktır.

NIS veritabanları DBM adı verilen yapıdadır ve bu yapı ASCII veritabanlarından çıkarılır. Ana NIS sunucusu hem ASCII veritabanlarını hemde DBM veritabanlarını içermelidir. NIS sunucusu, ASCII yapıdaki /etc/passwd gibi veri tabanlarını DBM veri tabanına çevirerek /var/yp dizini altında tutar.

İkincil sunucular NIS haritalarında oluşacak değişikliklerden yppush programı aracılığıyla haberdar edilecek ve veritabanlarını senkronize etmek için otomatik olarak gereken değişiklikleri alacaklardır. NIS istemcilerinin bunu yapmasına gerek yoktur çünkü sunucudaki DBM veritabanlarında bulunan bilgileri okumak için devamlı olarak NIS sunucusu ile bağlantı kurmaktadır. İkincil sunuculara gayet büyük ağlar üzerinde ihtiyaç duyulur.

NIS İstemcisi

NIS'i kurmak için herşeyden önce /usr/sbin/rpc.portmap programını çalıştırmanız gerekir. Bazı Linux dağıtımları (örneğin Slackware) bu daemon'u çalıştırmak için gereken kodu /etc/rc.d/rc.inet2 dosyasında barındırırlar.

RPC portmapper (man 8 portmap) programı bir sunucu olup RPC program numaralarını TCP/IP (veya UDP/IP) protokol port numaralarına çevirir. RPC portmapper o makina üzerinde RPC çağrılarını (NIS istemci yazılımının yaptığı iş) RPC sunucularına (NIS sunucuları gibi) yapılabilmesi için çalışıyor olmalıdır. Bir RPC sunucusu başladığı zaman, portmap'a hangi port numarasını dinlediğini ve hangi RPC program numaralarına hizmet edeceğini bildirir. Bir istemci verilen bir program numarasına RPC çağrısı yapmak istediği zaman, ilk önce sunucu makina üzerindeki portmap ile bağlantı kurarak RPC paketlerinin nereye gönderileceğini belirler.

Normal olarak, bazı RPC sunucuları inetd(8) tarafından başlatılır, bu yüzden portmap, inetd'den önce çalıştırılmalıdır.

NIS kurmadan önce, yukarıda da belirtildiği gibi iki durumu değerlendirmek zorundasınız. Ya sizin makinanız halihazırdaki NIS sunucularının bulunduğu bir ağın parçası olacaktır, ya da henüz ağınızda herhangi bir NIS sunucusu yoktur.

Birinci durumda, sadece istemci programlara (ypbind, ypwhich, ypcat, yppoll, ypmatch) ihtiyacınız vardır. En önemli program ypbind'dır. Bu programı her zaman çalıştırıyor olmalısınız. ypbind çalışır çalışmaz, makinanız bir NIS istemcisi durumuna gelir.

İkinci durumda, eğer NIS sunucularınız yoksa, bir de NIS sunucu programına (ypserv) ihtiyacınız vardır.

NIS İstemcisi Kurulması

Slackware dağıtımıyla gelen NIS yazılımını daha önce kurmamışsanız, sisteminize yükleyin. NIS istemcisi için ypbind dışındaki çalıştırılabilir dosyalar (ypwhich, yppoll, ypmatch) bütün kullanıcılar tarafından erişilebilir bir dizinde bulunmalıdır. Öncelikle yapılması gereken ypbind'ı test etmektir. Bunun için,

Bu noktadan sonra ypcat, vb gibi NIS istemci programları kullanılabilir. Örneğin, ypcat passwd komutu bütün NIS şifre veritabanını gösterir.

Şimdi sistemde bulunan /etc/rc.d/rc.inet2 dosyasını ypbind programının sistem açılırken çalışması ve sisteminizin bir NIS istemcisi olarak görev yapması için değiştirmek gerekir. Ayrıca, /etc/rc.d/rc.inet2 dosyasını açın ve ypbind'ı çalıştıran ve domain adını belirleyen satırların başındaki # işaretini kaldırın.

# domainname

if [ -r /etc/defaultdomain ] ; then
domainname-yp `cat /etc/defaultdomain`
fi

# Start the ypbind daemon

if [ -f ${NET}/ypbind -a -d /var/yp ]; then
  echo -n " ypbind"
  ${NET}/ypbind
fi

NIS'i çalıştırmak için /etc/passwd ve /etc/group dosyalarının sonuna ``+:*:0:0:::'' satırını ekleyin. ypbind'ı öldürüp yeniden çalıştırın.

NIS Sunucusu Kurulması

NIS aracılığı ile kullanıma açık olacak dosyalardan ihtiyacınız olanların belirlenmesi gerekir. /var/yp/Makefile/ dosyasında gerekli ekleme/çıkartmaları yapın.

NIS veri tabanını aşağıdaki satırı yazarak oluşturun:

$ cd /var/yp; make

Bu programın çalıştırılmasından sonra /var/yp dizini altında NIS domain adıyla bir dizin yaratılır ve tüm veri tabanları burada tutulur. portmapper programının (rpc.portmap) çalıştığından emin olduktan sonra ypserv sunucusunu çalıştırın. rpcinfo komutu ile ypserv'in çalışmasını kontrol edin.

$ rpcinfo -u localhost ypserv
program 100004 version 2 ready and waiting

Artık sunucu çalışmaktadır.

yppasswdd Programı

NIS şifre veritabanının güvenilir olması için ``yppasswd daemon'' gereklidir. Kullanıcılar yppasswd komutu yardımıyla sunucu üzerindeki şifrelerini değiştirebilirler. yppasswd daemon (kısaca yppasswdd) bu değişikliklerin doğru bir şekilde yapılmasını ve bu şifre değiştirme sürecini kontrol eden sunucudur.

NIS'in Kontrol Edilmesi

NIS, birkaç basit komut ile kontrol edilebilir.

$ ypwhich

ypwhich NIS sunucusunun hangi makina olduğunu söyleyecektir. Bu komut ise

$ ypmatch userid passwd

(userid herhangi bir kullanıcının login adı olmak kaydıyla) size bu kullanıcının NIS şifre dosyasındaki bilgilerini verir. ypwhich ve ypmatch programları NIS dağıtımı içinde gelirler.

Bir NIS sunucusu kapandığı ve tekrar başladığı zaman ypbind aşağıdaki gibi bir mesaj ile başlayabilir:

yp_match: clnt_call:RPC: Unable to receive; errno = Connection refused

ve NIS veritabanında kayıtlı olanlar sisteme giremezler. root olarak sisteme girmeyi deneyin ve başarılı olursanız ypbind işlemini öldürüp yeniden başlatın.


Geri İleri İçindekiler