Firewall w Ubuntu, czyli jak poskromić IPTABLES

Uwaga: Ten wpis został utworzony ponad rok temu. Informacje w nim zawarte mogą być nieaktualne!

Kiedy zaczynałem swoją przygodę z Linuxem niestety okienka były jeszcze mało popularne. Wszystkie operacje trzeba było wykonywać w konsoli. Konfiguracja systemu, różnego rodzaju serwerów, jak i firewalla, którym właśnie się teraz zajmiemy. Iptables to program, który filtruje krążące w sieci pakiety danych. Zależy na jakim typie komputera jest postawiony może zabezpieczać np. całą firmę przed złośliwymi atakami, lub bronić zwykłego, pojedynczego peceta. Zacznijmy od zobrazowania, co może dziać się z pakietem danych w firewallu.

Jak krąży pakiet danych

Jak krąży pakiet danych

null

Ilustracja IPTABLES

Pakiet danych może dostać jedną z trzech reguł:

1. INPUT (wejściowy)

2. OUTPUT (wyjściowy)

3. FORWARD (przekazany)

Całe IPTABLES można wyobrazić sobie jako wielką szafę na dokumenty z trzema szufladami, a w nich odpowiednie reguły Można ustalać reguły inne dla pakietów INPUT, inne dla OUTPUT i analogicznie inne dla FORWARD. Zacznijmy od początku…

1. PODSTAWOWE OPERACJE NA REGUŁACH (łańcuchach)

-P - zmiana zasady dla wbudowanego łańcucha 
-L - listowanie reguł w łańcuchu 
-F - wyczyszczenie reguł z łańcucha 
-A - dodanie nowej reguły do łańcucha 
-I - wstawienie reguły do łańcucha na określoną pozycję 
-R - wymiana reguły na określonej pozycji 
-D - skasowanie reguły 
-X - skasowanie pustego łańcucha 
-Z - zerowanie liczników w łańcuchu

np. IPTABLES -A INPUT … tworzy nową regułę w łańcuchu INPUT

2. OPCJE FILTROWANIA

-p -użycie reguły dla konkretnego protokołu 
-s -określenie adresu źródłowego pakietu 
-d -określenie adresu docelowego pakietu 
-i -określenie interfejsu sieciowego 
--sport -określenie portu źródłowego 
--dport  -określenie portu docelowego 
-j - określa co należy wykonać z pakietem pasującym do reguły:  
-j DENY (odmów, nie akceptuj pakietu) 
-j ACCEPT (przyjmij pakiet) 
-j DROP (porzuć kategorycznie pakiet) 
i inne (np. RETURN, MARK, DNAT - odsyłam do manuala) 
-m state - umożliwia śledzenie połączeń w ip_contract i ip_contract_ftp:  
-m state --state NEW (NOWY) - pakiet tworzący nowe połączenie -m state --state 
ESTABLISHED (NAWIĄZUJĄCY) - pakiet należący do istniejącego połączenia 
-m state --state RELATED (ZWIĄZANY) - pakiet związany z połączeniem już ustanowionym, ale nie będący jego częścią -m state --state INVALID (BŁĘDNY) - pakiet błędny lub nie do zidentyfikowania

3. PRZYKŁADY, BO NA NICH NAJŁATWIEJ SIĘ NAUCZYĆ
Chcemy, aby nasza zapora ogniowa udostępniała usługę ftp:

iptables –A INPUT –p tcp --dport 20:21 –j ACCEPT 

Dodaj regułę w łańcuchu INPUT [-A INPUT] dla protokołu tcp [-p tcp] dla portów docelowych (lokalnych) od 20 do 21 [–dport 20:21] i zaakceptuj (przyjmij) pakiet [-j ACCEPT]. Jednak w ten sposób dostęp do naszego serwera ftp będą mieli użytkownicy pracujący w trybie passive off. Korzystając z flagi -m możemy udostępnić serwer ftp dla użytkowników pasywnych:

iptables –A INPUT -m state --state ESTABLISHED, RELATED –j ACCEPT

Jeśli jakiś adres IP nam podpadł, możemy go zablokować, np tak:

iptables -A INPUT -d AAA.BBB.CCC.DDD -j DROP 

Blokuje wszystkie połączenia przychodzące od adresu IP AAA.BBB.CCC.DDD. Można również zablokować dostęp danemu adresowi do portów np:

iptables -A OUTPUT -d AAA.BBB.CCC.DDD --sport 20:21 -j DROP

Taki wpis zablokuje dostęp adresowi IP AAA.BBB.CCC.DDD do usługi FTP. Często administratorzy sieci konfigurując firewalla piszą sobie skrypty. Warto wtedy zacząć taki skrypt od takiego wpisu:

# Usuwamy poprzednie reguly  $IPTABLES -F INPUT $IPTABLES -F FORWARD $IPTABLES -F OUTPUT  
# Ustawienie domyslnej polityki blokując CAŁY ruch  $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP  
# Zapisujemy caly nasz ruch w logach  $IPTABLES -A INPUT -j LOG -m limit --limit 15/hour              
# 15 logów na godzine $IPTABLES -A OUTPUT -j LOG -m limit --limit 15/hour $IPTABLES -A FORWARD -j LOG -m limit --limit 15/hour

i dopiero wtedy pisać reguły. W takim przypadku dla bezpieczeństwa danych mamy zablokowany cały ruch pakietów. Dopiero teraz dodajemy reguły np, odblokowujemy w jedną i drugą stronę (INPUT i OUTPUT) serwer www (na porcie 80). O iptables można by pisać w nieskończoność, dlatego proponuję samemu poeksperymentować, lecz jeśli masz zamiar całkowicie zablokować adres 127.0.0.1 radzę pograć w sapera :)

Jeżeli powyższy artykuł nie rozwiązał lub rozwiązał częściowo Twój problem, dodaj swój komentarz opisujący, w którym miejscu napotkałeś trudności.
Mile widziane komentarze z uwagami lub informacjami o rozwiązaniu problemu.
  • Anonim

    Nareszcie porządny artykuł. Dzięki!

  • Admc

    Ja tam mam firewall wyłączony, raczej nikt nie będzie chciał atakować mojego komputera.

  • NetBit

    @adme
    podaj IP :D

  • http://mkilinski.pl kilabdg

    poda Ci taki: 127.0.0.1 :D

  • NetBit

    tja…albo dokładny adres http://localhost :D

  • 3ED

    Adme: Chociaż ufw postaw. :> Chociaż jakieś zabezpieczenie, a gufw jest banalny w obsłudze.

  • http://www.nibyblog.pl@ Franek

    @3ED chociaż ufw postaw, chociaż jakieś zabezpieczenie? ufw w ubuntu to nakładka na iptables która umożliwia łatwiejsze jego konfigurowanie.