IPTables na serwerze Linux to polecenie przestrzeni użytkownika Zapora sieciowa, która konfiguruje filtrowanie pakietów Netfilter i NAT w jądrze. Kontroluje ruch przychodzący, wychodzący i przekazywany za pomocą tabel, łańcuchów i reguł.
Administratorzy definiują zasady akceptowania, odrzucania, odrzucania lub rejestrowania pakietów, umożliwiając bezpieczną zaporę sieciową z obsługą stanu i przekierowywanie portów. IPTables na serwerze Linux zapewnia szczegółowa kontrola ruchu sieciowego.
W tym przewodniku dowiesz się, jak działa IPTables, jakie reguły są istotne, jak bezpiecznie skonfigurować zapora serweraoraz jak utrwalać, testować i rozwiązywać problemy z regułami jak profesjonalista. Przykłady są przyjazne dla początkujących, ale na poziomie produkcyjnym.
Czym jest IPTables i jak działa?

IPTables to polecenie interfejs liniowy do Netfilter, struktury jądra Linux przeznaczonej do filtrowania pakietów, NAT (translacji adresów sieciowych) i śledzenia połączeń.
Za pomocą IPTables możesz tworzyć listy reguł, które decydują, co zrobić z pakietami: zezwolić (PRZYJĄĆ), odmówić cicho (DROP), odmówić z powiadomieniem (ODRZUCIĆ)lub dziennik do audytu (LOG).
Nowoczesne dystrybucje często zawierają nftables. W tych systemach iptables może być wrapperem zapewniającym kompatybilność. (iptables-nft).
Koncepcje pozostają takie same: Pakiety są dopasowywane do uporządkowanych reguł wewnątrz łańcuchów należących do określonych tabel.
Architektura: Tabele, Łańcuchy, Cele
Stoły
IPTables organizuje reguły w tabelach, które służą różnym celom:
- filtr: Domyślna tabela do filtrowania pakietów (POZWÓL, ODMÓW).
- Więzy: WEJŚCIE, PRZESŁANIE, WYJŚCIE.
- nat: Tłumaczenie adresów na potrzeby routingu/przekierowywania portów.
- Więzy: PRZEKIEROWANIE WSTĘPNE, WYJŚCIE, PRZEKIEROWANIE WSTĘPNE.
- magiel: Zaawansowane zmiany pakietów (TTL, DSCP, znaki).
- surowy: Wyłącz ruch ze śledzenia połączeń (rzadko potrzebne).
- bezpieczeństwo: Haki związane z SELinux (specjalistyczne środowiska).
Wbudowane łańcuchy
- WEJŚCIE: Pakiety przeznaczone dla serwera lokalnego.
- WYDAJNOŚĆ: Pakiety pochodzące z serwera lokalnego.
- NAPRZÓD: Pakiety kierowane przez serwer (bramy, routery, węzły Kubernetes).
- WSTĘPNE: Przed podjęciem decyzji o trasie (wspólne dla DNAT/przekierowania portów).
- PRZESŁANIE: Po podjęciu decyzji dotyczących trasy (wspólne dla SNAT/MASQUERADE).
Cele i moduły dopasowania
- Główne cele: AKCEPTUJ, USUŃ, ODRZUĆ, ZAREJESTRUJ, ZWRÓĆ.
- Moduły dopasowania: -p tcp/udp/icmp, -s source, -d destination, –dport, –sport, -i interface, -o interface, -m state/conntrack, -m limit, -m hashlimit i wiele innych.
Kolejność ma znaczenie. IPTables analizuje reguły od góry do dołu i zatrzymuje się na pierwszym dopasowaniu. Umieść najbardziej szczegółowe i najczęściej sprawdzane reguły na górze, aby zapewnić wydajność i przejrzystość.
Jak pakiety przepływają przez łańcuchy
- Przychodzące do serwera: PREROUTING (nat/mangle) → INPUT (filtr) → aplikacja lokalna.
- Wychodzące z serwera: aplikacja lokalna → WYJŚCIE (filtr) → POSTROUTING (nat/mangle).
- Przekazano przez serwer: PREROUTING → FORWARD (filtr) → POSTROUTING.
Śledzenie połączeń sprawia, że IPTables są stanowe. Typowe reguły zezwalają na ustanowione i powiązane pakiety, a nowy, niechciany ruch jest filtrowany. To podstawa bezpiecznej linii bazowej.
Podstawowe polecenia i składnia IPTables
Sprawdzanie zasad
# List rules with counters, numeric output (no DNS lookups)
iptables -L -n -v
# Show rules in iptables-save format
iptables -S
# List rules in a specific table
iptables -t nat -L -n -vZasady domyślne
# Set default policies (be careful not to lock yourself out)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPTDomyślna polityka to ostateczność w łańcuchu. Typową bezpieczną linią bazową jest DROP dla INPUT i FORWARD oraz ACCEPT dla OUTPUT.
Dodawanie, wstawianie, usuwanie reguł
# Append (-A) rule to end of chain
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Insert (-I) at top (position 1)
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
# Check if a rule exists (-C)
iptables -C INPUT -p tcp --dport 22 -j ACCEPT
# Delete specific rule by specification (-D)
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
# Flush all rules in a chain (use with caution)
iptables -F INPUTTrwałe reguły po ponownym uruchomieniu
Zmiany w tabelach IPTables są przechowywane w pamięci, chyba że zostaną zapisane. Użyj metody swojej dystrybucji, aby zachować reguły:
# Debian/Ubuntu
apt-get update && apt-get install -y iptables-persistent
# Save current rules interactively or run:
netfilter-persistent save
netfilter-persistent reload
# RHEL/CentOS/Alma/Rocky (legacy service)
service iptables save # or
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4
# Generic
iptables-save > /root/iptables-$(date +%F).rulesW systemach opartych na NFTables polecenia iptables mogą być mapowane na NFT (iptables-nft). W przypadku migracji należy zachować narzędzia NFTables w dystrybucji.
Typowe przypadki użycia i bezpieczne przepisy
Zacznij od bezpiecznej linii bazowej
# Accept all traffic on loopback
iptables -A INPUT -i lo -j ACCEPT
# Allow established/related inbound
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Allow ICMP (ping) carefully
iptables -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT
# SSH from trusted IP (replace 203.0.113.10)
iptables -A INPUT -p tcp -s 203.0.113.10 --dport 22 -m conntrack --ctstate NEW -j ACCEPT
# HTTP/HTTPS for web servers
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Default drop (set policies or add explicit drop/log rules)
iptables -A INPUT -j DROPOtwórz konkretny port (np. 3306 dla MySQL)
# Only allow from app server subnet
iptables -A INPUT -p tcp -s 10.0.0.0/24 --dport 3306 -m conntrack --ctstate NEW -j ACCEPTZablokuj adres IP lub podsieć
# Drop early for performance
iptables -I INPUT 1 -s 198.51.100.0/24 -j DROPOgraniczenie szybkości SSH do powolnej siły brutalnej
# Allow up to 3 new SSH connections per minute per source IP
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW \
-m hashlimit --hashlimit 3/min --hashlimit-burst 5 \
--hashlimit-mode srcip --hashlimit-name ssh_limit -j ACCEPT
# Optionally log and drop excess attempts
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j LOG --log-prefix "SSH Ratelimit: "
iptables -A INPUT -p tcp --dport 22 -j DROPRejestruj utracone pakiety w celu przeprowadzenia audytu
# Log before drop (tune rate to avoid floods)
iptables -A INPUT -m limit --limit 10/second --limit-burst 20 \
-j LOG --log-prefix "IPT_DROP: " --log-level 4
iptables -A INPUT -j DROP
# View logs
journalctl -k | grep IPT_DROPNAT: SNAT/MASQUERADE i przekierowanie portów (DNAT)
# Outbound NAT for private LAN (gateway use case)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Forward external port 8080 to internal server 10.0.0.10:80
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 \
-j DNAT --to-destination 10.0.0.10:80
iptables -A FORWARD -p tcp -d 10.0.0.10 --dport 80 -j ACCEPTPamiętaj o włączeniu przekazywania IP w przypadkach użycia routingu (sysctl net.ipv4.ip_forward=1) i odpowiednim skonfigurowaniu ruchu powrotnego.
Najlepsze praktyki dla serwerów produkcyjnych
- Zacznij od pobłażliwości, a następnie zaostrz ją: Utwórz reguły z polityką ACCEPT w oknie testowym, zweryfikuj usługi, a następnie przełącz się na DROP na wejściu INPUT i dodaj tylko niezbędne zezwolenia.
- Nie zamykaj się na zewnątrz: Podczas zmiany SSH Zgodnie z zasadami, utrzymuj otwartą konsolę na żywo lub dostęp poza pasmem. Przetestuj z drugą sesją przed zamknięciem pierwszej.
- Zezwalaj na ruch stanowy: Zawsze uwzględniaj reguły ESTABLISHED i RELATED na wczesnym etapie poleceń INPUT i FORWARD.
- Ogranicz porty administracyjne: Ograniczenia SSH, RDP, porty bazy danych według IP lub przez VPN/bastion; rozważ przeniesienie SSH do portu innego niż domyślny i przy użyciu kluczy, a nie haseł.
- Oddzielny IPv4 oraz IPv6: Odzwierciedlaj zasady z ip6tables, jeśli IPv6 jest włączony; nie wychodź IPv6 na oścież.
- Zasady kontroli wersji: Przechowuj wyniki polecenia iptables-save w Git i dokumentuj uzasadnienie zmian.
- Zapisuj z namysłem: Użyj rejestrowania z ograniczeniem przepustowości, aby wykrywać anomalie bez zalewania dysków.
- Utwardzanie jądra: Połącz IPTables z dostrajaniem sysctl, fail2ban i terminowymi aktualizacjami.
IPTables kontra firewalld, UFW i nftables
Kiedy używać którego
- Tabele IP: Maksymalna kontrola i przejrzystość; idealne dla doświadczonych administratorów, kontenerów, specjalistycznych bramek.
- zapora sieciowa: Abstrakcja usług/stref w systemach opartych na RHEL, dynamiczne zmiany w czasie wykonywania, łatwiejsze rozwiązanie w typowych scenariuszach.
- UFW: Uproszczony interfejs w Ubuntu/Debianie, świetny do szybkich zapór sieciowych hosta.
- nftables: Nowoczesny zamiennik iptables; ujednolicony IPv4/IPv6, lepsza wydajność i funkcje; preferowany w nowszych dystrybucjach.
iptables-legacy vs iptables-nft
Wiele dystrybucji domyślnie korzysta z iptables-nft (wrappera wokół nftables). Aby sprawdzić lub zmienić alternatywy:
# Check which backend is used
iptables --version
# On Debian/Ubuntu to switch (requires root)
update-alternatives --config iptables
update-alternatives --config ip6tablesNie mieszaj jednocześnie starszych reguł iptables z regułami firewalld lub nftables. Wybierz jeden stos, aby uniknąć konfliktów.
Rozwiązywanie problemów i weryfikacja
Sprawdź łączność
- Użyj poleceń nc, curl i telnet do sprawdzania portów; ping i traceroute do sprawdzania dostępności.
- Sprawdź powiązania aplikacji (netstat -tulpn lub ss -tulpn) aby potwierdzić, czy usługi nasłuchują na oczekiwanym adresie IP/portach.
- Sprawdź liczniki poleceniem iptables -L -n -v; liczba trafień pokaże, które reguły pasują.
Debugowanie za pomocą dzienników i liczników
# Zero counters, reproduce traffic, then re-check
iptables -Z
iptables -L -n -v
# Kernel messages (LOG target entries appear here)
journalctl -k -f
# Inspect connection tracking (install conntrack-tools)
conntrack -L | headJeśli przegrasz SSH po zmianie należy użyć dostępu do konsoli/KVM, tymczasowo opróżnić pamięć INPUT (iptables -F INPUT), ponownie zastosować sprawdzony zestaw reguł za pomocą iptables-restore i zapisać zmiany po ich zweryfikowaniu.
Pomoc w zakresie zarządzanej zapory sieciowej i hostingu YouStable
Jeśli wolisz managekonfiguracja d, YouStableSerwery VPS i dedykowane firmy Dostarczamy z utwardzonymi szablonami, siecią odporną na ataki DDoS i całodobowym wsparciem technicznym. Nasi inżynierowie mogą zaprojektować reguły IPTables lub NFTables dopasowane do Twojego stosu, wdrożyć bezpieczne wdrożenia i monitorować logi – dzięki czemu Twoje aplikacje będą zawsze online i bezpieczne.
FAQ – IPTables na serwerze Linux
Czy IPTables są stanowe i co oznacza ESTABLISHED,RELATED?
Tak. Dzięki śledzeniu połączeń, IPTables rozpoznaje przepływy. Reguła ESTABLISHED,RELATED zezwala na ruch powrotny dla połączeń zainicjowanych lub zaakceptowanych przez serwer. Zawsze włączaj tę regułę na wczesnym etapie, aby uniknąć blokowania prawidłowych odpowiedzi, jednocześnie odrzucając niechciane żądania przychodzące.
Jak wyświetlić i wyeksportować wszystkie reguły IPTables?
Użyj iptables -L -n -v, aby wyświetlić liczniki, i iptables -S, aby uzyskać widok skryptowy. Aby wyeksportować, uruchom iptables-save > /root/iptables.rules. Przywróć później za pomocą iptables-restore < /root/iptables.rules. Powtórz dla IPv6 z ip6tables-save i ip6tables-restore.
Jaka jest różnica między IPTables, firewalld, UFW i nftables?
IPTables jest rozwiązaniem niskopoziomowym i bardzo elastycznym. Firewalld (RHEL) i UFW (Ubuntu) upraszczają management. nftables to nowoczesna struktura jądra zastępująca iptables, zapewniająca lepszą wydajność i ujednolicone IPv4/IPv6 postępowanie. Wybierz jedno podejście, aby uniknąć konfliktów.
Jak mogę bezpiecznie otworzyć port, nie blokując sobie dostępu?
Utrzymaj aktywną sesję konsoli, dodaj najpierw nową regułę zezwalającą, przetestuj ją w drugim terminalu, a następnie dostosuj domyślne zasady. Na przykład: SSH i porty usług, sprawdź dostęp i dopiero wtedy ustaw politykę INPUT na DROP. Zachowaj zmiany po przetestowaniu.
Czy reguły IPTables są domyślnie zachowywane po ponownym uruchomieniu?
Nie. Utrwal je za pomocą iptables-persistent (Debian/Ubuntu), usługi iptables save (rodzina RHEL) lub ręcznie za pomocą iptables-save/iptables-restore z jednostkami systemd. W systemach nftables skonfiguruj reguły nft i włącz usługę nftables.