[HOW-TO] Podstawy konfiguracji Firewalla opartego o iptables

Awatar użytkownika
mario_7
Administrator
Administrator
Posty: 7535
Rejestracja: 30 sie 2006, 13:11
Płeć: Mężczyzna
Wersja Ubuntu: 18.04
Środowisko graficzne: GNOME
Architektura: x86_64

[HOW-TO] Podstawy konfiguracji Firewalla opartego o iptables

Post autor: mario_7 » 16 cze 2009, 14:18

Artykuł napisany przez użytkownika nightwish86.
Dawniej znajdował się pod adresem viewtopic.php?t=43258

-----------------------------------------------------------------------------

Oto mój kolejny artykuł, który zamieszczam w FAQs & HOWTOs, mam nadzieję że podobnie jak poprzednie będzie czytany z ochotą i przydatny ;-)


UWAGA! Autor nie bierze odpowiedzialności za wszelkie szkody wynikłe po skorzystaniu z niżej wymienionej porady. Konfiguracja firewalla jest sprawą bardzo indywidualną, artykuł ma na celu przybliżenie zwykłemu użytkownikowi pewnych pojęć i możliwość dalszego pogłębiania swojej wiedzy w zakresie zabezpieczeń systemu GNU/Linux!



Podstawy konfiguracji firewalla opartego o iptables w Ubuntu
-------------------------------------------------------------------------------------------------------------------------------
Spis treści:
:arrow: Wyjaśnienie podstawowych pojęć użytych w poradniku
:arrow: Podstawy tworzenia skryptu firewalla
:arrow: Personalizacja ustawień zapory
:arrow: Uruchamianie zapory sieciowej
:arrow: Już jestem zabezpieczony? Ot tak?
:arrow: A co jeśli korzystam z Firestarter ?
-------------------------------------------------------------------------------------------------------------------------------

1. Wyjaśnienie podstawowych pojęć użytych w poradniku
Iptables - jest filtrem pakietów (głównie używanym jako firewall bądź router) dla systemu operacyjnego GNU/Linux. http://pl.wikipedia.org/wiki/Iptables
Konto root - root (z ang., dosłownie korzeń) to tradycyjna nazwa uniksowego konta, które ma pełną kontrolę nad systemem. Z założenia konto root nie powinno być używane do pracy, do której wystarczyłoby zwykłe konto z ograniczonymi uprawnieniami. http://pl.wikipedia.org/wiki/Root
Skrypt - plik z zawartością zapisaną w języku skryptowym. Jest on wykonywany przez interpreter. Ma za zadanie zautomatyzować często powtarzane czynności. http://pl.wikipedia.org/wiki/Skrypt_%28informatyka%29

2. Podstawy tworzenia skryptu firewalla

Domyślnym ustawieniem firewalla w Ubuntu jest polityka akceptowania wszystkich pakietów przychodzących, wychodzących oraz forwardowanych (routowanych). Może się to wydać dla wielu użytkowników niebezpieczne, więc postarajmy się to zmienić.

Przejdźmy najpierw na konto administratora (root):

Kod: Zaznacz cały

sudo su
Stwórzmy podstawowy skrypt:

Kod: Zaznacz cały

touch /etc/init.d/firewall && chmod +x /etc/init.d/firewall && nano -w /etc/init.d/firewall
I wpiszmy w nim podaną niżej magiczną formułkę:

Kod: Zaznacz cały

#!/bin/sh
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT 
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -A INPUT -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED
Zapiszmy zmiany oraz sprawmy aby nasz firewall uruchamiał się od razu po inicjalizacji kernela.

Kod: Zaznacz cały

update-rc.d firewall defaults 90


Powyższy kod służy do ustawienia dość mocnej zapory, która będzie skuteczna dla większości użytkowników. Niestety, duża ilość użytkowników korzysta z dodatkowych usług, jak sieci p2p, uruchomione usługi serwerów Apache2 lub MySQL. Dla nich należy rozbudować ten skrypt.

3. Personalizacja ustawień zapory

Skrypt który posiadamy ma za zadanie nie wpuścić do naszego komputera użytkowników internetu. Niestety - powyższy skrypt nie umożliwia np. pobierania plików w sieci p2p lub nie umożliwia postawienia podstawowych serwerów usług. Aby użytkownicy internetu mogli widzieć nasz komputer w sieci musimy pootwierać odpowiednie porty. Służy do tego odpowiednia regułka:

Kod: Zaznacz cały

iptables -A INPUT -s 0/0 -p tcp --dport (_numer portu_) -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport (_numer portu_) -j ACCEPT
Gdzie (_numer portu_) to port który chcemy otworzyć dla ogółu. Dla przykładu skrypt z otwartym portem 22 (obsługa zdalnych bezpiecznych połączeń SSH) będzie wyglądać tak:

Kod: Zaznacz cały

#!/bin/sh
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT 
iptables -A INPUT -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED

iptables -A INPUT -s 0/0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport 22 -j ACCEPT
Podobnie będzie to wyglądało dla np. serwera Apache (port 80) oraz innych usług. Porty nasłuchiwania usług możemy znaleźć w netstat bądź w google.pl oraz w plikach konfiguracyjnych danego demona.

W przypadku korzystania z sieci BitTorrent//Mule itp. sprawa się troszkę komplikuje, gdyż sieci te korzystają z portów rozproszonych po wysokich numerach.. Korzystam z qtorrent, który do działania wymaga otwartych portów 6881:6889. Przedział portów zapisujemy korzystając z dwukropka jako rozdzielenia, np.:

Kod: Zaznacz cały

iptables -A INPUT -s 0/0 -p tcp --dport 6881:6889 -j ACCEPT
iptables -A INPUT -s 0/0 -p udp --dport 6881:6889 -j ACCEPT
Dzięki temu mogę seedować najnowsze płytki różnych dystrybucji Linuksa dla innych maniaków ;-). Przedział portów naszego klienta możemy sprawdzić w konfiguracji, dokumentacji bądź w poleceniu netstat.

4. Uruchamianie zapory sieciowej

Kod: Zaznacz cały

/etc/init.d/firewall
Od tej chwili będzie ona aktywna w każdym momencie, od włączenia komputera do jego wyłączenia. Na zawsze ;-).

5. Już jestem zabezpieczony? Ot tak?
Najprostszą odpowiedzią na to pytanie jest oczywiście odpowiedź twierdząca ;-). Niestety, jak w większości przypadków w życiu - jest to odpowiedź niewystarczająca. Iptables są niesamowicie potężnym narzędziem (o wiele potężniejszym niż możecie sobie wyobrazić) i nie służą tylko do stawiania zapory sieciowej. To kompleksowy filtr pakietów, który potrafi skonfigurować nasz komputer jako router DHCP czy np. kompleksowy "odcedzacz" pakietów dla naszej bezpiecznej sieci lokalnej. Zapraszam zainteresowanych do dalszej lektury:

Kod: Zaznacz cały

man iptables
I wszystkie powiązane z nim hasła oraz http://www.google.pl/search?hl=pl&q=ipt ... Google&lr=
http://www.frozentux.net/documents/iptables-tutorial/
http://www.debian.one.pl/index.php?url=4

Bez zagłębiania się w szczegóły - zwyczajny użytkownik powinien czuć się bezpieczny przy stosowaniu powyższego skryptu.

6. A co jeśli korzystam z Firestarter ?
Firestarter to GUI (graficzna nakładka na interfejs iptables) umożliwiające jego konfigurację poprzez środowisko przyjazne początkującemu użytkownikowi. Jeśli potrafisz korzystać z Firestartera to używaj go. Firestarter zastępuje powyższy skrypt tworząc swój, więc jeśli korzystasz z tego narzędzia nie trudź się z tym poradnikiem.


Pozdrawiam!
night
* nightwish86 [na] ubuntu.pl *

Artykuł udostępniony na licencji CC.
Czytelnia - poczytaj, Google - poszukaj
ODPOWIEDZ

Wróć do „Software-Sieć”