Firewall w Linux

22 czerwca 2015

Zacznijmy od tego czym jest filtr pakietów ?

Filtr pakietów to oprogramowanie, sprawdzające nagłówki pakietów, które przechodzą przez maszynę na której działa firewall. Decyduje czy pakiet ma zostać odrzucony (DROP) lub zaakceptowany (ACCEPT).

Netfilter jest frameworkiem w jądrze Linuksa, służącym do przechwytywania i zmieniania ruchu sieciowego.
Podstawową aplikacją do obsługi tego frameworka jest iptables.

Iptables to program sterujący filtrem pakietów (głównie używanym jako zapora sieciowa bądź NAT), kontrolujący połączenia wchodzące i wychodzące do sieci komputerowej lub stacji roboczej. Wymaga jądra skompilowanego z modułem ip_tables (moduł obejmują wszystkie jądra wersji 2.4.x oraz nowsze wersje) i uprawnień roota do uruchomienia.

W tym artykule przedstawiam filtrowanie pakietów. Odpowiada za to tablica filter.

Jak podróżują pakiety przez filtry ?

Kernel rozpoczyna pracę z trzema łańcuchami.

Są to :

INPUT – (wejściowy) znajdują się w nim reguły, które dotyczą filtrowania pakietów przychodzących do komputera, na którym uruchomiony jest iptables.

OUTPUT – (wyjściowy) w tym łańcuchu znajdują się reguły, które filtrują ruch wychodzący z komputera na którym działa iptables.

FORWARD – (przekazujący) odpowiada za filtrowanie ruchu w sieci lokalnej, której udostępniamy Internet poprzez translację adresów – NAT.

Łańcuch to lista reguł. Jeśli dana reguła nie pasuje do pakietu to sprawdzana jest następna.

Jeśli nie ma reguł pasujących do pakietu, kernel sprawdza politykę łańcucha. Może odrzucić lub przepuścić dany pakiet.

Możliwe operacje na łańcuchach :

1) Utworzenie nowego łańcucha (-N)

2) Skasowanie pustego łańcucha (-X)

3) Zmiana polityki dla wbudowanego łańcucha (-P)

4) Wypisanie reguł w łańcuchu (-L)

5) Wyczyszczenie łańcucha z reguł (-F)

6) Wyzerowanie liczników pakietów i bajtów we wszystkich regułach w łańcuchu (-Z)

Sposoby manipulowania regułami w obrębie łańcucha :

1) Dodanie nowej reguły do łańcucha (-A)

2) Wstawienie nowej reguły na ustalonej pozycji w łańcuchu (-I)

3) Zamiana reguły na ustalonej pozycji w łańcuchu (-R)

4) Skasowanie reguły na ustalonej pozycji w łańcuchu lub pierwszej która pasuje (-D)

Ogólna składnia iptables :

iptables -A <łańcuch> <opcje> -j <decyzja>

Dostępne opcje :

Określenie protokołu sieciowego, którego dotyczy reguła np. -p TCP :

-p nazwa_protokołu 

Port docelowy lub porty w przedziale [port:port]:
Nakazuje stosowanie reguły dla pakietów o podanym docelowym porcie lub portach:

--dport port

Określenie filtrowania na podstawie docelowego adresu pakietu:

-d adres 

Adres docelowy może być podany na kilka sposobów :

– podanie pełnej nazwy domenowej np. www.eproit.pl

– podanie adresu IP np. 188.165.217.7

– wskazanie grupy adresów IP np. 192.168.1.0/24 lub 192.168.1.0/255.255.255.0

– aby wskazać dowolny adres IP można użyć ‘/0‘ lub należy nie używać opcji -s.

Port źródłowy lub porty w przedziale [port:port]
Nakazuje stosowanie reguły dla pakietów o podanym źródłowym porcie lub portach:

--sport port 

Określenie adresu źródłowego, który zostanie objęty regułą:

-s adres 

Adres źródłowy jest podawany tak samo jak w przypadku adresu docelowego.

Umożliwienie filtrowania ruchu przychodzącego do firewalla tylko na podany interfejs :

-i interfejs 

Interfejs wyjściowy. Filtrowanie tylko pakietów wychodzących z komputera przez dany interfejs sieciowy:

-o interfejs

Określenie decyzji, działania jakie ma wykonać firewall na zdefiniowanych pakietach:

-j decyzja 

DROP – odrzuca pakiet, nie wpuszcza pakietu do komputera.
ACCEPT – akceptuje pakiet, wpuszcza pakiet do komputera.

Analiza śledzenia połączeń :

- m state 

Udostępnia dodatkową opcję

--state

która jest listą oddzielnych stanów do przetestowania.

Możliwe stany do sprawdzenia:

NEW (NOWY) – Pakiet który tworzy nowe połączenie.

ESTABLISHED (NAWIĄZANY)- Pakiet należący do istniejącego połączenia.

RELATED (POWIĄZANY)- pakiet powiązany z istniejącym połączeniem, ale nie jest jego częścią.

INVALID (BŁĘDNY) – pakiet błędny lub niezidentyfikowany

Każda reguła jest zestawem warunków, które pakiet musi spełnić i zawiera cel, czyli to co ma się stać z danym pakietem.

Przykładowa reguła :

Odrzucenie wszystkich połączeń z adresu 213.180.141.141, używające protokołu UDP i przeznaczone
dla komputera na którym działa ten firewall :

iptables -A INPUT -p udp -s 213.180.141.141 -j DROP

*******************************
Podstawowe polecenia iptables
*******************************

Wyświetlenie działających reguł firewall :

iptables -L 

Wyświetlenie działających reguł firewall oraz statystyk przepływu pakietów (wszystkich) :

iptables -L -v

Resetowanie (zerowanie) licznika :

iptables -Z nazwa_łańcucha

Zakładanie nowego łańcucha :

iptables -N nazwa_nowego_łańcucha

Dodanie pustej reguły :

iptables -A nazwa_łańcucha

Wykasowanie wszystkich reguł z łańcucha :

iptables -F nazwa_łańcucha

Kasowanie łańcucha :

iptables -X nazwa_łańcucha

Określenie polityki :

Polityką może być ACCEPT lub DROP

Tylko wbudowane łańcuchy (INPUT, OUTPUT i FORWARD) mają przypisaną politykę.

np.

iptables -P FORWARD DROP

Kasowanie reguły. Sposoby :

– użycie numeru reguły :

iptables -D nazwa_łańcucha numer_reguły

np. iptables -D INPUT 1

– użycie opcji -D oraz podanie całej składni reguły, którą chcemy wykasować (oprócz opcji -A)

np.

iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

*****************
Logi
*****************
LOG – moduł zapewnia logowanie pasujących pakietów.

Udostępnia następujące opcje :

--log-level poziom_logowania

Poziomem logowania jest nazwa poziomu logowania (‘debug’, ‘info’, ‘notice’, ‘warning’, ‘err’, ‘crit’, ‘alert’ i ’emerg’) lub cyfry od 7 do 0.

--log-prefix ciąg_znaków

Ciągiem znaków jest informacja (do 29 znaków),która jest dodawana do logów.

Przykład reguły :

Do logowania używana jest flaga LOG

iptables -A INPUT -s 213.180.141.141 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix '***atak hakerski***'--log-level 4
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j LOG --log-prefix "Akceptacja IP SSH: "

***************************
iptables – prosty firewall
***************************

Tworzymy skrypt o nazwie firewall :

touch /etc/init.d/firewall
chmod +x /etc/init.d/firewall
nano /etc/init.d/firewall

Przykładowa zawartość skryptu :

#!/bin/bash

### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO

# Wyczyszczenie istniejących reguł
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT

# DOMYŚLNA POLITYKA DLA FILTRÓW
# Odrzucenie ruchu przychodzącego
iptables -P INPUT DROP

# Odrzucenie ruchu przekazującego
iptables -P FORWARD DROP

# Akceptacja ruchu wychodzącego
iptables -P OUTPUT ACCEPT

# Akceptacja ruchu na interfejsie loopback
# Reguły dla pętli zwrotnej
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
#iptables -A OUTPUT -o lo -j ACCEPT

# Reguły dla łańcucha wejściowego
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Reguły dla łańcucha wyjściowego
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Ochrona przed atakami 

# blokowanie ataku typu Brute Force - SSH
iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -s $lista_adresow_zaufanych -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

# Otwarcie portów dla użytkowników Internetu dla konkretnych usług
#iptables -A INPUT -p tcp --dport numer portu -j ACCEPT
#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

#Numery portów z jakich korzystają poszczególne usługi można odnaleźć w pliku /etc/services.
# Otwarte porty dla usług :
# np.
# dla HTTP :
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# dla HTTPS :
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# dla SMTP :
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

# dla POP3 :
iptables -A INPUT -p tcp --dport 110 -j ACCEPT

# dla IMAP :
iptables -A INPUT -p tcp --dport 143 -j ACCEPT

# dla IMAP SSL :
iptables -A INPUT -p tcp --dport 993 -j ACCEPT

# dla POP3 SSL :
iptables -A INPUT -p tcp --dport 995 -j ACCEPT

# dla FTP :
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

# Akceptacja pakietów DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT

iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -j ACCEPT

#iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
#iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

#iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT

Uruchomienie zapory sieciowej :

sudo /etc/init.d/firewall

W systemie Linux wyróżnia się siedem trybów pracy :

0 – tryb zatrzymania wszystkich procesów, zatrzymania pracy systemu

1 – tryb pracy jednego użytkownika (do administrowania i konserwacji systemu)

2 – tryb pracy wielu użytkowników, bez sieciowego systemu plików (NFS)

3 – tryb pracy wielu użytkowników, włączony sieciowy system plików (środowisko tekstowe)

4 – tryb pracy jest pusty (pozwala na zdefiniowanie własnego poziomu pracy)

5 – tryb pracy wielu użytkowników (środowisko graficzne)

6 – tryb restartu systemu

Utworzenie dowiązania do uruchomienia firewall w trybach pracy 2345 oraz zatrzymania firewall w trybach pracy 016 :

update-rc.d firewall defaults 90

Jeśli zajdzie potrzeba zatrzymania firewall wykonujemy :

sudo /etc/init.d/firewall stop
markos
Specjalizuję się w systemach komputerowych Windows oraz Linux. Oprócz wykonywanej pracy w zawodzie, informatyka jest moją pasją.

Dodaj komentarz

avatar
  Subscribe  
Powiadom o