Jeżeli posiadamy już własny serwer, a przy okazji jesteśmy szczęśliwymi posiadaczami SDI albo innego łącza do internetu, to możemy pokusić się o udostępnienie internetu innym użytkownikom naszej sieci. Opisywany sposób zainteresuje wszystkich, którzy chcieliby podłączyć do internetu kilka komputerów, lecz dostali od operatora tylko jeden adres IP.

NAT i maskarada

Zarówno NAT (Network Address Translation) jak i maskarada służą do udostępniania łącza internetowego w sieci lokalnej. Działa to w ten sposób, że komputer, który służy jako brama sieciowa zbiera żądania od komputerów z sieci lokalnej i wysyła w świat ze swoim numerem IP (lub bez zmiany adresu - NAT). Po otrzymaniu odpowiedzi system ten podmienia swoje IP na adres komputera lokalnego i przesyła dalej. Różnica między nimi jest taka, że maskarada odwzorowuje adresy wiele-na-jeden, NAT natomiast wiele-na-wiele. (Każda maskarada jest NATem, a nie każdy NAT maskaradą). W przypadku otrzymania tylko jednego adresu IP od swojego ISPa stosujemy maskaradę. Jeżeli mielibyśmy kilka IP możemy tak skonfigurować system, alby kilka komputerów z sieci lokalnej otrzymało swoje stałe IP, a pozostałe byłyby maskowane tylko jednym adresem (lub też kilkoma, ale takie rozwiązanie jest rzadko stosowane).

Tekst ten opisuje konfigurację maskarady, jednak informacje w nim zawarte są również użyteczne przy konfigurowaniu NATa. Zakładam także, że system pracuje na jądrze w wersji 2.2.X. W przypadku wersji 2.0.X używane było narzędzie 'ipfwadm', które jest jednak starsze i mniej uniwersalne. W kernelach 2.4.X stosuje się natomiast 'iptables'. UWAGA: Wszystkie ścieżki do plików zapisywane są zgodnie ze strukturą drzewa katalogów systemu Linux Slackware. Jednak po niewielkich modyfikacjach będą działać także z innymi dystrybucjami.

Co musimy mieć?

Przede wszystkim powinniśmy posiadać komputer z zainstalowanym systemem Linux i skonfigurowanymi urządzeniami sieciowymi (karta Ethernet, łącze SDI, port równoległy). Musimy także doinstalować do naszego systemu pakiet 'ipchains'. To właściwie wszystko czego potrzebujemy. UWAGA: Jądro, na którym pracuje brama MUSI mieć wkompilowane opcje pozwalające obsługiwać routing i maskaradę.

Przygotowania

UWAGA: Wszystkie polecenia wykonujemy jako 'root'. Pierwszą rzeczą, jaką musimy zrobić, jest utworzenie pliku, w którym zapisywać będziemy kolejne polecenia konfiguracyjne. Służy do tego polecenie 'touch'. Wpisujemy zatem 'touch /etc/rc.d/rc.ipchains' i mamy pusty plik. Teraz musimy mu nadać odpowiednie atrybuty poleceniem 'chmod 755 /etc/rc.d/rc.ipchains'. Nadaliśmy właśnie plikowi atrybut 'wykonywalny', który jest niezbędny dla wszystkich skryptów startowych Linuxa. Kojeną rzeczą jest wpisanie do naszego pliku informacji o powłoce, jakiej bedziemy używać przy uruchamianiu tego skryptu.

U mnie pierwsza linia wygląda tak: '#!/bin/sh'. Następnie musimy zebrać kilka informacji dotyczących naszej konfiguracji sieciowej. Będą nam potrzebne nastepujące dane: -nazwa urządzenia sieciowego, przez które będziemy się komunikować ze światem (np. 'eth0' lub 'ppp0'). -nazwa urzadzenia(urządzeń), której będziemy udostępniać internet (zazwyczaj karty Ethernetowe: 'eth0', 'eth1'). -maska podsieci naszej sieci lokalnej (u mnie '255.255.255.0').

Podstawy

Na samym początku konfigurowania maskarady musimy włączyć przekazywanie pakietów w jądrze. W tym celu należy wpisać "1" do pliku '/proc/sys/net/ipv4/ip_forward'. Otwieramy w ulubionym edytorze (ja używam tego z Midnight Commandera) nasz plik konfiguracyjny i wprowadzamy linijkę 'echo "1" > /proc/sys/net/ipv4/ip_forward'. Do tej pory idzie nam znakomicie, więc zachęceni idziemy dalej...

Składnia polecenia 'ipchains'

Polecenie 'ipchains' w systemach linuxowych służy do konfigurowania zapór ogniowym (firewalls) oraz NAT/maskarady. Ma ono następującą składnię (prosto z manuala):

ipchains -[ADC] chain rule-specification [options] ipchains -[RI] chain rulenum rule-specification [options] ipchains -D chain rulenum [options] ipchains -[LFZNX] [chain] [options] ipchains -P chain target [options] ipchains -M [ -L | -S ] [options]

Cały ruch sieciowy możemy podzielić na 4 kategorie:

-input chain (łańcuch wchodzący) - to wszystkie pakiety, które pojawiają się na interfejsach sieciowych

-output chain (łańcuch wychodzący) - pakiety, które opuszczają serwer

-forward chain (łańcuch przekazywania pakietów) - wszystko to, co jest przesyłane między różnymi interfejsami sieciowymi

-user chain (łańcuch użytkownika) - pomocny przy rozbudowanych regułach filtrowania pakietów (tą częścia nie będziemy się zajmować)

Każdy z tym łańcuchów jest definiowany przez administratora systemu. Po dokładny opis samego polecenia odsyłam do manuali, a tutaj opiszę jedynie trzy podstawowe konstrukcji używane najczęściej.

1. 'ipchains -F chain' - to polecenie powoduje wyczyszczenie wszystkich regół dla danego łańcucha. Można również pominąć nazwę łańcucha w celu wyczyszczenia wszystkich regół.

2. 'ipchains -P policy chain' - ustawienie domyślne zasady filtrowania. Jako 'policy' mogą występować następujące wartości: 'accept' - pozwala na ruch bez ograniczeń

'reject' - nie pozwala na ruch i zwraca informację o odrzuceniu 'deny' - podobnie do 'reject', ale nie zwraca informacji 'masq' - możliwe tylko dla łańcuchów przekazywania i użytkownika, opisane dalej 'redirect' - używane tylko przy przezroczystych serwerach proxy 'return' - powrót do poprzedniego łańcucha

3. 'ipchains -A chain -p protocol -s source -d destination -i interface -j action' - podstawowa reguła dla większości prostych firewalli i maskarad.

Znaczenie kolejnych parametrów:

'chain' - nazwa łańcucha, np 'input' 'protocol' - nazwa protokołu używanego przy połączeniu ('tcp', 'udp' lub 'icmp') 'source' - żródło danych, adres IP komputera, który wysłał pakiet 'destination' - przeznaczenie, adres IP komputera, do którego pakiet ma dotrzeć 'interface' - interfejs sieciowy. Dla łańcucha wejściwego jest to interfejs, którym nadchodzą dane, dla pozostałych - wyjściowy. 'action' - pole określające co zrobic z danym pakietem. (patrz 'policy' w poprzednim punkcie)

Prosta maskarada.

Najprostsza maskarada, która udostepnia internet wszystkim komputerom w posieci może wyglądać np. tak:

#!/bin/bash # Czyścimy wszystkie regółki ipchains -F # Ustalamy ogólne reguły filtrowania pakietów ipchains -P input ACCEPT ipchains -P output ACCEPT ipchains -P forward DENY # Pozwalamy na komunikację ze światem przez maskarade ipchains -A forward -i ppp0 -s 192.168.1.0/24 -d 0/0 -j MASQ

Przyjąłem tutaj założenie, iż połączenie ze światem mamy przez urządzenie ppp0 (np. SDI) a maska podsieci w sieci lokalnej jest równa 255.255.255.0 (24 bity na adres sieci).

Przykład praktycznej maskarady

A teraz przykład prostej ale skutecznej maskarady, która działa na rzeczywistym serwerze. Z internetem połączenie mamy poprzez modem kablowy na iterfejsie 'eth0'. Pierwsza sieć lokalna 'eth1' o numerach IP z klasy C (192.168.1.XXX) i o masce podsieci 255.255.255.0. Druga sieć lokalna na 'eth2' (192.168.2.0 z maską 255.255.255.0). Założenia są następujące:

1. Wszystkim komputerom z podsieci 192.168.1.0 oraz komputerowi 192.168.2.10 dajemy pełny dostęp do zasobów internetu.

2. Komputer 192.168.2.15 będzie miał dostęp tylko dla telnetu oraz ssh (dostęp do kont na innych serwerach).

#!/bin/bash # Czyścimy wszystkie regółki ipchains -F # Ustalamy ogólne reguły filtrowania pakietów ipchains -P input ACCEPT ipchains -P output ACCEPT ipchains -P forward DENY # Pozwalamy na komunikacje ze swiatem dla podsieci 192.168.1.0 ipchains -A forward -i eth0 -s 192.168.1.0/24 -d 0/0 -j MASQ # Pozwalamy na dostęp do internetu dla komputera 192.168.2.10 ipchains -A forward -i eth0 -s 192.168.2.10/32 -d 0/0 -j MASQ # Teraz komputer 192.168.2.15 (otwieramy jedynie porty 22 oraz 23) ipchains -A forward -p tcp -i eth0 -s 192.168.2.10/32 -d 0/0 22:23 -j MASQ ipchains -A forward -p udp -i eth0 -s 192.168.2.10/32 -d 0/0 22:23 -j MASQ

Zakończenie

W bardziej rozbudowanych serwerach oferujących różnorodne usługi internetowe (ftp, www, konta shellowe...) nieodzowne jest zastosowanie odpowiedniego firewalla. Chociaż maskarada jest pewnego rodzaju firewallem sieci lokalnej, to jednak nie chroni ona w żaden sposób samego serwera na którym została zainstalowana. Budowania firewalli jest dosyć podobne do opisywanej w tym artykule maskarady, jednakże opiera się ono na łańcuchach 'input' oraz 'output'. Podstawowa zasada przy projektowaniu tego typu systemów jest następująca: "Przepuszczamy przez serwer tylko to, co jest konieczne do działania sieci, zatrzymując cały pozostały ruch".