- Structură și flux: tabele, lanțuri și modul în care circulă traficul
- Reguli și politici: comenzi, meciuri și obiective cheie
- NAT și publicare: SNAT/MASQUERADE și DNAT în scenarii din lumea reală
- Design securizat: DMZ funcțională și bune practici operaționale
Dacă gestionezi distribuții Linux pentru a-ți proteja securitatea și confidențialitatea , mai devreme sau mai târziu va trebui să te ocupi de iptables. Acest sistem de filtrare a pachetelor este inima firewall-ului clasic din GNU/Linux , capabil să decidă ce trafic intră, iese sau este redirecționat între rețele. Configurat corect, este ca și cum ai avea un portar extrem de priceput la intrarea în rețea, care aplică regulile impecabil și cu o precizie chirurgicală.
În rândurile următoare, veți găsi un ghid complet și actualizat care acoperă elementele esențiale: concepte de firewall , Netfilter, tabele și lanțuri, flux de pachete, comenzi cheie, extensii de reguli și ținte avansate , precum și scenarii practice precum NAT, redirecționări, politici implicite și o DMZ funcțională. Totul este explicat într-un limbaj clar, dar riguros, astfel încât să îl puteți aplica imediat infrastructurii dvs.
Firewall-uri în context: De la bodyguard-uri în cluburi de noapte la DMZ
Un firewall este, în esență, un filtru între rețele care aplică reguli pentru a decide soarta fiecărui pachet. Gândiți-vă la el ca la un paznic dintr-un club de noapte cu o listă de verificare : dacă pachetul îndeplinește criteriile, este aprobat; dacă nu, este respins. Această metaforă ajută la înțelegerea faptului că importantă este logica regulilor și ordinea în care acestea sunt evaluate.
În cadrul proiectării rețelelor, unele topologii sunt mai sigure decât altele. DMZ (zona demilitarizată) este o rețea intermediară care găzduiește servicii publice (cum ar fi un site web sau un server FTP), separându-le de rețeaua locală a companiei. De ce? Deoarece, dacă un atacator ar compromite un server public, segmentarea îl împiedică să obțină acces direct la restul rețelei interne.
Linux ca firewall: Netfilter și iptables
Nucleul Linux încorporează Netfilter, un framework cu hook-uri pentru interceptarea și manipularea pachetelor . În spațiul utilizator, iptables este utilitarul care definește regulile pe care nucleul le va aplica traficului. Această separare nucleu/utilizator permite performanțe ridicate cu o flexibilitate deosebită.
Este util să se facă distincția între utilitare după protocol: iptables (IPv4), ip6tables (IPv6), arptables (ARP) și ebtables (frame-uri Ethernet) . În kernel, modulul comun este x_tables, care partajează logica pentru potrivirea extensiilor și țintelor. O notă istorică: iptables a înlocuit ipchains, iar nftables, la rândul său, a succedat iptables în kernelul 3.13 , deși iptables rămâne utilizat pe scară largă în multe sisteme.
Pentru a opera, veți avea nevoie de privilegii de administrator. Rulați iptables ca root (sau cu sudo), de obicei în /usr/sbin/iptables (Debian/derivate) sau /sbin/iptables (Red Hat/derivate). Documentația oficială se află la man iptables și pe netfilter.org.
Structura iptables: tabele, lanțuri și reguli
Iptables își organizează logica în tabele compuse din lanțuri umplute cu reguli . Fiecare regulă specifică condițiile de potrivire și o țintă de aplicat atunci când pachetul se potrivește.
- Tabel de filtrare (implicit, filtrare pură)
- INTRARE: trafic direcționat către mașina însăși.
- REDIRECŢIONA: traficul care trece prin echipament (rutare).
- REZULTATE: trafic generat local.
- Tabel Nat (traducere de adrese; evaluată pe conexiuni noi)
- PRERUUTAREînainte de a decide asupra unei rute; ideal pentru DNAT/redirecționare de port.
- REZULTATE: pachete originare local înainte de rutare.
- POSTRUTAREdupă rutare; tipic pentru SNAT/MASQUERADE.
- Masă de mangrove (ajustări fine ale antetului: TOS, TTL, marcare etc.)
- PRERUTARE, INTRARE, ÎNAINTE, IEȘIRE, POSTRUTARE: disponibil pe tot parcursul.
- Tabel brut (controlul urmăririi conexiunilor/conntrack)
- PRERUUTARE y REZULTATE: pentru a marca traficul care ar trebui omis de conntrack.
Când un pachet ajunge la un lanț, acesta este comparat secvențial cu fiecare regulă ; dacă se potrivește, ținta sa este executată și traversarea se oprește. Dacă ajunge la sfârșit fără a se potrivi cu nicio regulă și lanțul este predefinit, se aplică politica implicită a lanțului pentru acel lanț.
Fluxul de pachete: unde trec și când
Înțelegerea traseului de trafic este esențială pentru aplicarea corectă a regulilor. Un pachet care părăsește rețeaua locală (LAN) către internet este de obicei procesat după cum urmează: mai întâi PREROUTING (eventual DNAT/mangle), apoi FORWARD (filtrare de tranzit) și, înainte de a părăsi dispozitivul, este procesat prin POSTROUTING (SNAT/MASQUERADE, dacă este cazul).
În schimb, dacă destinația este chiar firewall-ul, ruta va fi PREROUTING → INPUT ; dacă provine de la mașina locală, ruta va fi OUTPUT → POSTROUTING . Acest cadru mental vă scutește de dureri de cap atunci când ceva nu se leagă.
Comenzi de bază: listare, ștergere, creare și politici implicite
Pentru a verifica starea actuală, Statele Unite ale Americii iptables -L (opțional) -v pentru detalii și -n (a nu se rezolva numele)De asemenea, puteți crea și șterge lanțuri cu -N y -X respectiv, și setați politici implicite cu -P.
Când trebuie să începi de la zero, reguli curate cu -F (culoare) și, dacă este cazul, contoare. Rețineți că puteți specifica tabele cu -t și lanțuri specifice; de exemplu, iptables -F -t nat pentru NAT.
Atunci când se definesc reguli, cele mai comune opțiuni sunt simple: -A rață, -I introduce, -R înlocuiește și -D ştergeApoi adăugați selectori precum -p (protocol), -s/-d (origine/destinație), -i/-o (interfețe) și ținta cu -j (de exemplu., ACCEPTĂ, RENUNȚĂ sau RESPINGE).
Las politici implicite definesc ce se întâmplă dacă nicio regulă nu se potrivește. O schemă tipică consolidată pe o gazdă ar fi INPUT DROP, FORWARD DROP, OUTPUT ACCEPT, blocarea a tot ceea ce intră, cu excepția a ceea ce este permis în mod explicit și permițând ceea ce iese.
Extensii de potrivire (-m): TCP, UDP, ICMP, MAC, stateful și multiport
Iptables își extinde filtrele cu module potrivite folosind -m. Cel TCP permite reglarea prin porturi și steaguri: --dport/--sport y --syn pentru noi deschideri de conexiuni, de exemplu.
Pentru UDP, puteți restricționa și porturile sursă și destinație . Un exemplu clasic: deschiderea portului 80/443 către un server web sau permiterea interogărilor DNS de ieșire pe portul 53/UDP.
Cu ICMP, --icmp-type vă permite să discriminați tipurile (de exemplu., cerere de ecou y ecou-răspuns (pentru ping-uri). Acest lucru este util pentru a permite diagnosticarea fără a lăsa deschisă calea către ICMP complet.
Există și modulul mac pentru a filtra după adresa MAC cu --mac-sourceUtil dacă doriți să autorizați un computer gestionat cu o adresă IP dinamică să pingeze firewall-ul fără a se baza pe adresa IP.
Și, poate cel mai important, la nivel operațional, modulul state (sau contract) cu --state NEW, ESTABLISHED, RELATEDAcest lucru permite răspunsuri de la conexiuni deja stabilite, reducând drastic numărul de reguli necesare.
Pentru a grupa porturile, multiport adaugă --sports y --dports cu liste separate prin virgulăEste convenabil să deschideți HTTP, HTTPS și SSH într-o singură regulă.
Ținte dincolo de ACCEPT/DROP: NAT și compania
Pe lângă acceptare sau respingere, iptables poate rescrie adrese și porturi pentru a conecta rețele private la Internet sau pentru a promova servicii interne.
MASCARADĂ (în POSTROUTING de la masă nat) înlocuiește adresa IP sursă cu adresa IP de ieșire a firewall-ului, ideal atunci când IP-ul public este dinamic (DHCP). Acesta este NAT-ul de ieșire tipic pentru o întreagă rețea LAN.
SNAT (De asemenea, în POSTROUTING) setează explicit adresa IP/portul sursă cu --to-source. Se folosește atunci când ai un IP public static. și vrei să controlezi cu precizie traducerea.
DNAT (în PREROUTING o OUTPUT) schimbați adresa IP de destinație cu --to-destination. Sunt faimoasele „porturi deschise”Primești trafic pe adresa IP publică și îl redirecționezi către un server din DMZ, de exemplu un site web intern la adresa 192.168.1.2.
Exemplu simplu: filtrarea traficului între două rețele
Imaginați-vă o mașină care acționează ca un router/firewall între două subrețele. Dacă doriți ca doar gazda B să comunice cu C și numai prin TCP, masa va fi filter și șirul corect este FORWARD, deoarece traficul trece prin echipament.
Mai întâi, ați aplica o politică DROP implicită pe FORWARD și apoi ați autoriza explicit traficul B→C pe TCP (și, dacă este cazul, C→B). Acest model „refuzați implicit și permiteți strictul necesar” este fundamentul unei posturi de securitate robuste.
Cazuri cotidiene pe podium: reguli tipice
Un gateway cu două interfețe, de exemplu eth1 (LAN) și eth0 (WAN), de obicei trebuie să redirecționeze pachete din LAN către Internet. Pentru a face acest lucru, adaugă FORWARD -i eth1 -o eth0 -j ACCEPT, Și permite doar în marșarier ESTABLISHED,RELATED cu -m state.
În firewall-ul în sine, este recomandabil să autorizați traficul de intrare care este un răspuns la conexiunile de ieșire cu INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTși permiteți întotdeauna loopback-ul: INPUT -i lo -j ACCEPT.
Pentru a permite computerelor din LAN să navigheze, aplicați NAT de ieșire: -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source X.Y.Z.W (o MASQUERADE (dacă IP-ul este dinamic). Aceasta traduce IP-urile private în IP-ul public.
O măsură de bază de întărire a securității este blocarea pachetelor WAN primite cu adrese IP sursă necorespunzătoare (propriul IP public, intervalele private 192.168.0.0/24, 127.0.0.0/8 etc.), deoarece acestea indică de obicei spoofing.
Pentru a expune serviciile în firewall (de exemplu, SMTP 25, HTTP 80, HTTPS 443 sau SSH 22), puteți permite pachete TCP cu steagul SYN către acele porturi de destinațieDacă doriți să restrângeți căutarea după adresa IP de destinație, adăugați -d la adresa IP a serviciului.
Serviciile tipice de infrastructură includ DHCP (trafic de la porturile 68 la 67) pe interfața LAN și DNS de la resolver-ul autoritar (UDP 53) dacă se filtrează după sursă. Aceste porturi permit clienților să obțină adrese IP și să rezolve nume.
Dacă trebuie să blocați accesul, REDUCEREA accesului prin SSH/Telnet este simplă; puteți, de asemenea, RESPINGE mesajele trimise către adrese IP blocate în rețeaua locală, astfel încât expeditorul să primească o notificare de respingere.
Instalarea și gestionarea serviciului pe sistemele Red Hat/CentOS
În mediile vechi cu CentOS/RHEL 5/6, era suficient să instalați cu yum -y install iptablesDeși multe distribuții noi preferă astăzi nftables, iptables este încă prezent în sistemele și dispozitivele de producție.
Integrare cu Servicii SysV permisiunea de a gestiona și de a persista regulile: service iptables start|stop|restart y service iptables save, economisind în /etc/sysconfig/iptablesPentru activare la pornire: chkconfig iptables on la nivelurile 2–5.
În sistemele moderne, deși wrapper-ele se schimbă , ideea persistă: definiți regulile, testați-le și mențineți-le persistente astfel încât să supraviețuiască repornirilor, fie cu instrumente de sistem, fie cu scripturi.
Listarea, ștergerea și editarea regulilor cu precizie
Pentru a vedea starea cu numerele regulilor, Statele Unite ale Americii iptables -L --line-numbers -n -vÎn acest fel puteți șterge după index cu -D INPUT 3 sau înlocuiți cu -R fără confuzie.
Dacă aveți nevoie de o ștergere selectivă, Curățați doar lanțul sau placa care atinge (-F FORWARD o -F -t natEvitați scanările globale la distanță fără o „plasă de siguranță” sau puteți pierde accesul SSH.
Ca practică generală, mai întâi implementați reguli care permit sesiunea SSH , aplicați modificările treptat și aveți o fereastră de revenire la setări (de exemplu, un cron job care restaurează regulile în 5 minute dacă nu efectuați un commit).
Persistență cu iptables-save și iptables-restore
Pentru a salva setările, iptables-save > /ruta/backup/iptables.rules Generează o imagine de memorie (dump) care poate fi citită de mașină a tuturor tabelelor. Este ideală pentru controlul modificărilor și migrări.
Pentru a-l încărca, utilizați iptables-restore < /ruta/backup/iptables.rulesPuteți automatiza restaurarea la boot cu systemd, scripturi de inițializare sau un cron job. @reboot, asigurându-se că firewall-ul rămâne activ după o repornire.
Adăugați la acestea bune practici operaționale: rulează cu privilegiile corespunzătoare, salvați fișierele în afara /tmp și aliniați-le cu mediul (interfețe și subrețele corecte) pentru a evita surprizele.
DMZ în detaliu: un exemplu complet și realist
Să presupunem un firewall Linux conectat la un router în modul „single-user” (fără NAT), cu trei interfețe: eth0 (LAN 192.168.1.1/24), eth1 (DMZ 192.168.2.1/24) și eth2 (WAN cu IP prin DHCP) . DMZ-ul găzduiește un server web Apache (192.168.2.2) și un server FTP (192.168.2.3).
Obiective de politică: publicarea HTTP/HTTPS și FTP din DMZ către Internet , permiterea administrării SSH din LAN către firewall și permiterea LAN-ului să navigheze (HTTP/HTTPS), să transfere fișiere prin FTP și să rezolve DNS. Orice alt acces este refuzat.
În linii mari: în filtru/ÎNAINTE permite tranzitul LAN→WAN cu răspuns și WAN→DMZ doar către porturi publicate cu ESTABLISHED,RELATED pentru răspunsuri. În nat/PRERUTARE, aplică DNAT pentru a publica servicii; în nat/POSTROUTING, SNAT/MASQUERADE pentru ieșire LAN/DMZ.
Exemple de deschideri: DNAT 80/443 la 192.168.2.2 și 21/20 (în funcție de mod) la 192.168.2.3 cu corespunzător FORWARD Permiterea acelor porturi. Securizează canalele de control și de date pentru FTP (activ/pasiv) sau limitează raza pasivă și reflectă acest lucru în firewall.
Pentru LAN: permite ieșirea către 80, 443, 21 și 53 și returul său, aplicând NAT de ieșire în POSTROUTINGÎn firewall, autorizați Numai SSH de intrare din subrețeaua 192.168.1.0/24 și blochează accesul nedorit din rețeaua WAN.
Nu uitați de igienă: înregistrați în intervale nevalide pe WAN (privat, loopback, propriul dvs. public) și înregistrați doar ceea ce vă interesează. Cu politici implicite restrictive și deschideri minime, expunerea dvs. este redusă la minim.
Bune practici și trucuri operaționale
Lucrează întotdeauna cu un plan: documentează ce permiți și de ce , verifică fluxul așteptat cu o diagramă simplă și aplică regulile în ordinea corectă pentru a evita suprapunerile.
Folosește o combinație de module cu un cap: stare/track pentru răspunsuri, tcp con --syn în deschideri și multiport a grupaÎn acest fel, simplifici și reduci riscul de inconsecvențe.
Pentru mediile cu modificări frecvente, luați în considerare separarea regulilor după funcție: lanțuri personalizate (Cu -N) apeluri de la INPUT/OUTPUT/FORWARD, astfel încât păstrarea sau inversarea pieselor să fie mai curată.
Tranziția către nftables este în curs de desfășurare în multe distribuții, dar dacă platforma/produsul dvs. utilizează iptables, o înțelegere aprofundată a acestor componente vă va oferi control complet . Iar dacă migrați, veți înțelege cu ușurință harta mentală echivalentă în nftables.
Cu ceea ce ați parcurs, aveți acum o bază solidă pentru implementarea și întreținerea iptables în producție: înțelegeți arhitectura (tabele, lanțuri și flux), stăpâniți comenzile esențiale, puteți implementa NAT și publica cu DNAT/SNAT și știți cum să configurați o DMZ securizată . De aici, este vorba de adaptarea acesteia la nevoile dvs. specifice, auditarea regulată și menținerea regulilor la fel de clare ca modelul de rețea.