Witam.
Chciałbym sobie sam napisać prostego firewalla pod mojego laptopa bo coś nie ufam firestarterowi.
Czy mógłby ktoś rzucić okiem co mógłbym poprawić?
Witam, generalnie bardzo fajny firewall jak na notebooka. Odnośnie spostrzeżeń to:
czasami dodajesz reguły, które są niepotrzebne bo masz ustawione ,,policy output'' na ,,accept'' i dajesz ,,accept'' dla ruchu wychodzącego http, https, dns itd.,
NAT Ci chyba nie jest potrzebny jeżeli ten komputer nie jest ruterem i ma prywatny adres IP,
z tym limitem logów bym nie przesadzał bo czasami się bardzo przydają powiedzmy 10 na minutę,
i odnośnie ssh to uważaj bo ludzie bardzo lubią się pchać na port 22 i próbują zrobić atak ,,man in the middle'', zmień go na port jakiś wyższy i do inicjalizacji połączeń polecam techniki ,,port knocking'' (knockd),
odnośnie połączeń nawiązanych to musisz mieć załadowany moduł ,,ip_conntrack'' i stan ,,related'' też chyba wchodzi w grę podczas komunikacji tcp/udp ale nie jestem pewien bo zawsze mam problemy z ftp na iptables.
Ja mam inne pytanie. Zastanawiam się, dlaczego większość skryptów, które ustawiają firewalla są wykonywane przy każdorazowym starcie systemu. Na samym początku uwzględnione jest czyszczenie, a później ponowne ustawianie.
Z tego co zauważyłem, to jeżeli raz ustawiłem iptables, to obecnie mam je cały czas w tym samym stanie. W takim razie, po co każdorazowo je resetować i ponownie ustawiać? To raczej mija się z celem.
Czy dobrze myślę?
Dziękuję za rady cassius7 muszę troszkę poprawić, ale co do portu 80 na UDP to metoda prób i błędów wyszło mi że ma być otwarty, chociaż też mnie dziwiło. Jeśli go zamknąłem to www nie chodziło. Jak załadować te moduły?
A co do Twojego pytania szmergielI to jest tak. W prawie każdym Linuksie (jak nie w każdym) skrypty, które mają ładować się wraz z jądrem automatycznie, znajdują się w katalogu /etc/init.d/. Przy każdym starcie systemu jadro ładuje się wraz z tymi skryptami, a musimy wyczyścić firewalla ponieważ filozofia iptables jest następująca:
Jeśli jakiś pakiet dociera do Twojego komputera to skrypt firewalla sprawdza go stosując reguły po kolei patrząc "od góry" i jeśli jakaś reguła pasuje do tego pakietu czyli odrzuca go lub wpuszcza do systemu wtedy ta akcja zostaje automatycznie wykonana bez sprawdzenia dalszych reguł np. jeśli mamy regułę:
iptables -A INPUT -p udp --dport 80 -j ACCEPT
#a następnie pod nią regułę
iptables -A INPUT -p udp --dport 80 -j DROP
to ten pakiet i tak zostanie wpuszczony do systemu ponieważ reguła z ,,ACCEPT'' jest wyżej i po natrafieniu na nią pakietu UDP na port 80 dalsze reguły już nie są sprawdzane ponieważ została znaleziona pierwsza pasująca (reguły z flagą -P czyli iptables -P INPUT DROP, iptables -P OUTPUT ACCEPT, iptables -P FORWARD DROP rządzą się troszeczkę innymi zasadami) i dlatego właśnie musimy wyczyścić tablicę iptables bo gdyby jakimś cudem przed startem naszego skryptu były w niej jakieś reguły to pakiety stosowałyby się do tych reguł, a nie do naszego skryptu.
To tak po części mam nadzieję że troszkę Ci wytłumaczyłem.
Z mojego doswiadczenia ilekroc resetowalem kompa to iptables sie czyscilo na dystrybucjach rzedu: slackware, debian. Sa dwie szkoly jazdy jedna z nich to wlasnie utworzenie takiego skryptu jak kolega Andros i potem ustawienie jego autouruchamiania w runlevelu a druga to skorzystanie z iptables-save i iptables-restore.
Andros: Hmm nie wiem czemu tak jest z tym udp ale kiedys tez slyszalem o tym, ze dns w rzeczy samej nie korzysta tylko z udp ale rowniez z tcp dla jakis bardziej skomplikowanych zapytan. Odnosnie tych modulow to musisz sobie przejrzec zrodla kernelika pod networking/netfilter_costam/itd i wkompilowac na stale cos albo
poogladac i poczytac co dane moduly robia. Z tych najwazniejszych to polecam ip_conntrack i wszystkie jego odmiany dla ftp,irc itp. Odpowiada on za sledzenie polaczenia gdyz tak naprawde wiekszosc polaczen zachowuje tylko standardowe porty przy inicjalizacji a potem juz to wszystko jest wywalane na porty wyzsze 1024:65536 i jak nasz firewall nie bedzie tego sledzil to nie bardzo to bedzie dzialac. Ladujemy modul normalnie modprobem albo w /etc/modules na stale.
Rad, Andros, cassius7, rzeczywiście jest pusto Wydawało mi się jednak, że po restarcie nadal działa. W szczególności, że testowanie portów z wykorzystaniem różnych serwisów WWW przeznaczonych do tego, informowało mnie o pełnym zabezpieczeniu. Czyżby tak było, gdyż dostawca netu (PLAY) ładnie mnie osłania?
W takim razie muszę zabrać się za ustawienie jakichś ładnych regułek.
Pzdr.
PS A czy w ogóle w takiej sytuacji muszę cokolwiek ustawiać? Czy prewencyjnie lepiej to zrobić?
modul ip_conntrack jest juz zaladowany automatycznie w Debianie, chcialem sie bawic "port knockingiem", samo zalozenie jest proste ale wykonanie troszke zamotane. Natrafilem na taki fajny programik fail2ban, ktory blokuje dane IP np. po 3 nieudanych probach logwania przez ssh na okreslony przeze mnie czas. Mysle ze to jest wystarczajaca obrona.
szmergieII mozliwe ze PLAY w jakims stopniu Cie broni swoim firewallem ale radze napisac swoje reguly bo domyslnie wszystkie porty masz otwarte i nie zapomnij dodac swojego skryptu do inita.
Andros pisze:Dziękuję za rady cassius7 muszę troszkę poprawić, ale co do portu 80 na UDP to metoda prób i błędów wyszło mi że ma być otwarty, chociaż też mnie dziwiło. Jeśli go zamknąłem to www nie chodziło.
Temat sie zrobil bardzo dyskusyjny widze, ale z mojej wiedzy wiadomo, ze http generalnie jest traktowany jako protokol zapewniajacy niezawodny przeplyw danych z potwierdzeniem tego i musi korzystac tylko i wylacznie z tcp bo taka jest jego natura dzialania, udp jest protokolem calkowicie bezpolaczeniowym co powoduje, ze jest znacznie szybszy i zwala odpowiedzialnosc kontroli przeplywu na warstawy aplikacyjne (L7). Ktos moze zarzucic mi, ze gdy powiedzmy oglada filmiki na youtube to faktycznie w tym momencie dane do filmiku sa przesylane po udp ale w gre wchodzi inny protokol warstwy aplikacji (jakis RTP, RTCP, czy cos innego do strumieniowania), wiec generalnie dalej http jest http. Przeszukalem troche internet i nie znalazlem jakis konkretnych dowodow, ze do dzialania http jest wykorzystywany udp w jakimkolwiek znaczeniu. Prosze o dowod