Thx za opisik, jak jeszcze mozesz to podrzuc jakis =
przykladzik.:)
I jezeli to nie zaduzo to czym mozna sprawdzic =
zrobionego firewall`a chodzi mi o jego skutecznosc np. jaka strona co =
testuje , program lub ploecenie
Thx
Rafal
----- Original Message -----
From: demeus
To: rafaelb@interia.pl
Sent: Monday, March 24, 2003 6:09 PM
Subject: Re: [slacklist] Firewall
Ten artykuł powinien pozwolić Tobie na = napisanie firewalla samemu...
jesli beda jakies pytania to daj znac...
Pakiet netfilter - obsługa filtrowania = pakietów w Linuksie przez jądro w wersji 2.4 (komenda =
Jeśli będziesz miał jakieś uwagi i = komentarze to nie krępuj się i napisz: gallegher@w.pl
Polskie tłumaczenie howto do iptables = znadziesz tutaj. Powinieneś je przeczytać najpierw, zanim zaczniesz = tłumaczenia pojawiające się na stronie Łukasza Bromirskiego - = naprawdę warto. Zajrzyj również na stronę domową pakietu = netfilter.
Taaaak. Widziałem, że nie będzie ci się = oględnie jak wędrują pakiety w jądrze 2.4 - nie będę = omawiał składni komendy iptables. Jesli coś wyda ci się = niejasne, zajrzyj do howto, lub na stronę manuala iptables. =
Podstawowym pojęciem jest łańcuch = (chain). Łańcuch jest to zbiór reguł filtrujących. Istnieją = trzy standardowe łańcuchy: input, forward i output; łańcuchy = własne łańcuchy. Łańcuch jest listą reguł do których po = kolei jest porównywany pakiet. Jeśli pakiet pasuje do którejś z = reguł, wykonywana jest akcja zdefiniowana wewnatrz tej reguły. = pasuje do żadnej reguły wykonywana jest akcja zdefiniowana w = polityce danego łańcucha. Tylko łańcuchy podstawowe i dodatkowe = mają własną politykę, łańcuchy utworzone przez użytkownika = nie mają własnej polityki, a pakiet po przejściu przez taki = łańcuch wraca do łańcucha z którego został = wywołany.
&nbs=
p;  =
; ______
&nbs=
p;  =
; / \
>---[ PREROUTING ]---( ruting )---[ FORWARD =
]--+--[POSTROUTING ]->
&nbs=
p;  =
; =
\______/  =
; |
&nbs=
p;  =
; =
| =
|
&nbs=
p;  =
; =
V =
|
&nbs=
p; [ =
INPUT =
] =
[ OUTPUT ]
&nbs=
p;  =
; =
| =
^
&nbs=
p;  =
; =
| =
|
&nbs=
p;  =
; +--> procesy lokalne -+
Pakiet sprawdzany jest najpierw w łańcuchu = PREROUTING. Następnie podjemowana jest decyzja czy pakiet skierowany = jest do komputera lokalnego i wtedy przechodzi przez łańcuch INPUT i = których dany komputer jest ruterem. W takim wypadku podejmowana jest = sieciowa przez którą należy dany pakiet dalej przesłać) i = pakiet trafia do łańcucha FORWARD. Pakiety wygenerowane przez = procesy lokalne (np. przeglądarkę www wysylającą zapytanie o = stronę) przechodzą przez łańcuch OUTPUT. Następnie wszystkie = pakiety przechodzą przez łańcuch POSTROUTING i są wysyłane na = karty sieciowe.
Tak naprawdę to podstawowe łąńcuchy =
należą do tabeli filter. Jest to główna tabela służąca do =
nat, w której definiujemy popularną "maskaradę" oraz =
tabela mangle służąca do zmieniania zawartości pakietów =
przechodzących przez nasz firewall. Nie wszystkie łańcuchy =
Do tabeli "mangle" (komenda: iptables =
-t mangle ...) należą łańcuchy:
Do tabeli "nat" (komenda: iptables -t =
nat ...) należą łańcuchy:
Defaultową tabelą jest "filter" =
(komenda: iptables ... - nie trzeba używać przełącznika -t), =
należą do niej łańcuchy:
Kolejność przechodzenia pakietów przez =
tabele: mangle -> nat -> filter.
----------------------------------------------------------------=
--------------
Tworzenie firewalla - wstęp.
Postanowiłem omówić tworzenie firewalla, =
na konkretnym, praktycznym przykładzie. Zakładam, że masz komputer =
podpięty do jakiegoś rodzaju łącza stałego. Oczywiście =
potrzebujesz firewalla. Zawsze najlepszym wyjsciem, jest gdy firewall =
jest dedykowanym serwerem na którym nie ma uruchomionych żadnych =
teoretycznie) włamu do niego. Brzmi to bardzo poważnie, ale tak =
naprawdę nie będzie zbyt dużo kosztowało. Wystarczy stare 486DX =
kogoś kto się chce pozbyć. Jeśli nie masz dysku twardego, to =
możesz poszukać jakiejs jednodyskietkowej dystrybucji Linuxa lub BSD =
przystosowanej do pełnienia roli rutera i firewalla. Jednak wtedy =
najpewniej nie będziesz mógł skorzystac z konfiguracji opisanej =
poniżej - wersje jednodyskietkowe Linuksów są wykonywane =
najczęściej na jadrach serii 2.2, czyli możesz korzystac z komendy =
spójrz na porównanie statystyk "dziur" dla tego systemu i =
np. dla RedHata. Nie będę tutaj opisywał sposobu instalacji =
Linuksa, istnieje na ten temat zbyt wiele wyspecjalizowanych stron. =
Główną zasadą jest instalowanie jedynie niezbędnych =
pakietów. W ten sposób zmniejszasz prawdopodobieństwo, że w =
przyszłości w jednym z zainstalowanych przez ciebie pakietów =
zostanie odkryta jakaś dziura - im mniej pakietów zainstalowanych =
tym mniejsze prawdopodobieństwo wykrycia dziury. OK. Przejdźmy do sedna. Jednym z problemów =
może być umowa, którą podpisałeś ze swoim dostawcą usług =
(ISP). Najczęściej jest w niej paragraf mówiący, że możesz =
uruchomić tylko jeden terminal z dostępem do Internetu. Uważam =
jednak, że jeśli uruchomisz jeden dodatkowy komputer jako firewall, =
z którego nie będziesz korzystał jak z terminala dostępowego do =
Internetu, to nie łamiesz ducha umowy (byćmoże łamiesz literę =
- nie jestem prawnikiem). W opisanej przeze mnie konfiguracji opiszę =
jak utrudnić Adminom ISP wykrycie działajacej u ciebie maskarady (a =
udostepniania łącza dla jednego komputera - aby uruchomić =
udostepnianie dla wiekszej ilości maszyn bedziesz musiał sam =
trochę pomyśleć. Jeśli uda ci się przerobić podaną przeze =
mnie konfigurację, to znaczy że i tak dałbyś radę to zrobić =
sam, w tym wypadku nie będę się czuł winny złamania przez =
przeze mnie skrypty na własną odpowiedzialność.. Mam nadzieję, że przeczytałeś =
poprzednie rozdziały mojej strony - sieci.krysiak.info, ponieważ aby =
zrozumieć działanie podanych niżej skryptów będziesz =
potrzebował tej wiedzy. ----------------------------------------------------------------=
--------------
Tworzenie firewalla - podstawy.
Ruter (i firewall), który konfigurujemy ma =
przydzielonym przez naszego dostawcę usług i drugą - eth1 - do =
naszej sieci lokalnej, której IP sami sobie konfigurujemy. Jesli masz =
łacze SDI to najprawdopodobniej musisz wymienić wpisy eth0 na =
ppp0. eth0
eth1
komputer w sieci wewnętrznej =
konfigurujemy:
W przypadku Slackware'a wyremowałem =
(postawiłem na początku linii #) ze skryptu /etc/rc.d/rc.inet1 =
wszystko poza linią: # poczatek skryptu /etc/rc.d/rc.inet1
Następnie konfigurujemy standardowe =
urządzenie lo.
/sbin/ifconfig lo 127.0.0.1
W moim przypadku włączamy potrzebne =
moduły do kart sieciowych 3Com:
/sbin/modprobe 3c509
A nastepnie przechodzimy do konfiguracji =
tychże kart sieciowych i rutingu.
/sbin/ifconfig eth0 111.222.333.444 netmask =
255.255.255.0 broadcast 111.222.333.255 up
Dalej musimy włączyć NAT (czyli taką =
"lepszą maskaradę")
modprobe ip_conntrack_irc
Komendami modprobe właczamy moduły do irca =
(jeśli będą nam potrzebne). Komenda iptables uruchamia nam SNAT =
pakietów, który podmienia adres źródłowy pakietów z naszej =
sieci wewnetrznej na adres 111.222.333.444. W tym momencie pakiety z =
naszego komputera o adresie 192.168.1.2 wychodząc w Internet (z karty =
zadziałało musimy jeszcze uruchomić proces rutingu - dzieje się =
to w następnej linii. Nastepnie uruchamiamy nasz skrypt =
firewall.start. Na koniec uruchamiamy demona ssh (najlepiej w wersji 2) =
abyśmy mogli administrować naszym ruterem z zewnątrz. W tym =
momencie zaczynamy pisanie skryptu firewalla /etc/rc.d/firewall.start =
. ----------------------------------------------------------------=
--------------
Tworzenie firewalla - =
konfiguracja.
Podstawową zasadą przy pisaniu reguł =
firewalla jest: najpierw stawiamy barierę nie do przebycia dla =
żadnych pakietów, a następnie wybijamy w niej przejścia tylko =
W skrócie: co nie jest dozwolone - jest =
zabronione. Czyli po pierwsze wybieramy połączenia które będą =
możliwe do naszego rutera z Internetu. Poza tym tak naprawdę =
powinniśmy również ściśle zdefiniować połączenia które =
host z sieci wewnętrznej może dykonywać do Internetu oraz =
połączenia które komputer (komputery) z sieci lokalnej mogą =
wykonywać do rutera. W przypadku większej sieci tak właśnie =
się postępuje, jednak dla naszej sieci składającej się jedynie =
z komputerów zarządzanych osobiście przez 1 osobę, nie ma takiej =
potrzeby. Poza tym ograniczalibyśmy w ten sposób sobie samym =
takiego postępowania, przykładowo w przypadku gdy na naszym =
komputerze pojawi się się jakiś trojan, przy silnie restrykcyjnym =
firewallu, gdy trojan próbowałby nawiązać połączenie na =
zewnątrz, zostałoby ono usunięte i mielibyśmy o tym informację =
w logach systemowych. Oznacza to, że na komputerze lokalnym nie =
możemy zaniedbać podstawowych zasad bezpieczeństwa i musimy =
zainstalować jakieś (często upgradowane) oprogramowanie =
antywirusowe. Czyli zaczynamy. W katalogu /etc/rc.d/ tworzymy =
sobie skrypt firewall.start, który jest uruchamiany z pliku rc.local =
(jest to poprawne dla większości dystrybucji Linuksa). Moja =
konfiguracja została oparta na opisie ze strony: =
www.sns.ias.edu/~jns/security/iptables - oczywiście dokonałem w niej =
pewnych zmian. Nie będę tworzył skryptu sparametryzowanego - jest =
on zbyt mało przejrzysty dla ludzi nieobytych ze skryptami shellowymi, =
a ponadto gdy zaglądamy do niego po kilku miesiącach jest =
trudniejszy w analizie. Przed komendami iptables występującymi w =
skrypcie powinieneś dopisać pełną bezwzględną ścieżkę =
#!/bin/sh
modprobe ip_tables
iptables -P INPUT DROP
Najpierw próbujemy ładować moduły =
które mogą się nam przydać. Bardzo ważnym modułem jest =
możemy stwierdzić które pakiety nie są poprawnymi pakietami =
oczywistym protokołem TCP, który jest protokołem =
połączeniowym) również protokoły UDP i ICMP. Lista aktualnie =
śledzonych polączeń znajduje się w pliku /proc/net/ip_conntrack. =
W ostatnich 3 liniach ustawiliśmy politykę podstawowych =
łańcuchów na DROP - w tym momencie nasz host nie odbiera i nie =
przepuszcza żadnych pakietów. Teraz wykonamy wstepną =
konfigurację parametrów jądra wpływających na działanie =
stosu TCP/IP. # wylaczamy odpowiedzi na pingi
W linii 2 informujemy nasz ruter, aby nie =
odpowiadał na zapytania ICMP echo - czyli ruter nie będzie =
odpowiadał na pingi. W linii 4 uniemożliwiamy odpowiedzi ICMP echo =
na pakiety typu broadcast w efekcie czego bronimy się przed atakiem =
typu Smurf. Atak ten polega na tym, że atakujący wysyła pakiety =
ICMP echo request skierowane na adresy broadcastowe naszej sieci. =
Wszystkie komputery naszej sieci odpowiadaja na takie pakiety co =
najczęściej powoduje silne przeciążenie sieci. Bardzo często =
adres źródłowy takiego pakietu jest zmieniony i ustawiony na =
rzeczywistą ofiarę, która otrzymuje nagle dużo pakietów z =
odpowiedziami typu echo-reply. Jeśli w ten sposób zostanie =
zaatakowanych kilka podsieci, łącze ofiary może ulec =
zapchaniu. W linii 6 powiadamiamy jądro systemu, aby nie =
akceptowało pakietów "source routed". Atakujący może =
użyć tego typu pakietów, aby udawać, że jest z wnętrza =
naszej sieci, lecz ruch ten byłby kierowany spowrotem wzdłuż =
ścieżki po której do nas dotarł. Technika ta rzadko jest =
używana w uzasadninych celach. W linii 8 zabraniamy zmieniania naszej tablicy =
rutingu na podstawie pakietów ICMP redirect.
W linii 10 powodujemy, że nasz host nie =
będzie reagował na fałszywe komunikaty o błędach.
Standardowym mechanizmem jest ignorowanie =
pakietów pochodzących z sieci nie znajdujących się w naszej =
tablicy rutingu, co odbywa się w linii 12. Oznacza to, że jeśli na =
karcie eth1 jest zdefiniowana sieć 192.168.1.0/30 to nie przyjmie ona =
pakietów z adresu 10.1.23.32. Oczywiście karta eth0 będzie =
przyjmowała wszystkie pakiety, ponieważ jest poprzez nią dostęp =
Linia 14 powoduje, że informacja o wszelakich =
iptables -A INPUT -i lo -j ACCEPT
Pierwsze co umożliwiamy to ruch na =
urządzeniu lo, które jest wykorzystywane przez różne procesy =
lokalne. Na ten ruch nie stawiamy żadnych ograniczeń. Poniżej tworzymy nowy łańcuch o nazwie =
syn-flood który będzie zabezpieczał nasz ruter przed atakami typu =
DoS. Oczywiście jest bardzo prawdopodobne, że bedziesz musiał =
modułu limit. iptables -N syn-flood
W pierwszej linii tworzymy łańcuch =
syn-flood. W drugiej linii powodujemy, że wszystkie pakiety =
protokołu TCP z ustawioną flagą syn pojawiające się na karcie =
sieciowej eth0 i wędrujace przez łańcuch INPUT (skierowane =
bezpośrednio do naszego rutera) będą skierowane do łańcucha =
syn-flood. Pakiety z ustawioną flagą syn (i w poprawnym =
połączeniu również ack) służą do nawiązywania =
połączenia. W linii 3 zaczynamy "zliczanie" tych =
pakietów. Jeżeli pojawi się więcej niż jeden na sekundę =
pakiet nawiązujący połączenie z naszym ruterem, to po czterech =
takich pakietach reguła 3 przestanie przerzucać pakiety spowrotem =
(-j RETURN) do łańcucha INPUT. W takim wypadku zostaną wykonane =
następne regułki. Reguła 4 spowoduje że informacja o takim =
pakiecie pojawi się w logach systemowych z przedrostkiem: "IPT =
SYN-FLOOD: ". Reguła 5 spowoduje, że pakiet taki zostanie =
skasowany bez żadnej dodatkowej reakcji ze strony naszego hosta =
TCP/IP. Przydało by się jeszcze ustawić ograniczenie limit na =
może nam się dysk trochę przepełnić, zwłaszcza że system =
może nie nadążyć zapisywać tego do logów. Poprawna postać =
linii nr 4: iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 =
-j LOG --log-level debug --log-prefix "IPT SYN-FLOOD: ". Tutaj =
też możemy poeksperymentować z warttościami parametrów. =
iptables -A INPUT -i eth0 -p icmp -m state =
--state ESTABLISHED,RELATED -j ACCEPT
Powyższe linijki zapewniają nam =
przepuszczanie nawiązanych połączeń protokołu icmp (linia 1) i =
nawiązywanie połączeń pochodzących z naszego hosta (linia =
2). iptables -A INPUT -i eth0 -p tcp ! --syn -m =
state --state NEW -j LOG --log-level debug --log-prefix "IPT NEW: =
"
Powyższe linie wynikają z pewnej =
niekonsekwencji w implementacji modułu conntack służącego do =
śledzenia połączeń w pakiecie netfilter. Moduł ten uznaje =
pakiety TCP bez flagi syn, a z ustawioną flagą ack za kontynuujące =
połączenie i są one uznawane za pakiety NEW czyli nawiązujące =
połączenie. W 1 z powyższych linijek logujemy (zapisujemy do =
logów) pakiety uznane za NEW (--state NEW) bez ustawionej flagi syn ( =
! --syn ). W kolejnej linii porzucamy takie pakiety. iptables -A INPUT -i eth0 -f -j LOG --log-level =
Podobna konstrukcja zastosowana jest w =
powyższych regułkach. Pakiety sfragmentowane -f na wszelki wypadek =
(atak Jolt2) porzucamy, oczywiście uprzednio je logując. Jeśli w =
logach systemowych będziemy mieli wiele informacji o takich pakietach, =
to będziemy musieli wyłączyć te reguły. Poniżej mamy małe zabezpieczenie =
anty-spoofingowe (przeciw podszywaniu się pod inne adresy niż =
własne). W sumie niepotrzebne, ale nigdy nie wiadomo czy nasz stos =
TCP/IP nie ma jeszcze nie wykrytych błędów. #Pakiety z adr. zrodlowym ustawionym na =
nasz.
Powyższe regułki nie powinny nastręczać =
wątpliwości. Na karcie eth0 nie powinny się pojawić pakiety z =
pochodzące z:
linia 2: pakiety z adresu interfejsu =
wewnętrznego lo
Niestety najczęściej komputer którego =
bedziemy używali w naszej sieci lokalnej, będzie miał system =
operacyjny pewnej znanej wszystkim firmy. System ten silnie =
"śmieci" (wysyła wiele broadcastów IP protokołu UDP na =
porty 137 i 138) w wyniku enkapsulacji protokołu NetBIOS wewnątrz =
protokołu IP. Mam nadzieję, że wyłączyliscie protokół =
NetBIOS na karcie swojego komputera lokalnego? Abyśmy nie mieli =
logów systemowych zarzuconych informacjami o działalności tego =
protokołu, wpisujemy ostatnią z powyższych regułek. I w końcu =
możliwe do naszego komputera. # lancuch INPUT
iptables -A INPUT -m state --state =
ESTABLISHED,RELATED -j ACCEPT
Ponieważ w powyższych regułkach nie =
zdefiniowałem interfejsu sieciowego, będą one działały na obu =
kartach sieciowych w naszym ruterze. W drugiej linijce definiujemy =
regułkę mówiącą: pakiety protokołu tcp pochodzące z =
portów powyżej 1023 skierowane na port 22 (ssh) i uznane za NEW, =
połączenia nawiązanego za pomocą pakietu przepuszczonego przez =
regułkę nr 2 zostana przepuszczone przez regułkę w linii 4. =
Mówi ona: pakiety które uznasz za należące (ESTABLISHED) lub =
związane (RELATED) z juz istniejącym połączeniem zaakceptuj. =
Pakiety nie zaakceptowane przez te regułki zostaną zalogowane =
(regułka nr 5) i usunięte (regułka nr 6). Oczywiście gdyby nie =
było regułki nr 6 to zadziałała by polityka łańcucha INPUT =
ustawiona równiez na DROP ale troche paranoi nikomu nie zaszkodzi. =
Gdybyśmy uruchomili na naszym ruterze serwer WWW (czego oczywiście =
ze względów bezpieczeństwa nie polecam) wystarczyłoby =
skopiować regułkę nr 2, wkleić poniżej tej regułki (w linii =
poprzedzającej regułkę 4) i zmienić wartość portu 22 na 80. =
Przypominam, że numery portów znajdziesz w pliku /etc/services. Do =
wytłumaczenia pozostaje regułka nr 3. Bardzo czesto różne =
serwery usług (np ftp) pytają się hosta z którego sie =
łączymy o nasze dane za pomocą usługi ident działającej na =
porcie 113. Jeżeli nie byłoby regułki 3, przykładowy serwer FTP =
wysłałby pakiet na port 113 naszego rutera i czekał na =
odpowiedź. Ponieważ pakiet ten zostałby skasowany, nie =
otrzymałby żadnej odpowiedzi. W końcu otrzymalibyśmy zgode na =
połączenie, ale czas oczekiwania byłby dosyć długi. W linii 3 =
powodujemy, że na zapytania na port 113 protokołu TCP generowany =
jest pakiet protokołu ICMP z komunikatem: icmp-port-unreachable. =
Serwer FTP jest poinformowany że na naszym hoście usługa ident nie =
Zwróć również uwagę że dla protokołu UDP nie zostały =
zdefiniowane żadne regułki, ponieważ nie udostępniamy żadnych =
usług korzystających z tego protokołu. tak napr! awde to udostepniamy jedynie ssh. Bardzo polecane =
byłoby zawężenie działania regułki 2 poprzez podanie numeru IP =
komputera z którego umożliwiamy połączenia na ssh. # lancuch OUTPUT
W tym łańcuchu powinniśmy również =
powinniśmy dokładnie zdefiniować połączenia które można =
nawiązywać z naszego rutera. Jednak w ten sposób sami sobie =
ograniczalibyśmy funkcjonalność naszego hosta. W przypadku =
profesjonalnego rutera dla większej podsieci nie należy zostawiać =
niczego przypadkowi, ale w naszym przypadku nie będziemy tacy =
--state ! INVALID oznacza wszystkie pakiety nie zakwalifikowane jako =
NEW, ESTABLISHED ani RELATED. czyli uszkodzone. Regułka 33 powoduje =
logowanie odrzuconych pakietów,a regułka 4 ich =
usunięcie. # lancuch forward
W łańcuchu FORWARD definiujemy regułki =
3 oznaczają: dla protokołów TCP i UDP wchodzących na kartę =
1023 przepuść pakiety nawiązujące połączenia, pakiety =
należące do istniejących połączeń i pakiety związane z =
możemy nawiązywac połączenia. Regułki 4 i 5 oznaczają: dla =
protokołów TCP i UDP wychodzących z karty eth1 ( -i eth1 ) do =
sieci lokalnej 192.168.1.0/30 na porty powyżej 1023 przepuść =
pakiety należące do istniejących połączeń i pakiety =
związane z istniejącymi połączeniami. W domysle nie przepuszczaj =
pakietów nawiązujących połączenia. Regułka 6 pozwala na =
niczym nie ograniczony ruch poprawnych pakietów protokołu ICMP. =
Jeśli pojawią się jakieś pakiety nie należące do =
pakiety. ----------------------------------------------------------------=
--------------
Tworzenie firewalla - końcówka.
W tym momencie mamy działającego poprawnie =
firewalla. Należy tylko obserwować logi systemu i patrzeć co jest =
wycinane przez nasze regułki. Każdy wycięty pakiet będzie =
opatrzony przedrostkiem który zdefiniowaliśmy w regułkach =
--log-prefix "IPT FORWARD: " i dzięki temu łatwo dojdziemy =
gdzie się dzieje coś niedobrego. Przydało by się, abyśmy =
na koniec pliku /etc/syslog.conf coś takiego: =
*.* =
/dev/tty12
i oczywiście restartujemy demona =
syslogd:
# killall -HUP syslogd
od tego momentu w pliku /var/log/all (oraz na =
konsoli12 - Alt+F12) będziemy mieli wszystkie logi systemowe. Należy =
uważać aby logi nam nie zapchały twardego dysku, czyli należy =
skonfigurować logrotate, ale to oczywiście znajdziecie już na =
stronach dotyczących konfiguracji Linuxa. =
---------------------------------------------------------------------- =
=
PREROUTING
=
OUTPUT
PREROUTING =
- DNAT (destination nat) podmieniany jest adres docelowy =
pakietów
=
POSTROUTING - SNAT (source nat) podmieniany jest adres źródłowy =
pakietów
OUTPUT - =
DNAT dla pakietów generowanych przez procesy lokalne
=
INPUT
=
OUTPUT
=
FORWARD
przydzielony numer IP: 111.222.333.444
z maską 24 bity czyli 255.255.255.0
gateway (ruter): 111.222.333.1
przyjmujemy numer IP: 192.168.1.1
z maską 30 bitów 255.255.255.252
numer IP: 192.168.1.2
z maską 255.255.255.252
gateway (ruter): 192.168.1.1
serwery DNS ustawiamy na zalecane przez =
HOSTNAME=`cat /etc/HOSTNAME`
/sbin/route add -net 127.0.0.0 netmask =
255.0.0.0 lo
/sbin/route add default gw =
111.222.333.1
/sbin/ifconfig eth1 192.168.1.1 netmask =
255.255.255.252 broadcast 192.168.1.3 up
modprobe ip_nat_irc
iptables -t nat -A POSTROUTING -o eth0 -j SNAT =
--to-source=111.222.333.444
echo "1" > =
/proc/sys/net/ipv4/ip_forward
/etc/rc.d/firewall.start
/usr/local/sbin/sshd
# koniec skryptu /etc/rc.d/rc.inet1
#Poczatek skryptu =
/etc/rc.d/firewall.start
modprobe ip_conntrack
modprobe ip_conntrack_ftp
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
/bin/echo "1" > =
/proc/sys/net/ipv4/icmp_echo_ignore_all
# ochrona przed atakiem typu Smurf
/bin/echo "1" > =
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Nie aktceptujemy pakietow "source =
route"
/bin/echo "0" > =
/proc/sys/net/ipv4/conf/all/accept_source_route
# Nie przyjmujemy pakietow ICMP rediect, ktore =
moga zmienic nasza tablice rutingu
/bin/echo "0" > =
/proc/sys/net/ipv4/conf/all/accept_redirects
# Wlaczamy ochrone przed blednymi komunikatami =
ICMP error
/bin/echo "1" > =
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# wszystkie karty nie beda przyjmowaly =
pakietow z sieci innych niz te z tablicy rutingu
echo "1" > =
/proc/sys/net/ipv4/conf/all/rp_filter;
# Wlacza logowanie dziwnych (spoofed, source =
routed, redirects) pakietow
/bin/echo "1" > =
/proc/sys/net/ipv4/conf/all/log_martians
# W kernelu 2.4 nie trzeba wlaczac opcji =
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --syn -j =
syn-flood
iptables -A syn-flood -m limit --limit 1/s =
--limit-burst 4 -j RETURN
iptables -A syn-flood -j LOG --log-level debug =
--log-prefix "IPT SYN-FLOOD: "
iptables -A syn-flood -j DROP
iptables -A OUTPUT -o eth0 -p icmp -m state =
--state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -m =
state --state NEW -j DROP
iptables -A INPUT -i eth0 -f -j DROP
iptables -A INPUT -i eth0 -s 111.222.333.444 =
-j DROP
iptables -A INPUT -i eth0 -d 127.0.0.0/8 -j =
DROP # na eth0 do loopbacka?
iptables -A INPUT -i eth0 -d 111.222.333.255 =
-j DROP # broadcasty
iptables -A INPUT -i eth1 -p udp -d =
192.168.1.255 --dport 137:138 -j DROP
linia 3: poza tym wycinamy pakiety skierowane =
zbyt ciekawe; w razie kłopotów nalezy wyremować tą =
linijkę.
iptables -A INPUT -p tcp --sport 1024: =
--dport 22 -m state --state NEW -j ACCEPT # ssh na obu =
kartach
iptables -A INPUT -p tcp --sport 1024: --dport =
113 -m state --state NEW -j REJECT --reject-with =
iptables -A INPUT -j LOG --log-level debug =
--log-prefix "IPT INPUT: "
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ! INVALID =
-j ACCEPT
iptables -A OUTPUT -j LOG --log-level debug =
--log-prefix "IPT OUTPUT: "
iptables -A OUTPUT -j DROP
iptables -A FORWARD -i eth1 -p tcp -s =
192.168.1.0/30 --sport 1024: -m state --state NEW,ESTABLISHED,RELATED -j =
ACCEPT
iptables -A FORWARD -i eth1 -p udp -s =
192.168.1.0/30 --sport 1024: -m state --state NEW,ESTABLISHED,RELATED -j =
ACCEPT
iptables -A FORWARD -o eth1 -p tcp -d =
192.168.1.0/30 --dport 1024: -m state --state ESTABLISHED,RELATED -j =
ACCEPT
iptables -A FORWARD -o eth1 -p udp -d =
192.168.1.0/30 --dport 1024: -m state --state ESTABLISHED,RELATED -j =
ACCEPT
iptables -A FORWARD -p icmp -m state --state ! =
INVALID -j ACCEPT
iptables -A FORWARD -j LOG --log-level debug =
--log-prefix "IPT FORWARD: "
iptables -A FORWARD -j DROP
=
*.* =
/var/log/all
Poznam =
mila dziewczyne w celu... >>> http://link.interia.pl/f16f8 =