Cum se configurează smartphone-uri și PC-uri. Portal informativ

Conceptele cheie din iptables sunt.

IPTables este un utilitar folosit pentru a gestiona firewall-uri în Linux. Este un instrument puternic și la îndemână pentru conexiunile nedorite. Întregul proces este înglobat în reguli iptables, care pot fi editate și vizualizate. Pentru mai multe informații, consultați articolul.

Istoria creației

Inainte de IPTables pe Linux a folosit firewall-ul IPFW, împrumutat de la BSD. Apoi, cu nucleul Linux 2.4, a venit cu firewall-ul Netfilter și utilitarul IPTables pentru a-l gestiona. În metodologia muncii ei, toate aspectele au fost păstrate și ușor extinse funcțional.

Structura și structura IPTables

Când un pachet intră în firewall, trece prin mai multe verificări. Poate fi o sumă de control sau orice altă analiză la nivel de kernel. Apoi este rândul de a trece prin lanțul PREROUTING. În continuare, se verifică în funcție de care are loc redirecționarea către următorul lanț. Dacă pachetul nu are o adresă, ca, de exemplu, în TCP, atunci este direcționat către lanțul FORWARD. În cazurile în care există o anumită adresă, urmează lanțul INPUT și apoi demonii sau serviciile pentru care este destinat. Răspunsul de la ei trebuie să treacă și prin mai multe lanțuri, de exemplu OUTPUT. Veriga finală în acest proces este lanțul POSTROUTING.

Acum puțin despre lanțuri. Fiecare dintre ele conține mai multe tabele. Numele lor pot fi repetate, dar acest lucru nu afectează în niciun fel munca, deoarece nu sunt interconectate.

Tabelele, la rândul lor, conțin mai multe reguli. De fapt, o regulă este o anumită condiție care trebuie îndeplinită de pachetul care se verifică. În funcție de rezultat, se efectuează o anumită acțiune asupra pachetului.

Astfel, parcurgând toate etapele rețelei, pachetul vizitează secvențial toate lanțurile și în fiecare este verificată respectarea condiției unei anumite reguli. Dacă tabelul nu este generat de utilizator, atunci acțiunea implicită este efectuată, practic, este ACCEPT, care vă permite să continuați deplasarea mai departe, sau DROP, care oprește pachetul.

Lanțurile prestabilite vin în următoarele categorii:

  • PRERUUTARE... Procesarea inițială a tuturor pachetelor primite.
  • INTRARE... Aceasta include acele pachete care sunt trimise direct la computerul local.
  • REDIRECŢIONA... Folosit pentru „pachetele de tranzit” care urmează tabelul de rutare.
  • IEȘIRE... Folosit pentru pachetele de ieșire.
  • POSTRUTARE... Ultima etapă în trecerea tuturor lanțurilor de către pachetul de ieșire.

Pe lângă lanțurile încorporate, utilizatorii își pot crea sau șterge propriile lor.

Vizualizarea și gestionarea regulilor IPTables

După cum am menționat mai devreme, toate lanțurile conțin anumite condiții pentru pachete. Utilitarul IPTables este folosit pentru a vizualiza și gestiona regulile IPTables. Fiecare regulă individuală este o linie cu un set de condiții pentru pachete, precum și acțiuni asupra acestora, în funcție de rezultat.

Formatul comenzii arată astfel: iptables [-t numele tabelului în curs de procesare] comanda invocată [criterii] [acțiune de efectuat].

Orice conținut în poate fi omis. Dacă acesta este un parametru care specifică un tabel, atunci filtrul va fi utilizat. Pentru a utiliza un nume specific, trebuie să adăugați comutatorul -t. Comanda invocată vă permite să invocați acțiunea necesară, de exemplu, adăugați sau eliminați o regulă IPTables. „Criteriile” specifică parametrii după care va avea loc selecția. Iar în „acțiune” se aplică acțiunea, care trebuie efectuată dacă condiția este îndeplinită.

Comenzi pentru crearea și vizualizarea regulilor IPTables

  • Adăugați (-A). Când utilizați comanda, specificați lanțul și tabelul la care doriți să adăugați regula necesară. Valoarea echipei este că o face în partea de jos a întregii liste.
  • Șterge (-D). După cum sugerează și numele, elimină regula. Ca parametri, puteți specifica atât numele complet, cât și numerele alocate acestora.
  • Redenumiți lanțul (-E). Schimbă numele lanțului. Comanda specifică numele vechi, apoi numele nou.
  • Flush (-F).Ștergeți absolut toate regulile unui anumit tabel.
  • Inserați (-I). Această comandă introduce regula necesară în locul indicat de număr.
  • Lista (- L). Vizualizarea regulilor iptables. Dacă nu este specificat niciun tabel, atunci va fi folosit filtrul implicit.
  • Politică (-P). Este utilizată politica implicită pentru lanțul specificat.
  • Înlocuiți (-R). Schimbă regula sub numărul specificat cu cea necesară.
  • Șterge-lanț (-X). Această comandă șterge toate lanțurile create. Vor rămâne doar cele preinstalate.
  • Zero (-Z). Va reseta contoarele datelor transmise în lanțul specificat.

Câteva despre parametrii de selecție a pachetului

Ele pot fi împărțite aproximativ în trei tipuri:

  • Criterii generale... Ele pot fi specificate pentru orice reguli. Nu necesită conectarea unor extensii și module speciale și, de asemenea, nu depind de ce protocol va fi utilizat.
  • Nu sunt criterii generale. Ele sunt puse la dispoziție folosind criterii generale.
  • Explicit. Pentru a utiliza acest tip, trebuie să conectați pluginuri speciale pentru netfilter. În plus, comanda trebuie să folosească comutatorul -m.

Merită să vorbim puțin despre parametrii frecvent întâlniți folosiți în analiza pachetelor:

  • Protocol (-p). Indică protocolul.
  • Sursa (-s). Acest parametru definește adresa IP a sursei din care provine pachetul. Poate fi specificat în mai multe moduri. O anumită gazdă, adresă sau o întreagă subrețea.
  • Destinație (-d). Adresa de destinație a pachetului. De asemenea, ca și precedentul, poate fi descris în mai multe moduri.
  • În interfață (-i). Specifică interfața de intrare a pachetului. Utilizat mai ales pentru NAT sau pe sisteme cu interfețe multiple.
  • Interfață în afara (-o). Interfață de ieșire.

Câteva exemple

Pentru a vedea regulile IPTables nat? trebuie să utilizați comanda - "iptables -L -t nat". Verificați starea generală a paravanului de protecție - „iptables -L -n -v”. În plus, această comandă vă permite să vedeți regulile IPTables care sunt disponibile în întregul sistem. Introduceți o regulă într-un anumit loc din tabel, de exemplu, între prima și a doua linie - „iptables -I INPUT 2 -s 202.54.1.2 -j DROP”. Apoi vedeți dacă a fost adăugat - "iptables -L INPUT -n --line-numbers".

Pentru a bloca o anumită adresă, de exemplu 12.12.12.12 - „iptables -A INPUT -s 12.12.12.12 -j DROP”.

Referință Iptables - „man iptables”. Dacă aveți nevoie de informații despre o anumită comandă - „iptables -j DROP -h”.

In cele din urma

Utilizați comenzile IPTables cu prudență, deoarece configurarea incorectă (fără să știți) poate duce la defecțiuni ale rețelei sau la defecțiuni complete. Prin urmare, merită să studiați manualele și instrucțiunile în detaliu înainte de configurare. În mâinile potrivite, IPTables poate fi transformat într-un protector de încredere al conexiunilor de rețea. Administratorii de sistem folosesc în mod activ utilitarul pentru a crea conexiuni izolate de accesul neautorizat.

De câteva ori am dat peste faptul că până și oamenii care nu sunt proști în general fac greșeli absolut de neiertat. De exemplu, ei deschid portul pe care rulează baza de date către întregul Internet. Acesta este adesea cazul începătorilor DevOps care au programat toată viața, iar acum responsabilitățile lor includ și configurarea serverelor. Există tutoriale bune pe net despre configurarea de bază a firewall-ului în Linux și alte * nix, dar adesea acestea sunt foi pentru multe ecrane. Deci, sperăm că cineva va găsi util acest tutorial mai concis.

Important! Este foarte ușor să trageți din greșeală o mașină în așa fel încât să nu mai intrați în ea. Acest lucru este valabil mai ales pentru găzduirea în cloud. De exemplu, dacă în AWS închideți toate porturile de la 1024 la 65536, din anumite motive, aparatul este închis după o repornire. in general toate porturi. Dacă găzduiți în cloud, cel mai bine este să vă configurați firewall-ul prin interfața web găzduită.

O notă rapidă despre terminologie. Firewall-ul încorporat în nucleul Linux se numește Netfilter, iar iptables este utilitarul pentru gestionarea acestui firewall. Mulți oameni cred în mod eronat că firewall-ul se numește iptables. Nu este adevarat. A spune ceva de genul „Filtrez pachetele cu iptables” le arată altora că sunteți analfabet.

În general, ce sarcini pot fi rezolvate folosind Netfilter:

  • Permite / interzice traficul de intrare către anumite porturi folosind protocoale specifice (IPv4 / IPv6, TCP / UDP) de la adresele specificate (IP, MAC) sau subrețele;
  • Totul este la fel pentru traficul de ieșire;
  • Puteți, de exemplu, să ignorați complet toate pachetele ICMP;
  • Configurarea NAT, vezi articolul despre un router Raspberry Pi;
  • Am auzit că guru adevărați pot configura protecție împotriva DDoS și a forței brute, pot restricționa accesul la rețea la anumite aplicații, utilizatori sau grupuri și pot face alte lucruri nebunești;

Rețineți că utilitarul iptables mi s-a părut la început extrem de incomod în comparație cu ipfw din FreeBSD. Din fericire, după ce am lucrat cu el o vreme, toate aceste steaguri precum -A, -D, -j și altele devin familiare, așa că aveți răbdare. Să aruncăm o privire la comenzile principale.

Afișați toate regulile:

iptables -L -n

Este posibil să observați că Netfilter are un fel de „lanțuri” - cel puțin INPUT, OUTPUT și FORWARD. Eu personal am și un lanț Docker pe mașină. Pentru prima dată, vă puteți gândi la primele două ca fiind tot traficul de intrare și, respectiv, de ieșire și uitați temporar de restul. Sunt șanse mari să nu ai deloc nevoie de ele.

Eliminați toate regulile:

iptables -F

Schimbați înlănțuirea politicii (comportament implicit):

iptables -P INPUT DROP
iptables -P INTRARE ACCEPT

Interziceți accesul de la gazdă/subrețea:

iptables -A INPUT -s 123.45.67.89 -j DROP
iptables -A INPUT -s 123.45.0.0/ 16 -j DROP

De asemenea, puteți utiliza nume de domenii:

iptables -A INPUT -s example.com -j DROP

Interzicerea conexiunilor de ieșire:

iptables -A OUTPUT -d 123.45.67.89 -j DROP

Negativele pot fi folosite în reguli:

iptables -O INTRARE! -s 123.45.67.89 -j DROP

Ștergerea unei reguli după numărul ei din lanț:

iptables -D INTRARE 1

Eliminarea unei reguli pe baza a ceea ce face:

iptables -D INPUT -s 123.45.67.89 -j DROP

Opțiunea -p indică protocolul. Puteți utiliza all, icmp, tcp, udp sau numărul de protocol din / etc / protocoale. Steag - -sport indică portul din care a fost trimis pachetul și - -dport specifică portul de destinație:

iptables -A INTRARE -p tcp --sport 80 -j ACCEPT
iptables -A INTRARE -p tcp --dport 80 -j ACCEPT

Introduceți o regulă la începutul unui lanț:

iptables -I INTRARE...

Sau puteți specifica o anumită poziție:

iptables -I INTRARE 3...

iptables-save> / etc / iptables.rules

Restabiliți regulile:

iptables-restore< / etc/ iptables.rules

Acum să ne uităm la câteva exemple practice. Aceasta este, de exemplu, emularea unei divizări de rețea într-un test care verifică comportamentul unei aplicații care utilizează Akka Cluster:

rulați (nodul 1, s „iptables -A INPUT -s $ node2 -j DROP”)
rulați (nodul 1, s „iptables -A INPUT -s $ node3 -j DROP”)
rulați (nodul 1, s „iptables -A OUTPUT -d $ node2 -j DROP”)
rulați (nodul 1, s „iptables -A OUTPUT -d $ node3 -j DROP”)

Recuperarea este exact aceeași, cu excepția faptului că steagul -A este înlocuit cu steagul -D.

Alt exemplu. Este necesar să aflați ce porturi ascultă pe aparat și să le închideți pe cele suplimentare. Mergem la mașină și spunem:

netstat -tuwpln

Exemplu de ieșire:

Conexiuni la internet active (numai servere)
Proto Recv-Q Trimitere-Q Adresă locală Adresă străină Stat PID / Nume program
tcp 0 0 0.0.0.0:80 0.0.0.0:* ASCULTĂ 3210 / nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* ASCULTĂ 1789 / epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 797 / sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 990 / postgres

Nginx și SSHd navighează pe internet, asta e în regulă. PostgreSQL ascultă doar interfața locală, deci nu există nicio problemă cu aceasta. Dar epmd-ul iese în evidență (puteți verifica cu telnet de la o altă mașină), iar acest lucru nu este bun. Puteți închide doar portul 4369. Cum se face acest lucru a fost arătat mai sus. Sau puteți merge și mai departe și puteți refuza toate conexiunile din exterior la portul 81 și mai vechi.

Introducere și istorie

Netfilter- un firewall (aka firewall, aka firewall, aka firewall ...) a fost construit în nucleul Linux începând cu versiunea 2.4. Netfilter este controlat de un utilitar iptables(Pentru IPv6 - ip6tables). Inainte de netfilter / iptables a fost Ipchains care făcea parte din nucleele Linux 2.2. Înainte de ipchains, Linux avea așa-numitul ipfw (IPV4 firewall) portat din BSD. Utilitarul de management este ipfwadm. Proiectul netfilter / iptables a fost fondat în 1998 de Rusty Russell (care a condus și dezvoltările anterioare). În 1999, s-a format Netfilter Core Team (abreviat coreteam). Firewall-ul dezvoltat a fost denumit oficial netfilter. În august 2003, Harald Welte a devenit șeful coreteamului.

Proiecte ipchainsși ipfwadm a schimbat modul în care funcționează stiva de protocoale de kernel Linux, încă de dinainte de apariția netfilter nu exista nicio modalitate în arhitectura nucleului de a include module suplimentare de gestionare a pachetelor. iptables păstrat ideea principală ipfwadm- o listă de reguli, constând din criterii și o acțiune care se efectuează dacă pachetul corespunde criteriilor. V ipchains a fost introdus un nou concept - capacitatea de a crea noi lanțuri de reguli și tranziția pachetelor între lanțuri, iar în iptables conceptul a fost extins la patru tabele (în netfilters moderne - mai mult de patru), delimitând lanțurile de reguli după sarcină: filtrare, NAT și modificare a pachetelor... Iptables a extins, de asemenea, starea Linux, permițând crearea de firewall-uri la nivel de sesiune.

Arhitectura Netfilter / iptables

Cerințe preliminare ()

După cum sa menționat mai sus, Netfilter necesită un nucleu 2.6 (sau cel puțin 2.3.15). În plus, dacă aveți nevoie de setările CONFIG_NETFILTER, CONFIG_IP_NF_IPTABLES, CONFIG_IP_NF_FILTER (tabel de filtrare), CONFIG_IP_NF_NAT (tabel nat), CONFIG_BRIDGE_NETFILTER, precum și numeroase module suplimentare: CONFIG_NIP_NF_IPTABLES) module suplimentare de potrivire CONFIG_NIP_NF_IPTABLES, modele de urmărire a modelelor de conexiune CONFIG_FIG_IPTABLES, modele de urmărire a conexiunilor CONFIG_FIG_IPTABLES) , MARK, MULTIPORT, TOS, TCPMSS, STATE, UNCLEAN, OWNER), CONFIG_IP_NF_TARGET_ * (acțiuni suplimentare în reguli: REJECT, MASQUERADE, REDIRECT, LOG, TCPMSS), CONFIG_IPAT_NFIP_COMPchains CONFIG_BRIDGES_NFEBTIG_BRIDGES și modul CONFIG_BRIDGES_NFEBTIG__ și altele pentru modul CONFIG_BRIDGES și CONFIG_BRIDGES sunt CONFIG_IP6_NF_ *. De asemenea, este util să specificați CONFIG_PACKET.

Așa cum se vede, masa natși calandru poate modifica destinatarul sau expeditorul unui pachet de rețea. Acesta este motivul pentru care pachetul de rețea este verificat de mai multe ori pe tabelul de rutare.

Motor de detectare a stării (conntrack)

Mai sus în text a fost indicat de mai multe ori conceptul de „stări determinante”, merită un subiect separat de discuție, dar, cu toate acestea, voi aborda pe scurt această problemă în postarea curentă. În general, mecanismul de determinare a stărilor (aka mașină de stări, aka conn ecție urmări ing, el este contratrack) face parte din filtrul de pachete și vă permite să determinați cărei conexiuni/sesiuni îi aparține pachetul. Contratrack analizează starea tuturor pachetelor, cu excepția celor marcate ca NOTRACK pe masă brută... Pe baza acestei stări, pachetul îi aparține nou conexiune (stare NOU), deja stabilit conexiune (stare STABILIT), adiţional la cea existentă ( LEGATE DE), sau la " altcuiva„(nedefinită) conexiune (stare INVALID). Starea pachetului este determinată pe baza analizei antetelor pachetului TCP transmis. Modulul conttrack vă permite să implementați un strat de sesiune (al cincilea) firewall. Utilitarul este folosit pentru a controla acest mecanism. contrar, precum și parametrul utilitarului iptables: -m contratrack sau -m stare(depreciat). Conntrack stochează starea conexiunilor curente în nucleu. Ele pot fi vizualizate în / proc / net / nf_conntrack (sau / proc / net / ip_conntrack).

Pentru ca gândurile să nu se transforme într-o mizerie, cred că această scurtă informație va fi suficientă pentru a înțelege mai multe materiale.

Gestionarea regulilor de filtrare a rețelei Netfilter (folosind comanda iptables)

Utilitar Iptables este interfața de gestionare firewall netfilter... Această comandă vă permite să editați regulile de tabele, tabele și lanțuri. Cum am spus deja - fiecare regulă este o înregistrare/linie care conține selecția pachetelor de rețea și deasupra pachetelor care se potrivesc cu regula specificată. Comanda Iptables necesită drepturi root pentru activitatea sa.

În general, formatul comenzii este următorul:

Iptables [-t]

Toți parametrii între paranteze drepte - opțional... Valoarea implicită este tabel de filtrare, dacă trebuie să specificați un alt tabel, atunci ar trebui să utilizați cheia -t indicând Nume... Numele tabelului este urmat de acțiunea definitorie ( de exemplu: inserați o regulă sau adăugați o regulă la sfârșitul lanțului sau ștergeți o regulă). setează parametrii de selecție. indică ce acțiune ar trebui efectuată dacă criteriile de selecție din regulă ( de exemplu: transferați pachetul într-un alt lanț de reguli, „aruncați” pachetul, emiteți un mesaj de eroare către sursă...).

Mai jos sunt comenzile și parametrii pentru utilitarul iptables:

Parametru Descriere Exemplu
Comenzi
--adăugați (-A) Adăugați regula specificată la lanțul specificat și tabelul specificat la sfârșitul listei. iptables -Un criteriu FORWARD -j acțiune
--sterge (-D) Șterge regula(rile) specificat(e) de numărul(e) sau regulă(e). Primul exemplu elimină toate regulile numerotate 10,12 din toate lanțurile din tabelele de filtrare, al doilea exemplu elimină regula dată din tabelul Mangle din lanțul PREROUTING. iptables -D 10.12
iptables -t mangle -D criterii PREROUTING -j acțiune
--rename-chain (-E) Schimbați numele lanțului. iptables -E OLD_CHAIN ​​​​NEW_CHAIN
--flush (-F) Șterge toate regulile tabelului curent. Pentru toate pachetele care se referă la conexiuni deja stabilite, aplicați acțiunea terminalului ACCEPT - skip iptables -F
--inserați (-I) Inserează regula specificată în locația specificată de număr. iptables -I FORWARD 5 criterii -j acțiune
--list (abreviat -L) Vizualizarea regulilor existente (fără a specifica în mod explicit tabelul - este afișat tabelul de filtrare al tuturor lanțurilor). iptables -L
--politică (-P) Setează politica implicită pentru lanțul dat. iptables -t mangle -P PREROUTING DROP
--înlocuiește (-R) Înlocuiește regula specificată de număr cu cea specificată în criterii. iptables -R POSROUTING 7 | criterii -j acţiune
--delete-chain (-X) Ștergeți TOATE lanțurile create manual (lăsați doar INPUT, OUTPUT, FORWARD, PREROUTING și POSTROUTING standard). iptables -X
--zero (-Z) Resetează contoarele de date transmise în lanț. iptables -Z INPUT
Opțiuni
--numeric (-n) Nu rezolvă adresele și protocoalele la ieșire.
--line-numere Specificați numerele de regulă în ieșire (poate fi utilizat împreună cu -L). iptables -L --line-numbers
--ajutor (-h) unde fără ea
-t masa Specifică numele tabelului pe care se efectuează acțiunea. Exemplul aruncă masa nat în toate lanțurile. iptables -t nat -F
--verbos (-v) Concluzie detaliată. iptables -L -v

Criterii (parametri) pentru selectarea pachetelor de rețea ale comenzii iptables

Criterii de selecție a pachetelor de rețeaîmpărțit tacit în mai multe grupe: Criterii generale, Criterii implicite, Criterii explicite. pot fi folosite în orice reguli, nu depind de tipul de protocol și nu necesită încărcarea modulelor de extensie. (as suna neobișnuit), acele criterii care se încarcă implicit și devin disponibile, de exemplu, la specificarea unui criteriu general --protocol tcp | udp | icmp... Înainte de utilizare, trebuie să vă conectați extensie suplimentară(acestea sunt deosebite pluginuri pentru netfilter). Extensii suplimentareîncărcat folosind parametrul -m sau --Meci... Deci, de exemplu, dacă vom folosi criteriile stat, atunci trebuie să indicăm acest lucru în mod explicit în linia de regulă: -m stareîn stânga criteriului utilizat. Diferența dintre explicitși implicit negeneral criteriul este ca cele explicite să fie încărcate explicit, iar cele implicite să fie încărcate automat.

Se pot folosi toate criteriile semn!înainte de valoarea criteriului. Aceasta va însemna că această regulă se aplică tuturor pachetelor care nu se potrivesc cu acest parametru. De exemplu: criteriu --protocol! tcp va indica faptul că toate pachetele care nu protocolul TCP se potrivește cu regula. Cu toate acestea, cele mai recente versiuni de iptables (în special, 1.4.3.2 și o versiune ulterioară) nu mai acceptă această sintaxă și nu necesită utilizarea --protocol! tcp, A ! --protocol tcp dând următoarea eroare:

Utilizarea negației intrapoziționate (`--option! This`) este depreciată în favoarea extrapoziționării (`! --Option this`).

Mai jos sunt sub forma unui tabel parametrii de selecție a pachetelor utilizați în mod obișnuit:

Parametru Descriere Exemplu
Parametri comuni
--protocol
(abrevierea -p)
Definește protocolul. Opțiuni tcp, udp, icmp, toate sau orice alt protocol definit în / etc / protocoale iptables -A INPUT -p tcp
--sursă
(-s, --src)
Adresa IP sursă a pachetului. Poate fi definit în mai multe moduri:
  • Gazdă unică: host.domain.tld sau adresa IP: 10.10.10.3
  • Adrese de grup (subrețea): 10.10.10.3/24 sau 10.10.10.3/255.255.255.0

Este puternic descurajat să folosiți nume de domenii care necesită ca interogările DNS să fie rezolvate (rezolvate), deoarece în etapa de configurare, netfilter DNS poate să nu funcționeze corect. De asemenea, rețineți că numele sunt rezolvate o singură dată - atunci când adăugați o regulă într-un lanț. Ulterior, adresa IP corespunzătoare acestui nume se poate modifica, dar acest lucru nu va afecta regulile deja notate (vechea adresă va rămâne în ele). Dacă specificați un nume de domeniu care se rezolvă în mai multe adrese IP, atunci va fi adăugată o regulă separată pentru fiecare adresă.

iptables -A INPUT -s 10.10.10.3
--destinaţie
(-d)
Adresa IP de destinație a pachetului. Poate fi definit în mai multe moduri (vezi --source). iptables -A INPUT --destinație 192.168.1.0/24
--in-interfață
(-i)
Definește interfața pe care a ajuns pachetul. Util pentru NAT și mașini cu mai multe interfețe de rețea. Folosit în lanțurile INPUT, FORWARD și PREROUTING. Este posibil să se folosească semnul „+”, apoi se presupun toate interfețele care încep cu numele + (ex. eth + - toate interfețele eth). iptables -t nat -A PREROUTING --in-interface eth0
--out-interfață
(-o)
Definește interfața din care va pleca pachetul. Util pentru NAT și mașini cu mai multe interfețe de rețea. Folosit în lanțurile OUTPUT, FORWARD și POSTROUTING. Este posibil să utilizați semnul „+”. iptables -t nat -A POSTROUTING --in-interface eth1
Parametri impliciti (negeneri).
-p proto -h afișează ajutor privind parametrii impliciti ai protocolului proto. iptables -p icmp -h
--sursă-port
(--sport)
Port sursă, posibil numai pentru --protocol tcp sau --protocol udp iptables -A INPUT --protocol tcp --source-port 25
--portul de destinație
(--dport)
Port de destinație, posibil numai pentru protocoalele --protocol tcp sau --protemocol udp iptables -A INPUT --protocol udp --destination-port 67
Parametri explici
-m stat --state (învechit)
el este
-m conttrack --ctstate

Starea conexiunii. Optiuni Disponibile:

  • NOU(Toate pachetele stabilesc o nouă conexiune)
  • STABILIT(Toate pachetele aparținând conexiunii stabilite)
  • LEGATE DE(Pachete care nu aparțin conexiunii stabilite, dar sunt asociate acesteia. De exemplu - FTP în modul activ utilizează diferite conexiuni pentru transferul de date. Aceste conexiuni sunt legate.)
  • INVALID(Pachete care nu pot fi identificate dintr-un motiv sau altul. De exemplu, erori ICMP care nu aparțin conexiunilor existente)
  • etc. (mai detaliat în documentație)
iptables -A INPUT -m stare --state NEW, ESTABLISHED iptables -A INPUT -m conntrack --ctstate NEW, ESTABLISHED
-m mac --mac-source Specifică adresa MAC a nodului de rețea care a trimis pachetul. Adresa MAC trebuie să aibă forma XX: XX: XX: XX: XX: XX. -m mac --mac-source 00: 00: 00: 00: 00: 0

Acțiuni asupra pachetelor

Acest titlu ar fi reformulat mai corect în „ Acțiuni asupra pachetelor care corespund criteriilor de selecție„. Deci, să comită vreunul acțiuni asupra pachetelor, trebuie să setați cheia -j (--sări)și indicați ce acțiune specifică să efectuați.

Acțiunile asupra pachetelor pot lua următoarele valori:

  • ACCEPT- pachetul părăsește acest lanț și este transmis celui următor (la propriu - ACCEPT).
  • CĂDERE BRUSCA- aruncați un pachet care îndeplinește condiția, în timp ce pachetul nu este transferat către alte tabele/lanțuri.
  • RESPINGE- aruncați pachetul prin trimiterea unui mesaj ICMP către expeditor, în timp ce pachetul nu este transferat către alte tabele/lanțuri.
  • ÎNTOARCERE- readuceți pachetul în lanțul anterior și continuați trecerea acestuia începând de la următoarea regulă.
  • SNAT sursă in pachet. Poate fi folosit doar în lanțuri POSTOUTING și OUTPUTîn mesele nat.
  • DNAT- aplicați adresa de difuzare destinaţie in pachet. Poate fi folosit în lanț PRERUUTARE la masa nat. (în cazuri excepționale - în lanțul OUTPUT)
  • BUTURUGA- înregistrați pachetul (trimis demonului) și procesați-l cu restul regulilor.
  • MASCARADĂ- folosit în loc de SNAT dacă există o conexiune IP dinamică (este permisă specificarea numai în lanț POSTRUTARE mese nat).
  • MARCĂ- folosit pentru a seta etichete pe pachete, trecute pentru procesare la reguli ulterioare.
  • si etc.

Pe lângă aceste acțiuni, mai sunt și altele care pot fi găsite în documentație (poate că în curând voi completa articolul în cursul stăpânirii subiectului). Unele acțiuni au parametri suplimentari.

Tabelul de mai jos prezintă exemple și descrieri ale parametrilor suplimentari:

Parametru Descriere Exemplu
DNAT (Traducerea adresei rețelei de destinație)
--la-destinație specifică ce adresă IP ar trebui să fie înlocuită cu adresa de destinație. În exemplu, în toate pachetele protocolului tcp care ajung la adresa 1.2.3.4, această adresă va fi înlocuită cu 4.3.2.1. iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --to-destination 4.3.2.1
BUTURUGA
--nivel-log Folosit pentru a seta nivelul de înregistrare (). Exemplul setează nivelul maxim de înregistrare pentru toate pachetele tcp din tabelul de filtrare al lanțului FORWARD. iptables -A FORWARD -p tcp -j LOG --depanare la nivel de jurnal
--log-prefix Setează textul (prefixul) care va fi folosit înaintea tuturor mesajelor iptables... (foarte convenabil pentru ceea ce urmează) Prefixul poate conține până la 29 de caractere, inclusiv spații. În exemplu, toate pachetele tcp din tabelul de filtrare al lanțului INPUT cu prefixul INRUT-filter sunt trimise către syslog. iptables -A INPUT -p tcp -j LOG --log-prefix "INRUT-filter"
--log-ip-options Permite introducerea în diferite informații din antetul pachetului IP. iptables -A FORWARD -p tcp -j LOG --log-ip-options
si etc...

Aceasta încheie teoria despre filtrul de rețea netfilter / iptables. În articolul următor, voi oferi exemple practice pentru asimilarea acestei teorii.

rezumat

În acest articol, am acoperit foarte pe scurt conceptele de bază ale unui filtru de rețea în Linux. Deci, subsistemul netfilter / iptables face parte din nucleul Linux și este folosit pentru a organiza diverse scheme de filtrare și a manipula pachetele de rețea. În același timp, fiecare pachet trece de la interfața de rețea la care a ajuns și mai departe de-a lungul unei anumite rute în lanț, în funcție de faptul că este destinat unui sistem local sau „non-local”. Fiecare lanț constă dintr-un set de tabele care conțin un set secvenţial de reguli. Fiecare regulă constă dintr-un anumit criteriu/criteri pentru selectarea unui pachet de rețea și o acțiune cu un pachet care corespunde acestor criterii. În conformitate cu regulile specificate, orice acțiune poate fi efectuată asupra pachetului (De exemplu, transfer la următorul/alt lanț, aruncarea pachetului, modificarea conținutului sau antetelor etc.). Fiecare lanț și fiecare tabel are propriul scop, funcționalitate și loc în calea pachetului. De exemplu, pentru filtrarea pachetelor, se folosește tabelul de filtrare, care este conținut în trei lanțuri standard și poate fi conținut în lanțuri definite de utilizator. Calea pachetului este terminată fie pe interfața de rețea de ieșire, fie livrat către procesul/aplicația locală.

Literatură

Destul de multe informații interesante în limba rusă sunt conținute aici:

  • http://www.opennet.ru/docs/RUS/iptables/
  • http://ru.wikibooks.org/wiki/Iptables

Material mai aprofundat este disponibil în limba burgheză aici:

  • http://www.frozentux.net/documents/ipsysctl-tutorial/
  • http://www.netfilter.org/documentation/index.html

Cu respect, Mc.Sim!

Un firewall de încredere este unul dintre cele mai importante aspecte ale protecției oricărui sistem de operare modern. Majoritatea distribuțiilor Linux conțin mai multe instrumente firewall diferite. Acest tutorial este dedicat uneia dintre cele mai populare - iptables.

Deci iptables este firewall-ul implicit inclus cu majoritatea distribuțiilor Linux în mod implicit (nftables este dezvoltat pentru a-l înlocui). De fapt, iptables este interfața cu utilizatorul pentru gestionarea sistemului netfilter, care, la rândul său, gestionează stiva de rețea Linux. iptables compară fiecare pachet primit cu un set de reguli stabilite și apoi decide ce să facă cu el în continuare.

Am vorbit despre exact cum funcționează iptables. Acest articol se concentrează pe exemple practice care arată cum să creați un set de reguli de bază pentru un server Ubuntu 14.04.

Comenzi de bază pentru iptables

Această secțiune conține comenzi de bază care pot fi folosite pentru a crea un set complex de reguli și pentru a controla interfața iptables ca întreg.

Tine minte: comenzile iptables trebuie rulate cu privilegii de root. Aceasta înseamnă că trebuie să faceți una dintre următoarele:

  • autentificați-vă ca utilizator root;
  • utilizați su sau sudo -i pentru a extinde shell-ul rădăcină;
  • porniți toate comenzile cu sudo (recomandat pe Ubuntu).

Acest ghid aplică această ultimă opțiune.

Deci, mai întâi trebuie să vă uitați la lista de reguli actuale pentru iptables. Steagul -L este folosit pentru aceasta:

sudo iptables -L
INTRARE în lanț (politica ACCEPTĂ)


target prot opt ​​sursă destinație
Ieșire în lanț (politica ACCEPT)
target prot opt ​​sursă destinație

După cum puteți vedea, lista conține trei lanțuri implicite (INPUT, OUTPUT și FORWARD), fiecare dintre ele având o politică implicită (în prezent ACCEPT). De asemenea, puteți vedea numele coloanelor. Dar această listă nu include regulile în sine, deoarece Ubuntu nu vine cu un set implicit de reguli.

Folosind indicatorul -S, această listă poate fi vizualizată într-un format diferit care reflectă comenzile necesare pentru activarea regulilor și politicilor:

sudo iptables -S
-P ACCEPT INTRARE
-P ÎNTÂMPRE ACCEPT
-P ACCEPT IEȘIRE

Pentru a replica configurațiile, tot ce trebuie să faceți este să introduceți sudo iptables la începutul fiecărei linii de rezultat. (În funcție de configurațiile dvs., această procedură poate fi puțin mai complicată atunci când vă conectați de la distanță; dacă regulile pentru a permite conexiunea curentă nu sunt deja în vigoare, nu ar trebui să setați politica DROP.)

Pentru a reseta regulile curente (dacă există), tastați:

sudo iptables -F

Din nou, politica implicită este foarte importantă în acest moment, deoarece nu va fi schimbată cu comanda anterioară, chiar dacă toate regulile vor fi eliminate din lanțuri.

Înainte de a reseta regulile pe o conexiune la distanță, trebuie să vă asigurați că politica ACCEPT este setată în lanțurile INPUT și OUTPUT. Acest lucru se face astfel:

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

După ce ați creat regulile pentru a permite conexiunile la distanță, puteți seta politica DROP. Deci, să trecem direct la crearea regulilor.

Crearea regulilor iptables

După cum am menționat mai sus, acest tutorial se concentrează pe lucrul cu lanțul INPUT, deoarece este responsabil pentru traficul de intrare. În primul rând, trebuie să luați în considerare regula deja menționată - regula care permite conexiunea SSH curentă.

Arata cam asa:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT

Desigur, poate părea incredibil de dificil la început; pentru a înțelege această regulă, verificați componentele sale:

  • -O INTRARE: steagul -A adaugă ( adăuga) regulă la capătul lanțului. Această parte a comenzii îi spune iptables să adauge regula la sfârșitul lanțului INPUT.
  • -m contratrack: pe lângă un set de funcții de bază, iptables are și un set de extensii, sau module, care sunt responsabile pentru caracteristicile suplimentare ale firewall-ului. Această parte a comenzii spune că utilizatorul are nevoie de acces la funcțiile modulului conntrack. Acest modul vă permite să utilizați comenzi pentru a decide ce să faceți cu un pachet în funcție de relația acestuia cu conexiunile anterioare.
  • — Ctstate: una dintre comenzile disponibile la apelarea modulului conntrack. Această comandă vă permite să urmăriți relația dintre pachete și alte pachete vizualizate anterior. Este setat la ESTABLISHED (ceea ce îi permite să accepte pachete care fac parte dintr-o conexiune existentă) și RELATED (acceptă pachete care sunt asociate cu o conexiune deja stabilită). Această parte a regulii este responsabilă pentru sesiunea SSH curentă.
  • jACCEPT: indică acțiunea (ținta) care trebuie efectuată asupra pachetului care se potrivește cu regula. În acest caz, iptables va accepta pachete care îndeplinesc criteriile anterioare.

Această regulă ar trebui plasată la început pentru a se asigura că conexiunile existente se potrivesc cu regulile, sunt acceptate și ies din lanț fără a ajunge la regulile DROP.

Prin solicitarea listei de reguli, puteți vedea modificările:

sudo iptables -L
INTRARE în lanț (politica ACCEPTĂ)
target prot opt ​​sursă destinație
ACCEPT pe toate - oriunde oriunde ctstate RELATED, STABILIT
Lanț FORWARD (politica ACCEPT)
target prot opt ​​sursă destinație
Ieșire în lanț (politica ACCEPT)
target prot opt ​​sursă destinație

Acum că sunteți familiarizat cu sintaxa de bază, creați mai multe reguli care acceptă o alăturare.

Acceptarea altor conexiuni importante

Anterior, iptables a primit comanda să nu renunțe la toate conexiunile curente și, de asemenea, să accepte toate conexiunile legate de acestea. Acum trebuie să creați reguli care acceptă conexiuni care nu îndeplinesc criteriile de mai sus.

Lăsați două porturi deschise: portul SSH (acest tutorial folosește portul implicit 22; dacă această valoare a fost modificată, nu uitați să introduceți noua valoare); în plus, presupuneți că acest computer rulează un server web pe portul 80 în mod implicit (nu adăugați această regulă dacă nu este).

Deci, liniile care trebuie folosite pentru a crea astfel de reguli arată astfel:

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

După cum puteți vedea, ele sunt foarte asemănătoare cu prima regulă; poate au o structură și mai simplă. Opțiuni noi:

  • ptcp: Această opțiune permite pachetele care utilizează TCP (un protocol orientat pe flux care este utilizat de majoritatea aplicațiilor, deoarece permite o comunicare fiabilă).
  • dport: Această opțiune este disponibilă utilizând indicatorul -p tcp. Specifică portul de intrare pentru a se potrivi cu portul de pachet. Prima regulă permite trecerea pachetelor TCP direcționate către portul 22, iar a doua regulă acceptă traficul TCP direcționat către portul 80.

Acum trebuie să creăm o altă regulă ACCEPT pentru a ne asigura că serverul funcționează conform așteptărilor. De obicei, serviciile interacționează prin schimbul de pachete; pentru a face acest lucru, ei folosesc o interfață de rețea pseudo-ring numită dispozitiv loopback, care direcționează traficul înapoi către sursa sa și nu către alte computere.

Adică, dacă serviciul 1 trebuie să stabilească o conexiune cu serviciul 2 care ascultă conexiunile pe portul 4555, atunci serviciul 1 trimite un pachet la portul 4555 folosind un dispozitiv de loopback. Acest comportament trebuie permis deoarece este esențial pentru multe programe să funcționeze corect.

Pentru a face acest lucru, adăugați următoarea regulă:

sudo iptables -I INTRARE 1 -i lo -j ACCEPT

Diferă ușor de regulile anterioare; luați în considerare mai detaliat:

  • euINTRARE 1: Indicatorul -I îi spune iptables să insereze regula. Acest steag este diferit de steag-ul -A (care adaugă pur și simplu regula la sfârșitul lanțului); indică lanțul în care trebuie introdusă regula și locul în care se află regula. În acest caz, regula trebuie inserată chiar la începutul lanțului INPUT, drept urmare toate regulile se vor muta o poziție. Această regulă ar trebui plasată la începutul lanțului, deoarece este una dintre regulile principale și nu ar trebui să depindă de altele.
  • iuite: Această componentă de regulă permite pachetelor care utilizează interfața lo să treacă („lo” este un alt nume pentru un dispozitiv de loopback). Aceasta înseamnă că orice pachet care utilizează această interfață trebuie acceptat.

Pentru a vizualiza regulile curente, utilizați steag-ul -S, deoarece indicatorul -L nu afișează anumite informații (de exemplu, interfața la care este legată regula, ceea ce este foarte important în cazul ultimei reguli):

sudo iptables -S
-P ACCEPT INTRARE
-P ÎNTÂMPRE ACCEPT
-P ACCEPT IEȘIRE
-A INTRARE -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT
-A INTRARE -p tcp -m tcp --dport 22 -j ACCEPT
-A INTRARE -p tcp -m tcp --dport 80 -j ACCEPT

Crearea regulilor DROP

Deci, momentan, au fost create 4 reguli care acceptă pachete pe baza anumitor criterii. Cu toate acestea, serverul nu blochează în prezent niciun alt pachet.

Dacă un pachet traversează lanțul INPUT și nu îndeplinește niciuna dintre cele patru reguli, se va executa politica implicită (ACCEPT), care va accepta cumva acest pachet. Acum trebuie schimbat.

Acest lucru se poate face în două moduri, care au diferențe semnificative.

Prima modalitate este de a edita lanțul INPUT implicit; pentru a face acest lucru, tastați:

sudo iptables -P INPUT DROP

Această politică va monitoriza și va elimina toate pachetele care nu se potrivesc cu niciuna dintre regulile din lanțul INPUT. Una dintre consecințele acestui tip de construcție este că va scăpa pachetele chiar și după ce regulile în sine sunt eliminate.

Desigur, acest lucru crește nivelul de securitate al serverului; totuși, acest lucru poate avea consecințe grave dacă utilizatorul nu are altă modalitate de a se conecta la server. De cele mai multe ori, furnizorii de găzduire oferă o consolă web pentru a se conecta la server în cazul unor astfel de probleme. Această consolă funcționează ca o conexiune locală virtuală, deci iptables nu va răspunde la ea.

Puteți solicita serverului să renunțe automat la conexiunea dacă regulile sunt eliminate. Acest lucru va face serverul mai sigur și mai dificil de accesat. De asemenea, înseamnă că puteți adăuga reguli la sfârșitul lanțului și toate pachetele nedorite vor fi eliminate.

O abordare alternativă este adăugarea unei reguli la sfârșitul lanțului pentru a elimina toate pachetele care nu se potrivesc, menținând în același timp politica ACCEPT.

Pentru a returna politica ACCEPT în lanțul INPUT, tastați:

sudo iptables -P INPUT ACCEPT

Acum puteți adăuga o regulă la sfârșitul acestui lanț care va elimina toate pachetele care nu se potrivesc:

sudo iptables -A INPUT -j DROP

În condiții normale de funcționare, rezultatul va fi exact același cu utilizarea politicii DROP. Această regulă elimină fiecare pachet care ajunge la el, ceea ce împiedică pachetele care nu se potrivesc cu regulile specificate să ajungă la server.

Practic, a doua abordare este folosită atunci când este necesar să se păstreze politica ACCEPT care acceptă trafic. Adică, chiar dacă toate regulile sunt șterse, utilizatorul poate accesa în continuare mașina în rețea. Această abordare permite acțiunile implicite să fie întreprinse fără a fi nevoie să se schimbe politica care va fi aplicată lanțului gol.

Desigur, acest lucru înseamnă și că orice regulă care trebuie introdusă la sfârșitul lanțului trebuie să fie înaintea regulii de aruncare. Acest lucru se poate face fie prin eliminarea temporară a regulii de resetare:

sudo iptables -D INPUT -j DROP
sudo iptables -A INPUT new_rule
sudo iptables -A INPUT -j DROP

sau prin introducerea unei noi reguli la sfârșitul treptei (dar înainte de regula de resetare), specificând numărul liniei. Pentru a adăuga o regulă la rândul 4, tastați:

sudo iptables -I INPUT 4 new_rule

Dacă există multe reguli, calcularea manuală a numărului de linii este destul de problematică; în acest caz, iptables poate numerota liniile:

sudo iptables -L --line-numbers
Lanț INPUT (politica DROP)

1 ACCEPT pe toate - oriunde oriunde
2 ACCEPT pe toate - oriunde oriunde ctstate RELATE, STABILIT
3 ACCEPT tcp - oriunde oriunde tcp dpt: ssh
4 ACCEPT tcp - oriunde oriunde tcp dpt: http
Lanț FORWARD (politica ACCEPT)
num target prot opt ​​sursă destinație
Ieșire în lanț (politica ACCEPT)
num target prot opt ​​sursă destinație

Acest lucru asigură că regula a fost introdusă pe linia corectă.

Se salvează setările iptables

În mod implicit, toate regulile nesalvate rămân în vigoare până la următoarea repornire a serverului; regulile nesalvate se vor pierde imediat după repornire.

În unele cazuri, acest lucru este util, deoarece permite utilizatorilor care s-au blocat accidental să obțină acces la server. Cu toate acestea, în majoritatea cazurilor este mai convenabil să salvați regulile și să le încărcați atunci când pornește serverul.

Acest lucru se poate face în mai multe moduri; cel mai simplu este să folosiți pachetul iptables-persistent, care poate fi descărcat din depozitul implicit Ubuntu:

sudo apt-get update
sudo apt-get install iptables-persistent

În timpul instalării, pachetul va specifica dacă doriți să salvați regulile curente pentru încărcare automată ulterioară; dacă regulile actuale au fost testate (vă permit să creați conexiuni SSH) și îndeplinesc toate cerințele, le puteți salva.

Când instalarea este finalizată, va apărea un nou serviciu numit iptables-persistent care va porni la repornirea serverului și va relua regulile setate.

Rezultate

Acest ghid vă va ajuta să configurați firewall-ul în funcție de cerințele utilizatorului. Desigur, există mult mai multe astfel de utilități, iar unele dintre ele pot fi mai ușor de utilizat; cu toate acestea, iptables este unul dintre cele mai bune instrumente de acolo, fie și doar pentru că demonstrează unele dintre structurile de bază ale netfilter și este inclus în multe sisteme.

Etichete:,

Fiecare computer conectat la rețea este în pericol potențial. Există o mulțime de amenințări în rețea, de la programe care vor încerca să pătrundă în sistem în orice fel și terminând cu hackeri care doresc să obțină acces la computerul de care au nevoie. Iar software-ul instalat pe computer poate conține vulnerabilități încă necunoscute și nepattchizate, care pot deveni o gaură de securitate.

Dacă pentru computerele de acasă acest lucru nu este foarte relevant, deoarece acestea sunt conectate la rețea prin routere și NAT, care le ascund de rețeaua externă, atunci pentru servere este mai relevant ca niciodată. Sistemul de operare Linux are un firewall iptables foarte flexibil și de încredere încorporat în nucleu.

Cu ajutorul acestui program sistemul este protejat de intruziunile externe, port forwarding, precum și multe alte acțiuni cu trafic. Dar dezavantajul său este că este puțin dificil de configurat. Acest articol va acoperi configurarea iptables pentru manechine. Sper că după aceea puteți utiliza cu încredere capacitățile de bază ale iptables.

Subsistemul iptables și Netfilter au fost încorporate în nucleul Linux de ceva timp. Toate pachetele de rețea care trec prin computer, sunt trimise de computer sau sunt destinate computerului, nucleul le direcționează prin filtrul iptables. Acolo, aceste pachete sunt supuse verificărilor și apoi pentru fiecare verificare, dacă este trecută, se execută acțiunea specificată. De exemplu, pachetul este transmis nucleului pentru a fi trimis la programul țintă sau aruncat.

Tipuri de pachete

Toate pachetele sunt împărțite în trei tipuri: de intrare, de ieșire și de trecere. Inbox sunt cele care au fost trimise pe acest computer, cele de ieșire sunt cele care au fost trimise de pe acest computer în rețea. Iar cele care trec sunt pachete care trebuie doar redirecționate mai departe, de exemplu, dacă computerul tău acționează ca un router.

În consecință, în filtrul iptables, toate pachetele sunt împărțite în trei lanțuri similare:

  • Intrare- procesează pachetele și conexiunile primite. De exemplu, dacă un utilizator extern încearcă să se conecteze la computerul dvs. prin ssh sau orice site web vă trimite conținutul său atunci când este solicitat de browser. Toate aceste pachete vor ajunge în acest lanț;
  • redirecţiona- acest lanț este folosit pentru trecerea conexiunilor. Aceasta include pachetele care sunt trimise către computerul dvs., dar nu sunt destinate acestuia, sunt pur și simplu redirecționate prin rețea la destinație. După cum am spus, acest lucru se observă pe routere sau, de exemplu, dacă computerul dvs. distribuie wifi;
  • ieșire- acest lanț este folosit pentru pachetele de ieșire și conexiuni. Aceasta include pachetele care au fost generate atunci când încercați să faceți ping pe un site sau când lansați browserul și încercați să deschideți orice site.

Dar dacă credeți că puteți închide complet lanțul de intrare pentru a crește securitatea, atunci vă înșelați foarte mult. Rețeaua utilizează atât lanțuri de intrare, cât și de ieșire. De exemplu, încercați să faceți ping, datele sunt trimise prin ieșire, dar răspunsul vine prin intrare. Același lucru se întâmplă atunci când navighezi pe site-uri și alte activități. Dar lanțul înainte poate să nu fie folosit deloc dacă computerul dvs. nu este un router. Deci configurația iptables trebuie făcută cu mare atenție.

Reguli și acțiuni

Înainte de a trece la crearea unei liste de reguli iptables, trebuie să luați în considerare modul în care funcționează și ce sunt. Pentru fiecare tip de pachet, puteți seta un set de reguli care vor fi verificate pe rând pentru conformitatea cu pachetul, iar dacă pachetul se potrivește, apoi aplicați acestuia acțiunea specificată în regulă. Regulile formează un lanț, astfel încât intrarea, ieșirea și transmiterea se numesc lanțuri sau lanțuri de reguli. Pot exista mai multe acțiuni:

  • ACCEPT- permiteți pachetului să treacă mai departe de-a lungul lanțului de reguli;
  • CĂDERE BRUSCA- scoateți pachetul;
  • RESPINGE- respingeți coletul, va fi trimis un mesaj expeditorului că coletul a fost respins;
  • BUTURUGA- faceți o înregistrare despre pachet în fișierul jurnal;
  • COADĂ- trimiteți un pachet către o aplicație personalizată.

Regulile pot verifica orice potrivire, de exemplu, după ip, după portul destinatar sau expeditor, antetele pachetelor și multe altele. Dacă un pachet nu se potrivește cu niciuna dintre reguli, atunci i se aplică acțiunea implicită, de obicei ACCEPT.

Când ne-am dat seama de reguli, ne putem întoarce la lanțuri. Pe lângă cele enumerate mai sus, există două lanțuri suplimentare de reguli:

  • prerutare- pachetul intră în acest lanț înainte de a fi procesat de iptables, sistemul nu știe încă unde va fi trimis, la intrare, ieșire sau redirecționare;
  • postrutare- toate pachetele de trecere care au trecut deja prin lanțul înainte sunt incluse aici.

Dar asta nu este tot. Avem și tabele iptables, cu care este, de asemenea, de dorit să le înțelegem.

Ipatables

Există un alt nivel de abstractizare deasupra lanțurilor de reguli din iptables, și acestea sunt tabelele. Există mai multe tabele în sistem și toate au un set standard de lanțuri de intrare, transmitere și ieșire. Tabelele sunt folosite pentru a efectua diverse acțiuni asupra pachetelor, de exemplu, pentru modificare sau filtrare. Acum acest lucru nu este atât de important pentru tine și va fi suficient să știi că filtrarea pachetelor iptables se realizează în tabelul de filtrare. Dar le vom acoperi pe toate:

  • brut- concepute pentru a lucra cu pungi brute, cât timp nu au fost încă prelucrate;
  • calandru- destinat modificarii pachetelor;
  • nat- Oferă nat to work dacă doriți să folosiți computerul ca router;
  • filtru- tabelul principal pentru filtrarea pachetelor, utilizat implicit.

Cu aproape totul în teorie, acum să ne uităm la utilitarul de linie de comandă iptables, care este folosit pentru a gestiona sistemul iptables.

Utilitar Iptables

Subsistemul iptables și netfilter sunt încorporate în nucleu, dar un set de utilitare pentru gestionarea tuturor acestora nu este întotdeauna furnizat împreună cu sistemul. Pentru a instala utilitarul pe Ubuntu, tastați:

sudo apt install iptables

Pe distribuțiile bazate pe Fedora, instalarea iptables este ușor diferită:

sudo yum instalează iptables

Odată ce instalarea iptables este finalizată, puteți trece la configurare, dar să ne uităm mai întâi la sintaxa utilitarului. De obicei, comanda arată astfel:

-t lanț de acțiuni de masă Opțiuni suplimentare

Acum să ne uităm la parametrii iptables, tabelul indică tabelul cu care se lucrează, acest parametru poate fi omis, acțiunea este acțiunea dorită, de exemplu, creați sau ștergeți o regulă, iar parametrii suplimentari descriu acțiunea și regula de efectuat.

Rămâne să luați în considerare principalele acțiuni pe care iptables vă permite să le efectuați:

  • -A- adăugați o regulă la lanț;
  • -CU- verifica toate regulile;
  • -D- înlăturați regula;
  • -Eu- introduceți o regulă cu numărul necesar;
  • -L- afișați toate regulile din lanțul curent;
  • -S- afișați toate regulile;
  • -F- ștergeți toate regulile;
  • -N- creați un lanț;
  • -X- ștergeți lanțul;
  • -P- setați acțiunea implicită.

Opțiuni suplimentare pentru reguli:

  • -p- specificați protocolul, unul dintre tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
    mh;
  • -s- specificați adresa ip a dispozitivului care trimite pachetul;
  • -d- specifica adresa ip a destinatarului;
  • -i- interfata de retea de intrare;
  • -o- interfata de retea de iesire;
  • -j- selectați o acțiune dacă regula se potrivește.

Acum puteți continua să vă uitați la exemple despre cum este configurat iptables.

Exemple de configurare Iptables

Vom trece peste câteva exemple de bază, astfel încât să puteți consolida ceea ce ați citit mai sus.

Lista regulilor

Mai întâi, să vedem cum este efectuată căutarea regulilor iptables, opțiunea -L este suficientă pentru asta:

De asemenea, puteți specifica lanțul dorit pentru a afișa regulile numai pentru acesta:

iptables -L INPUT

Reguli de compensare

Nu puteți dezactiva pur și simplu iptables prin oprirea serviciului de actualizare a regulilor iptables prin systemd sau chiar prin eliminarea setului de utilitare de configurare. Subsistemul funcționează la nivel de kernel și nu depinde de ceea ce ați instalat acolo. Prin urmare, dacă faceți ceva greșit, va trebui să ștergeți regulile. Pentru a face acest lucru, rulați:

Sau doar pentru un anumit lanț:

sudo iptables -F Intrare

Permiteți-mi să vă reamintesc că toate aceste acțiuni sunt efectuate pentru tabelul implicit - filtru.

Reguli implicite

După cum am spus deja, dacă nicio regulă nu este potrivită pentru un pachet, atunci i se aplică acțiunea implicită. Poate fi setat folosind opțiunea -p:

sudo iptables -p INTRARE ACCEPT
$ sudo iptables -p ACCEPT IEȘIRE
$ sudo iptables -p FORWARD DROP

În acest exemplu, permitem lanțurile INPUT și OUTPUT, dar nu permitem FORWARD.

Blocarea pachetelor

Pentru a bloca pachetele, putem folosi acțiunea DROP, putem filtra pachetele care trebuie blocate după mai multe criterii, de exemplu, protocol, adresă ip, mască de rețea, port și multe altele.

Iată cum va arăta comanda, care vă permite să adăugați o regulă iptables pentru a bloca toate pachetele primite din 10.10.10.10:

sudo iptables -A INPUT -s 10.10.10.10 -j DROP

Și acum pachetele de ieșire la aceeași adresă:

Blocarea intervalului IP se face într-un mod similar. Pentru a face acest lucru, trebuie să utilizați masca de rețea 10.10.10.0/24. Acestea vor fi toate adresele de la 10.10.10.0 la 10.10.10.255:

sudo iptables -A INPUT -s 10.10.10.0/24 -j DROP

Sau o versiune extinsă a măștii:

sudo iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

De asemenea, puteți bloca toate conexiunile ssh de intrare:

sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

După cum puteți vedea, adăugarea unei reguli iptables este foarte ușoară.

Înlăturarea regulilor

Ștergerea regulilor iptables se realizează în același mod ca și crearea altora noi, doar că în loc de opțiunea A, trebuie să utilizați opțiunea D. Mai întâi, priviți lista de reguli:

De exemplu, așa puteți șterge regula iptables care a fost creată a doua:

sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

De asemenea, puteți șterge complet iptables rulând comanda cu opțiunea -F:

Top articole similare