konfiguracja firewalla w Linuksie
Data: 16 listopad 2007
Identyfikator: 070308
Aby system był bezpieczny, każdy ruch sieciowy powinien być ściśle
kontrolowany. W dystrybucjach Linuksa funkcję tę spełnia zapora połączenia sieciowego, zwykle netfilter. Przyjrzyjmy się, jak można zdefiniować reguły kontrolne iptables, nadzorujące ruch sieciowy.
Strona 1 z 2
|
Definiowanie własnych łańcuchów
|
Choć każda reguła musi kończyć się podaniem celu, to niekoniecznie musi być nim odrzucenie czy przyjęcie pakietu. Można utworzyć własny łańcuch reguł i podać jako cel jego nazwę. Służy do tego parametr -N, np. iptables -N test utworzy łańcuch test, do którego reguły dodaje zwykłym sposobem, przykładowo:
iptables -A test -s 12.34.56.78 -j DROP
Taki łańcuch można ustawić jako cel jednej lub wielu reguł z łańcuchów standardowych, np.:
iptables -A INPUT -i eth0 -j test
Firewall, natrafiając na powyższą regułę, przejdzie do analizy wpisów w podanym łańcuchu. Jeśli żadna ze zdefiniowanych tam reguł nie odrzuci/nie zaakceptuje pakietu, nastąpi powrót do „normalnego” trybu pracy, czyli sprawdzone będą kolejne reguły z łańcucha INPUT.
W ten sposób można bardzo precyzyjnie określać, w jakiej kolejności poddawać testom wybrane pakiety.
|
Kontrolę nad mechanizmem netfiltera w dystrybucjach wykorzystujących kernel 2.4 i późniejsze sprawuje iptables (zastąpił on stosowany wcześniej ipchains). Narzędzie to testuje wszystkie pakiety pod kątem zgodności z ciągami reguł filtrujących (chains – stąd pierwotna nazwa) i wykonuje określoną w niej akcję, jeśli badany pakiet spełnia jej warunki.
Wszystkie zdefiniowane reguły są domyślnie przypisywane do jednego z pięciu łańcuchów w zależności od tego, jakiego typu pakietów sieciowych dotyczą (patrz: ramka „Ruch pakietów, czyli jak działa netfilter”).
Co ważne, w obrębie każdego łańcucha zasady stosowane są w kolejności, w jakiej zostały dodane. Jeśli więc któraś reguła na liście zaklasyfikuje pakiet do odrzucenia, to tak się stanie, choćby następna uznawała go za poprawny.
Tworzenie reguł
Pojedynczą regułę dodaje się lub usuwa bezpośrednio za pomocą polecenia iptables, które do wykonania wymaga jednak uprawnień roota. Każda reguła ma zestaw parametrów – obowiązkowym parametrem jest nazwa łańcucha, na którym będą prowadzone operacje, i kończy się określeniem, co zrobić, jeśli pakiet spełnia podane kryteria – służy do tego opcja -j.
Przykładowa reguła ma następującą postać:
iptables -A INPUT -s 1.2.3.4 -p tcp -i eth0 -j ACCEPT
Co to oznacza? Opcja -A służy do dodawania reguł do wskazanego łańcucha – w tym wypadku dla pakietów przychodzących. Następnie parametrem -s 1.2.3.4 wybierany jest adres IP nadawcy pakietu (-s jest skróconym zapisem --source, czyli źródła pakietu). Za pomocą -p tcp określony został rodzaj protokołu – TCP, zaś parametrem -i wybrany interfejs sieciowy, którego dotyczy dodawany wpis.
W powyższym przykładzie ACCEPT oznacza, że pakiet może zostać przekazany aplikacji docelowej. Pominięcie tej opcji uczyni regułę bezużyteczną, gdyż nie będzie miała ona wpływu na los pakietu.
Działanie reguł
Każda dodana ręcznie reguła zaczyna działać niezwłocznie. Poleceniem iptables -L można sprawdzić, jakie reguły są w danej chwili zdefiniowane. Jeśli przez pomyłkę zostanie dodana niepoprawna zasada, np. odcinająca wszelki dostęp do internetu, można ją usunąć, wydając identyczne polecenie, ale zamieniając parametr dodający regułę, czyli -A, na parametr ją usuwający czyli -D. Dodajemy regułę do łańcucha output:
iptables -A OUTPUT -o eth0 -j DROP
Usuwamy regułę z łańcucha:
iptables -D OUTPUT -o eth0 -j DROP
Ważne jest, aby dobrze zrozumieć rolę poszczególnych łańcuchów. Podanie np. parametru oznaczającego interfejs wejściowy (-i, czyli --in-interface), w łańcuchu OUTPUT uczyni regułę bezsensowną, bo nie będzie pasować ona do żadnego pakietu.
Wykrywanie stanów połączenia
Protokół TCP ma określone stany, a każde nawiązanie połączenia zachodzi przez tzw. three-way handshake, czyli trzykrotny uścisk dłoni. Śledząc ruch pakietów między komunikującymi się maszynami, można określić bieżący stan połączenia. Podstawowe stany to:
NEW – taki stan ma każdy pakiet rozpoczynający połączenie, a więc wychodzący od komputera inicjującego kontakt;
ELATED – przypisywany, jeśli połączenie jest
w trakcie negocjacji;
ESTABLISHED – pakiet należy do nawiązanego już połączenia;
INVALID – pakiet niepasujący do żadnego połączenia.
Dzięki informacji o stanie pakietów można doprecyzować reguły firewalla i np. zablokować połączenia przychodzące z określonego adresu, ale pozostawiając sobie możliwość komunikacji z nim. Regułę badającą stan pakietu określa się przez dodanie parametru --state, jednak wcześ-niej trzeba aktywować moduł maszyny stanów parametrem -m state:
iptables -A INPUT -m state --state NEW -s 1.2.3.4 -j DROP
Choć protokół UDP nie jest stanowy, netfilter
potrafi śledzić połączenia nawiązywane także przez ten protokół. Opcji badania stanów można więc używać również do tego typu komunikacji.
Ocena: 



(aby ocenić, musisz się zalogować w serwisie)
Podobne artykuły: