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 • ...