Dla początkujących
Firewall w Linuksie
12
styczeń 2009
Dla początkujących
Firewall w Linuksie
13
www.lpmagazine.org
lin
ux
@
so
ftw
ar
e.
co
m
.p
l
Firewall w Linuksie
Aby zrozumieć pojęcie firewalla należy poznać podstawy działania sieci, jako, że najpopularniejszym
transportem w Internecie jest dzisiaj protokół IPv4 (jednakże większość informacji tu zawartych jest
analogicza do IPv6), zajmę się właśnie nim i warstwami zbudowanymi na nim, czyli TCP i UDP.
Piotr Podusowski
K
ażda sieć komputerowa (w tym także In-
ternet) składa się, prócz części infrastruk-
tury jak routery czy kable, z hostów, które
w dużym uproszczniu możemy traktować
jak pojedyncze komputery. Hosty posiadają tzw. adres sie-
ciowy (adres IP) dzięki któremu są rozpoznawane i możli-
wa jest komunikacja między nimi poprzez protokół IP.
TCP i UDP pracują na wyższej warstwie i wzboga-
cają pakiety o tzw. numery portów (zwanych niekiedy
zakończeniami) dzięki którym pod jednym adresem IP
może pracować wiele usług. Oznacza to, że każdy pa-
kiet TCP lub UDP jest klasyfikowany, np. port 80 pro-
tokołu TCP używany jest do transferów HTTP, a portu
27960 protokołu UDP używa gra Quake 3 Arena. Nale-
ży zaznaczyć, że powyższe dwa protokoły mają oddziel-
ne zakresy portów, tj. port 323 w TCP nie koliduje z por-
tem 323 w UDP.
Istnieje zasadnicza różnica między TCP a UDP po-
legająca na tym, że ten pierwszy jest protokołem stru-
mieniowym, co znaczy, że po pierwsze - aby przesyłać
dane musi zostać ustanowione połączenie (czasami zwa-
ne też sesją TCP), po drugie – protokół gwarantuje do-
starczenie danych w kolejności w jakiej zostały wysłane,
a po trzecie – jeżeli pakiet zostanie utracony, zostaje on
w sposób automatyczny ponownie przesłany, a programi-
sta zostaje powiadomiony wyjątkiem o ewentualnym ze-
rwaniu połącznia. UDP jest przeciwieństwem wszystkich
tych cech, tzn. nie mamy pewności czy wysłane pakiety
dojdą w kolejności ich wysłania, a co więcej, nie wiemy
nawet czy pakiety zostaną dostarczone.
Każdy host w sieci może pełnić rolę klienta bądź ser-
wera, dla TCP znaczy to, że pewien host musi zacząć ak-
ceptować połączenia po to, aby inny host, lub grupa ho-
stów mogła ustanowić połączenie z nim, w UDP również
istnieje pojęcie nasłuchiwania i działa analogicznie z tą
różnicą, że hosty nie muszą czekać na ustanowienie po-
łączenia.
Rodzaje ataków sieciowych
Ataki można podzielić na kilka grup:
• Oprogramowanie typu trojan – atak tego typu jest
najprostszy do zrealizowania i jednocześnie najpro-
ściej jest się przed nim ochronić, polega on na za-
Dla początkujących
Firewall w Linuksie
12
styczeń 2009
Dla początkujących
Firewall w Linuksie
13
www.lpmagazine.org
aplikowaniu dedykowanego oprogra-
mowania na komputerze-ofierze, które
pozwala hakerowi/krakerowi na zdal-
ną kontrolę. Z reguły takie konie tro-
jańskie po uruchomieniu nasłuchują
połączeń przychodzących od agresora,
aczkolwiek nic nie stoi na przeszko-
dzie, aby komunikowały się one w inny
sposób – choćby przez IRCa czy Gadu-
Gadu – wtedy są onę klientami w rozu-
mowaniu sieciowym;
• Ataki typu DoS – jest to rodzaj zapy-
chania łącza w przypadku użycia kil-
ku maszyn agresorów (często są to tzw
komputery zombie – np. zdalnie stero-
wane przez oprogramowanie typu tro-
jan) lub samych zasobów komputera
(przez ciągły dostęp np. do skompli-
kowanego skryptu preparującego stro-
nę WWW) poprzez zalewanie kompu-
tera-ofiary dużą ilością pakietów sie-
ciowych;
• Exploity – są to metody wykorzystujące
dziury w oprogramowaniu, które często
pozwalają na wstrzyknięcie i urucho-
mienie obcego kodu. Ataki tego typu
należą do najniebezpieczniejszych, bo-
wiem teoretycznie narażone są aplika-
cje uruchomione z konta roota, z regu-
ły jednak serwisy działają pod ograni-
czonymi uprawnieniami, co więcej zna-
lezienie takiej luki jest trudne, a jeśli
do tego dojdzie, to wadliwe oprogra-
mowanie jest szybko łatane, zwłaszcza
w świecie open source;
• Phishing – atak ten w odróżnieniu od
poprzednich nie polega na wywołaniu
bezpośredniej szkody w komputerze-
ofiary, lecz na podszyciu się pod nią,
polega on na preparowaniu pakietów
sieciowych w ten sposób, aby wyglą-
dały one jak wysłane z innego, konkret-
nego hosta. Host pod którego podszy-
wa się agresor może być hostem atako-
wanym (np. gdy ten posiada dostęp do
jakiejś usługi na podstawie IP) lub ho-
stem usługi do której atakowany komp-
ter chce uzyskać dostęp;
• Sniffing – polega na przechwyceniu
pakietów sieciowych przez agresora.
W przypadku nieszyfrowanych protoków
może to oznaczać np. przechwycenie ha-
sła lub innych poufnych informacji.
Czym jest zapora sieciowa?
Najczęstszym rodzajem zapory sieciowej
jest program filtrujący niepożądane pakie-
ty, analizując je na podstawie wprowadzo-
nych reguł. Podstawowe zapory działają już
na warstwie TCP i UDP wykrywając nie-
autoryzowane próby komunikacji z danym
komputerem. Taka zapora może być w po-
staci dedykowanego sprzętu (niezależnego
od jednego bądź kilku komputerów, któ-
re chroni) lub oprogramowania oraz zesta-
wu reguł.
Wprowadzenie do iptables
Jądro linuksa już od wersji 2.4 posiada mecha-
nizm o nazwie iptables (w wersji 2.2 podob-
ny mechanizm nosił nazwę ipchains a w wer-
sji 2.0 - ipfwadm), jest to program działający
pomiędzy stosem sieciowym, a tzn. warstwą
gniazdek której bezpośrednio używają progra-
Rysunek 1.
Wizualizacja komunikacji protokołem UDP i TCP
������
������
������
������
����������
������������������������
������
���
�������
���
����������
����������
Listing 1.
Przykład przechwytywania pakietów PING
[wolverine@piotrek:~] sudo iptables -A INPUT -p icmp -j LOG
[wolverine@piotrek:~] ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.055 ms
[wolverine@piotrek:~] dmesg | tail -n 1
IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1
DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=11000 PROTO=ICMP TYPE=0
CODE=0 ID=30731 SEQ=1
Rysunek 2.
Program netstat pokazujący aktywne połączenia typu TCP (przełącznik -t). W przykładzie uru-
chomiona jest przeglądarka WWW z dwiema kartami
14
Firewall w Linuksie
styczeń 2009
Dla początkujących
15
www.lpmagazine.org
Firewall w Linuksie
Dla początkujących
my użytkowe. Pozwala on na modyfikowanie
i filtrowanie pakietów wychodzących i przy-
chodzących na danej maszynie.
Aby używać iptables potrzebne są dwie rze-
czy, pierwsza to odpowiednio skonfigurowane
jądro linuksa, a druga to narzędzia userspace.
Infrastruktura jądra nazywa się netfilter
i większość popularnych dystrybucji ją posia-
da, narzędzia userspace zazwyczaj znajdują się
w paczce o nazwie iptables. Dla Debiana polece-
nie ich instalacji będzie wyglądało:
aptitude install iptables
Struktura iptables zorientowana jest wokół tzw.
łańcuchów, przy czym istnieją trzy wbudowane
łańcuchy – INPUT, OUTPUT oraz FORWARD,
dwa pierwsze zawierają reguły dotyczące filtro-
wania pakietów przychodzących (czyli tych któ-
re wpływają do serwera, np. próby nawiązywania
połączenia TCP) i wychodzących, a na podstawie
ostatniej filtrowane są pakiety, które nie są prze-
znaczone dla danego komputera i zostaną prze-
słane do innej podsieci (jeśli jądro ma ustawioną
opcje routowania).
Narzędzie do operacji na regułach nosi od-
krywczą nazwę iptables i jest konsolowym pro-
gramem pracującym w trybie niewymagającym
standardowego wejścia, co oznacza, że wszelkie
modyfikacje łańcuchów iptables można przepro-
wadzić za pomocą odpowiednich parametrów
programu w linii komend.
Jako przykład, ustawimy regułę zabrania-
jącą dostępu do danego komputera z kompute-
ra lokalnego:
[wolverine@piotrek:~] sudo iptables
-A OUTPUT -d 207.46.197.32 -j DROP
[wolverine@piotrek:~] ping
microsoft.com
PING microsoft.com (207.46.197.32)
56(84) bytes of data
ping: sendmsg: Operation not
permitted
Oprócz usuwania pakietów możemy naka-
zać, aby były one logowane, służy do tego
cel o nazwie LOG (Listing 1). Należy tutaj
zauważyć, że nie możemy podać dwóch ce-
lów (np. LOG i DROP), aby tego dokonać
musimy stworzyć dwie reguły – pierwszą,
wysyłającą pakiet do sysloga i drugą – usu-
wającą go.
Dodatkowe moduły
Oprócz rozpoznawania pakietów poprzez ją-
dro iptables, istnieje możliwość uruchomie-
nia dodatkowych modułów, schemat używa-
nia modułów wygląda tak:
iptables ... -m moduł –moduł-
parametry_modułu ...
Liczba modułów jest za duża, aby opisać wszyst-
kie w tym artykule, dlatego przedstawię tylko te
najczęściej używane, pełną listę można znaleźć
w podręczniku systemowym pod hasłem
man iptables
:
addrtype
Pozwala na ropoznawanie pakietów po typie
adresu. Typem adresu może być np. BRO-
ADCAST, UNICAST, LOCAL itp.
connbytes
Udostępnia możliwość rozpoznawania pa-
kietów za pomocą ilości przesłanych bajtów
w jednej sesji TCP. Pozwala to np. na rozpo-
znanie pobierania dużych plików i ustaleniu
dla nich niższego priorytetu.
Rysunek 3.
Program tcpdump
Rysunek 4.
Gufw
Tabela 1.
Podstawowe parametry programu iptables
-L nazwa_łańcucha
Wylistowanie reguł z łancucha
-A nazwa_łańcucha reguła opcje
Dodawanie reguły na końcu łancucha
-D nazwa_łańcucha reguła opcje
-D nazwa_łańcucha numer_reguły
Usuwanie istniejącej reguły
-F nazwa_łańcucha
Usuwanie wszystkich reguł w łańcuchu
-s ! xx.xx.xx.xx / -d ! xx.xx.xx.xx
Odpowiednio adres IP komputera źródłowego i docelowego.
Znak „!” oznacza wszystkie adresy oprócz wpisanego.
-j cel
Oznacza cel do którego powinien wpadać pasujący do regu-
ły pakiet. Celem może być zdefiniowany przez użytkownika
łańcuch bądź jeden z celów wbudowanych, jak DROP (usu-
wa pakiet) czy ACCEPT (pozostawia pakiet w nienaruszo-
nym stanie pozwalając mu na dotarcie do odbiorcy)
-p ! port
Oznacza port pod jaki skierowany jest pakiet który chce-
my wyłapać. Znak „!” działa analogicznie jak przy przełącz-
niku „-s” i „-d”.
-m moduł
Pozwala na użycie przy rozpoznawaniu pakietów dodatko-
wego modułu.
-h
Krótka pomoc
14
Firewall w Linuksie
styczeń 2009
Dla początkujących
15
www.lpmagazine.org
Firewall w Linuksie
Dla początkujących
connlimit
Pozwala na rozpoznanie ilości równocze-
snych połączeń danego typu. Zastosowa-
niem tego modułu może być serwer klastro-
wy – jeśli serwer nie jest w stanie obsłużyć
pewnej ilości połączeń, może je przekiero-
wać na inny np. używając NAT.
hashlimit
Moduł pozwala na rozpoznanie liczby pa-
kietów, których parametry określiliśmy
wcześniej, przychodzących do naszej ma-
szyny:
[wolverine@piotrek:~] sudo iptables
-A INPUT -p icmp -m hashlimit
--hashlimit-name ping_flood --
hashlimit-above 2/second -j DROP
length
Dostarcza możliwość rozpoznawania pakie-
tów po ich rozmiarze.
owner
Udostępnia możliwość rozpoznawania pa-
kietów po lokalnym użytkowniku do które-
go należy proces korzystający z sieci.
Network Address Translation
Istnieją dwa powody dla których technologia
NAT jest powszechnie używana. Pierwszy to
brak możliwości połączenia się z komputerem,
który jest w wewnętrznej sieci (oczywiście kom-
puter ten może pełnić rolę klienta łącząc się z ho-
stami z zewnątrz), drugi, w tej chwili mniej dla
nas ważny, ograniczenie kończącej się liczby
adresów sieciowych IPv4. Aby zbudować bra-
mę NAT można użyć oczywiście iptables. Po-
niżej przedstawiam prosty skrypt realizujący to
zadanie:
iptables -A FORWARD -i $EXTIF
-o $INTIF -m state --state
ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o
$EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o
$EXTIF -j MASQUERADE
Netstat i Tcpdump
Narzędzia te nie są częścią firewalla, jednak
umożliwiają zdiagnozowanie ruchu w sie-
ci dzięki czemu w razie ewentualnego ata-
ku będziemy mogli uzyskać garść informa-
cji na temat jego techniki i przy odrobinie
szczęścia poznamy jego źródło.
Netstat jest programem służącym do
wyświetlenia aktywnych połączeń TCP na
lokalnym komputerze. Po wydaniu polece-
nia, na ekranie konsoli pojawia się lista z ta-
kimi informacjami jak adres hosta do któ-
rego nasz komputer jest podłączony, numer
portu czy nazwa lub identyfikator procesu
który ustanowił połączenie oraz użytkowni-
ka, który ten proces uruchomił.
Tcpdump służy do monitorowania prze-
pływu pakietów na komputerze, na któ-
rym jest uruchomiony. W programie mamy
możliwość ustawienia interfejsu, na którym
chcemy nasłuchiwać sposobu prezentacji
ruchu i co najważniejsze, możemy ustawić
filtr składający się z warunków, które mo-
gą być wiązane ze sobą za pomocą warun-
ków logicznych.
Przykładowo chcąc prześledzić ruch ge-
nerowany przez przeglądanie stron WWW
możemy użyć polecenia:
tcpdump -i eth0 tcp port 80
gdzie
eth0
oznacza interfejs z którego łą-
czymy się z Internetem.
Wysokopoziomowe narzędzia
Prócz podstawowego narzędzia konsolowe-
go iptables, istnieją również wysokopoziomo-
we konfiguratory, dzięki którym konfiguracja
firewalla jest prostsza i zorientowana na kon-
kretne rodzaje ataków. Większość dystrybu-
cji linuksa posiada własny konfigurator ipta-
bles dedykowany do wersji jądra i iptables, nic
jednak nie stoi na przeszkodzie, aby wypróbo-
wać tzw. zewnętrzne rozwiązania, należy jed-
nak pamiętać, że większość tego typu aplikacji
działa schematycznie umożliwiając tworzenie
własnych reguł do mechanizmu netfilter.
Gufw
Aplikacja jest domyślnym konfiguratorem li-
nuksowego firewalla w systemie Ubuntu.
Dzięki Gufw możemy w prosty sposób zablo-
kować ruch na wybranych przez nas portach
czy aktywować predefiniowane reguły dla po-
pularnych programów sieciowych.
Arno's iptables firewall
Aplikacja jest skryptem konfiguracyjnym do ip-
tables, po zainstalowaniu na systemie Debian,
użytkownik jest proszony o udzielenie odpowie-
dzi na kilka pytań dotyczących sposobu łączenia
się z Internetem oraz dostępu do lokalnej sieci, po
czym tworzone są domyślne reguły dla iptables,
które w późniejszym czasie można edytować
w pliku konfiguracyjnym.
Rysunek 5.
Plik konfiguracyjny Arno's iptables firewall
Student informatyki na Politechnice Wrocławskiej, programista grupy ContriV.eu specjali-
zującej się w tworzeniu aplikacji webowych. Linux od kilku lat towarzyszy mu na kompute-
rze osobistym oraz serwerze grupy.
Kontakt z autorem: podusowski@gmail.com
O autorze
• http://www.netfilter.org/ – projekt iptables;
• http://gufw.tuxfamily.org – Gufw.
W Sieci