Unix - TCPIP, Laboratorium Systemów Operacyjnych


  Laboratorium Systemów Operacyjnych

TCP/IP w systemie Unix

autor: Janusz Karmański

Komunikacja w sieci pracującej pod kontrolą systemu Unix odbywa się w opraciu o protokoły z rodziny TCP/IP. Są to zarazem podstawowe protokoły używane do komunikacji w Internecie. Listę protokołów obsługiwanych przez dany serwer można znaleźć w pliku /etc/protocols.

0x01 graphic

Powiązania pomiędzy protokołami z rodziny TCP/IP

Protokół IP

Każdy komputer w sieci ma przypisany czterobajtowy numer IP. Numer IP składa się z dwóch części: numeru sieci Net-ID oraz numeru komputera (hosta) Host-ID. Obie części mogą różnić się rozmiarem, w związku z czym zdefiniowane są trzy klasy adresów IP:

Klasa A    siec.host.host.host         przy czym pierwszy bit adresu jest równy 0
Klasa B    siec.siec.host.host         przy czym pierwsze dwa bity adresu są równe 10
Klasa C    siec.siec.siec.host         przy czym pierwsze trzy bity adresu są równe 100

Klasa A obejmuje 127 bardzo dużych sieci o maksymalnej liczbie 16 milionów hostów (trzy bajty na numer hosta). Klasa B oznacza 16000 dużych sieci o maksymalnej liczbie 65000 hostów. Klasa C to 2 miliony sieci o maksymalnej liczbie 256 hostów.

Przykładowo klasa B jest klasą adresów używanych na Politechnice Śląskiej - wszystkie adresy zaczynają się od liczb 157.158. Dodatkowo wykorzystywany jest mechanizm podsieci - dwubajtowy numer hosta podzielony jest na 11 bajtów adresu podsieci oraz 5 bajtów faktycznego numeru komputera w podsieci. Tak więc w każdej podcieci może znajdować się fizycznie max. 32 - 2 = 30 komputerów (pierwszy adres z przedziału zarezerwowany jest dla numeru sieci, a ostatni dla adresu rozgłoszeniowego - broadcast). Rozwiązanie takie jest możliwe dzięki stosowaniu maski sieci równej 255.255.255.224 (bity równe 1 odpowiadają bitom sieci, ostatnie 5 bitów równych 0 mówi, że odpowiadające im pięć bitów w adresie IP to numer hosta).
 

Protokół ARP

Aby pakiet IP mógł być przesłany w sieci musi zostać umieszczony w ramce odpowiedniej dla łącza fizycznego danej sieci (np. dla sieci Ethernet). Ramka taka musi zawierać adres komputera docelowego, ale nie adres IP będący logicznym adresem stosowanym w sieci Internet, lecz fizyczny adres karty sieciowej w komputerze docelowym. Jeżeli adresatem pakietu jest komputer pracujący w tej samej podsieci co nadawca (można to sprawdzić znając adresy IP nadawcy oraz adresata a także maskę danej sieci) pakiet jest przesyłany bezpośrednio do niego. W przeciwnym razie pakiet przesyłany jest do rutera, który następnie sam martwi się co z nim dalej zrobić.

Aby jednak przesłać ramkę do adresata trzeba jak już wspomniano znać jego adres fizyczny. Do uzyskania adresów fizycznych komputerów pracujących w podsieci stosowany jest protokół ARP (Address Resolution Protocol). Host lub router chcący uzyskać adres fizyczny komputera o znanym numerze IP wysyła ARP broadcast z zapytaniem o numer IP. Broadcast ten odbierany jest przez wszystkie komputery w sieci. Jeżeli któryś z nich stwierdzi, że to jego numer IP, odsyła odpowiedź z której można odczytać jego numer fizyczny. Aby w przyszłości nie pytać się ponownie o ten sam adres otrzymana odpowiedź jest przez system buforowana.

Polecenie systemowe arp pozwala na zadawanie pytań o fizyczne adresy kart komputerów o znanym adresie IP. Wywołane z opcją -a wyświetla wszystkie znane adresy.

Protokoły UDP oraz TCP

Numery IP identyfikują komputery w sieci, nie mówią natomiast nic o aplikacji będącej adresatem pakietu. Tym zajmują się protokoły warstwy transportowej TCP oraz UDP. Adresacja na poziomie tych protokołów wykorzystuje pojęcie portu. Port jest to 16-bitowa liczba całkowita, identyfikująca adresata (aplikację), który ma odebrać pakiet, jak również jego nadawcę. Część numerów portów (przeważnie mniejsze od 1024) przypisanych jest na stałe do pewnych usług (protokołów wyższych warstw), jak Telnet (port 23), FTP (porty 20 i 21) czy HTTP (zazwyczaj port 80). Porty o wyższych numerach od 1024 mogą być używane do komunikacji przez dowolne aplikacje użytkownika.

Protokół UDP jest prostym protokołem bezpołączeniowym - wysyłając pakiet nie mamy żadnej pewności czy dotrze on do adresata. W odróżnieniu od UDP protokół TCP jest znacznie bardziej złożonym protokołem opartym na nawiązywaniu połączeń między nadawcą a odbiorcą przesyłanych pakietów. Każdy odebrany pakiet powoduje wysłanie potwierdzenia. Jeżeli pakiety nie dojdą do adresata i nadawca nie otrzyma potwierdzenia będą one retransmitowane. W celu uniknięcia przekłamań pakiety są numerowane oraz zaopatrzone w sumę kontrolną.

Poniższy rysunek przedstawia przykładową drogę jaką przebywa pakiet protokołu FTP między dwoma komputerami - klientem i serwerem:

0x01 graphic

Routing

Jeżeli adresat pakietu znajduje się w innej podsieci niż nadawca pakiety przekazywane są między sieciami przez routery. Po otrzymaniu pakietu router sprawdza czy docelowy adres IP pakietu odnosi się do sieci lokalnej, przekazując w takim przypadku pakiet bezpośrednio do adresata. W przeciwnym razie router sprawdza w tzw. tabeli routingu jaka jest najlepsza droga do podsieci docelowej. Tabela routingu zawiera listę routerów obsługujących znane podsieci. Jeżeli w tabeli routingu nie będzie informacji o danej sieci docelowej pakiet przekazywany jest do pewnego domyślnego routera.

Aby tabele routingu zawierały zawsze aktualne informacje (i np. nie kierowały pakietów przez routery które przestały działać) routery automatycznie wymieniają między sobą ich zawartość za pomocą odpowiednich protokołów routingu.

Tabelę routingu można wyświetlić za pomocą polecenia netstat -r. To samo polecenie wywołane bez parametrów wyświetli natomiast wszystkie aktywne (nawiązane) połączenia sieciowe. Informacje o tym czy istnieje fizyczne połączenie z dowolnym hostem IP można uzyskać za pomocą polecenia ping. Wysyła ono co sekundę pakiet kontrolny do maszyny docelowej i informuje o otrzymaniu odpowiedzi lub jej braku. Z kolei polecenie traceroute wysyła pakiety mające ograniczny czas życia w sieci i pozwala prześledzić krok po kroku drogę jaką one przebywają (routery przez które przechodzą).

Konfiguracja systemu

Zanim przystąpimy do konfigurowania usług udostępnianych przez nasz serwer trzeba skonfigurować i przetestować połączenie komputera z siecią.  Program netcfg umożliwia wygodne konfigurowanie interfejsów sieciowych.  Ważniejsze pliki konfiguracyjne (modyfikowane m. in. przez netcfg) w systemie Linux, o których warto wiedzieć, to:

/etc/hosts
W tym pliku musi znajdować się adres oraz nazwa naszego komputera, a także opcjonalnie adresy i nazwy innych komputerów w sieci. Przykładowa zawartość pliku:

## Configured using SAM by root on Mon Jun  5 17:38:22 1995

# @(#)$Header: hosts,v 1.8.109.1 91/11/21 12:01:46 kcs Exp $

#

# The form for each entry is:

# <internet address>    <official hostname> <aliases>

#

# For example:

# 192.1.2.34    hpfcrm  loghost

#

# See the hosts(4) manual page for more information.

# Note: The entries cannot be preceded by a space.

#       The format described in this file is the correct format.

#       The original Berkeley manual page contains an error in

#       the format description.

#

127.0.0.1       localhost       loopback

157.158.11.129  homer homer.iinf.gliwice.edu.pl  hp750

157.158.11.158  nale    # CISCO router

157.158.11.157  hp3sinet.iinf.gliwice.edu.pl hp3sinet

157.158.11.130  bart bart.iinf.gliwice.edu.pl

157.158.11.155  room414

/etc/host.conf
Plik mówi skąd należy pobierać adresy komputerów. Zazwyczaj ma on następującą postać:

order hosts,bind

multi on

Pierwszy wiersz mówi, że adresów komputerów należy szukać najpierw w pliku /etc/hosts, a dopiero jeżeli plik hosts nie zawiera wpisu dla szukanego komputera, należy posłać zapytanie do serwera nazw. Następny wiersz wymusza przekazywanie wszystkich znalezionych w pliku hosts adresów szukanego komputera, a nie tylko pierwszego z nich.

/etc/resolv.conf
Plik konfiguracyjny tzw. "resolwera" nazw.  Słowo
domain pozwala zdefiniować domenę do której należy komputer. Po słowie search można podać domeny, które będą automatycznie przeszukiwane. Słowo nameserver określa adres serwera DNS, może być powtórzone wielokrotnie. Przykładowa zawartość pliku:

domain iinf.polsl.gliwice.pl

search iinf.polsl.gliwice.pl polsl.gliwice.pl

nameserver 157.158.11.129

Demony usług sieciowych

Demony sieciowe to programy pracujące na serwerze Unixowym odpowiedzialne za udostępnianie różnych usług jak Telnet (demon telnetd) czy Ftp (demon ftpd). W systemie Linux programy te znajdują się w kartotece /usr/sbin, a ich nazwy przeważnie zaczynają się od przedrostka in.(np. in.telnetd, in.ftpd, in.rlogind).

Chcąc skorzystać z którejś z usług oferowanych przez serwer Unix'a program (klient danej usługi) uruchamiany przez użytkownika na jego komputerze musi nawiązać połączenie z odpowiednim demonem sieciowym (serwerem danej usługi) pracującym na serwerze. Istnieją dwa tryby pracy demonów sieciowych:

inetd

Inetd odpowiedzialny jest za odbieranie pakietów z interfejsu sieciowego i uruchamianie dla nich odpowiednich demonów sieciowych. Do konfiguracji jego pracy służą pliki /etc/services oraz /etc/inetd.conf. Pierwszy z nich zawiera listę łączącą numery portów z dostępnymi na nich usługami (początkowy fragment pliku):

#/etc/services

#

#nazwa          numer portu     aliasy          komentarz

#

tcpmux          1/tcp                           # rfc-1078

echo            7/tcp

echo            7/udp

discard         9/tcp           sink null

discard         9/udp           sink null

systat          11/tcp          users

daytime         13/tcp

daytime         13/udp

netstat         15/tcp

qotd            17/tcp          quote

chargen         19/tcp          ttytst source

chargen         19/udp          ttytst source

ftp-data        20/tcp

ftp             21/tcp

telnet          23/tcp

smtp            25/tcp          mail

time            37/tcp          timserver

time            37/udp          timserver

rlp             39/udp          resource        # resource location

name            42/udp          nameserver

whois           43/tcp          nicname         # usually to sri-nic

domain          53/tcp

domain          53/udp

mtp             57/tcp                          # deprecated

bootps          67/udp                          # bootp server

bootpc          68/udp                          # bootp client

tftp            69/udp

gopher          70/tcp                          # gopher server

rje             77/tcp

finger          79/tcp

http            80/tcp                          # www is used by some broken 

www             80/tcp                          # progs, http is more correct

link            87/tcp          ttylink

kerberos        88/udp          kdc             # Kerberos authentication--udp

kerberos        88/tcp          kdc             # Kerberos authentication--tcp

supdup          95/tcp                          # BSD supdupd(8)

.......................................

Drugi plik konfiguracyjny /etc/inetd.conf mówi demonowi inetd, co powinien zrobić po otrzymaniu żądania połączenia z konkretną usługą - a dokładnie jaki demon sieciowy uruchomić. Wygląda on zazwyczaj następująco (początkowy fragment):

#/etc/inetd.conf

#

#usługa  rodzaj gniazda protokół flagi użytkownik program_obsługi[argumenty]

#

#echo           stream  tcp      nowait  root     internal

#echo           dgram   udp      wait    root     internal

discard         stream  tcp      nowait  root     internal

discard         dgram   udp      wait    root     internal

daytime         stream  tcp      nowait  root     internal

daytime         dgram   udp      wait    root     internal

#chargen        stream  tcp      nowait  root     internal

#chargen        dgram   udp      wait    root     internal

time            stream  tcp      nowait  root     internal

time            dgram   udp      wait    root     internal

#

# These are standard services.

#

telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.telnetd

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

#fsp    dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.fspd

#

# Shell, login, exec and talk are BSD protocols.

#

shell   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rshd

login   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind

#exec   stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rexecd

talk    dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.talkd

ntalk   dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.ntalkd

#

# Mail, news and uucp services.

#

smtp    stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.smtpd

#nntp   stream  tcp     nowait  news    /usr/sbin/tcpd  /usr/sbin/in.nntpd

#uucp   stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico

#comsat dgram   udp     wait    root    /usr/sbin/tcpd  /usr/sbin/in.comsat

#

# Pop et al

#

#pop-2  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.pop2d

#pop-3  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.pop3d

#

# `cfinger' is for the GNU finger server available for Debian.  (NOTE: The

# current implementation of the `finger' daemon allows it to be run as `root'.)

#

#cfinger stream tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.cfingerd

#finger stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.fingerd

#netstat        stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/netstat

#systat stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/ps -auwwx

#

# Tftp service is provided primarily for booting.  Most sites

# run this only on machines acting as "boot servers."

#

#tftp   dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd

#tftp   dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /boot

#bootps dgram   udp     wait    root    /usr/sbin/bootpd        bootpd -i -t 120

.......................................

Jak widać z powyższego pliku inetd.conf, program inetd nie uruchamia zazwyczaj odpowiedniego demona sieciowego bezpośrednio (chociaż mógłby to robić), ale korzysta z pośrednictwa tcpd.

tcpd

Program tcpd pośredniczy w wywoływaniu właściwych demonów sieciowych realizując jednocześnie dwie ważne funkcje:

Reguły dostępu do usług definiowane są w plikach /etc/hosts.allow oraz /etc/hosts.deny. Tcpd najpierw przeszukuje plik hosts.allow. Jeżeli znaleziona zostanie reguła pasująca do użytkownika i/lub komputera żądającego usługi, zgłoszenie jest realizowane. W przeciwnym razie przeszukiwany jest plik hosts.deny. Jeżeli tym razem znaleziona zostanie reguła pasująca do użytkownika i/lub komputera żądającego usługi, zgłoszenie jest odrzucane. W przeciwnym razie zgłoszenie jest realizowane (polityka domyślna również przy pustych plikach /hosts.allow oraz /hosts.deny, lub ich braku).

Format reguł definiowanych w omawianych plikach jest następujący:

usługi: komputery [: spawn/twist (polecenie)]

gdzie:

Wzorce nazw komputerów można tworzyć rozpoczynając nazwę domeny kropką (np. .gliwice.pl), co oznacza wszystkie komputery z podanej domeny oraz jej pod-domen, lub też kończąc fragment adresu kropką - wtedy pozostała jego część może mieć dowolne wartości (np. 157.158. oznacza wszystkie komputery o adresach 157.158.x.x). Inna możliwość to zdefiniowanie podsieci za pomocą pary sieć/maska, np. 157.158.11.160/255.255.255.224.

Specjalne znaczenie mają słowa:

Opcja spawn (program) uruchomia program w momencie, kiedy ktoś próbuje skorzystać z danej usługi, a następnie umożliwia dalsze logowanie. Opcja twist (program) tak jak wyżej uruchamia program, ale nie pozwala na skorzystanie z usługi.

Przykłady plików hosts.allow oraz hosts.deny:

#/etc/hosts.allow

#

# dostęp do ftp dla wszystkich

in.ftpd:    ALL

#

# dostęp do usług telnet oraz finger tylko z sieci Politechniki Śląskiej

in.telnetd, in.fingerd:    .polsl.gliwice.pl

#

#/etc/hosts.deny

#

# zakaz dostępu komputerom o "podejrzanych" nazwach do wszystkiego, 

# wysyłanie administratorowi listu o próbie dostępu:

ALL:    PARANOID:    twist (echo Próba dostępu PARANOID do usługi %d przez %c | /bin/mail -s "PARANOID" root)

#

# zakaz dostępu dla wszystkich do usługi talk:

in.talk:    ALL

Więcej informacji na temat demona tcpd oraz formatu jego plików konfiguracyjnych po wydaniu poleceń man tcpd oraz man 5 hosts_access.

Inne mechanizmy ograniczenia dostępu do systemu

Plik /etc/ftpusers zawiera listę użytkowników, którzy nie mogą logować się do systemu za pomocą usługi ftp. Dla zwiększenia bezpieczeństwa systemu powinien on zawierać nazwy użytkowników "specjalnych" - wykorzystywanych przez różne programy usługowe (np. uucp, mail, news) oraz obowiązkowo root'a.

Plik /etc/securetty z kolei zawiera listę terminali z których może się logować użytkownik root.

Zadania do wykonania

Uwaga: Przed modyfikacją dowolnego pliku konfiguracyjnego zachować jego oryginalną wersję. Po zakończeniu laboratorium odtworzyć stan systemu z przed jego rozpoczęcia.

1. Za pomocą polecenia ping sprawdzić jakość połączenia dla hostów:

2. Za pomocą traceroute zbadać drogę do powyższych serwerów. Czy droga do konkretnego serwera musi za każdym razem być taka sama?

3. Wyświetlić tabelę routingu lokalnego komputera za pomocą polecenia netstat. Zinterpretować poszczególne pozycje w tabeli. Odczytać z uzyskanej tabeli adres IP domyślnego rutera. Podać fizyczny adres domyślnego routera (polecenie arp).

4. Używając programu Telnet i protokołu HTTP ściągnąć z serwera www.polsl.gliwice.pl stronę główną (index.html).

5. Skonfigurować system tak, aby :

6. Przekonfigurować demon httpd tak, aby pracował na porcie 1080 i był uruchamiany nie przy starcie systemu, a jedynie w razie potrzeby. Jakie mechanizmy bezpieczeństwa oferuje httpd ? (zapoznać się z plikami konfiguracyjnymi oraz dokumentacją).

7. Zapoznać się z protokołami obsługiwanymi przez system (/etc/protocols). Spróbować krótko wyjaśnić przeznaczenie przynajmniej części z nich.

Lokalizacja potrzebnych narzędzi (być może) nie dostępnych na domyślnej ścieżce:

/sbin/arp
/usr/sbin/setup
/usr/sbin/traceroute

Uwaga: Proszę spodziewać się niespodziewanej kartkówki na początku zajęć (sprawdzającej znajomość instrukcji



Wyszukiwarka

Podobne podstrony:
Laboratorium Systemy operacyjne II lista 3
Laboratorium systemów operacyjnych Robert Schaefer
System operacyjny UNIX dla poczatkujacych i zaawansowanych, podsumowanie
Strzelecki - kolos-wejściówka -pytania i odp, WAT, semestr VI, systemy operacyjne UNIX
Pierwsza wersja systemu operacyjnego Unix powstała w Bell Labs firmy AT
Systemy operacyjne laboratorimuiIi
System operacyjny UNIX dla poczatkujacych i zaawansowanych, skorowidz
Pierwsza wersja systemu operacyjnego Unix powstała w Bell Labs firmy AT
Solaris pytania 02, WAT, semestr VI, systemy operacyjne UNIX
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial1 i2
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial3
Systemy operacyjne unix polecenia podstawowe
lab7, SEMESTRY, Sem 7, Interfejsy Programowe Systemow Operacyjnych, Laboratorium
Systemy operacyjne laboratorimuii
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial8 i reszta
System operacyjny UNIX dla poczatkujacych i zaawansowanych, rozdzial6

więcej podobnych podstron