background image

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-

background image

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

background image

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

background image

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