baseciq.org

Maskarada IP

Właściwie to od tego tekstu z 2001 roku się zaczęło. Uruchomienie SDI i nata na linuksie - czyli coś co każdy wtedy potrzebował. Jak grzyby po deszczu wyrastały dookoła sieci osiedlowe na zawrotnej prędkości modemach SDI (115kbps). Łezka się w oku kręci, dlatego ten tekst jest tu ze względów sentymentalnych na pewno.

Co to jest maskarada? Maskowanie adresów IP polega na ukryciu (zamaskowaniu) adresów IP komputerów w sieci przez router podłączony do internetu. Pozwala to na dostęp do internetu komputerom nie posiadającym publicznego adresu IP (192.168.*.* czy też 10.*.*.*), lub też na ochronę tychże komputerów nawet jeżeli mają publiczne adresy IP – maskarada jest jedną z odmian firewalla.

A do czego to mi w praktyce?

Tekst ten napisałem pod kątem głównie sieci amatroskich które posiadają łącze do internetu z jednym adresem IP, a wbrew pozorom udostępnienie takiego internetu nie jest wcale trudne. Zakładam także że masz już skonfigurowane połączenie z internetem (o SDI pisałem wyżej) i główny nacisk położę na tym jak zbudować maskaradę z komputerami z windows.

Zakładam że już udało Ci się postawić linuksa. Przede wszystkim musisz wiedzieć którą wersję kernela posiadasz – od tego jest uzależnione czy maskaradę należy wykonać przy użyciu komendy ipchains czy iptables. Wersję kernela możesz sprawdzić poprzez komendę ‘uname -a’. Przydała by się skonfigurowana także sieć lokalna (komputery mam nadzieje połączone są już w sieć) – jeżeli tego jeszcze nie zrobiłeś – niestety ja Ci tutaj nie pomogę. Poszukaj dokumentacji do swojej dystrybucji.

Teraz trzeba napisać skrypt który będzie włączał tą maskaradę:

  1. Zaloguj się jako root, wejdź do katalogu /etc/rc.d i stwórz plik rc.masq, nadaj mu atrybuty pliku wykonywalnego:
    cd /etc/rc.d && touch rc.masq && chmod +x rc.masq
    		
  2. Wyedytuj ten plik (możesz do tego użyć ulubionego edytora tekstowego, jeżeli nie masz takowego, użyj programu mc który wygląda i działa podobnie do Midnight Commandera), wpisz do niego odpowiednią treść zależnie od wersji kernela:

    dla kerneli w wersjach 2.2.x:

    #!/bin/sh
    
    # włączenie forwardowania pakietów:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    # parametry -F -X wyczyszczą aktualne reguły maskarady
    ipchains -F
    ipchains -X
    
    # domyślne DENY przy próbie forwardowania pakietów
    ipchains -P forward DENY
    
    # uruchamiamy maskaradę
    ipchains -A forward -s 192.168.0.0/255.255.0.0 -d 0/0 -j MASQ
    
    # moduły wspomagające do maskarady
    /sbin/modprobe ip_masq_irc
    /sbin/modprobe ip_masq_ftp
    		

    Co to wszystko oznacza? Każdy pakiet pochodzący z komputera o adresie rozpoczynającym się od 192.168. (-s 192.168.0.0/255.255.0.0 – czyli 192.168.0.0 – 192.168.255.255) zadresowany gdziekolwiek (-d 0/0) ma zostać zmaskowany (-j MASQ). Jeżeli nadal tego nie rozumiesz – poczekaj parę minut i spróbuj jeszcze raz.

    dla kerneli w wersjach 2.4.x i 2.6.x:

    #!/bin/sh
    
    # włączenie forwardowania pakietów:
    
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # wyczyśćmy tablice iptables odpowiedzialne za nat i za filtrowanie pakietów:
    
    iptables -F -t nat
    iptables -X -t nat
    iptables -F -t filter
    iptables -X -t filter
    
    # Domyślnie odrzucamy i nie zezwalany na forwardowanie pakietów
    
    iptables -t filter -P FORWARD DROP
    
    # Zezwalamy na by serwer przepuszczał pakiety które pochodzą z naszej sieci
    # lokalnej lub są dla niej przeznaczone.
    
    iptables -t filter -A FORWARD -s 192.168.0.0/255.255.0.0 -d 0/0 -j ACCEPT
    
    iptables -t filter -A FORWARD -s 0/0 -d 192.168.0.0/255.255.0.0 -j ACCEPT
    
    # Teraz nakazujemy by wszystkie pakiety pochodzące z lanu były maskowane
    
    iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 0/0 -j MASQUERADE
    
    # I doładujmy moduł do obsługi ftp i irc (moduł do irca zauważyłem dopiero
    # w kernelu 2.4.14 dlatego się w końcu za niego wziąłem
    
    /sbin/modprobe ip_nat_ftp
    /sbin/modprobe ip_nat_irc
    		

Jak widać iptables w Linuxie 2.4.* są o wiele bardziej zaawansowane niż ipchains w 2.2.*. Wiem także iż można zrobić maskaradę prościej/lepiej. Ale powyższy przykład działa i jest w miarę podobny do ipchains. Teraz, aby przy każdym uruchomieniu serwera był wykonywany ten skrypt, dopisujemy w pliku /etc/rc.local na końcu:

/etc/rc.d/rc.masq