Warning: Missing argument 2 for artykul(), called in /homez.143/epubzmnd/linuxpub/old/lib/druk.php on line 22 and defined in /homez.143/epubzmnd/linuxpub/old/lib/artykul.php on line 8
LinuxPub : Ipchains forward port : Dokumentacja, Wiadomości, Pomoc, Forum, Howto, Manual, Bezpieczeństwo Fragment strony http://linuxpub.pl/. Wydrukowano:23.05.2012 02:57
Powrót Powrót 
 
Wyślij znajomemu

Przekazywanie portu z ipchains

Autor:Jim Ray 16.09.2000
Orginalny tytuł:Port Forwarding with ipchains

Tłumaczył: tank Ostatnia aktalizacja : 19.09.2000

Więc chcesz wykorzystać przekazywanie portu przy użyciu ipchains. Zaprezentuje kilka interesujących wskazówek i spróbuje wyjaśnić ipchains i ipmasq w prosty ale jasny sposób. Prawdopodobnie nie jest to najlepsza droga do robienia tego, ale to działa. Moje podejście do budowy firewall'a może jest nieco odbiegające od utartych wzorów. Ponieważ zamierzam zacząć od bardzo ogólne go podejścia przy budowie firewall'a a następnie uściślić zasady.

Nie jestem guru bezpieczeństwa ani guru ipchains'a. Ale ten materiał wygląda poprawnie.

Musisz wybrać dystrybucję której będziesz używał. Większość tego materiału powinno działać ze wszystkimi dystrybucjami, lecz w niektórych przypadkach będziesz musiał coś zmienić. Spróbuje przedstawić kilka różnic, jednak przedstawienie wszystkich byłoby bardzo długie. Osobiście lubię Debian'a i Strom'a, jednak inne również działają. Ten przykład został przygotowany na Storm Firewall dla Linuxa oraz Mandrake 7.1., to powinno zaprezentować podstawy.

Po pierwsze potrzebujesz świeży system (komputer + soft), kiedy mówię świeży mam na myśli niedawno zbudowany. Możesz robić to na starszym systemie, jednak kiedy przejmujesz system po kimś innym lepiej sprawdzić konfigurację krenela i upewnić się że obsługa IP_MASQ i IPCHAINS jest wkompilowana. Polecam także sprawdzić inne opcje w kernelu i upewnić się że nie stracisz czegoś podczas rekompilacji. To może być nieprzyjemne. Nie chcę zagłębić się w konfiguracje kernela, jednak jeśli czytasz ten tekst mam nadzieję że wiesz jak postąpić z twoim własnym. Jeżeli nie to Kernel How-To dostarczy Ci wielu cennych informacji o tym. Jeszcze jedna informacja. System który używasz musi być wyposażony w dwie(2) kary sieciowe. Wiem że niektórzy mówią żeby były to takie same modele kart, jednak nigdy nie miałem problemów z uruchomieniem dwóch różnych kart pod warunkiem że są wspierane przez jądro.

Żeby to pracowało poprawnie w konfiguracji jądra powinieneś mieć poniższe dyrektywy. Musisz się również upewnić że masz prawidłowe sterowniki dla kart sieciowych.

CONFIG_FIREWALL=y CONFIG_IP_FIREWALL=y

Musisz się upewnić że masz zainstalowane wymienione poniżej trzy pakiety.
  • ipchains - Dostępny dla Red Hat'a w src.rpm, i386.rpm a jeżeli używasz Debian'a porostu uruchom "apt-get install ipchains".
  • ipmasq - nie znalazłem w RPM ale dla Debian'a musisz uruchomić "apt-get install ipmasq".
  • ipmasqadm - Dostępny tutaj w RPMS, a dla Debian'a poprostu użyj komendy "apt-get install ipmasqadm".
Jeżeli wszystko zostało zrobione możemy zacząć budowę firewall'a.
W systemie Storm firewall jest umieszczony w /etc/network/firewall i wywoływany jest przez skrypt /etc/init.d/networking. Większość systemów Red Hat'a które widziałem mają wywoływany skrypt /etc/rc.d/rc.firewall jako ostatni w skrypcie /etc/rc.d/rc.local.

Otwórz plik skryptu firewall'a w twoim ulubionym edytorze, cokolwiek byś nie wybrał wpiszemy kilka informacji. Proponuje umieścić mały nagłówek w kilkoma informacjami takimi jak data, twoje inicjały oraz plan, będzie to miłe dla kogoś kto kiedyś poza tobą będzie się tym zajmował.

W pierwszej części przedstawię jak uzyskać firewall dla serwera WWW dostępnego na zewnątrz a także kilka modyfikacji które umożliwią dla znanych (i pewnych) IP dostęp do wnętrza serwera z zewnątrz.

I) Wstępne Ustawienie:

W serwerze WWW firewall musi być ustawiony jako domyślna brama. Jeżeli użyjesz polecenia "route -n", domyślna bramka (default gw) powinna być przedstawiona z wewnętrznym adresem IP bramy (czyli firewall'a).

Aby to przetestować musisz być na zewnątrz sieci. Kiedy mówię na zewnątrz, chodzi o całkowicie inną klasę C. Tu jest pewna pluskwa w IP Masquerading'u która nie pozwala używać tej samej zewnętrznej bramy. Łata na to pojawiła się na liście mailingowej dotyczącej Masquerade.

II) Firewall Setup

  1. W swoim skrypcie firewalla dodaj następujące linie. Te podstawowe jak #!, ścieżki i kilka zmiennych. Możesz podawać numery IP przy każdej regule z osobna jednak kiedy chcesz użyć więcej reguł z docelowym twoim własnym IP, wykorzystanie zmiennych zredukuje trochę pisanie.
    #!/bin/sh
    
    PATH="/sbin:/usr/sbin:/usr/local/sbin:$PATH"
    EXTERNAL_IFACE="eth0"            # zewnętrzny interface eth0.
    LOOPBACK="lo"                    # Ustawia  loopback
    INTERNAL_IFACE="eth1"            # Ustawia wewnętrzny interface
    MY_EXT_IP="my_ipaddress"         # Twój zewnętrzny IP
    MY_INT_IP="my.internal.address"  # Twój wewnętrzny IP
    
    ANYWHERE="0.0.0.0/0.0.0.0"      # Podstawowe ustawienie dla ktoś
    				# wszystkich
    WWW_SERVER ="10.0.0.10"         # To może być adres twojego web
    				# servera
    
  2. Aby skonfigurować w /proc aby przyjmowało lub odrzucało podstawowe operacje, trzeba ustawić jedynkę(1) lub zero(0) w kilku plikach. W Red Hacie robi się to trochę inaczej, można dodać linię "net.ipv4.ip_forward = 1" do pliku /etc/sysctl.conf. Radzę jednak robić to w jasny sposób w skrypcie firewall'a.
    echo 0 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
    echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
    echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
    echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
    echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
    
  3. Teraz, kiedy w przygotowania zostały zakończone, możemy rozpocząć konfiguracje ipchains.
    ipchains -F                      # -F służy do wyczyszczenia wszystkich
    				 # starych reguł.
    ipchains -X                      # -X kasuje łańcuch
    ipchains -M -S 7200 240 500      # -M ustawia czasy zmiennych masquerade
    ipchains -P input DENY           # -P ustawia politykę blokowania
    				 # wejścia
    ipchains -P forward ACCEPT       # w ten sposób akceptujemy
    				 # przekazywanie
    ipchains -P output ACCEPT        # i akceptujemy wyjście
    ipchains -N inside               # Ustawia nowy łańcuch
    ipchains -N outside              # Ustawia nowy łańcuch
    ipchains -A inside -p  -p ip -j ACCEPT # Akceptuje pakiety z wewnątrz
    ipchains -A input -i lo -j ACCEPT      # Akceptuje wszystko z lo
    ipchains -A output -i eth0 -j ACCEPT   # Akceptuje całe wyjście na
    				       # zewnętrzny interface
    ipchains -A input -i eth1 -j outside   # To będzie używane później
    ipchains -A input -i ! eth1 -j inside  # To będzie używane później
    
  4. Ustawiamy masquerading więc możesz wysyłać pakiety na zewnątrz web serwera.
    ipchains -A forward -i eth1 -s $WWW_SERVER/32 -j MASQ
    
  5. Ustawiamy reguły dla web serwera. Ta eguła zezwala wszystkim z skądkolwiek na użycie zewnętrznego interface na porcie 80, port www.
    ipchains -A input -s $ANYWHERE -d $MY_EXT_IP 80 -p tcp -i eth1 -j ACCEPT
    
  6. Ustawiamy przekazanie portu do wewnętrznego serwera WWW. To bierze wszystkie żądania na porcie 80 z zewnętrznego adresu IP i przekazuje na adres serwera WWW znajdującego się za firewall'em. -f czyści reguły ipmasqadm.

    Druga linia to - a dodaje regułę, -P tcp, protokół tcp, -L, lokalny interface i numer portu, -R, odległy interface i numer portu, -p, Sto (100) ustawia do 100% czasu do tego.
    ipmasqadm portfw -f
    ipmasqadm portfw -a -P tcp -L 198.17.136.45 80 -R 10.0.0.199 80 -p 100
    
Bardziej zaawansowani użytkownicy IP Chains mogą powiedzieć że nie zrobiłem wielu dodatkowych rzeczy, ale zablokowałem całe wejście i zezwoliłem tylko na wyjście z serwera WWW, i to powinno działać.

Do ograniczenia kto ma się dostać do serwera, po prosu trzeba użyć reguły z Korku 4 powyżej
ipchains -A input -s $ANYWHERE -d $MY_EXT_IP 80 -p tcp -i eth1 -j ACCEPT
i zmodyfikować ją. Powiedzmy że chcesz zezwolić na podłączenie tylko sieci 111.111.111.111. Możesz dodać dodatkowe niezbędne wartości w innych miejscach.
ipchains -A input -s 111.111.111.111/32 -d $MY_EXT_IP 80 -p tcp -i eth1 -j
ACCEPT



 


Do góry Do góry 
 
Powrót Powrót 
Wyślij znajomemu