Linux NET-3-HOWTO, Linux w sieci : Podstawowe informacje na temat konfigurowania sieci.
Następna strona
Poprzednia strona
Spis treści
5. Podstawowe informacje na temat konfigurowania sieci.
Aby poprawnie 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 Linuksa. Np. pozwalają na przydzielenie urządzeniu numeru adresu
IP lub na skonfigurowanie routingu (marszruty).
Nowe dystrybucje Linuksa zawierają wszelkie niezbędne narzędzia
sieciowe. Jeśli ich jescze nie zainstalowałeś, powinieneś to teraz
zrobić.
Jeśli nie instalowałeś Linuksa 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 korzystać z
funkcji IP Masquerade, potrzebujesz 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óżnych 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ą sieci (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:
----------------- ---------------
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 koniunkcji z jego
netmaską, otrzymamy w ten sposób adres sieci, do której on
należy. Adres sieci jest zatem najmniejszym adresem w puli adresów
danej sieci z zawsze wypełnioną zerami częscią komputerową adresu.
Adres ogłoszeniowy (broadcast) to specjalny 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óżne 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żywa się adresu sieci. W praktyce
zasadniczo nie ma znaczenia, 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 Linuksa w istniejącej sieci IPJeśli chesz
zainstalować Linuksa w istniejącej sieci IP powinieneś skontaktować się z
administratorem sieci i poprosić go o następujące informacje:
Adres IP komputera
Adres IP sieci
Adrs ogłoszeniowy (broadcast)
Netmaska
Adres routera
Adres serwera DNS
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
internetuJeś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 konfiguracyjne ?
Istnieje kilka sposobów realizacji procedury uruchamiania systemu
Linux. Po załadowaniu jądra uruchamiany jest program o nazwie
`init'. Program 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 zwykle 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śli masz
taki program powinieneś sprawdzić czy jest on dla ciebie
wystarczający, zanim zdecydujesz się na ręczną modyfikacje.
-----------------------------------------
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 katalogu
dev. W Linuksie 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 inicjacji 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 znaleziona karta ethernetowa staje się
urządzeniem eth0, druga eth1 itd.
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ł nazw urządzeń, lecz nie dzieje się to w sposób
automatyczny w czasie ładowania systemu. Dzieje się tak dlatego, że
w przeciwieństwie do kart ethetnetowych liczba aktywnych interfejsów
slip lub ppp w całym okresie pracy komputera może się
zmieniać. Powiemy o tym dokładniej w dalszej części.
5.4 Konfiguracja interfejsu sieciowego.
Jeśli posiadasz już wszelkie niezbędne oprogramowanie i informacje o
potrzebnych 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 tym celu najczęściej
posługujemy się programem ifconfig (interface configure).
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 intefejs powinien zostać
aktywowany (rozpocząć pracę).
Jądro konfigurując interfejsy sieciowe przyjmuje pewne domyślne
wartośći parametrów. Na przykład mógł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 konfigurowanego 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:
upwłącznie interfejsu.
downwyłączenie interfejsu.
[-]arpwłączenie lub wyłączenie korzystania z protokołu ARP na
tym interfejsie
[-]allmultiwłą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 Nustawienie wielkości parametru MTU danego urządzenia.
netmask addradres sieci, do której należy (jest podłączony) interfejs.
irq addrten parametr ma zastosowanie tylko dla niektórych
modułów sprzętowych. Pozwala na ustawienie wartości 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łączenia 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 często wykorzystuje się go w
sieciach AX.25.
Polecenie ifconfig można stosować dla każdego interfejsu
sieciowego. Niektóre programy użytkownika, jak pppd czy dip
korzystają z niego w celu skonfigurowania interfejsu sieciowego, tuż
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
Linuksa. Jego podstawową funkcją jest zamiana wygodnych dla człowieka
nazw komputerów, jak `ftp.funet.fi' na ich adres
128.214.248.6, którym posługują się komputery.
Co to jest nazwa?
Prawdopodobnie spotkałeś się z nazwami komputerów, lecz być może nie
wiesz w jaki sposób są konstruowane lub rozkładane. 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). Domena 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.
COMorganizacje komercyjne
EDUorganizacje edukacyjne
GOVorganizacje rządzowe
MILorganizacje wojskowe
ORGinne organizacje
oznaczenie krajudwuliterowe 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 informacje będą niezbędne.
Musisz 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 potrzebował adres IP najbliższego
serwera DNS.
Musisz poprawić trzy 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ściej stosuje się trzy
słowa kluczowe:
domainokreśla nazwę domeny, do której należy dany komputer
searchokreśla listę domen, które mają być przeszukiwane w
poszukiwaniu podanej nazwy komputera (w przypadku gdy nazwa komputera
nie została podana w postaci FQDN)
nameservermoże być powtórzone wielokrotnie, określa adres
serwera DNS
przykładowy plik /etc/resolv.conf mógł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śmy, że podstawową domeną, do której należy
komputer i która będzie dodawana do nazwy komputera, jeśli nie została
podana w formacie FQDN jest maths.wu.edu.au. Jeśli komputer nie
zostanie znaleziony w tej domenie 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 dokładnie opisany na stronie
podręcznika (man resolv+). W większości przypadków wystarczy taki plik:
order hosts,bind
multi on
Ta konfiguracja informuje resolver, że poszukując nazwy komputera
należy wpierw sprawdzać zawartość 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 się nazwy i
adresy lokalnych 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 zawarte w tym
pliku były aktualne. W dobrze zarządzanym sytemie w niniejszym pliku
można zwykle znaleźć nazwę interfejsu pętli zwrotnej i nazwy lokalnych
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 powyższym przykładzie w przypadku lokalnej pętli zwrotnej.
5.6 Konfiguracja interfejsu pętli zwrotnej
Interfejs pętli zwrotnej (`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
konieczności zawracania głowy komukolwiek innemu. 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,
z którego próbujesz nawiązać połączenie.
Skonfigurowanie interfejsu pętli zwrotnej 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. Co to jest trasowanie 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ą wykonywać
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, którego 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 Linuksem 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 Linuksa). Polecenie to nazywa się
`route'.
Prosty przykład. Wyobraźmy sobie, że mamy sieć ehernetową. 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 do tego:
# 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 pozycja tabeli trasowania umożliwi nam komunikację ze
wszystkimi komputerami 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ą (default route). Trasa domyślna pasuje do
każdego adresu docelowego, lecz najgorzej jak tylko jest to
możliwe. Dlatego, jeśli istnieje 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ępujące polecenie:
# route add default gw 192.168.1.1 eth0
Argument `gw' informuje program route, że następny argument
oznacza adres IP. lub nazwę gatewaya lub routera, do którego 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ę przyjrzysz plikom `rc' zajmującymi się siecią,
zobaczysz, że przynajmniej jeden z nich wygląda bardzo podobnie. Jest
to bardzo populana konfiguracja.
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 prezentowanej
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 'trasowanie ręczne' lub inaczej
mówiąc 'statyczne', polegają na tym, że w przypadku przerwania łącza
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ń). Naturalnie 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 nazywane są ogólnie 'trasowaniem dynamicznym'.
Być może sł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 takich jak 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 Linuksa, lub można go znaleźć w pakiecie
`NetKit' opisanym wcześniej.
Przykład, który 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 i C. Każdy obsługuje segment sieci klasy C
(netmaska 255.255.255.0). Każdy router posiada również łącze PPP do
każdego z pozostałych routerów. Sieć tworzy trójkąt.
Powinno 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. Jeśli nastąpi
awaria tego połączenia komputery na segmencie A nie będą w stanie
osiągnąć komputerów segmentu B i na odwrót ponieważ ich datagramy będą
kierowane do interfejsu 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łączenie 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 poprawnej 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:
Potrzeba uruchomienia demona protokołu dynamicznego trasowania
zachodzi jedynie wtedy, gdy twój Linux ma możliwość wyboru trasy do
komputera docelowego.
Demon trasowania dynamicznego będzie automatycznie modyfikował
tabelę trasowania dopasowując ją do zmian w strukturze sieci.
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żnyprogram-demon sieciowy nasłuchuje na określonych
portach sieciowych i w momencie zestawienia przychodzącego połączenia,
sam zarządza tym połączeniem w celu udostępnienia danej usługi.
podporządkowany serwerowi inetdserwer 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 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 nazwy 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
nazwajedno słowo reprezentujące opisywaną usługę.
port/protokółto pole jest podzielone na dwie części
portnumer 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 dana usł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ą się obie te pozycje.
aliasyinne 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 Linuksa 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.4 2001/12/15 09:56:17 bart 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 program obsł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ługanazwa usługi pobrana przez inetd z
/etc/services
rodzaj gniazdato pole określa rodzaj gniazda jakie zostanie
utworzone, dozwolone wartości to : stream, dgram,
raw, rdm, or seqpacket. Dokładny opis jest dość
skomplikowany ale jako pierwsze przybliżenie można potraktować zasadę,
że niemal 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ólnazwa 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.
flagiistnieją 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ępnym
połączeniu do tej usługi, czy inetd powinien 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ć
skomplikowany, lecz w przybliżeniu mozna powiedzieć, że wszystkie
usługi typu tcp powinny w tym polu mieć wartość nowait i
większość usług typu udp powinny przyjmować wartość
wait. Pamiętaj, że istnieją znaczące wyjątki od tej reguły.
użytkownikokreś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ć wartość 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 poprawnie swych zadań
wymaga uprawnień administatora.
ścieżka_dostęputo pole oznacza pełną scieżkę dostępu do
programu obsługi, który należy uruchomić.
argumentyzawiera pozostałą część wiersza poleceń
uruchamianego programu obsługi. Jest to parametr opcjonalny. To
właś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 przypadku pliku /etc/services wszystkie
nowoczesne dystrybucje zawierają poprawny plik
/etc/inetd.conf. Na wszelki wypadek poniż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ą.
Linux posiada jeszcze kilka plików konfiguracyjnych, 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 informacje
zawierają i czego dotyczą.
/etc/protocols
Plik /etc/protocols zawiera informacje przyporządkowujące
nazwom protokołów odpowiednie numery. Jest wykorzystywany 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.4 2001/12/15 09:56:17 bart 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
# nazwa_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ę plikowi
/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 usługę ftp (ftpd) w momencie nawiązania
przychodzącego połączenia. Plik zawiera listę tych użytkowników,
którzy nie mają pozwolenia wchodzenie do systemu przez usługę
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 uruchamiania przez program inetd odczytuje swoje dwa
pliki konfiguracyjne, zawierające zasady dostępu i albo zezwala, albo
odmawia dostępu do usługi, którą ochrania.
Przeszukuje zasady znajdujące się plikach konfiguracyjnych, aż do
napotkania pierwszej, która pasuje do zaistniał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 opiszę 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, które 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ługjest odzielona przecinkami listą nazw programów obsługi
chronionej usługi do której ma zastosowanie dana reguła.
Na przykład: ftpd, telnetd i fingerd.
lista komputerówjest 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 dowolny 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 wprowadzono
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 ostatni element bardzo
użyteczny, to EXCEPT pozwalający na podanie listy z
wyjątkami. Omówimy to dokładnie później na przykładzie.
poleceniejest 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ęściej wykorzystywane to:
%h jest zamieniane na nazwę komputera nawiązującego połączenie
lub jego adres jeśli 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łączenie 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 rejestruj kto się z
# nami łączył
fingerd: ALL: (finger @%h | mail -s "finger from %h" root)
/etc/hosts.deny
Plik /etc/hosts.deny jest plikiem konfiguracyjnym programu
/usr/sbin/tcpd. hosts.deny zawiera listę
komputerów, które nie mogą uzyskać dostępu do chronionej usługi w
twoim systemie.
Prosty przyklad wyglą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 przypadki. Jedna z tych pozycji jest
dobrym punktem wyjściowym do budowy 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 konieczności podawania przez nich hasła. Jest to użyteczne w
bezpiecznym środowisku sieciowym, gdzie posiadamy kontrolę
nad wszystkimi komputerami lecz w innym przypadku jest to bardzo
ryzykowne ze względu na bezpieczeństwo naszego komputera. W takim
przypadku twój komputer jest tak bezpieczny, jak najmniej bezpieczny z
zaufanych komputerów. Aby zwiększyć bezpieczeństwo swojego systemu nie
używaj tego mechanizmu i zachęcaj swoich użytkownikó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ę do tych instrukcji. Bardzo ważne
jest, abyś nie używał w tym celu kopii swego pliku /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 przeciwnym 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ć.
sendmailniezależ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 inne usługi Sun RPCpowinieneś 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
Wyszukiwarka
Podobne podstrony:
net 3 howto pl 8net 3 howto pl 2NET 3 HOWTO pl 9 (2)NET 3 HOWTO pl 4 (2)net 3 howto pl 7NET 3 HOWTO pl 8 (2)NET 3 HOWTO pl 3 (2)net 3 howto plnet 3 howto pl 3net 3 howto pl 13NET 3 HOWTO pl 11 (2)net 3 howto pl 4net 3 howto pl 6net 3 howto pl 9net 3 howto pl 10net 3 howto pl 1net 3 howto pl 12NET 3 HOWTO plNET 3 HOWTO pl 10 (2)więcej podobnych podstron