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

Iptables trec la o anumită adresă. E-mail și mesaje instant

Un mic script inițial (reguli, iptables faq) pentru un desktop sau un server simplu. În acest caz, exemple de lucru cu porturile unuia sau altuia software care rulează pe computerul dvs. Măsurile de securitate trebuie respectate pe orice computer. Mitul că Linux este mai sigur nu este adevărat, totul depinde de mâinile stângace ale administratorului. Există sisteme Windows bine protejate, precum și sisteme Linux care sunt deschise aproape oricui. Prin urmare, ar trebui să vă gândiți încă puțin la protecția rețelei computerului dvs. Mai jos sunt adăugate câteva reguli iptables care ar putea fi utile la început.

În mod specific, a înlocuit $ IPT cu / sbin / iptables, dacă cineva are nevoie de o singură regulă pentru a nu schimba nimic - doar copiați și executați. Desigur, există încă puține reguli aici, nu există VPN-uri diferite etc., dacă doriți, adăugați.

Aceste linii pot fi copiate în întregime în orice script și doar executați-l. Pentru cazuri obișnuite, acest lucru este suficient. Dacă vreo aplicație nu poate intra online, înregistrarea a fost adăugată special. Doar deschideți tail -f / var / log / syslog (sau al dumneavoastră dacă nu este Ubuntu) și urmăriți! Dacă aveți întrebări, adăugați-le în discuție, o vom rezolva împreună.

PS Pe lângă aceste reguli, gândiți-vă ce să luați din articolul Optimizare TCP.

Cum să eliminați o regulă în iptables

Postat de Alexey Ubozhenko

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.

Blog de administrare a sistemului. Articole despre Linux, Windows, stocarea NetApp și virtualizare.

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 postarea despre instalarea și configurarea OpenVPN;
  • 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:

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:

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 -A INPUT! -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. Steagul -sport indică portul din care a fost trimis pachetul, iar -dport indică portul de destinație:

iptables -A INTRARE -p tcp -sport80-j ACCEPT
iptables -A INTRARE -p tcp -dport80-j ACCEPT

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

iptables -I INTRARE...

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

iptables-save> /etc/iptables.rules

Restabiliți regulile:

iptables-restore

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 (nodul1, 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:

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:

iptables -A INPUT -m multiport \
-p tcp —dports81: 65535! -s 127.0.0.0/8-j DROP

Aceasta utilizează extensia multiport pentru a specifica intervalele de porturi.

Verificăm dacă totul funcționează. Dacă OK, salvați regulile:

iptables-save> /etc/iptables.rules

Pentru a prelua regulile la pornirea sistemului, creați un fișier nou /etc/network/if-pre-up.d/iptables:

iptables-restoreieșire0

...si spunem:

chmod + x /etc/network/if-pre-up.d/iptables

Această metodă a fost verificată pentru a funcționa pe Ubuntu 14.04 LTS.

Ar trebui să funcționeze și Debian. Puteți găsi o descriere a unei modalități alternative de a restabili regulile firewall la pornirea sistemului în articolul deja menționat despre OpenVPN.

Resurse suplimentare pentru cei care doresc să afle mai multe despre Netfilter:

Cum configurezi firewall-urile pe serverele tale?

Etichete: Linux, Securitate, Rețele.

Utilitarul de linie de comandă iptables este folosit pentru a configura firewall-ul netfilter încorporat într-un sistem bazat pe kernel Linux.

Acest manual este potrivit atât pentru manechinilor care doresc să înțeleagă aspectele securității rețelei, cât și specialiștilor cu experiență ca o foaie de cheat.

Principiul de setare

Sintaxa generală pentru utilizarea iptables este:

iptables -t<таблица> <команда> <цепочка>[cameră]<условие> <действие>

<таблица>

Regulile Netfilter sunt distribuite pe 4 tabele, fiecare având propriul său scop (mai multe detalii mai jos). Este specificat cu tasta -t, dar dacă acest parametru nu este specificat, acțiunea va fi efectuată pentru tabelul implicit - filtru.

<команда>

Comenzile indică ce fel de acțiune facem pe netfilter, de exemplu, creați sau ștergeți o regulă.

<цепочка>

Fiecare tabel are lanțuri, pentru fiecare dintre acestea fiind create regulile în sine. De exemplu, pentru tabelul de filtrare de mai sus, există trei lanțuri predefinite - INPUT (pachete de intrare), OUTPUT (ieșire) și FORWARD (tranzit).

[cameră]

Unele comenzi necesită specificarea unui număr de regulă, de exemplu, pentru ștergere sau editare.

<условие>

O condiție descrie criteriile pentru procesarea unei anumite reguli.

<действие>

Ei bine, de fapt, ce facem cu pachetul dacă se încadrează în criteriile condiției.

* Pentru a fi corect, merită remarcat faptul că tasta de acțiune nu trebuie să ajungă la sfârșit. Doar că acest format se găsește cel mai des în instrucțiuni și facilitează citirea regulilor.

Chei Iptables și exemple de utilizare a acestora

Pentru lucrul cu tabele (iptables -t)

Ca o reamintire, toate regulile din netfilter sunt răspândite pe tabele. Pentru a lucra cu un anumit tabel, trebuie să utilizați comutatorul -t.

Comenzi

Următoarele chei determină ce face utilitarul iptables.

Cheie Descriere și exemple
-A Adăugarea unei reguli la sfârșitul listei:
iptables -A INPUT -s 192.168.0.15 -j DROP
refuza venitul din 192.168.0.15.
-D Eliminarea unei reguli:
iptables -D INTRARE 10
ștergeți regula din lanțul INPUT numerotat 10.
-Eu Inserarea unei reguli într-o anumită parte a listei:
iptables -I INPUT 5 -s 192.168.0.15 -j DROP
introduceți regula a 5-a pe listă.
-R Înlocuirea regulii.
iptables -R IEȘIRE 5 -s 192.168.0.15 -j ACCEPT
înlocuiți a 5-a regulă de la interzicere la permisivă.
-F Curățarea regulilor din lanț.
iptables -F INPUT
-Z Resetarea statisticilor.
iptables -Z INPUT
-N Crearea lanțului.
iptables -N CHAINNEW
-X Ștergerea unui lanț.
iptables -X CHAINNEW
-P Definirea unei reguli implicite.
iptables -P INPUT DROP
-E Redenumiți lanțul.
iptables -E CHAINNEW CHAINOLD

Condiții

Aceste chei definesc condițiile regulii.

Cheie Descriere și exemple
-p Protocol de rețea. Opțiunile valide sunt TCP, UDP, ICMP sau ALL.
iptables -A INTRARE -p tcp -j ACCEPT
permiteți toate conexiunile TCP de intrare.
-s Adresă sursă - nume de gazdă, adresă IP sau subrețea în notație CIDR.
iptables -A INPUT -s 192.168.0.50 -j DROP
refuza intrarea de la gazda 192.168.0.50
-d Adresa de destinatie. Principiul de utilizare este similar cu comutatorul -s anterior.
iptables -A OUTPUT -d 192.168.0.50 -j DROP
refuza trimiterea către gazdă 192.168.0.50
-i Adaptorul de rețea prin care sunt primite pachetele (INPUT).
iptables -A INPUT -i eth2 -j DROP
refuză intrarea pentru interfața ethernet eth2.
-o Adaptor de rețea de la care pleacă pachetele (OUTPUT).
iptables -A IEȘIRE -o eth3 -j ACCEPT
permite ieșirea de la interfața ethernet eth3.
— Dport Portul de destinație.
iptables -A INTRARE -p tcp -dport 80 -j ACCEPT
permite intrarea pe portul 80.
— Sportul Port sursă.
iptables -A INPUT -p tcp -sport 1023 -j DROP
refuza intrarea din portul 1023.

Cheile enumerate susțin și construcția folosind semnul ! .

Configurarea netfilter cu iptables

Acesta inversează starea, de exemplu
iptables -A INPUT -s! 192.168.0.50 -j DROP
va refuza conexiunea la toate gazdele, cu excepția 192.168.0.50.

Acțiuni

Acțiuni care trebuie efectuate pe un pachet care corespunde criteriilor condiției. Fiecare tabel are propriul său set de acțiuni valide. Specificat folosind o cheie -j.

masa Acțiune Descriere
filtru ACCEPT Rezolvă pachetul.
CĂDERE BRUSCA Respinge pachetul.
RESPINGE Împiedică trimiterea mesajului către sursă.
nat MASCARADĂ Pentru pachetele de ieșire, înlocuiește adresa IP sursă cu adresa interfeței din care pleacă pachetul.
SNAT Similar cu MASQUERADE, dar specificând o interfață de rețea specifică, a cărei adresă va fi folosită pentru falsificare.
DNAT Falsificarea adreselor pentru pachetele primite.
REDIRECŢIONA Redirecționează cererea către un alt port pe același sistem.
calandru TOS Modificarea câmpului TOS (prioritizarea traficului).
DSCP Modificare DSCP (de asemenea, prioritizarea traficului).
TTL Modificați TTL (durata de viață a pachetului).
HL Similar cu TTL, dar pentru IPv6.
MARCĂ Marcarea pachetului. Folosit pentru filtrarea sau modelarea ulterioară.
CONNMARK Marcarea conexiunii.
TCPMSS Modificarea valorii MTU.

Exemple de comenzi iptables utilizate în mod obișnuit

Comenzi comune

Vedeți regulile cu numerele lor:

iptables -L —numere-linii

Pentru fiecare tabel, trebuie să vă uitați la regulile separat:

iptables -t nat -L --line-numbers

Eliminați toate regulile:

Setați regulile implicite:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

* în aceste exemple, implicit, pentru toate pachetele de intrare (INPUT) și de ieșire (OUTPUT), regula de refuzare (DROP) va funcționa.

Permite Toate

Metoda 1. Prin adăugarea unei reguli:

iptables -I INTRARE 1 -j ACCEPT

iptables -I IEȘIRE 1 -j ACCEPT

iptables -I FORWARD 1 -j ACCEPT

* aceste trei comenzi vor crea reguli care permit toate pachetele de intrare, de ieșire și de tranzit.

Metoda 2. Prin curățarea regulilor:

* aici eliminăm mai întâi toate regulile (-F), apoi setăm politica implicită - permiteți intrarea, ieșirea și tranzitul (-S).

Metoda 3. Dezactivarea serviciului (este convenabil să dezactivați firewall-ul pentru un timp pentru diagnosticarea problemelor):

Lucrul cu reguli

Adăugați o regulă la sfârșitul listei:

iptables -A INTRARE -p tcp -dport 25 -j ACCEPT

iptables -A INPUT -p tcp -s! 192.168.0.25 —dport 993 -i eth0 -j ACCEPT

Adăugați intervalul de porturi:

iptables -A INPUT -p tcp -dport 3000: 4000 -j ACCEPT

* în acest caz, de la 3000 la 4000.

Inserați regula:

iptables -I FORWARD 15 -p udp -d 8.8.8.8 -dport 53 -i eth1 -j ACCEPT

Port forwarding

Există două moduri de configurare.

1. Reguli PRERUTARE + POSTRUTARE:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —la destinație 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 —sport 2222 -j SNAT —la sursă 19.8.232.80:22

* Unde 19.8.232.80 - adresa la care ascultam cererile de conectare; 22 - port pentru expediere; 192.168.1.15 2222 - port intern.

2. Reguli de PRE-RUTARE + FORWARD:

iptables -t nat -A PREROUTING -p tcp -i eth1 —dport 22 -j DNAT —la destinație 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m stare —state NOU, STABILIT, RELATED -j ACCEPT

* Unde et1- interfata de retea pe care ascultam cereri; 22 - port pentru expediere; 192.168.1.15 - adresa IP internă, către care transferăm toate solicitările; 2222 - port intern.

Se începe configurarea

Permite SSH:

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

Am stabilit politica de interzicere a intrării și de a permite toate ieșirile:

iptables -P ACCEPT IEȘIRE

Creați o regulă pentru ca apt-get să funcționeze corect:

iptables -A INPUT -p tcp —sport 80 -m stare —state ESTABLISHED -j ACCEPT

Permite ICMP (pentru comanda ping):

iptables -A INTRARE -p icmp -j ACCEPT

Reguli de salvare (permanente)

În mod implicit, toate regulile nu mai funcționează după repornirea rețelei sau a computerului. Există mai multe moduri de a configura regulile pentru a păstra regulile după o repornire.

Metoda 1.iptables-salvare

Salvăm regulile într-un fișier:

iptables-save> /etc/iptables.rules

Deschideți setările de rețea:

vi / etc / rețea / interfețe

si adauga linia:

pre-up iptables-restore< /etc/iptables.rules

Metoda 2.iptables-persistent

Instalați pachetul iptables-persistent:

apt install iptables-persistent

Pentru a salva regulile, introduceți comanda:

service iptables-salvare persistentă

Metoda 3.serviciu iptables

Funcționează pe versiuni mai vechi de Linux:

Metoda 4.iptables.init

Funcționează pe CentOS:

/usr/libexec/iptables/iptables.init salvare

Ubuntu și CentOS

Nu există iptables în mod implicit pe sistemele de operare moderne Ubuntu și CentOS.

Trebuie să îl instalați sau să utilizați utilitare mai noi.

Pe CentOS

Firewall-cmd este folosit ca program standard de gestionare a paravanului de protecție. Pentru mai multe detalii, citiți instrucțiunea Cum să configurați firewalld pe CentOS.

Dacă trebuie să utilizați iptables, instalați pachetul de utilitate:

yum instalează iptables-services

Dezactivați firewalld:

systemctl opri firewalld

systemctl dezactivează firewalld

Activem și rulăm iptables:

systemctl activa iptables

În Ubuntu

Ufw este acum folosit pentru a gestiona firewall-ul.

Pentru a lucra cu iptables, instalați următorul pachet:

apt-get install iptables-persistent

Dezactivați ufw:

# Rețea # Securitate # UNIX # Ubuntu # Linux

Ți-a fost de ajutor acest tutorial?

Dincolo de zidul de foc:
FIREWALL (FIREWALL) ȘI INTERNET GATEWAY
DEBIAN GNU / LINUX 4.0 ETCH

Un ghid practic pentru organizarea accesului securizat la Internet
de pe un computer separat și dintr-o rețea locală în Debian GNU / Linux 4.0 Etch
Un pic de teorie

Fiecare conexiune la Internet nu numai că face posibilă conectarea la diverse servere și site-uri, dar creează și un potențial pericol de pătrundere în computerul nostru din exterior. Acest pericol nu trebuie neglijat, deoarece majoritatea încercărilor de acces neautorizat la computerele utilizatorilor de pe Internet fac astăzi parte dintr-o afacere criminală bine organizată. După compromiterea cu succes a sistemului dvs., aceștia vor încerca să vă folosească computerul fie pentru a trimite spam, fie pentru a organiza atacuri DoS pe alte computere sau în orice alte scopuri nefaste. Neglijarea acestui pericol, în cel mai bun caz, vă va crește costurile de trafic și vă va încetini performanța computerului; în cel mai rău caz, vă poate implica fără să știți în activitățile criminale ale grupurilor cibernetice.

Situația este agravată de faptul că în unele sisteme de operare (încă) răspândite, multe porturi sunt lăsate deschise implicit, ceea ce permite unui atacator să se conecteze de la Internet la utilizator fără ca acesta din urmă să fie conștient.

Pentru a preveni conexiunile neautorizate din exterior și pentru a filtra traficul de intrare/ieșire în sistemul de operare, trebuie utilizat un program special - firewall(Firewall englezesc), cunoscut și sub numele firewallși firewall... Mai jos este un exemplu simplu de configurare a unui firewall într-un sistem de operare gratuit. Debian GNU / Linux 4.0.

Utilizarea unui firewall devine deosebit de relevantă dacă aveți mai multe computere, dar rețea de acasă sau de birou ale căror computere intră online.

Chiar și o mică rețea locală trebuie organizată corespunzător. Să presupunem că aveți un punct de acces la Internet de mare viteză (de exemplu, un modem ADSL) cu o interfață Ethernet (adică de rețea).

Există o tentație (încălzită de recomandări analfabete, cum ar fi, de exemplu, în instrucțiunile pentru modemul meu ADSL) de a conecta modemul direct la comutator și apoi de a conecta la comutator toate calculatoare ale rețelei locale. În acest caz, modemul emite în mod dinamic adrese IP locale prin intermediul comutatorului, dar se dovedește că fiecare computer rămâne singur cu Internetul! Nici un modem, nici un comutator nu pot deveni un obstacol pentru un nedoritor. Un atacator poate scana toate calculatoare ale unei rețele locale organizate în acest fel.

Soluția logică și sigură este crearea barierăîntre modem și rețeaua locală - sub forma unui computer separat cu un „firewall” (firewall) configurat pe acesta. Acest computer are două interfețe - una „se uită” la Internet (adică este conectată fizic la modem), cealaltă este direcționată către rețeaua locală (și este conectată fizic la comutatorul la care sunt și celelalte computere). conectat). Deoarece computerul nostru cu un firewall este acum un punct nodal pentru alte computere pentru a accesa Internetul, se mai numește poarta de acces(gateway engleză).

Cu o astfel de organizare a rețelei locale, probabilitatea de hacking este redusă semnificativ - un atacator „vede” doar poarta de acces de pe Internet, iar un firewall este instalat pe gateway și nu este ușor să-l piratați.

Configurarea iptables pe Linux pentru manechini

Calculatoarele din rețeaua locală pot naviga pe internet și pot rămâne relativ sigure.

Configurarea unui firewall folosind configuratorul arno-iptables-firewall

Pentru a organiza un firewall în GNU/Linux se foloseste programul iptables, care, de regulă, este instalat imediat la instalarea majorității distribuțiilor. V Debian GNU/Linux puteți verifica acest lucru rulând cu drepturi de administrator aptitudini... Dacă este necesar, instalați iptables.

Cu toate acestea, configurare manuală iptables este o sarcină nebanală și poate fi realizată doar de specialiști în domeniul administrării sistemului. Prin urmare, pentru a configura regulile după care va funcționa firewall-ul, este mai bine să utilizați configurator special... V Debian GNU/Linux Acest program arno-iptables-firewall... La lansare, pune o serie de întrebări, pe baza cărora generează reguli de funcționare a firewall-ului. iptables.

Introducem în consola cu drepturi de superutilizator:

#aptitude instalează arno-iptables-firewall

La începutul instalării, programul ne va întreba dacă vrem cu adevărat să configuram firewall-ul cu acesta. iptables:

În primul rând, trebuie să specificați interfața externă - „căutând” pe Internet, adică. conectat la modem. Setările interfeței sunt definite în fișierul de configurare / etc / rețea / interfețe... De exemplu, poate arăta astfel:

# Aceasta este interfața lo - indică către mașina noastră în sine. auto lo iface lo inet loopback address 127.0.0.1 netmask 255.0.0.0 # Aceasta este interfața eth0, care este conectată la Internet (modem ADSL) # Particularitatea sa este că adresa IP îi este atribuită dinamic de către ISP, # deci opțiunea dhcp auto eth0 este setată iface eth0 inet dhcp # Aceasta este interfața care face față rețelei locale # Adresa rețelei locale va fi 192.168.2.0/24 # Din motive de securitate în rețeaua locală, gateway-ul are o adresă IP statică - 192.168.2.1, # prin urmare opțiunea statică este setată # Net mask - 255.255.255.0 # Adresa de difuzare a rețelei în acest caz va fi 192.168.2.255 auto eth1 iface eth1 inet adresa statică 192.168.2.1 netmask 25.25.255.25.

Deci, uitându-mă la setări / etc / rețea / interfețe, indicăm configuratorului firewall că interfața noastră externă este eth0:

Când este întrebat dacă furnizorul ne oferă o adresă IP dinamic(folosind DHCP), răspundem afirmativ:

Următoarea întrebare este ce servicii vor fi furnizate de pe computerul nostru utilizatorilor externi de internet. Nu avem niciunul! Nu suntem angajați în găzduire web profesională și nu intenționăm să distribuim informații în exterior. Lăsăm linia goală.

Apoi vine întrebarea dacă vom oferi servicii prin UDP. De asemenea, nu - și, de asemenea, lăsați linia goală!

Trebuie să fim ping din lumea exterioară (adică să verificăm dacă există o conexiune cu computerul pe care este instalat firewall-ul)? În cazul nostru, acest lucru este perfect acceptabil:

Aceasta completează configurația pentru un computer individual care nu este un gateway LAN. Dacă intenționăm să folosim computerul ca gateway, mai trebuie să răspundem la câteva întrebări. Indicăm interfața cu care gateway-ul se confruntă cu rețeaua locală - în cazul nostru este et1 după cum este evident din / etc / rețea / interfețe(în caz contrar, pentru un computer „singuratic”, lăsați acest câmp necompletat):

Când a fost întrebat dacă se permite traducerea NAT, de ex. redirecționând traficul de pe Internet prin gateway către rețeaua locală și invers, răspundem „da” - aceasta este una dintre sarcinile noastre principale în acest caz:

Atunci apare întrebarea: ce segment al rețelei locale poate fi admis prin redirecționare către rețele externe? Toate calculatoarele din rețeaua locală au dreptul de a accesa Internetul; setați din nou valoarea 192.168.2.0/24

În sfârșit, ne confirmăm dorința de lansare iptables fără verificare suplimentară din partea noastră a regulilor firewall generate automat de către configurator:

După aceea, dacă totul a mers bine, se afișează un mesaj similar cu cel de mai jos. Va apărea acum la fiecare pornire a computerului gateway și va informa despre lansarea cu succes a paravanului de protecție:

Scriptul Arno Iptables Firewall v1.8.8c —————————————————————————- Verificările de sănătate au trecut... OK Modulul IPTABLES detectat...

Se încarcă module IPTABLES suplimentare: Toate modulele IPTABLES au fost încărcate! Configurare / proc /…. setări: Activarea anti-spoof cu rp_filter Activarea protecției SYN-flood prin SYN-cookies Dezactivarea înregistrării marțienilor Dezactivarea acceptării mesajelor de redirecționare ICMP Setarea max. Numărul de conexiuni simultane la 16384 Activarea protecției împotriva pachetelor direcționate sursă Setarea intervalelor de timp implicite pentru conntrack Activarea reducerii capacității de DoS Setarea TTL implicit = 64 Dezactivarea ECN (Notificare explicită de congestie) Activarea suportului pentru tabelul/proc/setarea rutei de spălare a IP-ului dinamic. .. Spălarea regulilor din tabelul de filtrare Setarea politicilor implicite (securizate) Utilizarea „informației” la nivel de jurnal pentru syslogd Configurarea regulilor firewall: ———————————————————————— —— - Acceptarea pachetelor de la dispozitivul de loopback local. Activarea setarii dimensiunii maxime a pachetului prin MSS. Activarea manipularii TOS Înregistrarea scanărilor ascunse (sonde nmap etc.) activată Înregistrarea pachetelor cu semnale TCP proaste activată Înregistrarea pachetelor INVALIDE dezactivată Înregistrarea pachetelor fragmentate activat Înregistrarea accesului de la adresele rezervate activat Configurarea regulilor anti-spoof Citirea regulilor IPTABLES personalizate din / etc / arno-iptables-firewall / regulile personalizate Încărcarea pluginurilor (utilizatorului) Configurarea politicii INPUT pentru rețeaua externă (INET): Ena Suport bling pentru un IP alocat DHCP pe interfața (e) externă: eth0 Înregistrarea gazdelor blocate în mod explicit activată Înregistrarea conexiunilor de ieșire locale refuzate activată Pachetele NU vor fi verificate pentru adresele surselor private Permițând întregii lumi să trimită solicitări ICMP (ping) Înregistrare de pachete de solicitare ICMP (ping) abandonate activată Înregistrarea altor pachete ICMP abandonate activată Înregistrarea posibilelor scanări ascunse activată Înregistrarea (alte) încercări de conectare la porturi TCP PRIVILEGATE activată Înregistrarea (alte) încercări de conexiune la porturile UDP PRIVILEGATE activată Înregistrarea ( altele) încercări de conectare la porturi TCP NEPRIVILEGATE activate Înregistrarea (alte) încercări de conectare la porturi UDP NEPRIVILEGATE activată Înregistrarea altor protocoale IP (non TCP / UDP / ICMP) încercări de conexiune activată Înregistrarea inundațiilor ICMP activată Aplicarea politicii INET la exterior (INET) interfață: eth0 (fără o subrețea externă specificată) Configurarea politicii INPUT pentru interfața (e) internă (LAN): eth1 Permiterea solicitărilor ICMP (ping) A permiterea tuturor (alte) protocoale Configurarea politicii FORWARD pentru interfața (e) internă (LAN): eth1 Înregistrarea conexiunilor LAN-> INET FORWARD refuzate activată Configurarea politicii LAN-> INET: Permiterea solicitărilor ICMP (ping) Permiterea tuturor (altele) ) protocoale Activarea mascării (NAT) prin interfață (interfețe) externă (e): eth0 Adăugarea gazdei (interne): 192. 168.2.0 / 24 Securitatea este APLICATĂ pentru interfețele externe din lanțul FORWARD 16 ianuarie 23:53:12 Se aplică toate regulile firewall.

Nota 1.În cele mai multe cazuri, lansarea cu succes a firewall-ului are loc după prima comunicare cu configuratorul. Dacă ceva nu funcționează, se recomandă insistent să repetați configurația pornind din nou configuratorul cu drepturi de superutilizator:

# dpkg-reconfigure arno-iptables-firewall

Acest lucru va elimina o eroare ocazională care ar putea apărea atunci când răspundeți la întrebările configuratorului în timpul primei experiențe cu acesta. Dacă nici acest lucru nu ajută, puteți încerca să corectați manual fișierul de configurare al programului. arno-iptables-firewall, și anume: /etc/arno-iptables-firewall/firewall.conf... Poate fi util să vizitați site-ul principal al creatorului acestui program la http://rocky.eld.leidenuniv.nl/. Conține un manual foarte informativ pentru lucrul cu programul, un FAQ interesant și, în plus, există informații despre noile versiuni ale programului.

Nota 2. Nu uita asta nici unul un firewall nu poate oferi o garanție de 100% a securității unui computer pe Internet. Cu toate acestea, nu puteți neglija protecția firewall. Trebuie să facem tot ce ne stă în putere pentru a ne baza apoi pe mila lui Dumnezeu. „Dacă Domnul nu păzește cetatea, veghea este în zadar”(Ps. 126:1).

Sursa articolului

Am scris o postare pe blog despre regulile de bază Iptables pentru utilizatorul care lucrează cu mult timp în urmă și probabil ar trebui să o citiți și articolul aferent despre firewall-ul Stateful.

Dar pre-kernel-ul 2.6.39 (care include și îl puteți folosi pentru IP lista albă dacă aveți mai mult de 10 pentru lista albă (unde 10 este arbitrar)).

Configurarea iptables pentru manechine

Prima stare de mâner pe care știm că vrem să o acceptăm sau să o eliminăm și interfețele.

Dacă doriți doar să permiteți numai IP, apatrid

este mai probabil să întâmpinați probleme cu acest lucru și vă sugerez să folosiți starea pentru a vă ușura viața. De exemplu, nu se rezolvă și cu siguranță va cauza probleme pentru anumite aplicații.

Sarcina principală firewall(firewall) filtrarea și procesarea pachetelor care trec prin rețea. Când se analizează un pachet de intrare, firewall-ul decide soarta acestui pachet: aruncați pachetul ( CĂDERE BRUSCA), acceptați pachetul ( ACCEPT) sau faceți altceva cu el.

V Linux firewall-ul este un modul kernel numit netfilter și este un set de cârlige pentru lucrul cu stiva de rețea. Interfața pentru modificarea regulilor prin care firewall-ul procesează pachetele este utilitarul iptables pentru IPv4 și utilitate ip6tables pentru IPv6.

Toate lucrările de filtrare a traficului sunt efectuate de nucleul sistemului. Iptables nu este un demon și nu creează procese noi în sistem. Porniți sau opriți iptables este doar trimite un semnal către nucleu. Viteza mare de filtrare se realizează prin analizarea numai a antetelor pachetelor.

La principalele caracteristici iptables raporta:

  • filtrarea traficului pe baza adreselor expeditorului și destinatarului pachetelor, numere de port;
  • redirecționarea pachetelor în funcție de anumiți parametri;
  • organizarea accesului la rețea (SNAT);
  • port forwarding de la rețeaua globală la rețeaua locală (DNAT);
  • limitarea numărului de conexiuni;
  • stabilirea cotelor de trafic;
  • executarea regulilor conform programului;

Să luăm în considerare procesul principal de lucru iptables(sursa imaginii rigacci.org).

Pachetul primit ajunge mai întâi la dispozitivul de rețea, după care este interceptat de driver și transmis către nucleu. După aceea, pachetul este trecut printr-un număr de tabele și abia apoi este transmis către aplicația locală sau redirecționat către alt sistem, dacă este un pachet de tranzit.

V iptables se folosesc trei tipuri de tabele:

  1. calandru- folosit pentru a face modificări la antetul pachetului;
  2. nat- folosit pentru traducerea adreselor de rețea;
  3. filtru- pentru a filtra traficul;

Masa Mangle

Scopul principal al tabelului calandru- efectuarea de modificări la antetul pachetului. În acest tabel, pot fi efectuate următoarele acțiuni:

  • setarea bitului tip de serviciu;
  • setarea câmpului Time To Live;
  • stabilirea unei etichete pe un pachet care poate fi verificată în alte reguli;

Lanțuri în masă calandru:

  • PRERUUTARE- folosit pentru a face modificări la pachetele de la intrarea în iptables, înainte de a decide despre rutare;
  • POSTRUTARE- folosit pentru a face modificări la pachete la ieșirea din iptables, după ce a decis rutarea;
  • INTRARE- este folosit pentru a face modificări la pachete înainte ca acestea să fie transferate în aplicația locală;
  • IEȘIRE- folosit pentru modificarea pachetelor provenite din aplicație în interiorul iptables;
  • REDIRECŢIONA- folosit pentru a face modificări la pachetele de tranzit;

Masa Nat

Tabelul este utilizat pentru traducerea adresei de rețea și atunci când se întâlnește un pachet pentru a stabili o nouă conexiune. În acest tabel, pot fi efectuate următoarele acțiuni:

  • DNAT (Traducerea adresei rețelei de destinație)- conversia adresei de destinație în antetul pachetului;
  • SNAT (Source Network Address Translation)- schimbarea adresei sursă a pachetului;
  • MASCARADĂ- folosit în aceleași scopuri ca și SNAT dar vă permite să lucrați cu adrese IP dinamice;

Lanțuri din acest tabel:

  • PRERUUTARE- este folosit pentru a face modificări la pachete la intrarea în iptables;
  • IEȘIRE- folosit pentru a traduce adrese în pachete înainte de rutarea ulterioară;
  • POSTRUTARE- folosit pentru a converti pachete înainte de a le trimite în rețea;

Tabel de filtrare

Tabelul este folosit pentru filtrarea pachetelor. Există trei lanțuri în acest tabel:

  1. INTRARE- lanț pentru pachetele primite;
  2. REDIRECŢIONA- lanț pentru pachetele redirecționate (de tranzit);
  3. IEȘIRE- lanț pentru pachete de ieșire;

Un pachet care trece prin aceste lanțuri poate fi supus unor acțiuni: ACCEPT, CĂDERE BRUSCA, RESPINGE, BUTURUGA.

Pentru a rezuma, pachetul care ajunge trece prin lanțul de reguli. Fiecare regulă conține condițieși scop(acțiune). Dacă pachetul îndeplinește condiția, atunci este trimis către țintă, în caz contrar, următoarea regulă din lanț este aplicată pachetului. Dacă pachetul nu îndeplinește niciuna dintre condițiile din lanț, atunci i se aplică acțiunea implicită.

Lanţ masa
filtru nat calandru
INTRARE + +
REDIRECŢIONA + +
IEȘIRE + + +
PRERUUTARE + +
POSTRUTARE + +

Utilitar Iptables

Instalarea iptables

# pentru Arch Linux yaourt -S iptables # Pentru Ubuntu sudo apt-get install iptables

Rularea iptables

# sub Arch Linux sudo systemctl enable iptables sudo systemctl start iptables # Sub Ubuntu sudo service iptables start

Reguli de salvare

# pentru Arch Linux sudo sh -c "iptables-save> /etc/iptables/iptables.rules" # pentru Ubuntu sudo sh -c "iptables-save> /etc/iptables.rules"

Restaurarea regulilor dintr-un fișier

Iptables-restaurare< firewall-config

Fiecare regulă în iptables este o linie separată formată după anumite reguli și care conține criterii și acțiuni. În termeni generali, regula are următorul format:

Comanda Iptables [-t table].

  • t table - specifică numele tabelului pentru care va fi creată regula;
  • comandă - o comandă care definește o acțiune iptables- adăugați o regulă, ștergeți o regulă etc.;
  • potrivire - stabilește criteriile de testare prin care se stabilește dacă un pachet este supus regulii sau nu;
  • țintă / săritură - ce acțiune trebuie efectuată atunci când criteriul este îndeplinit;

Comenzi Iptables:

  • -A - adăugați o regulă la lanț, regula va fi adăugată la capătul lanțului;
  • -D - scoateți rigula din lanț;
  • -R - înlocuiește o regulă cu alta;
  • -I - introduceți o nouă regulă în lanț;
  • -L - afișează lista de reguli din lanțul specificat;
  • -F - șterge toate regulile din lanțul specificat;
  • -Z - resetează toate contoarele din lanțul specificat;
  • -N - creează un lanț nou cu numele specificat;
  • -X - șterge lanțul;
  • -P - setează politica implicită pentru lanț;
  • -E - redenumiți lanțul de utilizatori;

Exemple de comenzi Iptables

Pachetele pot fi filtrate după următorii parametri:

Sursa pachetului

Opțiunea -s este folosită pentru a filtra după sursă. De exemplu, vom refuza toate pachetele primite de la gazda 192.168.1.95:

Iptables -A INPUT -s 192.168.1.95 -j DROP

Puteți utiliza un nume de domeniu pentru a specifica adresa gazdei:

Iptables -A INPUT -s test.host.net -j DROP

De asemenea, puteți specifica întregul pentru rețea:

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

Puteți folosi și negația (semnul!). De exemplu, toate pachetele de la gazde altele decât 192.168.1.96 vor fi șterse:

Iptables -O INTRARE! -s 192.168.1.96 -j DROP

Permite traficului să circule pe localhost:

Iptables -A INTRARE 1 -i lo -j ACCEPT

Înregistrarea încercărilor de falsificare cu prefixul „IP_SPOOF A:” și întreruperea conexiunii

Iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix „IP_SPOOF A:” iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Adresa de destinatie

Pentru a face acest lucru, trebuie să utilizați opțiunea -d. De exemplu, vom refuza toate pachetele de ieșire către gazda 192.168.1.95:

Iptables -A OUTPUT -d 192.168.156.156 -j DROP

Interziceți accesul la resursă

Iptables -A OUTPUT -d vk.com -j REJECT

Ca și în cazul sursei pachetului, puteți utiliza adrese pentru rețele și nume de domenii. Negarea funcționează și.

Protocol

Opțiunea -p indică protocolul. Poate fi utilizat toate, icmp, tcp, udp sau numărul de protocol (de la / etc / protocoale).

Permiteți solicitările de ecou primite

Iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Port sursă

Permiteți toate pachetele de ieșire din portul 80:

Iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Blocați toate solicitările primite pe portul 80:

Iptables -A INPUT -p tcp --dport 80 -j DROP

Pentru a specifica portul, trebuie să specificați protocolul (tcp sau udp). Negația poate fi folosită.

Deschideți intervalul de porturi

Iptables -A INPUT -m stare --state NOU -m tcp -p tcp --dport 7000: 7010 -j ACCEPT

Portul de destinație

Permite conexiuni HTTP

Iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

Permiterea primirii datelor de la serverul DHCP

Iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT

  • la distanta exploatarea erorilor software pentru a-l face inoperant;
  • Potop- trimiterea unui număr mare de pachete fără sens la adresa victimei. Ținta inundației poate fi un canal de comunicare sau resurse ale mașinii. În primul caz, fluxul de pachete ocupă întreaga lățime de bandă și nu oferă mașinii atacate capacitatea de a procesa cereri legitime. În al doilea, resursele mașinii sunt captate folosind apeluri multiple și foarte frecvente către orice serviciu care efectuează o operațiune complexă, care necesită mult resurse. Acesta poate fi, de exemplu, un apel lung la una dintre componentele active (script) ale serverului web. Serverul cheltuiește toate resursele mașinii pentru a procesa cererile atacatorului, iar utilizatorii trebuie să aștepte. Flood poate fi diferit: ICMP flood, SYN flood, UDP flood și HTTP flood

Colectarea de informații despre conexiunile la rețea

Vedeți conexiunile deschise

Netstat -ntu | awk „(tipărește 5 $)” | tăiat -d: -f1 | sortare | uniq -c | sortare -n

Numărul de conexiuni la portul 80

Netstat -na | grep ": 80 \" | wc -l

Dump conexiune TCP (la care domeniu merg cel mai des cererile)

Domeniul portului Tcpdump -npi eth0

Inundațiile SYN pot fi verificate prin numărarea numărului de conexiuni TCP pe jumătate deschise

Netstat -na | grep ": 80" | grep SYN_RCVD

Protecție împotriva diferitelor tipuri de inundații.

Inundație ICMP. O metodă foarte primitivă de a înfunda lățimea de bandă și de a crea încărcări pe stiva de rețea prin trimiterea monotonă a solicitărilor ICMP ECHO (ping). Este ușor de detectat analizând fluxul de trafic în ambele sensuri: în timpul unui atac de inundații ICMP, acestea sunt aproape identice. O modalitate aproape nedureroasă de protecție absolută se bazează pe dezactivarea răspunsurilor la solicitările ICMP ECHO:

Sysctl net.ipv4.icmp_echo_ignore_all = 1

Sau folosind iptabels:

Iptables -A INPUT -p icmp -j DROP --icmp-type 8

SYN inundație. Una dintre modalitățile comune nu numai de a înfunda canalul de comunicație, ci și de a pune stiva de rețea a sistemului de operare într-o stare în care nu mai poate accepta noi solicitări de conectare. Bazat pe o încercare de a inițializa un număr mare de conexiuni TCP concurente prin trimiterea unui pachet SYN cu o adresă de retur inexistentă. După mai multe încercări de a trimite un pachet de răspuns ACK la o adresă inaccesibilă, majoritatea sistemelor de operare vor pune în coadă conexiunea nestabilită. Și numai după a n-a încercare conexiunea este închisă. Deoarece fluxul de pachete ACK este foarte mare, în curând coada este plină și nucleul refuză să încerce să deschidă o nouă conexiune. Cei mai inteligenți roboți DoS analizează, de asemenea, sistemul înainte de a începe un atac pentru a trimite cereri doar pentru a deschide porturi vitale. Este ușor să identifici un astfel de atac: încearcă doar să te conectezi la unul dintre servicii.

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, de înainte 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 -A FORWARD criterii -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
Parametrii
--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!

Linux are un firewall încorporat numit Netfilter. Conform site-ului oficial al proiectului:

netfilter este o colecție de mesaje de sistem din nucleul Linux care permite modulelor nucleului să înregistreze funcții de apel invers din stiva de rețea. Funcția de apel invers înregistrat procesează fiecare pachet care trece prin stiva de rețea.

Firewall-ul din Linux este controlat de iptables, care are funcționalitate de filtrare IPv4, ip6tables filtre IPv6. Acest tutorial explică cum să înveți cum să folosești Netfilter (iptables) pe CentOS / RHEL / Fedora / Redhat Enterprise Linux. Acest articol oferă exemple de bază de configurare a iptables în Linux pentru a proteja împotriva intruziunilor.

Exemple de utilizare a iptables

  • Majoritatea acțiunilor enumerate în acest articol sunt scrise cu presupunerea că vor fi executate ca root din bash sau din orice alt shell modern. Nu introduceți comenzi pe sistemul de la distanță, deoarece puteți dezactiva accesul pentru dvs.
  • În scopuri demonstrative, am folosit ubuntu 10.04, dar comenzile ar trebui să funcționeze cu orice distribuție modernă.
Afișarea stării firewall-ului dvs
Introdu următoarea comandă ca root:
# iptables -L -n -v
Un exemplu de răspuns:
Lanț INPUT (politică ACCEPT 0 pachete, 0 octeți) pkts octeți target prot opt ​​in out sursă destinație Chain FORWARD (politică ACCEPT 0 pachete, 0 octeți) pkts bytes target prot opt ​​in out sursă destinație Chain OUTPUT (politica ACCEPT 0) pachete, 0 octeți ) pkts octeți țintă prot opt ​​in out destinație sursă
Acest răspuns înseamnă că firewall-ul nu este activ.
Și, de exemplu, acest lucru va arăta că firewall-ul în Linux este activ:

INTRARE în lanț (politică ACCEPT pachete 1810K, 126M octeți) pkts octeți țintă protecție opt in out destinație sursă 7418K 1070M ACCEPT udp - * * 0.0.0.0/0 0.0.0.0/0 udp dpt: 1194 tcp 801 ACCEPT 800M 0.0.0.0/0 0.0.0.0/0 tcp dpt: 2222 steaguri: 0x17 / 0x02 state NEW Chain FORWARD (politica ACCEPT 5628K pachete, 482M bytes) pkts bytes target prot opt ​​in out source destination 0 0 eth0 t cp 0 - ACCEPT 0.0 .0.0 / 0 0.0.0.0/0 tcp dpt: 1111 stare NOU, RELATIV, INSTALAT 599K 539M ACCEPT udp - eth0 * 0.0.0.0/0 10.1.1.6 udp dpt: STARE 11111.1.6 PUBLICITATE PUBLICAT, INSTABILIT 4959K pachete, 880M bytes) pkts bytes target prot opt ​​in out source destination
Tastele din exemplu înseamnă:

  • L: Enumerați regulile.
  • v: Afișează informații detaliate. Această tastă va afișa numele interfeței, parametrii regulii și măștile TOS. În listă vor fi afișate și contoarele de pachete și octeți, cu un sufix „K”, „M” sau „G” în funcție de multiplicatorul necesar.
  • n: Nu rezolvați adrese IP, afișați în format digital. Accelerează retragerea.
Adăugați comutatorul --line-numbers pentru a vedea regulile cu numere de linie, de exemplu:
# iptables -n -L -v --line-numbers
Pentru a vedea regulile de INTRARE sau IEȘIRE, tastați:
# iptables -L INPUT -n -v # iptables -L OUTPUT -n -v --line-numbers
Opriți, reporniți, porniți firewall
Dacă aveți CentOS / RHEL / Fedora Linux, introduceți:
# service iptables stop # service iptables start # service iptables restart
Pentru a curăța regulile iptables cu propriile mijloace, introduceți:
# iptables -F # iptables -X # iptables -t nat -F # iptables -t nat -X # iptables -t mangle -F # iptables -t mangle -X # iptables -P ACCEPT INTRARE # iptables -P ACCEPT IEȘIRE # iptables -P ÎNTÂMPRE ACCEPT
Tastele din exemplu înseamnă:
  • F: Șterge toate regulile (flushing).
  • X: Ștergeți un lanț
  • t <таблица>: Selectați tabelul și ștergeți regulile.
  • P: setați politica implicită (cum ar fi DROP, REJECT sau ACCEPT).
Eliminarea regulilor de firewall
Pentru a afișa numărul liniei împreună cu alte informații pentru regulile existente, introduceți:
# iptables -L OUTPUT -n --line-numbers # iptables -L OUTPUT -n --line-numbers | mai puțin # iptables -L OUTPUT -n --line-numbers | grep 8.8.8.8
Veți primi o listă de IP-uri. Uită-te la numărul din stânga și introduceți numărul pentru a-l șterge. De exemplu, pentru a șterge rândul numărul 4, introduceți:
# iptables -D INTRARE 4
Sau găsiți sursa IP 202.54.1.1 și eliminați-o din regulă:
# iptables -D INPUT -s 202.54.1.1 -j DROP
Cheia din exemplu înseamnă:
  • D: eliminați una sau mai multe reguli din lanțul specificat
Adăugarea regulilor de firewall
Pentru a insera una sau mai multe reguli într-un lanț specificat, se utilizează în general următoarea sintaxă. Mai întâi aflați numărul liniei:
# iptables -L INPUT -n --line-numbers
Ieșire de exemplu:
Lanț INPUT (policy DROP) num target prot opt ​​​​sursă destinație 1 DROP all - 202.54.1.1 0.0.0.0/0 2 ACCEPT all - 0.0.0.0/0 0.0.0.0/0 stare NOU, STABILIT
Pentru a introduce o regulă între 1 și 2, introduceți:
# iptables -I INTRARE 2 -s 8.8.8.8 -j DROP
Pentru a vedea regulile actualizate, introduceți:
# iptables -L INPUT -n --line-numbers
Ieșire de exemplu:
Lanț INPUT (policy DROP) num target prot opt ​​​​sursă destinație 1 DROP all - 202.54.1.1 0.0.0.0/0 2 DROP all - 8.8.8.8 0.0.0.0/0 3 ACCEPT all - 0.0.0.0/0 0.0. 0.0 / 0 stare NOU, INFIINTAT
Salvarea regulilor firewall
Pentru a salva regulile firewall pe CentOS / RHEL / Fedora Linux, introduceți:
# service iptables salvare
Pe alte distribuții
iptables-save> /root/my.active.firewall.rules
sau
iptables-salvare
Restabilirea regulilor de firewall
Pentru a restabili regulile firewall din fișierul /root/my.active.firewall.rules, introduceți:
# iptables-restore< /root/my.active.firewall.rules
Pentru a restabili regulile firewall pe CentOS / RHEL / Fedora Linux, introduceți:
# service iptables repornește
Setarea politicilor de firewall implicite
Blocați tot traficul:
# iptables -P INPUT DROP # iptables -P OUTPUT DROP # iptables -P FORWARD DROP # iptables -L -v -n
Blocați numai traficul de intrare:
# iptables -P INTRARE DROP # iptables -P FORWARD DROP # iptables -P IEȘIRE ACCEPT
Blocarea adreselor de rețea ale unei rețele locale pe o interfață externă
IP spoofing este un atac care folosește adresa IP a gazdei în care are încredere în pachetele IP trimise victimei ca adresă de retur. Pachetele cu adrese sursă care nu sunt rutabile ar trebui să fie aruncate folosind următoarea sintaxă:
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Interval de adrese IPv4 pentru rețelele private (asigurați-vă că sunt blocate pe interfața exterioară)
  • 10.0.0.0/8 -j (A)
  • 172.16.0.0/12 (B)
  • 192.168.0.0/16 ©
  • 224.0.0.0/4 (MULTICAST D)
  • 240.0.0.0/5 (E)
  • 127.0.0.0/8 (LOOPBACK)
blocare IP
Pentru a bloca adresa IP 1.2.3.4, introduceți:
# iptables -A INPUT -s 1.2.3.4 -j DROP
Blocarea cererilor de porturi de intrare
Pentru a bloca toate cererile de pe portul 80, introduceți:
# iptables -A INPUT -p tcp --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Pentru a bloca portul 80 numai pentru IP 1.2.3.4, introduceți:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
Blocare IP de ieșire
Pentru a bloca traficul de ieșire de la o anumită gazdă sau domeniu, cum ar fi un site web, introduceți:
gazdă -t un site
Raspunsul ar fi:
site-ul are adresa 95.211.41.31
Notați adresa dvs. IP și introduceți următoarea comandă pentru a bloca tot traficul de ieșire de la 95.211.41.31:
# iptables -A OUTPUT -d 95.211.41.31 -j DROP
Puteți folosi măști:
# iptables -A OUTPUT -d 192.168.1.0/24 -j DROP # iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP
De asemenea, puteți utiliza un nume de domeniu, introduceți:
# iptables -A OUTPUT -p tcp -d www..ru -j DROP
Deși documentația spune că utilizarea unui nume de domeniu în loc de IP nu este recomandată.
Înregistrarea și blocarea pachetelor
Introduceți următoarea comandă pentru a vă înregistra și a bloca falsificarea IP pe interfața publică numită eth1:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix „IP_SPOOF A:” # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
În mod implicit, totul este înregistrat într-un fișier. / var / jurnal / mesaje.

Comentariu de la:

Este mai bine să nu faceți acest lucru, mai ales pentru traficul clar pe stânga. LOG poate fi introdus doar strict cu limita -m, altfel orice atac DoS va fi de multe ori mai eficient: de fapt, indirect, atacatorul primește o cale directă cu impact intens direct asupra sistemului de fișiere al serverului.
Cum se face corect este scris mai jos
Înregistrarea și blocarea pachetelor cu un număr limitat de intrări de jurnal
Opțiunea -m poate limita numărul de intrări de jurnal create pe unitatea de timp. Acesta este folosit pentru a preveni inundarea fișierelor jurnal. Pentru a înregistra cel mult 7 înregistrări în 5 minute, introduceți:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5 / m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A:" # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Blocați sau permiteți traficul de la o adresă Mac
Utilizați următoarea sintaxă:
# iptables -A INPUT -m mac --mac-source 00: 19: 99: 3C: AB: 23 -j DROP ## * acceptă numai trafic pentru portul TCP # 8080 de la mac 00: 19: 99: 3C: AB: 22 * ## # iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00: 19: 99: 3C: AB: 22 -j ACCEPT
Respinge sau permite solicitări ping ICMP
Introduceți următoarea comandă pentru a bloca solicitările ICMP:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Răspunsurile ping pot fi, de asemenea, limitate la anumite rețele sau gazde:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
Următorul exemplu acceptă doar un tip limitat de solicitare ICMP:
### ** a presupus că politica implicită INPUT setată la DROP ** ############## iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT ## ** tot serverul nostru să răspundă la ping-uri ** ## iptables - O INTRARE -p icmp --icmp-type echo-request -j ACCEPT
Deschiderea unei game de adrese IP
Utilizați următoarea sintaxă pentru a deschide o serie de adrese IP:
## acceptă conexiunea la portul tcp 80 (Apache) dacă ip este între 192.168.1.100 și 192.168.1.200 ## iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.1. 192.168.1.200 -j ACCEPT
## exemplu nat ## iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25
Închiderea sau deschiderea porturilor publice
Mai jos este sintaxa pentru deschiderea și închiderea porturilor comune TCP și UDP:
Înlocuiți ACCEPT cu DROP pentru a bloca portul: ## port deschis ssh tcp port 22 ## iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168. 1.0 / 24 -m stare --state NOU -p tcp --dport 22 -j ACCEPT ## open cups (serviciu de imprimare) udp / tcp portul 631 pentru utilizatorii LAN ## iptables -A INPUT -s 192.168.1.0/24 - p udp -m udp --dport 631 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT ## permite sincronizarea timpului prin NTP pentru utilizatorii lan (deschideți portul udp) 123) ## iptables -A INPUT -s 192.168.1.0/24 -m stare --state NOU -p udp --dport 123 -j ACCEPT ## deschide portul tcp 25 (smtp) pentru toate ## iptables -A INPUT - m stat --state NOU -p tcp --dport 25 -j ACCEPT # deschide porturile serverului dns pentru toate ## iptables -A INPUT -m stare --state NOU -p udp --dport 53 -j ACCEPT iptables -A INPUT -m stare --state NOU -p tcp --dport 53 -j ACCEPT ## deschide portul de server http / https (Apache) la toate ## iptables -A INTRARE -m stare --state NOU -p tcp --dport 80 -j ACCEPT iptables -A INTRARE -m stare --state NOU -p tcp --dport 443 -j ACCEPT ## deschide portul tcp 110 (pop3) pentru toate ## iptables -A INPUT -m stare --state NOU -p tcp --dport 110 -j ACCEPT ## deschide portul tcp 143 (imap) pentru toate ## iptables -A INPUT -m state --state NOU -p tcp --dport 143 -j ACCEPT ## acces deschis la serverul de fișiere Samba numai pentru utilizatorii de lansare ## iptables -A INPUT -s 192.168.1.0/24 -m stare --state NOU -p tcp --dport 137 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m stare --state NOU -p tcp - dport 138 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m stare --state NOU -p tcp --dport 139 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m stare --state NOU -p tcp --dport 445 -j ACCEPT ## acces deschis la serverul proxy numai pentru utilizatorii de lansare ## iptables -A INPUT -s 192.168.1.0/24 -m state --state NOU -p tcp --dport 3128 - j ACCEPT ## acces deschis la serverul mysql numai pentru utilizatorii de lansare ## iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Limitați numărul de conexiuni simultane la server pentru fiecare client prin IP
Puteți utiliza modulul connlimit pentru a plasa astfel de restricții. Pentru a limita cel mult 3 conexiuni SSH per gazdă, introduceți:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Setați solicitările HTTP la 20:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Parametrii din exemplu,
  • --connlimit-above 3: dacă numărul de conexiuni existente este peste 3.
  • --connlimit-mask 24: Grupați gazde de

Definiție iptables- utilitar de linie de comandă, este o interfață standard pentru gestionarea funcționării unui firewall (firewall) netfilter pentru nucleele Linux 2.4, 2.6, 3.x, 4.x. Utilitarul iptables necesită privilegii de superutilizator (rădăcină).

ne vom ocupa de iptablesși nu te poți lipsi de o mică introducere teoretică.

Pentru a elabora corect regulile de firewall, trebuie să înțelegeți cum merg pachetele în general și ce se întâmplă cu ele.

Ordinea de circulație a coletelor de tranzit

Etapa masa Lanţ Notă
1
2 calandru PRERUUTARE De obicei, acest șir este folosit pentru a face modificări la antetul pachetului, de exemplu pentru a schimba biții TOS etc..
3 nat PRERUUTARE Acest lanț este folosit pentru a traduce adresele de rețea ( ). este executat ulterior într-un lanț diferit.
4 Luarea unei decizii cu privire la rutarea ulterioară, de ex. în acest moment, se decide unde va merge pachetul - către o aplicație locală sau către un alt nod din rețea.
5 calandru REDIRECŢIONA Apoi pachetul intră în lanț REDIRECŢIONA mese mangle.
6 Filtru REDIRECŢIONA Într-un lanț REDIRECŢIONA se primesc doar acele pachete care merg la o altă gazdă. Aici trebuie efectuată toate filtrarea traficului de tranzit. Nu uitați că traficul trece prin acest lanț în ambele sensuri, asigurați-vă că țineți cont de această circumstanță atunci când scrieți regulile de filtrare.
7 calandru POSTRUTARE Acest lanț este destinat să facă modificări la antetul pachetului după ce a fost luată ultima decizie de rutare.
9 nat POSTRUTARE Acest lanț este destinat în primul rând Traducere adrese de rețea sursă... Masquerading este, de asemenea, efectuat aici ( Mascarada).
9 Interfață de rețea de ieșire (de exemplu eth1).

Pentru aplicație locală (pachete primite)

Etapa masa Lanţ Notă
1 Interfață de rețea de intrare (de exemplu, eth0)
2 calandru PRERUUTARE De obicei, folosit pentru a face modificări la antetul pachetului, de exemplu pentru a seta biți TOS etc.
3 nat PRERUUTARE Traducerea adresei ( Traducerea adresei rețelei de destinație).
4 Decideți despre rutare.
5 calandru INTRARE Pachetul intră în lanț INTRARE mese mangle. Aici se fac modificările antetului pachetului înainte de a fi transmis aplicației locale.
6 filtru INTRARE Aici este filtrat traficul de intrare. Amintiți-vă că toate pachetele primite adresate nouă trec prin acest lanț, indiferent de interfața de unde provin.
7 Proces/aplicație locală (adică, program server sau program client)

Din procesele locale (pachete de ieșire)

Etapa masa Lanţ Notă
1 Proces local (adică, program server sau program client).
2 Decideți despre rutare. Aici se decide unde va merge pachetul - la ce adresă, prin ce interfață de rețea etc.
3 calandru IEȘIRE Aici faceți modificări la antetul pachetului. Efectuarea filtrării în acest lanț poate avea consecințe negative.
4 nat IEȘIRE Acest lanț este utilizat pentru traducerea adresei de rețea (NAT) în pachete care provin din procesele firewall locale.
5 Filtru IEȘIRE Traficul de ieșire este filtrat aici.
6 calandru POSTRUTARE Lanţ POSTRUTARE Tabelele Mangle sunt utilizate în principal pentru reguli care trebuie să facă modificări la antetul pachetului înainte de a părăsi firewall-ul, dar după ce a fost luată o decizie de rutare. Acest lanț conține toate pachetele, atât cele de tranzit, cât și cele create de procesele firewall locale.
7 nat POSTRUTARE Aici se executa Traducere adrese de rețea sursă... Evitați filtrarea pachetelor în acest lanț pentru a evita efectele secundare nedorite. Cu toate acestea, puteți opri pachetele și aici, aplicând politica implicită. CĂDERE BRUSCA.
8 Interfață de rețea (de exemplu, eth0)

După cum înțelegem, există trei tabele principale:

  • calandru- Acest tabel este destinat operațiunilor de clasificare și marcare a pachetelor și conexiunilor, precum și modificarea antetelor pachetelor (câmpurile TTL și TOS).
  • filtru- tabelul principal pentru filtrarea pachetelor, utilizat implicit. De fapt, în acest tabel, are loc filtrarea pachetelor.
  • nat- Oferă nat pentru a funcționa dacă doriți să utilizați computerul ca router. Regulile de rutare sunt stabilite aici.

Pentru masa nat acțiuni aplicabile:

  • MASCARADĂ

Acțiune DNAT(Destination Network Address Translation) traduce adresele de destinație în antetele pachetelor. Cu alte cuvinte, această acțiune redirecționează pachetele către alte adrese decât cele specificate în antetele pachetelor.

SNAT(Source Network Address Translation) este utilizat pentru a schimba adresele sursă ale pachetelor. Cu această acțiune, partajați o singură adresă IP externă între computerele din rețeaua locală pentru a accesa Internetul. În acest caz, firewall-ul folosește SNAT, realizează automat traducerea adreselor înainte și inversă, făcând astfel posibilă conectarea la servere de pe Internet de pe computere din rețeaua locală.

Deghizare ( MASCARADĂ) este folosit în aceleași scopuri ca SNAT, dar spre deosebire de acesta din urmă, MASCARADĂ pune o sarcină mai mare asupra sistemului. Acest lucru se întâmplă deoarece de fiecare dată când este necesară această acțiune, se solicită o adresă IP pentru interfața de rețea specificată în acțiune, în timp ce pentru SNAT Adresa IP este indicată direct. Totuși, datorită acestei diferențe, MASCARADĂ poate funcționa în cazurile cu o adresă IP dinamică, de ex. când vă conectați la internet, spuneți prin PPP, ALUNECARE sau DHCP.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

A executa MASCARADĂ pentru toate pachetele care vin din rețeaua 10.8.0.0 către interfața eth0. Pentru claritate, să presupunem că avem două plăci de rețea și două rețele. Avem nevoie de o rețea 10.8.0.0/24 (prima placă de rețea) ar putea ajunge, să zicem, la Internet prin eth0 ( a doua placă de rețea)

  • brut- Proiectat pentru a efectua acțiuni cu pachetele înainte ca acestea să fie procesate de sistem.

Tabelul implicit în sine filtru.

  • INTRARE- gestionează traficul care merge direct la gazdă în sine.
  • REDIRECŢIONA- vă permite să filtrați traficul de tranzit.
  • IEȘIRE- vă permite să filtrați traficul care provine de la gazdă în sine.

Acțiune asupra unui pachet.

  • ACCEPT- sări peste pachet. Pachetul părăsește lanțul de bază curent și continuă.
  • RESPINGE- blocați coletul și informați sursa acestuia despre refuz.
  • CĂDERE BRUSCA- blocați coletul fără a informa sursa despre refuz. Este mai de preferat atunci când se filtrează traficul pe interfețele conectate la Internet, deoarece scade conținutul de informații al scanării porturi gazdă de către atacatori.
  • BUTURUGA- scrieți o înregistrare despre pachet în fișierul jurnal.

Se pare că avem un lanț [tabel - filtru] - [trafic - INTRARE] - [acțiune - DROP] Logica acțiunilor pare doar complicată. Cred că ne vom da seama cu exemple și totul va deveni simplu.

Comenzi Iptables:

  • -A adăugați o regulă la capătul lanțului.
  • -D elimina regula.
  • -Eu introduceți regula cu numărul dorit.
  • -L tipăriți toate regulile din lanțul curent.
  • -S deduce toate regulile.
  • -Fșterge toate regulile.
  • -N creați un lanț.
  • -Xștergeți lanțul.
  • -P setați acțiunea implicită.

Să începem să înțelegem cu exemple specifice.

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

-A adăugați o nouă regulă, INTRARE pentru pachetele primite, -p protocol, unul dintre tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp,
mh, - - dport portul de destinație 80 (opțiune numai pentru protocol), -j alegeți o acțiune dacă regula se potrivește, ACCEPT permite. Adică, permiteți traficul tcp de intrare pe portul 80.

Cheile enumerate susțin și construcția folosind semnul ! . Acesta inversează condiția, de exemplu:

iptables -A INPUT -s! 192.168.0.50 -j DROP

-s adresa sursă - nume de gazdă (www.help.com), adresa IP sau subrețea în notație CIDR (192.168.0.1/16), ! inversie, CĂDERE BRUSCA interzice. Respinge tot traficul de intrare, cu excepția sursei 192.168.0.50 (daca nu ar fi ! , apoi respinge doar de la 192.168.0.50)

iptables -A INPUT -s 192.168.0.50 -j DROP

Interzice traficul de intrare de la ip - 192.168.0.50 .

Lista criteriilor regulilor:

  • -p Protocol, protocol pot fi specificate și folosind un număr sau un nume conform listei date în / etc / protocoale. Orice protocol poate fi specificat folosind cuvântul all sau numărul 0. Există, de asemenea, parametri suplimentari pentru protocol.: — Sportul(—sursă-port) Vă permite să specificați portul de ieșire (sau intervalul acestora). — Dport(-Portul de destinație) Vă permite să specificați portul de destinație (sau intervalul acestora).
  • -s Specifică adresa expeditorului. Adresa poate fi o adresă IP (eventual cu mască), un nume de domeniu (în ultimele două cazuri, înainte de a adăuga o regulă în lanț, numele este rezolvat într-o adresă IP).
  • -i Specifică interfața de rețea de intrare. Dacă numele interfeței specificat se termină cu „+” (de exemplu, eth +), atunci toate interfețele ale căror nume încep cu numele specificat (etho, eth1) corespund criteriilor.
  • -d Specifică adresa destinatarului. Sintaxa este aceeași -s .
  • -o Definește interfața de rețea de ieșire. Sintaxa este aceeași -i.

Aceleași criterii pot fi combinate.

iptables -A INPUT -i eth0 -s 192 .168.0.0 -j DROP

Respinge pachetele primite de la interfață eth0și ip 192 .168.0.0... Și pe interfață et1 pachetele vor trece prin.

Ce-ar fi dacă tu devreme nu știi ce port să deschizi, de exemplu, doriți ca serverul FTP să funcționeze în modul pasiv. Modul contratrack despre starea conexiunii va ajuta, și mai precis criteriul - ctstate. Modulul este conectat prin etichetă -m.

iptables -A INPUT -m conntrack -ctstate STABILIT, RELATED -j ACCEPT

iptables -A INPUT -m conntrack —ctstate NOU -p tcp —dport 21 -j ACCEPT # Permiteți deschiderea conexiunilor pe portul TCP 21.

Stări posibile:

  • NOU- conexiunea nu este deschisă, adică pachetul este primul din conexiune.
  • STABILIT- pachetul se referă la o conexiune deja stabilită. De obicei, astfel de pachete sunt primite fără filtrare suplimentară, așa cum este cazul RELATED.
  • LEGATE DE- pachetul deschide o nouă conexiune care este logic legată de cele deja stabilite, de exemplu, deschiderea unui canal de date în modul FTP pasiv. Conexiunea devine stare LEGATE DE dacă este asociat cu un alt compus care are atributul STABILIT.
  • INVALID- Indicatorul INVALID înseamnă că pachetul nu poate fi identificat și, prin urmare, nu poate avea o anumită stare.

iptables -A INPUT -m stare -stare STABILIT, RELATED -j ACCEPT

S tate iar predecesorul deologic al conntrack, are un singur parametru --state, care este similar cu parametrul --ctstate al modulului conntrack (dar, spre deosebire de acesta, nu acceptă stările DNAT și SNAT).

Să aruncăm o privire rapidă la tabelul de impozitare, care poate fi găsit în fișierul / proc / net / ip_conntrack. Acesta conține o listă a tuturor conexiunilor active.

Tcp 6 300 STABILIT src = 128. *. *. * Dst = 194. *. *. * Sport = 52524 dport = 2223 src = 194. *. *. * Dst = 128. *. *. * Sport = 2223 dport = 52524 marcaj = 0 utilizare = 2

Primul, după cum este clar, este protocolul, apoi numărul zecimal (ceea ce înseamnă că nu știu), apoi durata de viață a conexiunii. Mai departe, statul este STABILIT, adică conexiunea a fost deja stabilită, se întâmplă și FĂRĂ RĂSPUNS, ceea ce înseamnă că nu a existat încă trafic de răspuns. Urmează adresele expeditorului și destinatarului, portul expeditorului și destinatarului. Mai mult, este adevărat opusul, respectiv, ASIGURAT acest flag indică faptul că conexiunea este stabilită cu încredere și această înregistrare nu va fi ștearsă atunci când este atins numărul maxim posibil de conexiuni urmărite.

Câteva caracteristici ale protocoalelor.

O conexiune TCP se stabilește întotdeauna prin transmiterea a trei pachete, care inițializează și stabilesc o conexiune prin care datele vor fi transmise în viitor. Sesiunea începe cu transmiterea SYN pachet, ca răspuns la care este transmis SYN / ACK pachet și confirmați stabilirea pachetului de conexiune ACK .

De îndată ce urmăritorul a văzut primul ( SYN), apoi îi atribuie statutul NOU... De îndată ce al doilea pachet ( SYN / ACK), atunci conexiunii i se atribuie starea STABILIT.

Cu protocolul UDP, totul este puțin diferit, acest protocol nu prevede stabilirea și închiderea unei conexiuni, dar cel mai mare dezavantaj este lipsa de informații despre ordinea de sosire a pachetelor. Dar din punctul de vedere al trasorului, totul este la fel ca la TCP. Primului pachet care sosește i se atribuie statutul NOU. Imediat ce trimiteți pachetul de răspuns, starea este atribuită STABILIT. Singura diferență este că statutul ASSURED este atribuit doar atunci când mai multe pachete au fost deja schimbate.

Înregistrarea aplicațiilor de reguli.

iptables vă oferă posibilitatea de a înregistra pachete și evenimente individuale. Pentru aceasta se aplică acțiunea BUTURUGA.

iptables -A INPUT -p tcp —syn -j LOG —informații la nivel de jurnal —prefix-log „pachete INPUT”

— La nivel de jurnal Folosit pentru a seta nivelul jurnalului. Pentru o listă completă de niveluri, consultați manualul syslog.conf. De obicei, se pot seta următoarele niveluri: depanare, info, înștiințare, avertizare, a avertiza, a greșit, eroare, crit, alerta, emergși panică... Jurnalele sunt scrise într-un fișier syslog.

— Prefix de jurnal Tasta setează textul (prefixul) care va fi folosit înaintea tuturor mesajelor iptables... Mesajele cu un prefix specific pot fi apoi găsite cu ușurință, de exemplu, folosind grep... Prefixul poate avea până la 29 de caractere, inclusiv spațiile.

1 iunie 17:12:20 debian kernel: INPUT pachete IN = eth0 OUT = MAC = 02: 1e: 6d: 00: e2: 1c: 00: 01: e8: 11: 73: 69: 08: 00 SRC = 125.94. 12.95 DST = 194.87.239.104 LEN = 40 TOS = 0x00 PREC = 0x00 TTL = 52 ID = 38690 PROTO = TCP SPT = 12557 DPT = 23 WINDOW = 1460 $ RES = 0xURGP = 0xURGP

Comenzi populare de gestionare a iptables.

iptables -L -n --line-numbersVezi lista de reguli.

-n numărul portului și ip în format digital.

— Numere de rând Numărul de linie.

iptables -F Resetați complet regulile.

iptables -P INTRARE ACCEPT Reguli implicite pentru tabelul INPUT.
iptables -P ACCEPT IEȘIRE Reguli implicite pentru tabelul OUTPUT.
iptables -P FORWARD DROP Reguli implicite pentru tabelul FORWARD.

iptables -D INTRARE 1Ștergerea unei reguli după numărul ei din lanț.

iptables -D INPUT -s 123.45.67.89 -j DROP Eliminarea unei reguli pe baza a ceea ce face.

iptables -I INTRARE... Introduceți o regulă la începutul unui lanț.

iptables -I INTRARE 3... Sau puteți specifica o anumită poziție.

REDIRECŢIONA

Acțiunea REDIRECT este concepută pentru a redirecționa pachetele de la un set de porturi la altul dintr-un sistem, fără a părăsi gazda.
REDIRECT funcționează numai în lanțurile PREROUTING și OUTPUT ale tabelului nat... Astfel, domeniul de aplicare este limitat doar la redirecționare. Acesta este cel mai adesea folosit pentru un proxy transparent, atunci când un client din rețeaua locală se conectează la portul 80, iar gateway-ul redirecționează pachetele către portul proxy local:

iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —la portul 3128

Noile reguli nu sunt salvate automat și nu vor intra în vigoare după repornirea serverului. Prin urmare, după schimbarea iptables, trebuie să salvăm modificările.

iptables - restaurare> / etc / iptablesÎncărcați regulile din fișier.

Modul de salvare și încărcare a regulilor este la discreția dvs. Ne-am întâlnit doar cu elementele de bază ale teoriei iptables, desigur, există mult mai multe opțiuni de personalizare. Mai multe detalii despre care vom spune în un alt articol.

Top articole similare