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
- 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
- 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
- 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
- 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
- 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
- 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