Następna strona Poprzednia strona Spis treści

5. Podstawowe informacje na temat konfigurowania sieci.

Aby porawnie skonfigurować sieć, musisz zapoznać się i zrozumieć informacje prezentowane w kolejnych podrozdziałach. Są to podstawowe zasady funkcjonowania sieci, niezależnie od jej wewnętrznej natury.

5.1 Czego potrzebuję aby rozpocząć?

Zanim zaczniesz budować lub konfigurować swoją sieć będziesz potrzebował kilku rzeczy. Najważniejsze z nich to:

Aktualne źródła jądra.

Ponieważ jądro którego używasz może nie posiadać obsługi sieci, lub kart sieciowych, które posiadasz, będziesz prawdopodobnie potrzebował źródła jądra, abyś mogł skompilować nowe jądro z odpowiednimi opcjami.

Najnowszą wersją jądra mozna uzyskać z: ftp.funet.fi.

Zwykle pliki źródłowe powinny być rozpakowane do katalogu /usr/src/linux. Jeśli potrzebujesz informacji jak dodać do jądra dodatkowe łaty lub jak skompilować jądro powinieneś przeczytać Kernel-HOWTO.

Jeśli wyraźnie nie zostało to zaznaczone, zalecam pozostanie przy standardowych wersjach jądra (te z parzystymi numerami wersji po pierwszej kropce). Wersje testowo-rozwojowe (z nieparzystą drugą liczbą) mogą mieć zmienioną strukturę wewnętrzną lub wprowadzone inne zmiany uniemożliwiające poprawną współpracę z innym oprogramowaniem zainstalowanym na twoim systemie. Jeśli nie jesteś pewien, że poradzisz sobie z tego rodzaju problemami, w połączeniu z możliwosćią wystąpienia błędu w innym oprogramowaniu, nie używaj wersji rozwojowych.

Aktualne narzędzia sieciowe.

Narzędzia sieciowe to programy służące do konfigurowania urządzeń sieciowych Linuxa. Np. pozwalają na przydzielenie urządzeniu numeru adresu IP lu na skonfigurowanie routingu (marszruty).

Nwe dystrybucje Linuxa zawierają wszelkie niezbędne narzędzia sieciowe. Jeśli ich jescze nie zainstalowałeś, powinieneś to teraz zrobić.

Jeśli nie instalowałeś Linuxa z dystrybucji, będziesz musiał pobrać źródła i skompilować narzędzia samodzielnie. To nie jest trudne.

Narzędziami sieciowymi opiekuje się Bernd Eckenfels i są dostępne pod adresem: ftp.inka.de lub kopia ftp.linux.uk.org.

Pamiętaj aby wybrac wersję najbardziej odpowiednią dla wersji jądra, które posiadasz, postępuj zgodnie z uwagami zawartymi w instalowanym pakiecie.

Aby skonfigurować wersję aktualną w momencie pisania tego dokumentu musisz wykonać następujące polecenia:

#
# cd /usr/src
# tar xvfz net-tools-1.32-alpha.tar.gz
# cd net-tools-1.32-alpha
# make config
# make
# make install
#

Dodatkowo jeśli zamierzasz skonfigurować firewall lub korzystac z funkcji IP Masquerade, potrzenujesz programu ipfwadm. Najnowszą wersję można zdobyć tutaj: ftp.xos.nl. Pamiętaj, że dostępnych jest kilka wersji. Musisz wybrać tę, która najlepiej współpracuje z jądrem, które posiadasz.

Aby skonfigurować wersję aktualną w momencie pisania tego dokumentu musisz wykonać następujące polecenia:

#
# cd /usr/src
# tar xvfz ipfwadm-2.3.0.tar.gz
# cd ipfwadm-2.3.0
# make
# make install
#

Programy-aplikacje sieciowe.

Sieciowe programy użytkowe (aplikacje sieciowe) to takie, jak np. telnet,ftp i ich odpowiedniki po stronie serwera. Dystrybucją większości z nich zajmuje się David Holland <dholland@hcs.harvard.edu> . Można je zdobyć z ftp.uk.linux.org.

Aby skonfigurować wersję aktualną w momencie pisania tego dokumentu musisz wykonać następujące polecenia:

#
# cd /usr/src
# tar xvfz /pub/net/NetKit-B-0.08.tar.gz
# cd NetKit-B-0.08
# more README
# vi MCONFIG
# make
# make install
#

Adresy.

Adresy protokołu IP (Internet Protocol) składają się z czterech bajtów. Zwykle zapisuje się w notacji zwanej 'dziesiętną-z kropkami (decimal dotted notation). Każdy bajt jest zamieniany na liczbę dziesiętną (0-255), opuszczając wszelkie zera na początku (chyba, że liczba jest równa zero) i zapisywany kolejno, rozdzielony jeden od drugiego kropką `.'. Konwencja wymaga, aby każdy interfejs sieciowy komputer czy routera posiadał własny numer IP. Można ten sam numer przydzielać do róznych urządzeń sieciowych jednego komputera, lecz zwykle każdy interfejs posiada własny numer IP.

Numery IP sieci to nieprzerwane sekwencje adresów IP. Wszystkie adresy należące do jednej sieci mają wspólną liczbę cyfr w pełnym adresie IP. Część adresu wspólna dla wszystkich adresów IP należących do sieci nazywa się numerem sieci (adresu IP).Pozostałe cyfry określają adres komputera . Liczba bitów które są wszpólne dla wszystkich adresów w ramach jednej sieci nazywamy maską siecie (netmaską). Rolą netmaski jest określenie które adresy przynależą do sieci, której ona dotyczy, a które nie. Rozważmy następujący przykład:

rnet Protocol Networks are contiguous sequences of IP addresses. All addresses within a network have a number of digits within the address in common. The portion of the address that is common amongst all addresses within the network is called the `network portion' of the address. The remaining digits are called the `host portion'. The number of bits that are shared by all addresses within a network is called the netmask and it is role of the netmask to determine which addresses belong to the network it is applied to and which don't. For example, consider the following:

-----------------  ---------------
Host Address       192.168.110.23
Adres komputera
Network Mask       255.255.255.0
Netmaska
Network Portion    192.168.110.
Cześć sieciowa adresu
Host portion                  .23
Cześć komputerowa adresu
-----------------  ---------------
Network Address    192.168.110.0
Adres sieci
Broadcast Address  192.168.110.255
Adres ogłoszeniowy (informacja wysłana pod ten adres dotrze do
wszystkich komputerów danej sieci)
-----------------  ---------------

Jeśli dowolny adres IP poddamy operacji bitowej koniunckcji z jego netmaską, otrzymamy w ten sposób adres sieci, do której on należy. Adres sieci jezt zatem najmniejszym adresem w puli adresów danej sieci z zawsze wypełnioną zerami częscią komputerową adresu.

Adres ogłoszeniowy (broadcast) to specjaly adres IP. Wszystkie komputery w danej sieci prócz nasłuchiwania pakietów adresowanych pod ich numer IP, nasłuchują również pakietów kierowanych na ten adres. Jeśli chemy wysłać pakiet, który ma dotrzeć do wszystkich komputerów w danej sieci, korzystamy właśnie z adresu ogłoszeniowego. Różnego rodzaje informacje dotyczące np. trasowania (routingu) lub zawierające różane ostrzerzenia nadawane są właśnie na ten adres, tak aby wszystkie komputery otrzymały go jednocześnie. Istniejądwa standardy jak powinien wyglądaćadres ogłoszeniowy. W powyższym przykładzie byłto 192.168.110.255. Z nieznanych przyczyn w niektórych miejscach jako adresu ogłoszeniowego użwa się adresu sieci. W ppraktyce zasadnizco nie ma zanczenia, której konwencji uzywamy, pod warunkiem, że wszystkie komputery mają skonfigurowany adres ogłoszeniowy w ten sam sposób.

Z przyczyn administracyjnych w początkowym okresie rozwoju protokołu IP, pewne grupy adresów IP zostału połączone w sieci, które z kolei zostały połączone w klasy. Te klasy dostarczają określoną liczbę różnej wielkości sieci, które mogą być przydzielane użytkownikom. Wygląda to mniej więcej tak:

----------------------------------------------------------
| Klasa   | Netmaska      | Adresy sieciowe              |
| sieci   |               |                              |
----------------------------------------------------------
|    A    | 255.0.0.0     | 0.0.0.0    - 127.255.255.255 |
|    B    | 255.255.0.0   | 128.0.0.0  - 191.255.255.255 |
|    C    | 255.255.255.0 | 192.0.0.0  - 223.255.255.255 |
|Multicast| 240.0.0.0     | 224.0.0.0  - 239.255.255.255 |
----------------------------------------------------------

Z których adresów powinieneś korzystać zależy bezpośrednio od tego co robisz. Aby uzyskać wszystkie adresy których potrzebujesz możesz być zmuszony do wykonania kombinacji następujących działań:

Instalacja Linuxa w istniejącej sieci IP

Jeśli hcesz zainstalować Linuxa w istniejącej sieci IP powinieneśskontaktowaćsię z administratorem sieci i poprosić go o następujące informacje:

Następnie powinieneś skonfigurować urządzenie sieciowe podając uzyskane informacje. Nie możesz wziąć ich z powietrza i oczekiwać, że wszystko będzie działać poprawnie.

Budowanie nowej sieci, która nigdy nie będzie podłączona do internetu

Jeśli budujesz prywatną sieć i nie masz zamiaru podłączać ją do Internetu to możesz wybrać zupełnie dowolne numery IP. Jednak dla bezpieczeństwa i porządku powinieneś skorzystać z grupy adresów IP pozostawionych dokładnie w tym celu. Sąone określone w dokumencie RFC1597:

-----------------------------------------------------------
|         Zarezerwowane prywatne adresy IP                |
-----------------------------------------------------------
| Klasa   | Netmaska      | Adres komputera               |
| sieci   |               |                               |
-----------------------------------------------------------
|    A    | 255.0.0.0     | 10.0.0.0    - 10.255.255.255  |
|    B    | 255.255.0.0   | 172.16.0.0  - 172.31.255.255  |
|    C    | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 |
-----------------------------------------------------------

Powinieneś się wpierw zdecydować jak wielka będzie twoja sieć, a następnie wybrać tyle adresów IP ile potrzebujesz.

5.2 GDzie umieścić polecenia koniguracyjne ?

Istnieje kilka sposobów realizacji procedury uruchamiania systemu Linux. Po załadowaniu jądra uruchamiany jest program o nazwie `init'. Porgram init odczytuje swój plik konfiguracyjny /etc/inittab i kontynuuje proces uruchamiania systemu. Istnieje kilka odmian programu init i to jest właśnie przyczyna różnic w konfiguracji między różnymi dystrybucjami czy komputerami.

Zwykle plik /etc/inittab zawiera pozycję wyglądającą mniej więcej tak:

si::sysinit:/etc/init.d/boot

Ten wiersz określa nazwę skryptu który ostatecznie jest odpowiedzialny za proceduręstartową. Jest to mniej więcej odpowiednik pliku AUTOEXEC.BAT w DOSie.

SKrypt startowy uruchamia zwykle różne inne skrypty i siećjest konfigurowana zwyklę jednym z takich skryptów.

Poniźsza tabela może posłużyć jako przewodnik po twoim systemie:

-------------------------------------------------------------------------------
Dystryb. |Konfiguracja interfeju(karty)/routingu      | Inicjalizacja
-------------------------------------------------------------------------------
Debian   |/etc/init.d/network                         |/etc/init.d/netbase     
         |                                            |/etc/init.d/netstd_init
         |                                            |/etc/init.d/netstd_nfs
         |                                            |/etc/init.d/netstd_misc
-------------------------------------------------------------------------------
Slackware|/etc/rc.d/rc.inet1                          |/etc/rc.d/rc.inet2 
-------------------------------------------------------------------------------
RedHat   |/etc/sysconfig/network-scripts/ifup-<ifname>|/etc/rc.d/init.d/network
-------------------------------------------------------------------------------

Większość nowocześnych dystrybucji zawiera program, który umożliwi konfigurację wielu podstawowych interfejsów sieciowych. Jeśłi masz taki program powinieneś sprawdzić czy jest on dla ciebie wystarczający, zanim zdecydujesz się na ręczną modyfikacje. configuration.

-----------------------------------------
Dystryb.  | Program konfiguracji sieci   
-----------------------------------------
RedHat    | /sbin/netcfg
Slackware | /sbin/netconfig
-----------------------------------------

5.3 Tworzenie interfejsów sieciowych.

W większości systemów Unix urządzenia sieciowe znajdują się w katlogu dev. W linuxie tak nie jest. Linux tworzy urządzenia sieciowe dynamicznie, dlatego nie wymaga istnienia plików urządzeń sieciowych.

W większości przypadków urządzenia sieciowe są tworzone automatycznie przez sterowniki tych urządzeń w czasie ich iniclacji i rozpoznawania sprzętu. Na przykład sterowniki sieciowych kart ethernetowych tworzą interfejsy o nazwach eth[0..] sekwencyjnie w miarę rozpoznawania kolejnych urządzeń. Pierwsz znależiona karta ethernetowa staje się urządzeniem eth0, druga eth1 itf.

Jednak w niektórych przypadkach, zwykle kiedy korzystamy z protokołów SLIP lub PPP, urządzenia sieciowe są tworzone na żądanie programów wykonywanych przez użytkownika. Odbywa się podobny sekwencyjny przydział nmazw urządzeń, lecz nie dzieje się to w sposób automatyczny w czasie ładowania systemu. Dzieje się tak dlatego, że wprzeciwieństwie do kart ethetnetowych liczba akrywnych interfejsów slip lub ppp w całym okresie pracy komputera może się zmieniać. Powiemy o tym dokłaniej w dalszej części.

5.4 Konfiguracja interfejsu sieciowego.

Jeśli posiadasz już wszelkie niezbędne oprogramowanie i informacje o potrzebnyhc adresach sieciowych możesz rozpocząć konfigurację interfejsu. Kiedy mówimy o konfiguracji interfejsu sieciowego mamy na myśli proces przydzielenia mu odpowiedniego adreu IP i nadania odpowiednich wartości innym jego parametrom. W tm celu najczęściej posługujemy się programem ifconfig (interface configre).

Zwykle używa się go sposób podobny do podanego poniżej:

# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up
W tym przypadku konfiguruję kartę ethernetową `eth0' nadając jej adres IP `192.168.0.1' i netmaskę `255.255.255.0'. Parametr `up' na końcu wiersza oznacza, że intefejspowinien zostać aktywowany (rozpocząć prazcę).

Jadro konfigurująć interfejsy sieciowe przyjmuje pewne domyślne wartośći parametrów. a przykład mogłbyś podać adres IP i adres ogłoszeniowy (broadcast) danego interfejsu, lecz jeśli tego nie zrobisz jądro znajdzie sensowne wartości dla tych parametrów na podstawie klasy konfigurowaneo adresu IP. W moim przykładzie jądro przyjmie, że jest interfejs jest konfigurowany w sieci klasy C i nada adresowi sieci wartość `192.168.0.0', a adresowi ogłoszeniowemu `192.168.0.255'.

Polecenie ifconfig posiada znacznie więcej opcji. Najważniejsze z nich to:

up

włącznie interfejsu.

down

wyłączenie interfejsu.

[-]arp

włączenie lub wyłączenie korzystania z protokołu ARP na tym interfejsie

[-]allmulti

włączenie lub wyłączenie korzystania z trybu 'promoscious'. Jest to tryb pracy, w którym urządzennie może być zmuszone do odbierania wszelkich pakietów, a nie tylko tych adresowanych bezpośrednio do niego. Jest bardzo ważna dla programów tcpdump i innych podglądaczy pakietów.

mtu N

ustawienie wielkości parametru MTU danego urządzenia.

netmask addr

adres sieci, do której należy (jest podłączony) interfejs.

irq addr

ten parametr ma zastosowanie tylko dla niektórych modułów sprzętowych. Pozwala na ustawienie wartośćprzerwania IRQ z którego powinno korzystaćdane urządzenie.

[-]broadcast [addr]

pozwala na włączenie odbierania pakietów skierowanych na podany adres ogłoszeniowy, lub na zablokowanie odbierania tych pakietów.

[-]pointopoint [addr]

pozwala na podanie adresu komputera na drugim końsu połączzenia point-to-point obsługiwanego przez ten interfejs. Ma to miejsce w przypadku takich protokołów jak slip czy ppp.

hw <type> <addr>

pozwala na określenie adresu sprzętowego urządzenia lecz tylko dla ograniczonego rodzaju urządzeń. Nie jest często używany w sieciach Ethernet, za to zęsto wykorzystuje sięgo w sieciach AX.25.

Polecenie ifconfig można stosować dla każdego interfejsu sieciowego. Niektóre porgramy użytkownika, jak pppd czy dip korzystają z niego w celu zkonfigurowania interfejsu sieciowego, tyż po jego utworzeniu. W takim przypadku nie jest potrzebna ręczna konfiguracja tych urządzeń.

5.5 Konfiguracja resolvera nazw.

`Resolver nazw ' jest częscią standardowej biblioteki linuxa. JEgo podstawową funkcją jest zamiana wygodnych dla czlowieka nazw komputerów, jak `ftp.funet.fi' na ich adres 128.214.248.6, którym posługują się komputery.

Co to jest nazwa?

Prawdopodownie spotkałeś się z nazwami komputerów, lecz być może nie weisz w jaki sposób są konstruowane lub rozkłądane. Nazwy domen internetowych są w swojej naturze hierachiczne, to znaczy posiadają strukturę drzewiastą. domena jest rodziną, grupą nazw. Domena może być podzielona na poddomeny (subdomain). Nomena najwyższego poziomu (top level domain) jest domeną, która jednocześnie nie jest poddomeną. Domeny najwyższego poziomu są określone w dokumencie RFC-920. Poniżej kilka przykładów domen najwyższego poziomu.

COM

organizacje komercyjne

EDU

organizacje edukacyjne

GOV

organizacje rządzowe

MIL

organizacje wojskowe

ORG

inne organizacje

oznaczenie kraju

dwuliterowe kody państw, reprezentujące konkretne państwo.

Każda z domen najwyższego poziomu posiada poddomeny. Domey najwyższego poziomu o nazwach odpowiadających kodom państw, są zwykle podobnie podzielone, jak domeny najwyższego poziomu tzn. można tzm znaleźć poddomeny com, edu, gov, mil i org. Na koniec otrzymujemy com.au i gov.au dla organizacji komercyjnych i rządowych w Australii. Z przyczyn historycznych większośćdomen należących do domen najwyższego poziomu dotyczy organizacji amerykańskich, choć Stany Zjednoczone mają również własną domenę `.us'.

Następny poziom podziału odzwierciedla zwykle nazwę instytucji/organizacji. Dalsze poddomeny różnią się w swojej naturze, często ten poziom domen jest zależny od wewnętrznej struktury instytucji lecz może być zależny od dowolnego, rozsądnego kryterium przyjętego przez osoby zarządzające siecią w danej instytucji.

Ostatni w strukturze człon domeny, lecz pierwszy z lewej w jej nazwie oznacza nazwę komputera (hostname) i musi być jednoznaczny w danej poddomenie. Pozostała część jezt nazywana domeną danego komputera (domainname), a całość jest nazywana `Fully Qualified Domain Name FQDM' - Pełna nazwa domenowa.

Biorąc za przykład mój komputer pocztowy, jego FQDN to `perf.no.itg.telstra.com.au'. To znaczy, że komputer nazywa się `perf', a domena `no.itg.telstra.com.au'. Nazwa mojej domeny rozpoczyna się od członu oznaczającego kraj, Australię. Ponieważ jesteśmy organizacją komercyjną kolejnym poziomem jest `com'. `telstra' oznacza nazwę firmy (starą), a dalsze człony są pochodną wewnętrznej struktury naszej firmy. Moj komputer należy do Information Technolog Group w sekcji Network Operations.

Jakie inforamacje będą niezbędne.

Muszisz wiedzieć do jakiej domeny należy twój komputer. Oprogramowanie resolwera nazw wykonuje swoją pracę odwołując się do serwera DNS (Domain Name Server), będziesz potrebował adres IP najbliższego serwera DNS.

Muszisz poprawić try pliki. Omówię każdy z nich.

/etc/resolv.conf

/etc/resolv.conf jest głównym plikiem konfiguracyjnym resolwera nazw. Posiada bardzo prosty format. Jest to plik tekstowy zawierający jedno polecenie na wiersz. Najczęscieś stosuje się trzy słowa kluczowe:

domain

określan nazwę domeny, do której należy dany omputer

search

okreśła listę domen, które mają być przeszukiwane w poszukiwaniu podanej nazwy komputera (w przypadku gdy nazwa komputera nie została podana w postaci FQDN)

nameserver

może by powtórzone wielokrotnie, określa adres serwera DNS

przykładowy plik /etc/resolv.conf mogłby wyglądać nastepująco:

domain maths.wu.edu.au
search maths.wu.edu.au wu.edu.au
nameserver 192.168.10.1
nameserver 192.168.12.1
W przykładzie podaliśmu, że podstawową domeną, do której należy komputer i która nędzie dodawana do nazwy komputera jeśli nie zsotała podana w formacie FQDN jest maths.wu.edu.au. Jeśłi komputer nie zostanie znależiony w tej doenie resolwer przeszuka jeszcze domenę wu.edu.au. Podano również adresy IP dwóch serwerów DNS.

/etc/host.conf

Plik /etc/host.conf to plik, które określa niektóre zachowania resolvera. Jego format jest dokladnie opisany na stronie podręcznika (man resolv+). W większości przypadków wystraczy taki plik:

                          
order hosts,bind                                          
multi on  

Ta konfiguracja informuje resolver, że poszukując nazwy komputera nleży wpierw sprawdzać zawarość pliku /etc/hosts, zanim zacznie się zadawać pytania serwerowi DNS. Oznacza również, że należy przekazywać wszystkie znalezione w tym pliku adresy IP odpowiadające nazwie poszukiwanego komputera, a nie tylko pierwszy z nich.

/etc/hosts

Plik /etc/hosts jest to miejsce, gdzie umieszcza sie nazwy i adresy loklanych komputerów. Jeśli umieścisz w tym pliku nazwę i adres komputera, nie musisz pytać się o jego adres serwera DNS. Wadą tego rozwiązania jest to, że musisz pamiętać aby informacje zawartew tym pliku były aktualne. W dobrze zarządzanym sytemi w niniejszym pliku można zwykle znaleźć nazwę interfejsu pętli zwrotnej i nazwy loklanych komputerów.

# /etc/hosts
127.0.0.1      localhost loopback
192.168.0.1    nazwa.tego.komputera

Możesz podać więcej niż jedną nazwę odpowiadającą danemu numerowi IP, jak to zrobiliśmy w pozyższym przykładzie w przypadku lokalnej ptli zwrotnej.

5.6 Konfiguracja interfejsu pętli zwrotnej

Interfejs pętli zwrótnej (`loopback' interface) jest interfejsem specjalnego rodzaju, umożliwiającym nawiązywanie połączeńz samym sobą. Istnieje wiele przyczyn, dla których mogłbyś chcieć to robić. Na przykład w celu przetestowania oprogramowania sieciowego, bez onieczności zawracania głowy komukolwiek inneu. Adres `127.0.0.1' zostałprzypisany specjalnie dla tego interfejsu. Dlatego niezależnie na którym komputerze bedziesz pracował, jeśli połączysz się z komputerem o adresie 127.0.0.1 zawsze to będzie ten komputer, zktórego próbujesz nawiązać połączenie.

Skonfigurowanie interfejsu pętli zwortnej jest proste, musisz się upewnić, że przy starcie sytemu wykonuje się następujące polecenie:

# ifconfig lo 127.0.0.1
# route add -host 127.0.0.1 lo

Więcej na temat polecenia route powiemy w następnym rozdziale.

5.7 Trasowanie (routing).

Trasowanie ruchu (routing) to ogromny temat. Można na ten temat napisać bardzo dużo. Większość z was spotka się z całkiem prostymi konfiguracjami trasowania, a część nie. Opowiem o podstawowych prawach trasowania ruchu. Jeśli potrzebujesz bardziej szczegółowych informacji radzę zapoznać się z dokumentami wspomnianymi na początku.

Rozpocznijmy od definicji. Cot to jest rasowanie pakietów IP. Oto jedna z definicji, którą ja używam:

Trasowanie pakietów IP to proces, w którym komputer z przyłączeniami do wielu sieci decyduje, gdzie wysłać otrzymane pakiety.

Zilustrujmy to przykładem. Wyobrażmy sobie typowy biurowy router. Mógłby mieć połączenie PPP z internetem, kilka segmentów ethernetowych obsługujących stacje robocze i jeszcze jedno połączenie PPP do innego biura. Kiedy router otrzymuje datagram z jednego ze swoich przyłączeń sieciowych, trasowanie jest mechanizmem stosowanym przez niego do wyboru portu przyłączeniowego, do którego trzeba przesłać ten datagram. Zwykłe komputery też muszą wyjinywać trasowanie, wszystkie komputery w Internecie posiadają dwa urządzenia sieciowe, jedno z nich to urządzenie pętli zwrotnej (loopback interface) opisane powyżej, a drugie to te, ktorego używa do porozumiewania się z resztą sieci. Może to być karta ethernetowa lub port PPP, czy SLIP.

OK, w jaki sposób działa trasowanie? Każdy z komputerów przechowuje listę zasad trasowania, zwaną tabelą trasowania (routing table). Każdy wiersz tej tabeli zawiera co najmniej trzy pola, pierwsze oznaczające adres docelowy, drugie zawiera nazwę interfejsu przez który należy wysłać datagram, a trzecie, opcjonalne, to adres IP innego komputera (tzw. gateway),który przeniesie datagram dalej w jego drodze przez sieć. Pod Linuxem tabelę trasowania można zobaczyć wydając polecenie:

# cat /proc/net/route
Proces trasowania jest całkiem prosty: otrzymujemy przychodzący datagram, adres docelowy (do kogo jest adresowany ten datagram) zostaje porównany z pozycjami tabeli routingu. Wybiera się pozycje, kóra najbardziej pasuje do tego adresu i datagram zostaje przesłany przez określony w tej pozycji interfejs. Jeśli pole gatewaya nie jest puste, wtedy datagram zostaje przesłany do tego komputera przez określony w tej pozycji interfejs seciowy, w przeciwnym wyopadku zakłada się, że adres docelowy leży na sieci obsługiwanej przez podany interfejs.

Do manipulacji pozycjami tabeli trasowania służy specjalne polecenie. Wymaga podania w wierszu poleceń dodatkowych parametrów i zamienia je na wywołania funkcji systemowych, które proszą jądro o dodanie, zmodyfikowanie lub usunięcie pozycji w tabeli trasowania (która znajduje się w gestii jądra Linuxa). Polecenie to nazywa się `route'.

Prosty przykład. Wyobraźmy sobie, że mamy sieć ehernrtową. Powiedziano nam, że jest to sieć klasy C o adresie 192.168.1.0. Nasz komputer otrzymał adres 192.168.1.10 i powiedziano nam, że router przyłączony do internetu ma adres 192.168.1.1.

Pierwszym krokiem jest poprawne skonfigurowanie interfejsu, w sposób opisany wcześniej:

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
Teraz musimy dodać pozycję do tabeli trasowania, aby powiedzieć jądru, że datagramy do komputerów, których adresy pasujądo wzorca 192.168.1.* powinny być wysyłane przez interfejs ethernetowy. Stosuje się w tym celu polecenie zbliżone d otego:
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
Zwróć uwagę na argument `-net', który mówi programowi route, że ta pozycja oznacza trasę do całej podsieci (network route). Inną możliwością jest pozycja określająca trasę do konkretnego adresu IP tzw. 'host route'.

Powyższa pozyscja tabeli trasowania umożliwi nam komunikację ze wszystkimi kompouterami znajdującymi się w naszym segmencie ethernetowym. A co z wszystkimi innymi adresami IP spoza naszego segmentu?

Dodanie trasy do każdej sieci.komputera z którym chcielibyśmy się kiedykolwiek komunikować byłoby ogromnym zadaniem. Dlatego wprowadzono tzw trasę domyślną (efault route). Trasa domyślna pasuje do każdego adresu docelowego, lecz najgorzej jak tylko jest to możliwe. Dlatego, jeśli istniej inna pozycja pasująca do tego adresu, to ona zostanie wykorzystana zamiast pozycji domyślnej. Ideą trasy domyślnej jest umożliwienie zrealizowania polecenia "wszystko inne wysłać tędy". W naszym przykładzie oznacza to następujace polecenie:

# route add default gw 192.168.1.1 eth0
Argument `gw' informuje program route, że następny argument oznacza adres IP. lub nazwę atewaya lub routera, do któęgo należy przesyłać wszystkie datagramy pasującego do tej pozycji. Dalszym przesłaniem tych datagramów zajmie się właśnie ten komputer.

Tak więc nasza pełna konfiguracja wyglądała by następująco:

# ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up
# route add -net 192.168.0.0 netmask 255.255.255.0 eth0
# route add default gw 192.168.1.1 eth0
Jeśli dobrze się przyjżysz plikom `rc' zajmującymi się siecią, zobaczysz, że przynajmniej jeden z nich wygląda bardzo podobnie. Jest to bardzo populana koniguracja.

Zajmijmy się troszkę bardziej skomplikowanym przypadkiem. Załóżmy, że zajmujemy się konfiguracją routera o którym mówiliśmy wcześniej, tym który posiada połączenie PPP z Internetem, kilka segmentów sieci lokalnej. Niech konkretnie będą to trzy segmenty eternetowe i jedno łącze PPP. Konfiguracja trasowania w tym przypadku wyglądała by następująco:

# route add 192.168.1.0 netmask 255.255.255.0 eth0
# route add 192.168.2.0 netmask 255.255.255.0 eth1
# route add 192.168.3.0 netmask 255.255.255.0 eth2
# route add default ppp0
Każda ze stacji roboczych używałaby prostszej formy przezentowanej wcześniej. Tylko router musi określić oddzielnie trasę do każdej z sieci, ponieważ w przypadku stacji roboczej pozycja domyślna obsłuży wszystkie połączenia pozostawiając routerowi zmartwienie odpowiedniego podziału ruchu. Możesz się zastanawiać, dlaczego trasa domyślna na routerze nie posiada argumentu gw. Przyczyna jest prosta. Protokoły urządzeń szeregowych, takich jak PPP czy SLIP, zawsze mają w swojej sieci tylko dwa komputery, po jednym na każdym końcu. Wskazywanie komputera po drugiej stronie połączenia jako gatewaya jest niepotrzebne i nadmiarowe, ponieważ nie ma innej możliwości niż przesłać pakiety na drugi koniec połączenia PPP. Dlatego nie jest potrzebne okreśanie w tego rodzaju połączeniach gatewaya. Podania gatewaya wyagają w takiej sytuacji inne rodzaje sieci, np. ethernet, arcnet, token ring, które obsługują wiele komputerów na jednym segmencie.

Do czego służy program routed ?

Konfiguracja trasowania opisana powyżej nadaje się dla prostych konfiguracji sieci, gdzie zawsze istnieje tylko jedna droga do celu. W przypadku bardziej skomplikowanych konfiguracji sieci, sprawy nieco się komplikują. Na szczęście większości was to nie dotyczy.

Najwieksze kłopoty jakie sprawia 'trasoeanie ręczne' lub ineczaj mówiąc 'statyczne', polegają na tym, że w przypadku przerwania łacza do komputera docelowego, jedyną metodą nawiązania komunikacji inną drogą (jeśli taka istnieje) jest ręczna interwencja w tabelę trasowania (ręczne uruchomienie odpowiednich poleceń). Naturanie jest to bardzo powolne, niepraktyczne i ryzykowne. Zostały rozwinięte techniki w celu automatycznej modyfikacji tabeli trasowania w przypadku awarii połączeń w celu przełączenia ruchu na drogi obejściowe, wszystkie te metody nazwywane są ogólnie 'trsowaniem dynamicznym'.

Być może szłyszałeś o najbardziej popularnych protokołach dynamicznego trasowania. Najczęsciej występującym jes RIP (Routing Information Protocol) i OSPF (Open Shortest Path First Protocol). RIP jest bardzo populany w małych sieciach takic hjak małego rozmiaru sieci korporacyjne lub sieci między budynkami. OSPF jest nowocześniejszym i bardziej sprawnym protokołem, lepiej nadającym się do obsługi dużych konfigracji sieci i lepiej nadaje się do zastosowania w środowiskach, gdzie istnieje duża liczba możliwych tras przesyłania pakietu. Powszechnymi implementacjami tych protokołów są programy routed -RIP i gated -RIP,OSPF i inne. routed jest zwykle w każdej dystrybucji Linuxa, lub można go znaleźć w pakiecie `NetKit' opisanym wcześniej.

Przykład, któty mogłby wymagać zastosowania dynamicznego trasowania mógłby wyglądać następująco:

    192.168.1.0 /                         192.168.2.0 /
       255.255.255.0                         255.255.255.0
     -                                     -
     |                                     |
     |   /-----\                 /-----\   |
     |   |     |ppp0   //    ppp0|     |   |
eth0 |---|  A  |------//---------|  B  |---| eth0
     |   |     |     //          |     |   |
     |   \-----/                 \-----/   |
     |      \ ppp1             ppp1 /      |
     -       \                     /       -
              \                   /
               \                 /
                \               /
                 \             /
                  \           /
                   \         /
                    \       /
                     \     /
                  ppp0\   /ppp1
                     /-----\
                     |     |
                     |  C  |
                     |     |
                     \-----/
                        |eth0
                        |
                   |---------|
                   192.168.3.0 /
                      255.255.255.0
Mamy tutaj trzy routery A,B iC. Każdy obsługuje segment sieci klasy C (netmaska 255.255.255.0). Każdy router posiada również łązcze PPP do każdego z pozostałych routerów. Sieć tworzy trójkąt.

owinno być już oczywiste, że tabela trasowania na routerza A wygląda następująco:

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# route add -net 192.168.2.0 netmask 255.255.255.0 ppp0
# route add -net 192.168.3.0 netmask 255.255.255.0 ppp1
Taka konfiguracja będzie działała poprawnie, dopóki połączenie pomiędzy routerami A i B będzie pracować poprawnie. Jęsli nastąpi awaria tego połączenia komputery na segmencie A nie będą w stania osiągnąć komputerów segmentu B i na odwrót ponieważ ich datagramy będą kierowane d ointerfejsu ppp0 routera A, który uległ właśnie awarii. Jednak komputery z segmentu B będą mogły nadal komunikować się z segmentem D i na odwrót ponieważ połązenie PPP pomiędzy komputerami pozostało nietknięte.

Zaczekaj! Skoro A może komunikować się z C i C może komunikować się z B dlaczego nie przesyłać datagramów adresowanych do B przez C zrzucając na niego dostarczenie ich do B? To jest właśnie rodzaj problemu, do rozwiązania którego powstały protokoły trasowania dynamicznego, jak np. RIP. Gdyby na każdym z routerów był uruchominy program routed wtedy tablice trasowania zostałyby automatycznie poprawione, tak aby odzwierciedlały nowy stan sieci w przypadku awarii któregokolwiek połączenia. Utworzenie takiej konfiuracji jest proste. Na każdym z routerów należy zrobić dwie rzeczy. W przypadku routera A:

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0
# /usr/sbin/routed
Demon `routed'tuż po uruchomieniu automatycznie znajdzie aktywne porty przyłączeń sieciowych, następnie będzie do nich rozsyłał i nasłuchiwał przychodzących z nich komunikatów pozwalając w ten sposób określenie porawnej tabeli trasowania.

To był bardzo krótki opis trasowania dynamicznego i jego zastosowań. Jeśli potrzebujesz więcej informacji powinieneś zapoznać się dokumentami, do których referencje znajdziesz na początku tego dokumentu.

Istotne sprawy dotyczące dynamicznego trasowania:

  1. Potrzeba uruchomienia demona protokołu dynamicznego trasowania zachodzi jedynie wtedy, gdy twój Linux ma możliwość wyboru trasy do komputera docelowego.
  2. Demon trasowania dynamicznego będzie automatycznie modyfikował tabelę trasowania dopasowując ją do zmian w strukturze sieci.
  3. RIP nadaje się do sieci małych i średnich.

5.8 Konfiguracja serwerów i usług sieciowych.

Serwery i usługi sieciowe są to te programy, które pozwalają zdalnemu użytkownikowi stać się użytkownikiem twojego komputera. Zdalny użytkownik ustanawia połączenie sieciowe z twoim komputerem i programem oferującym usługę, lub demonem sieciowym, nasłuchującym na danym porcie, akceptuje połączenie i wykonuje program. Istnieją dwa tryby pracy demonów sieciowych. Oba są równie często stosowane. Oto one:

niezależny

program-demon sieciowy nasłuchje na okreśłonych portach sieciowch i w momencie zestawienia przychodzącego połączenia samemu zarządza tym połączeniem w celu udostępnienia danej usługi.

podporządkowany serwerowi inetd

serwer inetd jest specjalnym programem-demonem sieciowym specjalizującym się w obsłudze zestawiania połączeń sieciowych. Posiada własny plik konfiguracyjny, który mówi mu, który mówi mu, który program obsługi usługi powinien zostać uruchomiony dla zaistniałej kombinacji typu połączenia (tcp lub udp) i numeru portu. Porty są opisane w innym pliku, o którym opowiemy już niedługo.

Istnieją dwa ważne pliki konfiguracyjne. Są to /etc/services: plik, który kojarzy nazwy z numerami portów i

/etc/inetd.conf: plik konfiguracyjny demona inetd.

/etc/services

Plik /etc/services jest prostą bazą, która kojarzy łatwe dla człowieka nazy portów z wykorzystywanymi przez komputery numerami. Posiada bardzo prosty format. Jest to plik tekstowy, którego każdy wiersz jest jednym rekordem informacji. Każdy rekord składa się z trzech pól, rozdzielonych dowolną ilością białych znaków (tabulator lub odstęp):

nazwa      port/protokół        aliasy     # komentarz
nazwa

jedno słowo reprezentujące opisywaną usługę.

port/protokół

to pole jest podzielone na dwie części

port

numer określający numer portu pod którym będzie dostępna dana usługa. Wiekszość popularnych usług ma już przydzielone numery portów. Są opisane w RFC-1340.

protokół

może to być albo tcp albo udp.

Należy zapamiętać, że pozycja 18/tcp jest zupełnie inna niż pozycja 18/udp i nie ma żadnych technicznych uwarunkowań, dlaczego danausługa miałaby istnieć w obu przypadkach. Należy zachować zdrowy rozsądek. Jeśli któraś z usług jest rzeczywiście dostępna zarówno przez tcp, jak i przez udp, wtedy rzeczywiście w /etc/services znajdą sie obie te pozycje.
aliasy

inne nazwy, pod którymi będzie znana ta usługa.

Dowolny tekst w wierszu po znaku `#' jest traktowany jako komentarz i ignorowany.

Przykład pliku /etc/services.

Wszystkie nowe dystrybucje Linuxa dostarczają dobry plik /etc/services. Na wszelki wypadek, gdybyś chciał zbudować swój komputer od zera oto kopia pliku /etc/services jaki jest dostarczany razem z dystrybucją Debian.

# /etc/services:
# $Id: NET-3-HOWTO.pl.sgml,v 1.2 1997/07/28 14:04:07 ppogorze Exp $
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1340, ``Assigned Numbers'' (July 1992).  Not all ports
# are included, only the more common ones.

tcpmux          1/tcp                           # TCP port service multiplexer
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
msp             18/tcp                          # message send protocol
msp             18/udp                          # message send protocol
chargen         19/tcp          ttytst source
chargen         19/udp          ttytst source
ftp-data        20/tcp
ftp             21/tcp
ssh             22/tcp                          # SSH Remote Login Protocol
ssh             22/udp                          # SSH Remote Login Protocol
telnet          23/tcp
# 24 - private
smtp            25/tcp          mail
# 26 - unassigned
time            37/tcp          timserver
time            37/udp          timserver
rlp             39/udp          resource        # resource location
nameserver      42/tcp          name            # IEN 116
whois           43/tcp          nicname
re-mail-ck      50/tcp                          # Remote Mail Checking Protocol
re-mail-ck      50/udp                          # Remote Mail Checking Protocol
domain          53/tcp          nameserver      # name-domain server
domain          53/udp          nameserver
mtp             57/tcp                          # deprecated
bootps          67/tcp                          # BOOTP server
bootps          67/udp
bootpc          68/tcp                          # BOOTP client
bootpc          68/udp
tftp            69/udp
gopher          70/tcp                          # Internet Gopher
gopher          70/udp
rje             77/tcp          netrjs
finger          79/tcp
www             80/tcp          http            # WorldWideWeb HTTP
www             80/udp                          # HyperText Transfer Protocol
link            87/tcp          ttylink
kerberos        88/tcp          kerberos5 krb5  # Kerberos v5
kerberos        88/udp          kerberos5 krb5  # Kerberos v5
supdup          95/tcp
# 100 - reserved
hostnames       101/tcp         hostname        # usually from sri-nic
iso-tsap        102/tcp         tsap            # part of ISODE.
csnet-ns        105/tcp         cso-ns          # also used by CSO name server
csnet-ns        105/udp         cso-ns
rtelnet         107/tcp                         # Remote Telnet
rtelnet         107/udp
pop-2           109/tcp         postoffice      # POP version 2
pop-2           109/udp
pop-3           110/tcp                         # POP version 3
pop-3           110/udp
sunrpc          111/tcp         portmapper      # RPC 4.0 portmapper TCP
sunrpc          111/udp         portmapper      # RPC 4.0 portmapper UDP
auth            113/tcp         authentication tap ident
sftp            115/tcp
uucp-path       117/tcp
nntp            119/tcp         readnews untp   # USENET News Transfer Protocol
ntp             123/tcp
ntp             123/udp                         # Network Time Protocol
netbios-ns      137/tcp                         # NETBIOS Name Service
netbios-ns      137/udp
netbios-dgm     138/tcp                         # NETBIOS Datagram Service
netbios-dgm     138/udp
netbios-ssn     139/tcp                         # NETBIOS session service
netbios-ssn     139/udp
imap2           143/tcp                         # Interim Mail Access Proto v2
imap2           143/udp
snmp            161/udp                         # Simple Net Mgmt Proto
snmp-trap       162/udp         snmptrap        # Traps for SNMP
cmip-man        163/tcp                         # ISO mgmt over IP (CMOT)
cmip-man        163/udp
cmip-agent      164/tcp
cmip-agent      164/udp
xdmcp           177/tcp                         # X Display Mgr. Control Proto
xdmcp           177/udp
nextstep        178/tcp         NeXTStep NextStep       # NeXTStep window
nextstep        178/udp         NeXTStep NextStep       # server
bgp             179/tcp                         # Border Gateway Proto.
bgp             179/udp
prospero        191/tcp                         # Cliff Neuman's Prospero
prospero        191/udp
irc             194/tcp                         # Internet Relay Chat
irc             194/udp
smux            199/tcp                         # SNMP Unix Multiplexer
smux            199/udp
at-rtmp         201/tcp                         # AppleTalk routing
at-rtmp         201/udp
at-nbp          202/tcp                         # AppleTalk name binding
at-nbp          202/udp
at-echo         204/tcp                         # AppleTalk echo
at-echo         204/udp
at-zis          206/tcp                         # AppleTalk zone information
at-zis          206/udp
z3950           210/tcp         wais            # NISO Z39.50 database
z3950           210/udp         wais
ipx             213/tcp                         # IPX
ipx             213/udp
imap3           220/tcp                         # Interactive Mail Access
imap3           220/udp                         # Protocol v3
ulistserv       372/tcp                         # UNIX Listserv
ulistserv       372/udp
#
# UNIX specific services
#
exec            512/tcp
biff            512/udp         comsat
login           513/tcp
who             513/udp         whod
shell           514/tcp         cmd             # no passwords used
syslog          514/udp
printer         515/tcp         spooler         # line printer spooler
talk            517/udp
ntalk           518/udp
route           520/udp         router routed   # RIP
timed           525/udp         timeserver
tempo           526/tcp         newdate
courier         530/tcp         rpc
conference      531/tcp         chat
netnews         532/tcp         readnews
netwall         533/udp                         # -for emergency broadcasts
uucp            540/tcp         uucpd           # uucp daemon
remotefs        556/tcp         rfs_server rfs  # Brunhoff remote filesystem
klogin          543/tcp                         # Kerberized `rlogin' (v5)
kshell          544/tcp         krcmd           # Kerberized `rsh' (v5)
kerberos-adm    749/tcp                         # Kerberos `kadmin' (v5)
#
webster         765/tcp                         # Network dictionary
webster         765/udp
#
# From ``Assigned Numbers'':
#
#> The Registered Ports are not controlled by the IANA and on most systems
#> can be used by ordinary user processes or programs executed by ordinary
#> users.
#
#> Ports are used in the TCP [45,106] to name the ends of logical
#> connections which carry long term conversations.  For the purpose of
#> providing services to unknown callers, a service contact port is
#> defined.  This list specifies the port used by the server process as its
#> contact port.  While the IANA can not control uses of these ports it
#> does register or list uses of these ports as a convienence to the
#> community.
#
ingreslock      1524/tcp
ingreslock      1524/udp
prospero-np     1525/tcp                # Prospero non-privileged
prospero-np     1525/udp
rfe             5002/tcp                # Radio Free Ethernet
rfe             5002/udp                # Actually uses UDP only
bbs             7000/tcp                # BBS service
#
#
# Kerberos (Project Athena/MIT) services
# Note that these are for Kerberos v4, and are unofficial.  Sites running
# v4 should uncomment these and comment out the v5 entries above.
#
kerberos4       750/udp         kdc     # Kerberos (server) udp
kerberos4       750/tcp         kdc     # Kerberos (server) tcp
kerberos_master 751/udp                 # Kerberos authentication
kerberos_master 751/tcp                 # Kerberos authentication
passwd_server   752/udp                 # Kerberos passwd server
krb_prop        754/tcp                 # Kerberos slave propagation
krbupdate       760/tcp         kreg    # Kerberos registration
kpasswd         761/tcp         kpwd    # Kerberos "passwd"
kpop            1109/tcp                # Pop with Kerberos
knetd           2053/tcp                # Kerberos de-multiplexor
zephyr-srv      2102/udp                # Zephyr server
zephyr-clt      2103/udp                # Zephyr serv-hm connection
zephyr-hm       2104/udp                # Zephyr hostmanager
eklogin         2105/tcp                # Kerberos encrypted rlogin
#
# Unofficial but necessary (for NetBSD) services
#
supfilesrv      871/tcp                 # SUP server
supfiledbg      1127/tcp                # SUP debugging
#
# Datagram Delivery Protocol services
#
rtmp            1/ddp                   # Routing Table Maintenance Protocol
nbp             2/ddp                   # Name Binding Protocol
echo            4/ddp                   # AppleTalk Echo Protocol
zip             6/ddp                   # Zone Information Protocol
#
# Debian GNU/Linux services
rmtcfg          1236/tcp                # Gracilis Packeten remote config server
xtel            1313/tcp                # french minitel
cfinger         2003/tcp                # GNU Finger
postgres        4321/tcp                # POSTGRES
mandelspawn     9359/udp        mandelbrot      # network mandelbrot

# Local services

/etc/inetd.conf

Plik /etc/inetd.conf jest plikiem konfiguracyjnym programu inetd. Jego rolą jest poinformowanie inetd co powinien zrobić w momencie otrzymania połączenia z konkretną usługą. Musisz powiedzieć programowi inetd, który programobsługi uruchomić i jak to zrobić. Musisz to zrobić dla każdej usługi, której połączenia mają być obsługiwane przez program inetd.

Format tego pliku jest całkiem prosty. Jest to plik tekstowy, którego kązy wiersz jest niezależny rekordem danych opisujących jedną z usług jaką chcesz obsługiwać. Dowolny tekst w wierszu po znaku `#' jest traktowany jako komentarz i pomijany. Każdy wiersz składa się z siedmiu pól rodzielonych białymi znakami (tabulator lub odstęp) w formacie:

service  socket_type    proto    flags user       server_path     server_args
usługa   rodzaj_gniazda protokół flagi użytkownik ścieżka_dostępu arguemnty
usługa

nazwa wusługi pobrana przez inetd z /etc/services

rodzaj gniazda

to pole okreśła rodzaj gniazda jakie zostanie utworzone, dozwolone wartośc to : stream, dgram, raw, rdm, or seqpacket. Dokładny opis jest dość skomplikowany ale jako pierwsze przybliżenie można potraktować zasadę ,że niewmal wszystkie usługi korzystające z tcp używają stream i niemal wszystkie usługi korzystające z udp używają dgram. Inne kombinacje parametrów występują w bardzo rzadkich przypadkach specjalizowanych serwerów usług.

protokól

nazwa protokołu danej pozycji. Powinien pasować do odpowiedniej pozycji pliku /etc/serwer i zwykle jest to tcp lub udp. Usługi oparte na Sun RPC (Remote Procedure Call) będą korzystały z rpc/tcp lub rpc/udp.

flagi

istnieją tylko dwie wartości jakie może przyjmować to pole. Informują one program inetd czy uruchomiony program obsługi zwalnia gniazdo co pozwala na uruchomienie kolejnego przy następneym połączeniu d otej usługi, czy inetd powiniec zaczekać na zakończenie działania programu obsługi, który sam będzie obsługiwał żądania zestawienia połączenia. Ponownie dokładny opis jest dosyć skomplokowany, lecz w przybliżeniu mozna powiedzieć, że wszsytkie usługi typu tcp powinny w tym polu mieć wartość nowait i większość usług typu udp powinny przyjmować wartosć wait. Pamiętaj, że istnieją znaczące wyjątki od tej reguły.

użytkownik

określa, który użytkownik zdefiniowany w pliku /etc/passwd statnie się właścicielem uruchomionego demona sieciowego. JEst to pożyteczne, gdy chcesz zwiększyć bezpieczeństwo swojego systemu. Możesz temu polu nadać wartosć nobidy aby w przypadku złamania zabezpieczeń programów obsługi wyrządzone straty były jak najmniejsze. Zwykle to pole przyjmuje wartość root, ponieważ większośćprogramów obsługi do wykonania poprwnie swych zadań wymaga uprawnień administatora.

ścieżka_dostępu

to pole oznacza pełną scieżkę dostępu do programu obsługi, który należy uruchomić.

argumenty

zawiera pozostałą część wiersza poleceń uruchamianego programu obsługi. Jest to parametr opcjonalny. To wlaśnie tutaj możesz umieścić dowolne parametry, które zostaną przekazane programowi obsługi w momencie jego uruchomienia przez program inetd.

Przykład pliku /etc/inetd.conf

Podobnie jak w perzypadku pliku /etc/services wszystkie nowoczesne dystrybucje zawierają poprawny plik /etc/inetd.conf. Na wszelki wypadek ponieżej można znależć plik /etc/inetd.conf dostarczany z dystrybucją Debian .

# /etc/inetd.conf:  see inetd(8) for further informations.
#
# Internet server configuration database
#
#
# Modified for Debian by Peter Tobias <tobias@et-inf.fho-emden.de>
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
# Internal services
#
#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
#
# Kerberos authenticated services (these probably need to be corrected)
#
#klogin         stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind -k
#eklogin        stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rlogind -k -x
#kshell         stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.rshd -k
#
# Services run ONLY on the Kerberos server (these probably need to be corrected)
#
#krbupdate      stream tcp      nowait  root    /usr/sbin/tcpd  /usr/sbin/registerd
#kpasswd        stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/kpasswdd
#
# RPC based services
#
#mountd/1       dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.mountd
#rstatd/1-3     dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rstatd
#rusersd/2-3    dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rusersd
#walld/1        dgram   rpc/udp wait    root    /usr/sbin/tcpd  /usr/sbin/rpc.rwalld
#
# End of inetd.conf.
ident           stream  tcp     nowait  nobody  /usr/sbin/identd        identd -i

5.9 Inne pliki konfiguracyjne związane z siecią. files.

Linux posiada jeszcze kilka plików konfiguracyjnychm które mają wpływ na pracę sieci, z którymi powinno się zapoznać. Być może nigdy nie wystąpi potrzeba ich modyfikacji, lecz warto wiedzieć jakie inforamcje zawierają i czego dotyczą.

/etc/protocols

Plik /etc/protocols zawiera inforamcje przyporządkowujące nazwom protokołów odpowiednie numery. Jest wywkorzystywany przez różne programy pozwalając na podawanie nazw protokołów zamiast numerów oraz inne programy, jak np tcpdump, które mogą wyświetlać nazwy protokołów zamiast ich liczbowej reprezentacji. Składnia pliku jest następująca:

protocolname     number  aliases
nazwa_protokołu  numer   aliasy
Plik /etc/protocols dostarczany w dystrybucji Debian wygląda następująco:
# /etc/protocols:
# $Id: NET-3-HOWTO.pl.sgml,v 1.2 1997/07/28 14:04:07 ppogorze Exp $
#
# Internet (IP) protocols
#
#       from: @(#)protocols     5.1 (Berkeley) 4/17/89
#
# Updated for NetBSD based on RFC 1340, Assigned Numbers (July 1992).

ip      0       IP              # internet protocol, pseudo protocol number
icmp    1       ICMP            # internet control message protocol
igmp    2       IGMP            # Internet Group Management
ggp     3       GGP             # gateway-gateway protocol
ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')
st      5       ST              # ST datagram mode
tcp     6       TCP             # transmission control protocol
egp     8       EGP             # exterior gateway protocol
pup     12      PUP             # PARC universal packet protocol
udp     17      UDP             # user datagram protocol
hmp     20      HMP             # host monitoring protocol
xns-idp 22      XNS-IDP         # Xerox NS IDP
rdp     27      RDP             # "reliable datagram" protocol
iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4
xtp     36      XTP             # Xpress Tranfer Protocol
ddp     37      DDP             # Datagram Delivery Protocol
idpr-cmtp       39      IDPR-CMTP       # IDPR Control Message Transport
rspf    73      RSPF            # Radio Shortest Path First.
vmtp    81      VMTP            # Versatile Message Transport
ospf    89      OSPFIGP         # Open Shortest Path First IGP
ipip    94      IPIP            # Yet Another IP encapsulation
encap   98      ENCAP           # Yet Another IP encapsulation

/etc/networks

Plik /etc/networks ma funkcję zbliżoną do funkcji pliku /etc/hosts. Jest prostą bazą danych nazw i adresów sieci. Jego format różni się tylko tym, że może zawierać jedynie dwa pola w wierszu w następujacym formacie:

# networkname networkaddress
# nzawa_sieci adres_sieci

Przykładowy plik mógłby wyglądać tak:

loopnet    127.0.0.0
localnet   192.168.0.0
amprnet    44.0.0.0

W przypadku używania programu route jeśli punkt docelowy jest siecią, a sieć ta znajduje się w pliku /etc/networks, wtedy polecenie route zamiast adresu IP sieci wyświetli jej nazwę.

5.10 Bezpieczeństwo sieciowe i sterowanie dostępem.

Pozwól, że rozpocznę ten rozdział stwierdzeniem, że zabezbieczanie komputera i sieci przed złośliwymi atakami jest trudną i skomplikowaną sztuką. Nie uważam się za aksperta w tej dziedzinie i choć opisywane przeze mnie mechanizmy pomogą być bardziej bezpiecznym to jeśli bardzo ci zależy na bezpieczeństwie twojego systemu radziłbym ci rozejrzeć się dokładniej w tym temacie. W internecie można znaleźć wiele dobrych referencji na ten temat.

Podstawowa zasada brzmi: `Nie uruchamiaj serwerów (programów obsługi), których nie zamierzasz używać.'. Wiele dystrybucji posiada mnóstwo różnego rodzaju oprogramowania, automatycznie konfigurowanego i uruchamianego. Aby zapewnić sobie minimalny poziom bezpieczeństwa powinno się przyjrzeć się plikowie /etc/inetd.conf i skomentować te usługi, których nie zamierzasz używać. Dobrymi kandydatami są: shell, login, exec, uucp, ftp i serwisy informacyjne, jak: finger, netstat i systat.

Istnieje wiele mechanizmów sterowania dostępem do oferowanych usług sieciowych, wymienię podstawowe.

/etc/ftpusers

Plik /etc/ftpusers jest prostym mechanizmem pozwalającym na zabronienie wejścia do systemu przez usługę ftp niektórym użytkownikom twojego komputera. /etc/ftpusers jest odczytywany przez program obsługujący uslugę ftp (ftpd) w momencie nawiązania przychodzącego połączenia. Plik zawiera listę tych użytkowników, którzy nie mają pozwolenia wchodzenie do systemy przez uslugę ftp. Mógłby wygladać mniej więcej tak:

# /etc/ftpusers - użytkownicy, którzy nie mogą dostac się do systemu 
#                 przez ftp
root
uucp
bin
mail

/etc/securetty

Pli /etc/securetty pozwala na określenie listy urządzeń tty, przez które może logować się administrator. Plik /etc/securetty jest wczytywany przez program weryfikujący użytkownika (zwykle /bin/login). Jest to lista nazw urządzeń, które mogą być wykorzystywane przez administratora na wejście do systemu. Wejście do systemu przez administratora przez inne urządzenia jest niemożliwe.

# /etc/securetty - terminale tty przez które administrator może
#                  zalogować się do systemu
tty1
tty2
tty3
tty4

Mechanizm sterowania dostępem pakietu tcpd.

Program tcpd jaki prawdopodobnie widziałeś w pliku /etc/inetd.conf dostarcza mechanizmów rejestracji i sterowania dostępem do usług, do ochrony których został skonfigurowany.

W momencie uruchamienia przez program inetd odczytuje swoje dwa pliki konfiguracyjne, zawierające zasady dostępu i albo zezwala, albo odmawia dostępu do usługim którą ochrania.

Przeszukuje zasady znajdujące się plikach konfiguracyjnych, aż do napotkania pierwszej, która pasuje d ozaistniałej sytuacji. Jeśli takiej nie znalazł zakłada, że należy pozwolić na dostęp. Pliki które przeszukuje to w kolejności: /etc/hosts.allow i /etc/hosts.deny. Pokrótce opisze zawartośćkażdego z nich. Pełny opis możliwości programu tcpd znajdziesz na stronach podręcznika (man hosts_allow).

/etc/hosts.allow

Plik /etc/hosts.allow jest plikiem konfiguracyjnym programu /usr/sbin/tcpd. Plik hosts.allow zawiera informacje określające, ktroe komputery mogą uzyskać dostęp do chronionej usługi w twoim systemie.

Format pliku jest bardzo prosty:

# /etc/hosts.allow
#
# <lista usług>: <lista komputerów> [: polecenie]

lista usług

jest odzielona przecinkami listą nazw programów obsługi chronionej usługi do której ma zastosowanie dana reguła. Na przyklad: ftpd, telnetd i fingerd.

lista komputerów

jest rozdzieloną przecinkami listą nazw komputerów lub adresów IP. Można również określać wzroce adresów lub naz komputerów stsując znaki specjalne, umożliwiajć tworzenie wzorców reprezentujacych grupy komputerów. Np. gw.v2ktj.ampr.org oznacz konkretny komputer, .uts.edu.au oznacza dowlny komputer, którego pełna nazwa kończy się podanym ciągiem znaków, 44. oznacza dowolny adres IP zawierający te cyfry. W celu uproszczenia konfiguracji wporwadzono kilka specjalnych oznaczeń: ALL określające wszystkie komputery, LOCAL reprezentujący wszystkei komputery, których nazwa nie zawiera znaku `.' tzn. należą do tej samej domeny co twój komputer, PARANOID oznaczający wszystkie komputery, których nazwa nie odpowiada ich adresowi (name spoofing). I ostani element bardzo użyteczny, to EXCEPT pozwalający na podanie listy z wyjątkami. Omówimy to dokładnie później na przykładzie.

polecenie

jest opcjonalnym parametrem. Jest to pełna ścieżka dostępu do polecenia (programu), który należy uruchomić za każdym razem, kiedy dana reguła zostanie dopasowana. Może to być polecenie, które będzie próbowało zidentyfikować , kto znajduje się w tej chwili na komputerze próbującym nawiązać połączenia, lub wyśle wiadomość lub inny komunikat adresowany do administratora systemu informując o próbie połączenia. Isnieje kilka wzorców, które zostaną podmienione, najczęsciej wykorzystywane to: %h jest zamieniane na nazwę komputera nawiązującego połączenie lub jego adres jeśłi nie posiada nazwy, %d na nazwę programu obsługi, który został wywołany.

Przykład:

# /etc/hosts.allow
#
# dostęp do poczty dla wszystkich
in.smtpd: ALL
# połaczenie telnet i ftp tylko z komputerów z lokalnej domeny i
# mojego komputera domowego
telnetd, ftpd: LOCAL, myhost.athome.org.au
# Pozwól na finger z dowolnego komputera, lecz rejestrój kto się z
# nami łączył
fingerd: ALL: (finger @%h | mail -s "finger from %h" root)

/etc/hosts.deny

Plik /etc/hosts.denyjest plikiem konfiguracyjnym programu /usr/sbin/tcpd. hosts.deny zawiera listę komputerów, które nie mogą usyskać dostępu do chronionej usługi w twpom systemie.

Prosty przyklad wygłądał by mniej więcej tak:

# /etc/hosts.deny
#
# Zabroń dostępu wszystkim komputerom o podejrzanych nazwach
ALL: PARANOID
#
# Zabroń dostępu wszystkim do wszystkiego
ALL: ALL

PARANOID jest w tym przypadku niepotrzebne, ponieważ następna pozycja przechwytuje wszystkie przypaki. Jedna z tych pozycji jest dobrym punktem wyjściowym do budwoy pliku konfiguracyjnego, zależnym od twoich oczekiwań i wymagań.

Posiadanie opcji ALL: ALL w /etc/hosts.deny i zezwalanie na dostęp do konkretnych usług konkretnym komputerom (grupom komputerów) w pliku /etc/hosts.allow jest najbezpieczniejszym podejściem.

/etc/hosts.equiv

Plik hosts.equiv jest wykorzystywany nadawania innym komputerom i zdalnym użytkownikom niektórych uprawnień dostępu do naszych zasobów, bez końieczności podawania przez nich hasła. JEst to użytwczne w bezpiecznym środowisku sieciowym, gdzi posiadamy kontrolę andwszystkimi komputerami lecz w innym przypadku jest to bardzo ryzykowne ze względu na bezpieczeństwo naszego komputera. W takim przypadku twój komputer jest ka bezpieczny, jak najmniej bezpieczny z aufanych komputerów. Aby zwiększyć bezpieczeństwo swojego systemu nie używaj tego mechanizmu i zachęcaj swoich użytkoników do nie korzystania z pliku .rhosta.

Prawidłowa konfiguracja demona ftp.

Wiele miejsc będzie zainteresowynych działającym serwerem anonimowego ftp, aby umożliwić innym pobieranie i wstawianie plików, bez konieczności podawania konkretnego identyfikatora użytkownika. Jeśli zdecydujesz się udostępnić tę usługę, pamiętaj aby prawidlowo skonfigurować demon ftpd. Wiekszość stron podręcznika dotyczących ftpd(8) opisuje jak to powino byćzrobione. Powinieneś się upewnić, że zawsze stosujesz się d otych instruckcji. Bardzo ważne jest, abyś nie używał w tym celu kopii sweg opliku /etc/passwd w katalogu etc serwera ftpd. Musisz pamiętać aby usunąć wszelkie niepotrzebne informacje dotyczące kont, za wyjątkiem tych niezbędnych, w przeviwnym wypadku będziesz narażony na ataki wynikłe ze złamania haseł prezentowanych w pliku passwd.

Firewalle.

Bardzo dobrym środkiem na zapewnienie bezpieczeństwa swojemu systemowi jest zabronienie dostępu do twojego komputera wszystkim niepożądanym pakietom. Jest to dokladnie opisane w Firewall-HOWTO.

Inne sugestie.

Oto inne, potencjalnie religijne sugestie, które powinieneś rozważyć.

sendmail

niezależnie od swojej popularności demon z przerażającą regularnością pojawiają się ostrzeżenia o błędach w programie sendmail. Wszystko zależy od ciebie, lecz ja bym go nie uruchamiał.

NFS i inee usługi Sun RPC

powinieneś się ich bać. Istnieje wiele sposobów wykorzystania błędów w tych usługach. Bardzo trudno jest zastąpićNFS czymś innym, dokładnie upewnij się komu pozwalasz na montowanie swoich dysków.


Następna strona Poprzednia strona Spis treści