iptables - firewall i router

Transkrypt

iptables - firewall i router
‘iptables’
‘iptables’ jest tzw. programem filtrującym (filtr pakietów) czyli
firewall’em, realizującym funkcje:
•
zapory sieciowej,
•
router’a.
Kontroluje on połączenia wchodzące i wychodzące do/z sieci
komputerowej. Pracuje na maszynach opartych o system operacyjny
GNU/LINUX (np. Ubuntu).
Konfiguracji Firewall'a opartego o ‘iptables’ w środowisku Ubuntu
1. Kluczowe pojęcia
‘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 (ang. korzeń), to zwyczajowa nazwa UNIX’owego
konta, które ma pełną kontrolę nad systemem. Z przyczyn bezpieczeństwa
konto ‘root’ nie powinno być uŜywane do pracy, do której wystarczy
zwykłe konto z ograniczonymi uprawnieniami:
http://pl.wikipedia.org/wiki/Root
Skrypt startowy - plik z zawartością zapisaną w języku skryptowym tzw.
shell’a (powłoki) jądra systemu (np. ‘bash’). Jest on wykonywany przez
interpreter (‘shell’). Ma on za zadanie automatyzować często powtarzane
czynności:
http://pl.wikipedia.org/wiki/Skrypt_%28informatyka%29
2. Podstawowy skrypt firewall'a
Domyślnym ustawieniem firewall'a w Ubuntu jest polityka akceptowania
wszystkich pakietów przychodzących, wychodzących oraz forwardowanych
(routowanych). MoŜe to być w wielu przypadkach niebezpieczne –
spróbujmy to zmienić. Przechodzimy na konto administratora (‘root’):
sudo su
i tworzymy podstawowy skrypt (tu od razu nadajemy uprawnienia do
wykonywania oraz przechodzimy do edytora ‘nano’):
touch /etc/init.d/firewall && chmod +x /etc/init.d/firewall &&
nano -w /etc/init.d/firewall
Do skryptu wpisujemy formułę:
#!/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 state --state
ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m state --state
ESTABLISHED,RELATED
PowyŜszy skrypt słuŜy do budowy zapory skutecznej dla większości
uŜytkowników. Zainteresowanych uŜytkowników odsyłam do dokumentacji
‘man’, w której znaczenie poszczególnych komend i opcji jest
wyczerpująco wyjaśnione (przytaczanie takiej ilości materiału tutaj jest
niecelowe).
Po zapisaniu zmian sprawiamy, by nasz ‘firewall’ (FW) uruchamiał się
bezpośrednio po inicjalizacji jądra systemu:
update-rc.d firewall defaults 90
3. Personalizacja zapory
Liczni uŜytkownicy korzystają z dodatkowych usług takich, jak np. sieci
p2p, serwery HTTP i FTP, bazy danych (MySQL) i dla nich właśnie naleŜy
rozbudować podany skrypt. Wcześniej utworzony skrypt ma na celu nie
wpuścić do naszego komputera (blokować) zewnętrznych uŜytkowników
Internetu. Nie umoŜliwia on niestety takŜe pobierania plików w sieci p2p
oraz udostępnienia podstawowych usług serwerowych. Dlatego aby
uŜytkownicy Internetu mogli widzieć nasz komputer w sieci, musimy
pootwierać odpowiednie porty. Robimy to za pomocą regułek
(odpowiednio dla ruchu TCP lub UDP):
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
w których ‘_numer portu_’, to port naszego hosta (FW), który chcemy
otworzyć na zewnątrz sieci. Przykład skryptu otwierającego port 22
(obsługa zdalnych bezpiecznych połączeń z wykorzystaniem interfejsu
SSH) będzie wyglądać tak (dopisano dwie linijki):
#!/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 state --state
ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m state --state
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
Analogicznie postępujemy w przypadku udostępniania usług HTTP (port
80) oraz innych prostych usług (numery portów do nasłuchu
poszczególnych usług są zdefiniowane w dok. RFC oraz komunikatach
standaryzacyjnych organizacji IANA, otwarte porte moŜna takŜe
monitorować za pomocą komend netstat lub ifconfig).
Korzystając z sieci p2p (np. BitTorrent czy eMule), musimy otworzyć cały
zakres portów rozproszonych na wysokich numerach. Np. narzędzie
‘qtorrent’ wymaga do działania otwartych portów 6881:6889. Przedział
portów zapisujemy za pomocą dwukropka jako limitera:
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
4. Uruchamianie zapory sieciowej
Tę operację wykonujemy za pomocą utworzonego uprzednio skryptu:
/etc/init.d/firewall
Od tej chwili będzie ona aktywna w kaŜdym momencie, od włączenia
komputera do jego wyłączenia.
5. Źródła uzupełniające:
•
‘man iptables’,
•
http://www.netfilter.org/,
•
http://iptables-tutorial.frozentux.net/iptables-tutorial.html,
•
http://www.gentoo.org/doc/pl/security/securityhandbook.xml?part=1&chap=12
•
...