iptables este firewall Folosit pe Linuxsisteme de operare bazate pe -. Deși în ultimii ani avem nftables instalat în mod implicit, puteți utiliza în continuare sintaxa iptables pentru a configura firewall-ul în sistemul nostru de operare, cum ar fi Debian, Ubuntu și chiar firewall-ul routerului dacă este bazat pe Linux. Cunoașterea iptables este foarte importantă pentru a menține rețeaua noastră locală protejată de intruziuni, asta pentru că iptables ne va oferi posibilitatea de a permite sau de a refuza traficul pe care îl dorim. Astăzi, în acest articol, vom explica cum funcționează iptables și exemple avansate de utilizare.
Principalele caracteristici ale iptables
iptables este un software care este responsabil pentru acționarea ca un firewall sau firewall în rețeaua noastră. Este o parte foarte importantă a sistemelor de operare și este concepută special pentru a permite accesul autorizat și pentru a bloca accesul neautorizat. Un firewall stabilește un punct de control, atât pentru pachetele de intrare, cât și pentru cele de ieșire. În plus, este foarte important să indicați că un firewall protejează de traficul care traversează diferite rețele, dar nu protejează rețeaua locală de atacurile care apar în cadrul aceleiași subrețele. .
iptables este firewall-ul inclus în sistemele Linux începând cu versiunea 2.4, prin urmare este încorporat implicit în sisteme precum Debian, Ubuntu, Linux Mint și multe altele, deși în prezent nftables este folosit intern, deoarece iptables este considerat vechi, deși astăzi iptables este încă folosit pe scară largă în lumea administrării sistemelor Linux și, de asemenea, în lumea administrării rețelelor.
Acest firewall are mai multe tabele create implicit, cu scopul de a facilita foarte mult posibilitatea de a adăuga diferite lanțuri și reguli. Un detaliu foarte important este că în mod implicit avem totul setat la „accept”, adică tot traficul este permis, nu există nicio regulă de a refuza traficul, prin urmare, la început acest firewall este permisiv, dar putem schimba politica implicită foarte mult ușor și rapid.
Odată ce cunoaștem principalele caracteristici, vă vom arăta funcționarea și arhitectura acestui firewall.
Funcționare și arhitectură
Acest firewall se bazează pe reguli pe care le vom introduce unul după altul, funcționarea lui se bazează pe aplicarea unor reguli pe care firewall-ul însuși este responsabil să le execute. Deși iptables poate părea simplu de utilizat la început, dacă doriți să o faceți într-un mod avansat, este mai complicat. În continuare, puteți vedea o schemă rezumată a modului în care funcționează iptables.
Structura iptables se bazează pe tabele, dintre care multe sunt deja create implicit. În interiorul tabelelor avem șirurile, pe care le avem și unele create implicit. În cele din urmă, în interiorul lanțurilor avem diferitele reguli pe care le putem configura. În fotografia următoare puteți vedea o mică schemă a cum ar arăta arhitectura firewall-ului:
În mod implicit, avem un total de patru tabele:
- tabel de filtrare : este tabelul implicit, dacă nu definim un tabel pentru a adăuga o regulă, acesta va merge întotdeauna la tabelul de filtrare. În acest tabel avem în total trei lanțuri implicite, în funcție de ceea ce ne interesează, va trebui să folosim un lanț sau altul: INPUT (acestea sunt pachetele în direcția de intrare, către firewall-ul propriu-zis), OUTPUT (sunt pachetele de ieșire, de la server în afara) și FORWARD (utilizat pentru a filtra pachetele care trec de la o interfață de rețea la alta).
- Nat tabel: acest tabel este responsabil pentru realizarea NAT, transformând IP-ul privat în public și invers. În cadrul NAT avem trei lanțuri: PREROUTING (alterează pachetele înainte de a le direcționa, aici DNAT sau port forwarding se face), POSTROUTING (alterează pachetele după rutarea lor, aici SNAT sau MASQUERADE se face) și OUTPUT (pachetele generate de firewall-ul configurat). NAT va traversa).
- Calandru tabel: acest tabel este responsabil pentru modificarea pachetelor, este locul în care QoS este configurat pentru calitatea serviciului, modificarea antetelor TCP, etc. În acest tabel avem cele cinci lanțuri: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
- crud tabel – Acest tabel nu este adesea folosit deoarece pachetele călătoresc fără starea de conexiune. Avem lanțul PREROUTING și OUTPUT.
În imaginea următoare puteți vedea un mic rezumat al lanțurilor pe care le avem în diferitele tabele:
Operația la adăugarea unei reguli este următoarea:
- Regulile pe care le adăugăm la lanțuri au întotdeauna o țintă (-j în regulă).
- Când firewall-ul primește un pachet, verifică dacă pachetul se potrivește cu o regulă pe care am introdus-o. Dacă se potrivește, comanda țintă este executată, în caz contrar, se trece la următoarea regulă până la sfârșitul lanțului.
- Regulile sunt verificate într-o ordine secvențială, de la prima regulă până la ultima. Ordinea este foarte importanta, daca mai intai blocam totul si apoi permitem ceva mai specific, vom bloca tot traficul si nu se va verifica regula cea mai specifica.
- În cazul în care nicio regulă nu satisface pachetul, atunci se va folosi politica lanțului pe care îl avem (regulă globală).
Obiectivele diferitelor reguli sunt următoarele:
- ACCEPT: acceptă pachetul și îl trece la nivelul următor, un server web, SSH, FTP etc.
- DROP: blochează pachetul și nu-l trece la nivelul următor.
- QUEUE: este o țintă specială, care trece pachetul într-o coadă destinată procesării spațiului utilizatorului. Acesta poate fi folosit pentru a rula alte programe externe.
- RETURN: are același efect ca și când am fi ajuns la capătul lanțului. Dacă regula a fost într-unul dintre lanțurile implicite, atunci politica lanțului este executată. Pentru o regulă care se află într-un lanț definit de utilizator, aceasta este ieșită, continuând prin lanț înainte de săritură, imediat după regula cu care a fost sărit.
Odată ce știm cum funcționează și arhitectura sa, vom vedea diferite comenzi pentru a efectua diferite acțiuni.
Comenzi esențiale pentru a utiliza iptables
Primul lucru de care trebuie să ținem cont la configurarea acestui firewall este că avem nevoie de permisiuni de superutilizator pentru a efectua diferitele comenzi. Este absolut necesar ca ei să alerge, altfel nu va funcționa. Următoarele comenzi nu au „sudo” deoarece presupunem că sunteți deja superutilizator (sudo su).
În cele mai recente versiuni de Linux nu este posibilă oprirea serviciului iptables, pentru a permite tot traficul de rețea și a lăsa firewall-ul cu parametrii impliciti, trebuie să executăm următoarele comenzi:
- sudo iptables -F
- sudo iptables -X
- sudo iptables -t nat -F
- sudo iptables -t nat -X
- sudo iptables -t mangle -F
- sudo iptables -t mangle -X
- sudo iptables -P INPUT ACCEPT
- sudo iptables -P FORWARD ACCEPT
- sudo iptables -P OUTPUT ACCEPT
Odată ce am făcut acest lucru, vom avea firewall-ul „resetat” și vom permite totul. Acum că știm cum să-l resetam, să vedem diferitele comenzi.
Vizualizați tabelele curente
Dacă doriți să vedeți conținutul diferitelor lanțuri și reguli pe care le avem într-un anumit tabel, atunci puteți vedea cum ar arăta:
- iptables -t filtru – listă
- iptables -t mangle –list
- iptables -t nat –list
- iptables -t raw –list
Principalele argumente și pentru ce sunt
- -t, –table table Selectați tabelul pe care îl dorim
- -A, –append chain rule-specification Adăugăm o nouă regulă într-un anumit lanț
- -C, –check chain rule-specification Verificăm dacă există o anumită regulă într-un anumit lanț
- -D, –delete chain rule-specification Ștergem regula pe care am pus-o într-un anumit lanț
- -D, –delete chain rulenum Ștergem regula numărul X dintr-un anumit lanț
- -I, –insert chain [rulenum] rule-specification Inserăm un lanț nou cu un număr într-un anumit tabel
- -R, –replace chain rulenum rule-specification Înlocuiește un lanț dat într-un tabel, folosit pentru a muta numărul.
- -L, –list [lanț] Afișează lista de reguli ale unui lanț
- -F, –flush [lanț] Sterge toate regulile dintr-un lanț dat.
- -Z, –zero [lanț [rulenum]] Setează contoarele unei reguli date la 0.
- -N, –new-chain chain Creăm un nou lanț într-un anumit tabel
- -X, –delete-chain [lanț] ștergem un anumit lanț (gol) dintr-un anumit tabel
- -P, –policy chain target Aplicăm politica implicită, aceasta este îndeplinită atunci când nu este îndeplinită nicio regulă a lanțurilor.
- -E, –rename-chain old-chain new-chain Redenumiți un lanț adăugat anterior
- -h, arată ajutor
- -v, –verbose Ieșire utilizată împreună cu –L, pentru a afișa mai multe informații decât oferă comanda –L.
- -n, –adresele IP numerice și numerele de porturi vor apărea ca numere. De exemplu, dacă filtrăm portul 80, va apărea tipicul –L www, și nu 80.
- -x, –exact Afișează valoarea exactă a contorului de pachete și octeți, în loc să folosiți K, M sau G pentru valori.
- –line-numbers Când se afișează lista de reguli, va afișa numărul exact al regulii. Ideal pentru a folosi –D și numărul (șterge) sau –I pentru a introduce înainte sau după regula menționată.
Condiții principale
- -p , –protocol protocol. Filtrați pachetul după protocol, protocolul specificat poate fi: tcp, udp, Idplite, icmp, esp, ah, sctp.
- -s , –source address[/mask][,…] Sursă adresa IP a pachetului. Putem avea un IP sau o subrețea (indicând masca în format CIDR). Putem pune și nume de gazdă (domenii, site-uri etc), dar este o idee proastă pentru că nu este eficient. Pot fi specificate mai multe adrese sursă, (192.168.1.1,192.168.1.2), dar va crea reguli diferite pentru a le satisface.
- -d , –adresă de destinație[/mask][,…] Adresa IP de destinație a pachetului. Se comportă exact ca -s.
- -m , –match meci. Specifică dacă dorim să apelăm modulele extinse ale iptables, pentru a efectua anumite acțiuni precum:
- Puneți mai multe porturi sursă și destinație (modul multiport).
- Conexiuni de control (modul conntrack).
- Evitați forța brută (modul recent, ideal pentru SSH).
- Limitați numărul de conexiuni (modulo limit și connlimit).
- Interval de adrese IP (iprange).
- -j , –săriți ținta. Specifică obiectivul regulii, dacă dorim să acceptăm, să refuzăm și chiar să transmitem pachetul către un alt lanț pentru un tratament ulterioar. Întotdeauna în orice regulă vom avea un -j pentru a-i spune ce vrem să facem. Dacă nu adăugăm un –j, se va adăuga regula și va număra pachetele, dar nu va face nimic. Dacă folosim -j pentru a redirecționa către alt lanț, odată ce celălalt lanț s-a terminat, acesta va reveni la original.
- -g , –goto lanț. Este folosit pentru a redirecționa traficul către un alt lanț, dar, spre deosebire de jump, nu se va întoarce la lanțul inițial în care a intrat.
- -i , –nume în interfață. Numele interfeței prin care este primit un pachet. Funcționează numai pentru șiruri de intrare precum INPUT, FORWARD și PREROUTING. Dacă punem, înseamnă totul, cu excepția acelei interfețe. Dacă punem un + la sfârșitul numelui, orice interfață cu începutul numelui o va lua pentru verificare. Să ne imaginăm eth0, eth1 și eth2. Dacă vrem să le punem pe toate trei, este suficient să punem pur și simplu eth+.
- -o , –nume în afara interfeței. Numele interfeței prin care pleacă un pachet. Este valabil numai pentru șiruri de ieșire precum OUTPUT, FORWARD și POSTROUTING.
Condiții numai dacă utilizați TCP sau UDP
Dacă utilizați protocolul TCP sau UDP, poate doriți să filtrați după numărul portului sursă și/sau destinație, atunci aveți două argumente pe care le puteți utiliza:
- –sport –sursă-port. Selectați porturile sursă pentru a permite sau a refuza. Dacă folosim! exclude.
- –dport –port-destinație. Selectați porturile de destinație pentru a permite sau a refuza. Dacă folosim! exclude.
Sunt mult mai multe condiții pentru o configurare avansată a firewall-ului, dar pe cele elementare le-am enumerat deja.
Setați politica implicită
Politicile sunt utilizate astfel încât atunci când o regulă nu este găsită în lanț, politica implicită este executată. Politica implicită pentru toate lanțurile este ACCEPT, dar există două opțiuni: ACCEPT sau DROP
-P, –ținta lanțului de politici
Exemple:
- iptables -P INPUT DROP
- iptables -P FORDARD DROP
- iptables -P OUTPUT DROP
Cu aceasta vom rămâne fără internet, așa că în continuare trebuie să începem să creăm reguli permisive.
Mai jos, puteți vedea toate politicile pe care le avem în diferitele tabele:
- iptables -t filtru -P (INTRARE | IEȘIRE | ÎNTREINTE) (ACCEPTĂ | DROP)
- iptables -P (INTRARE | IEȘIRE | ÎNTÂMPRE) (ACCEPTĂ | CĂDARE)
- iptables -t mangle -P (INTRARE | IEȘIRE | ÎNTÂMPRE | PREROUTARE | POSTRUTARE) (ACCEPTĂ | AȘEDERE)
Vedeți starea firewallului
Parametrul -L arată regulile pe care le-am configurat. V vă permite să primiți mai multe informații despre conexiuni, iar N returnează adresele IP și porturile lor corespunzătoare fără a trece printr-un DNS Server.
- iptables -L -n -v
Aceasta este una dintre cele mai importante comenzi pentru a vedea starea firewall-ului.
Modulele (-m potrivire) ale iptables
multi-port
Este o extensie a iptables care ne oferă posibilitatea de a grupa reguli similare cu diferite porturi TCP și UDP într-unul singur. Multiport vă permite să puneți mai multe porturi sărite și, de asemenea, mai multe porturi la rând, maximul fiind de 15 porturi. Exemplu:
- iptables –A INTRARE –p tcp –m multiport –dports 80,81,1000:1200 –j ACCEPT
Datorită acestui modul, avem posibilitatea de a folosi mai multe porturi în aceeași regulă.
iprange
iprange ne permite să punem mai multe adrese IP sursă sau destinație simultan, fără a fi nevoie să punem zeci de reguli. De asemenea, vă permite să puneți atât IP-ul sursă, cât și cel de destinație, sintaxa este următoarea:
- [!]–src-range ip-ip
- [!]–dst-range ip-ip
Funcționarea acestei reguli este destul de simplă, pur și simplu punem IP-ul de început și IP-ul final.
Limita
Modulul connlimit este responsabil de restrângerea numărului de conexiuni simultane realizate de o adresă IP, este ideal pentru limitarea numărului de conexiuni pentru a evita DoS.
- –connlimit-upto n . Verificăm dacă numărul de conexiuni este egal sau mai mic decât N (atunci putem permite sau refuza).
- –connlimit-asupra n . Verificăm dacă numărul de conexiuni este mai mare decât N (atunci putem permite sau refuza).
- –connlimit-mask prefix_length . Marcam după intervalul de subrețea (este la fel ca o gazdă care face 2 conexiuni, două gazde pe aceeași subrețea făcând câte 1 conexiune).
- –connlimit-saddr . Aplicați limitarea la grupul sursă, este implicit dacă nu este specificat nimic.
- –connlimit-daddr . Aplică limitarea grupului țintă.
De exemplu, să presupunem că vrem să permitem doar două conexiuni SSH per client:
- iptables -A INPUT -p tcp –dport 22 -m connlimit –connlimit-above 2 -j DROP
Cu toate acestea, putem face regula complementară, punând un accept până la 2 conexiuni.
contratrack
Acest modul este folosit pentru a urmări conexiunile, este folosit pentru a gestiona intrarea și ieșirea pachetelor înainte și după stabilirea conexiunii. În cadrul acestui modul există mai multe opțiuni, dar cea mai importantă este -ctstate care ne permite să acceptăm sau să refuzăm diferite tipuri de pachete. În cadrul ctstate avem mai multe stări, se remarcă următoarele:
- INVALID: Pachetul primit este invalid și nu aparține niciunei conexiuni.
- NOU: conexiuni noi care sunt realizate sau care sunt asociate cu o conexiune care nu este încă bidirecțională.
- STABILIT: Conexiuni stabilite, trec prin NOU mai întâi, deoarece au primit un răspuns
- RELATED: Un pachet care este legat de, dar nu face parte din, o conexiune existentă, cum ar fi FTP pasiv.
Să ne imaginăm că vrem să accesăm orice site, totuși, nu dorim ca absolut nimeni să ne acceseze.
- iptables –P INPUT DROP
- iptables -A INPUT -m conntrack –ctstate ESTABLISHED, RELATED -j ACCEPT
Limita
Modulul limită ne permite să limităm atât traficul, cât și numărul de jurnale de scris în syslog ca încercări de conectare. Are două argumente principale:
- – limita N. Acest argument specifică numărul maxim de potriviri medii pe secundă (N/s), minut (N/m), oră (N/h) sau zi (N/d) de permis. N specifică numărul
- –limit-burst N . Indică cea mai lungă explozie care poate apărea înainte de a verifica limita limită.
Valoarea implicită dacă nu este specificat nimic este de 3 potriviri pe oră, în rafale de 5. Imaginează-ți următoarea regulă: „iptables -A INPUT -m limit -j LOG”, operația este următoarea:
- Prima dată când se atinge această regulă, primele cinci pachete sunt înregistrate.
- După aceea, vor dura douăzeci de minute înainte ca un pachet să fie reînregistrat cu această regulă (3 meciuri între 60 de minute echivalează cu 20 de minute, deoarece este MEDIE).
- De asemenea, la fiecare douăzeci de minute care trec fără ca un pachet să ajungă la regulă, burst va prelua un pachet.
- Dacă nu se întâmplă nimic timp de 100 de minute, explozia va fi complet reîncărcată; apoi înapoi la situația inițială.
Recent
Modulul recent este folosit pentru a limita numărul de conexiuni pe secundă la nivel de IP, acesta este ideal pentru a ne proteja de atacurile pe portul SSH deoarece un atacator va încerca mai multe parole. De exemplu, dacă vrem să ne protejăm SSH-ul, am putea rula următoarea regulă:
- iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m recent –set –name ssh –rsource
- iptables -A INPUT -p tcp –dport 22 -m stare –state NEW -m recent –rcheck –secunde 60 –hitcount 4 –nume ssh –rsource -j DROP
Această regulă permite doar patru încercări de conectare în 60 de secunde, este o fereastră „glisantă”.
NAT
Acest firewall este, de asemenea, responsabil pentru NATing-ul conexiunii noastre. Pentru a face NAT-ul nostru IP public (sau interfața care are acest IP public), trebuie să punem:
- SNAT static: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –la IP_eth1
- SNAT dinamic: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
Lucrul normal este să folosești MASQUERADE pentru a face NAT indiferent de adresa IP pe care o are interfața fizică sau logică.
Pentru a deschide porturi trebuie să adăugați o regulă în lanțul PREROUTING din tabelul NAT.
- iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 22 -j DNAT –to-destination 192.168.1.1
Tabelul PREROUTING ne permite, de asemenea, să modificăm porturile din mers, astfel încât dacă primim pachete pe portul 2121, să îl putem transforma în 21.
- iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 2121 -j DNAT –la destinație 192.168.1.1:21
Odată ce cunoaștem acest firewall în detaliu, vom vedea exemplele de bază de utilizare și, de asemenea, pe cele mai avansate.
Exemple de utilizare de bază
Acest firewall este foarte complet și avem sute de comenzi pe care le putem executa pentru a efectua diferite acțiuni. În acest articol vă vom oferi câteva exemple ușor de înțeles pentru o primă abordare a acestui firewall.
Blocați adresa IP 192.168.1.10 de la orice comunicare cu serverul nostru:
- iptables -A INPUT –s 192.168.1.10 –j DROP
Blocați adresele IP 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 de la comunicarea cu serverul nostru:
- iptables -A INPUT –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP
Blocați întreaga subrețea 192.168.2.0/24 să nu comunice cu serverul nostru, cu excepția adresei IP 192.168.2.20, care ar fi permisă:
- iptables –A INPUT –s 192.168.2.20 –j ACCEPT
- iptables –A INPUT –s 192.168.2.0/24 –j DROP
Blocați adresa IP a 192.168.4.50, astfel încât să nu putem face nicio comunicare:
- iptables –A OUTPUT –d 192.168.4.50 –j DROP
Blocați adresele IP 192.168.4.51 și 192.168.4.52, astfel încât să nu putem face nicio comunicare:
- iptables –A OUTPUT –d 192.168.4.51,192.168.4.52 –j DROP
Blocați accesul la www.google.es de la iptables:
- iptables –A OUTPUT –d www.google.es –j DROP
Dorim să blocăm accesul la serverul nostru de la MAC 00:01:02:03:04:05, iar restul permite totul:
- iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j DROP
Dorim să permitem accesul la serverul nostru la adresa MAC MAC 00:01:02:03:04:06, iar restul neagă totul:
- iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j ACCEPT
iptables -A INPUT -j DROP
Blocați adresa IP 192.168.1.10 pentru ping de pe serverul nostru:
- iptables -A INPUT -s 192.168.1.10 -p icmp -j DROP
Blocați adresele IP 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 de la PING pe serverul nostru (într-o singură regulă):
- iptables -A INPUT -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP
Blocați întreaga subrețea 192.168.2.0/24, astfel încât să nu facă PING la serverul nostru, cu excepția adresei IP 192.168.2.20, care ar fi permisă:
- iptables -A INPUT -s 192.168.2.20 -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -p icmp -j DROP
Blocați adresa IP a 192.168.4.50, astfel încât să nu o putem pune ping.
- iptables -A OUTPUT -d 192.168.4.50 -p icmp -j DROP
Blocați adresele IP 192.168.4.51 și 192.168.4.52, astfel încât să nu le putem trimite ping.
- iptables -A OUTPUT -d 192.168.4.51,192.168.4.52 -p icmp -j DROP
Blocați accesul la www.google.es din iptables.
- iptables -A OUTPUT -d www.google.es -p icmp -j DROP
După cum puteți vedea, operațiunea este destul de simplă cu regulile bazate pe IP cu origine și destinație. De asemenea, am putea folosi modulul iprange pentru a configura o serie de IP-uri:
Blocați o gamă de adrese IP de la 192.168.5.1 la 192.168.5.50 pentru a nu putea face ping de pe serverul nostru.
- iptables -A OUTPUT -m iprange –dst-range 192.168.5.1-192.168.5.50 -p icmp -j DROP
De asemenea, putem filtra protocolul ICMP într-un mod mai avansat. Să ne imaginăm că avem un utilizator care dorește să poată face ping oricărei gazde, dar nu vrea ca NIMENI să-l poată ping. Cum putem face asta cu iptables dacă PING în sine are comunicare bidirecțională?
- iptables -A INPUT -s IP -p icmp –icmp-type echo-request -j DROP
Blocați orice acces de intrare prin interfața eth0 (numai), permițând astfel accesul eth1.
- iptables -A INPUT -i eth0 -j DROP
- iptables -A INTRARE -i eth1 -j ACCEPT
Blocați traficul de ieșire pe interfața eth0 (numai), permițând astfel accesul eth1.
- iptables -A OUTPUT -o eth0 -j DROP
- iptables -A IEȘIRE -o eth1 -j ACCEPT
Permiteți orice trafic de intrare și de ieșire pe eth0 și refuzați orice trafic de intrare sau de ieșire pe eth1.
- iptables -A INTRARE -i eth0 -j ACCEPT
- iptables -A IEȘIRE -o eth0 -j ACCEPT
- iptables -A INPUT -i eth1 -j DROP
- iptables -A OUTPUT -o eth1 -j DROP
Dacă doriți să începeți să vedeți cum funcționează protocolul TCP și UDP, iată câteva exemple:
Blocați accesul web la www.google.es și permiteți orice altceva (ping), de exemplu.
- iptables -A OUTPUT -d www.google.es -p tcp –dport 80 -j DROP
Blocați accesul FTP la orice IP sau domeniu și permiteți orice altceva.
- iptables -A IEȘIRE -p tcp –dport 21 -j DROP
Blocați accesul SSH la IP 192.168.1.50 și permiteți orice altceva.
- iptables -A IEȘIRE -d 192.168.1.50 -p tcp –dport 22 -j DROP
Blocați accesul Telnet la subrețeaua 192.168.2.0 și permiteți orice altceva.
- iptables -A IEȘIRE -d 192.168.2.0/24 -p tcp –dport 23 -j DROP
Blocați accesul 192.168.1.50 la serverul nostru web.
- iptables -A INPUT -s 192.168.1.50 -p tcp –dport 80 -j DROP
Blocați accesul 192.168.1.150 și 192.168.1.151 la serverul nostru SSH.
- iptables -A INPUT -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP
Blocați accesul întregii subrețele 192.168.2.0/24 la serviciul nostru telnet
- iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 23 -j DROP
Blocați accesul tuturor la serverul OpenVPN, cu excepția adresei IP 77.77.77.77, care este permisă.
- iptables -A INPUT -s 77.77.77.77 -p tcp –dport 1194 -j ACCEPT
- iptables -A INPUT -p tcp –dport 1194 -j DROP
Blocați accesul DNS la 8.8.8.8 și permiteți orice altceva (ping), de exemplu.
- iptables -A IEȘIRE -d 8.8.8.8 -p tcp –dport 53 -j DROP
- iptables -A IEȘIRE -d 8.8.8.8 -p udp –dport 53 -j DROP
Blocați accesul la portul 1194 la orice IP sau domeniu și permiteți orice altceva.
- iptables -A INPUT -p udp –dport 1194 -j DROP
Avem un server DNS pe serverul nostru. Dorim ca numai computerele de pe subrețeaua 192.168.1.0/24 să poată comunica cu aceasta și să blocheze orice alt acces.
- iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 53 -j ACCEPT
- iptables -A INPUT -s 192.168.1.0/24 -p udp –dport 53 -j ACCEPT
- iptables -A INPUT -p tcp –dport 53 -j DROP
- iptables -A INPUT -p udp –dport 53 -j DROP
Blocați accesul la serverul nostru web, din intervalul IP 192.168.100.0/24, provenind din interfața eth0.
- iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p tcp –dport 80 -j DROP
Blocați accesul la serverul nostru ssh, din intervalul IP 192.168.100.0/24, provenind din interfața eth1.
- iptables -A INPUT -s 192.168.100.0/24 -i eth1 -p tcp –dport 22 -j DROP
Exemple avansate de utilizare
Dacă doriți să aflați mai multe despre iptables, iată câteva exemple în care folosim modulul connlimit.
Permiteți doar 10 conexiuni Telnet per client.
- iptables -A INPUT -p tcp –dport 23 -m connlimit –connlimit-peste 10 –connlimit-mask 32 -j DROP
Refuza pana la conexiunea numarul 5 de pe web facuta de un client (nu prea are sens dar este un exemplu).
- iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-upto 5 –connlimit-mask 32 -j DROP
Permiteți doar 10 conexiuni Telnet per client (faceți-o altfel decât mai sus).
- iptables -A INTRARE -p tcp –dport 23 -m connlimit –connlimit-upto 10 –connlimit-mask 32 -j ACCEPT
- iptables -A INPUT -p tcp –dport 23 -j DROP
Permiteți doar 10 conexiuni web în intervalul 10.0.0.0/8 IP și refuzați dacă depășește acest număr.
- iptables -A INPUT -s 10.0.0.0/8 -p tcp –dport 80 -m connlimit –connlimit-peste 10 –connlimit-mask 8 -j DROP
Permiteți doar 20 de conexiuni HTTP pentru fiecare client, imediat ce este depășit trimitem o resetare TCP.
- iptables -A INPUT -p tcp –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset
Sau astfel:
- iptables -A INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 32 -j REJECT –reject-with tcp-reset
După cum puteți vedea, acest firewall este cu adevărat complet și putem face o mulțime de configurații foarte avansate, pentru a controla toate conexiunile de intrare și de ieșire în detaliu.