Dostęp to przywilej, nie prawo.

– Nieznany admin

Czym jest iptables?

iptables to jak budowanie fortecy wokół Twojego serwera. To niskopoziomowe narzędzie do zarządzania netfilterem, czyli firewallem wbudowanym w jądro Linuksa. Innymi słowy, to mózg operacji, który decyduje o życiu lub śmierci każdego pakietu danych.

Struktura Twojej fortecy

Żeby ogarnąć iptables, musisz zrozumieć jego logikę. To trochę jak instrukcja obsługi bramkarza, która składa się z:

  • Tabel (FILTER, NAT, MANGLE, RAW) – to są główne kategorie, gdzie trzymasz swoje reguły. Najczęściej używasz FILTER do decydowania, co przepuścić, a co zablokować.
  • Łańcuchów (INPUT, OUTPUT, FORWARD) – to są punkty kontrolne, przez które przechodzą pakiety.
    • INPUT: Co wchodzi DO Twojego serwera.
    • OUTPUT: Co wychodzi Z Twojego serwera.
    • FORWARD: Co przechodzi PRZEZ Twój serwer (np. jeśli działa jako router).
  • Reguł (rules) – to są konkretne instrukcje, np. “jeśli pakiet TCP na port 22, to ACCEPT”.
  • Celów (targets) – to jest to, co dzieje się z pakietem, który pasuje do reguły:
    • ACCEPT: Wpuszczamy.
    • DROP: Cicho blokujemy (pakiet znika w eterze, nadawca nic nie wie).
    • REJECT: Blokujemy z informacją zwrotną (nadawca dostaje komunikat “odrzucono”).
    • LOG: Zapisujemy zdarzenie do logów, ale pakiet idzie dalej (chyba że kolejna reguła go zablokuje).

Podstawowa składnia: Brama wjazdowa dla leniwych

Chcesz dodać regułę? Oto jak to wygląda w najprostszej formie:

iptables -A <łańcuch> -p <protokół> --dport <port> -j <cel>

A jak “Append”, czyli dodaj na koniec łańcucha. Proste, prawda?

Podstawowe operacje: Pan i władca pakietów

Zobacz, co tam już nabroiłeś (lub nie)

Zanim zaczniesz zmieniać, zobacz obecny stan rzeczy.

# Lista wszystkich reguł. V jak verbose (więcej info), N jak numeric (liczby, nie nazwy)

iptables -L -n -v

# Z numerami linii – super do edycji i usuwania konkretnych reguł

iptables -L -n --line-numbers

# Tylko reguły dla tabeli FILTER (domyślnej, więc często pomijanej)

iptables -t filter -L -n

Dodawanie reguł: Wpuść swoich, zablokuj resztę

Zaczynamy od otwierania niezbędnych portów. Pamiętaj, domyślna polityka to często DROP albo REJECT, więc najpierw wpuszczamy kluczowe usługi.

# Wpuść połączenia SSH (konieczne, żebyś się nie odciął!)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Otwórz bramy dla stron www (HTTP i HTTPS)

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Bardzo ważna reguła: Pozwól na już nawiązane i powiązane połączenia!

# Bez tego serwer nie będzie odpowiadał na swoje własne zapytania.

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

Blokowanie: “Nie, dziękuję”

Chcesz zablokować intruza albo całą sieć? Proszę bardzo.

# Blokuj ping (ICMP). Czasem przydatne, by utrudnić rekonesans.

iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

# Blokuj konkretnego wścibskiego sąsiada (np. 192.168.1.100)

iptables -A INPUT -s 192.168.1.100 -j DROP

# Zablokuj całą podsieć (np. wszystkich z 192.168.1.0/24)

iptables -A INPUT -s 192.168.1.0/24 -j DROP

Usuwanie: Posprzątaj po sobie

Pomyłka? Zmieniłeś zdanie? Oto jak cofnąć zmiany.

# Usuń regułę numer 1 z łańcucha INPUT (numer znajdziesz w 'iptables -L -n --line-numbers')

iptables -D INPUT 1

# Wyczyść CAŁĄ tabelę (wszystkie łańcuchy, wszystkie reguły). Używaj z ostrożnością!

iptables -F

# Resetuj politykę łańcucha INPUT na ACCEPT (domyślnie przepuszczaj wszystko)

iptables -P INPUT ACCEPT

UWAGA: Zanim zablokujesz SSH do swojego serwera, upewnij się, że masz fizyczny dostęp (np. konsola, iLO/DRAC) albo inną drogę (np. VPN)! Inaczej… dobranoc. I tak, to dotyczy też pracy w chmurze – tam często tracisz połączenie na amen.

Praktyczne przykłady: Twój pierwszy, kozacki firewall

Oto przepis na solidny, podstawowy firewall.

# 1. Zaczynamy od czystej karty! Wyczyść wszystkie tabele i łańcuchy.

iptables -F              # Usuń wszystkie reguły z łańcuchów FILTER

iptables -X              # Usuń wszystkie niestandardowe łańcuchy

iptables -t nat -F       # Wyczyść tabelę NAT

iptables -t mangle -F    # Wyczyść tabelę MANGLE


# 2. Domyślna polityka: Wszystko zabronione, co nie jest dozwolone!

iptables -P INPUT DROP    # Domyślnie blokuj wszystko co przychodzi

iptables -P FORWARD DROP  # Domyślnie blokuj wszystko co ma być przekazane (dla routerów)

iptables -P OUTPUT ACCEPT # Domyślnie zezwól na wszystko co wychodzi (ale możesz to zmienić!)


# 3. Pozwól na ruch wewnętrzny (localhost) – inaczej nic nie będzie działać poprawnie.

iptables -A INPUT -i lo -j ACCEPT

# 4. Klucz do działania: Pozwól na kontynuowanie już nawiązanych połączeń.

# Bez tego, mimo że otworzysz port 80, serwer nie odeśle strony WWW do klienta!

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

# 5. SSH z limitem: Niech hakerzy się zmęczą! (Ogranicz próby połączenia SSH)

# Dodaj nową próbę połączenia SSH do listy "ostatnio widzianych"

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
# Jeśli z danego IP były 4 próby w ciągu 60 sekund – ZABLOKUJ!

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# Jeśli wszystko powyżej przeszło (mniej niż 4 próby) – WPUŚĆ!

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Zapisz i przywróć: Żeby nie pisać od nowa po każdym reboocie

Reguły iptables są ulotne i znikają po restarcie! Musisz je zapisać.

# Zapisz obecne reguły do pliku

iptables-save > /etc/iptables/rules.v4

# Przywróć reguły z pliku

iptables-restore < /etc/iptables/rules.v4

Pamiętaj, że w wielu dystrybucjach są narzędzia (np. netfilter-persistent czy firewalld), które automatycznie zajmują się tym po restarcie. Sprawdź swoją dystrybucję!

NAT: Zostań routerem!

Jeśli Twój serwer ma dostęp do internetu i chcesz, żeby maszyny w Twojej wewnętrznej sieci też miały, potrzebujesz NAT (Network Address Translation).

# MASQUERADE (maskarada): Dla dynamicznego IP. Zmienia adres źródłowy pakietów wychodzących na adres IP serwera.

# (-o eth0 oznacza, że dotyczy to interfejsu eth0 – wyjściowego do internetu)

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# DNAT (Destination NAT): Przekierowanie portu. Np. ruch na port 80 serwera przekieruj na inną maszynę w LAN.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

Podsumowanie: Twój nowy zestaw narzędzi do ochrony

iptables to król firewalla w Linuksie. Kropka. Zrozumienie jego działania to fundament bezpieczeństwa sieciowego.

Kluczowe punkty do zapamiętania:

  • iptables to surowa siła netfiltera.
  • Pamiętaj o tabelach, łańcuchach, regułach i celach.
  • Zawsze zezwalaj na ESTABLISHED,RELATED połączenia – inaczej nic nie działa.
  • Zapisuj reguły, bo znikną po restarcie!
  • Zawsze miej plan awaryjny (np. fizyczny dostęp) zanim zablokujesz SSH!
# Twój nowy zestaw do sprawdzania, kto rządzi:

iptables -L -n -v

Kolejny odcinek: cat + grep – nauczymy się, jak czytać i szukać w logach jak prawdziwy detektyw. Zostań z nami!