Najprostsza zapora sieciowa ma kilka zadań do spełnienia:
- wpuszczać połączenia na porty, które chcemy udostępniać
- odrzucać wszystkie pozostałe połączenia
- pozwalać na połączenia z naszej sieci wewnętrznej oraz z naszego komputera.
Dodatkowo może zapisywać wszystkie, lub tylko wybrane, odrzucone pakiety w celu późniejszego stwierdzenia czy nie nastąpiła próba włamania.
Przykład prostego firewalla
Załóżmy, iż nasz serwer ma pełnić rolę:
- serwera poczty (SMTP – port 25 oraz POP3 – port 110)
- serwera ssh (port 22)
- serwer ftp (port 21)
- serwer WWW (port 80)
Na początek usuwamy stare reguły, łańcuchy zdefiniowane przez nas oraz liczniki:
iptables -F -X -Z
Następnie pozwalamy na otwarcie połączeń tylko na wybrane porty:
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 21 -m state --state NEW -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 22 -m state --state NEW -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 25 -m state --state NEW -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 80 -m state --state NEW -j ACCEPT iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 110 -m state --state NEW -j ACCEPT
Wykorzystujemy tutaj moduł śledzenia połączeń (-m state) i pozwalamy jedynie na otwieranie nowych połączeń (–state NEW). Logicznym dalszym krokiem jest utrzymanie otwartych połączeń oraz zezwolenie na połączenia pomocnicze (np. aktywnego ftp).
iptables -A INPUT -s 0.0.0.0/0 -m state --state ESTABLISHED, REALATED -j ACCEPT
Co zrobić z zapytaniami do identa (port 113)? Cóż, jeżeli chcemy na nie zezwolić to podajemy regułkę podobną do tych wyżej, jeżeli natomiast chcemy zwiększyć anonimowość naszych użytkowników odrzućmy je:
iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 113 -m state --state NEW -j REJECT
Resztę pakietów gubimy, ma to na celu spowolnienie skanowania naszego serwera:
iptables -A INPUT -s 0.0.0.0/0 -j DROP
Dodatkowe możliwości
Możemy dodatkowo ograniczyć ilość przyjmowanych pakietów icmp echo request . Pozwoli to ograniczyć efekty ataku polegającego na zalewaniu naszego komputera dużą ilością takich pakietów.
iptabels -A INPUT -p icmp --icmp-type echo-request -s 0.0.0.0/0 -m limit --limit 1/s -j ACCEPT iptabels -A INPUT -p icmp --icmp-type echo-request -s 0.0.0.0/0 -j DROP