Articles

Linux iptables Firewall Exemple simplificate

în postarea anterioară, am vorbit despre cum să securizăm serverul Linux folosind cele mai bune practici de întărire. Unii oameni m-au întrebat despre secțiunea firewall, care a fost o scurtă introducere în firewall-ul iptables. Astăzi vom discuta în detaliu firewall-ul Linux iptables și cum să vă asigurați traficul serverului folosind acel firewall minunat.

cuprins

Iptables pe CentOS 7

dacă utilizați CentOS 7, veți găsi că firewalld gestionează iptables, deci dacă doriți să vă întoarceți la iptables, trebuie să opriți și să mascați firewalld.

$ systemctl stop firewalld$ systemctl mask firewalld

apoi instalați serviciul iptables și activați-l:

$ yum install iptables-services$ systemctl enable iptables

apoi îl puteți porni:

$ systemctl start iptables

cum funcționează firewall-ul Linux

funcțiile firewall-ului Iptables sunt construite pe cadrul netfilter care este disponibil în kernel-ul Linux pentru filtrarea pachetelor.

tipuri de Firewall

există două tipuri de firewall-uri:

firewall apatrid procesează fiecare pachet pe cont propriu, înseamnă că nu vede alte pachete de aceeași conexiune.

firewall Stateful acest tip de firewall îi pasă de toate pachetele trecute prin el, deci cunoaște starea conexiunii. Oferă mai mult control asupra traficului.

Netfilter conține tabele. Aceste tabele conțin lanțuri, iar lanțurile conțin reguli individuale.

dacă un pachet se potrivește cu orice regulă, iptables va aplica acțiunea regulă la acel pachet.

acțiunile pot fi: acceptați, respingeți, ignorați sau treceți pachetul la alte reguli pentru mai multă procesare.

Netfilter poate procesa traficul de intrare sau de ieșire folosind adresa IP și numărul portului.

comanda iptables gestionează și configurează Netfilter.

înainte de a începe să scriem comenzi firewall, trebuie să înțelegem puțin structura firewall-ului, astfel încât să putem scrie cu ușurință regulile firewall-ului.

iptables firewall tables

Netfilter are trei tabele care pot transporta reguli de procesare.

tabelul de filtrare iptables este tabelul principal pentru procesarea traficului.

al doilea este tabelul nat, care se ocupă de regulile NAT.

al treilea tabel este tabelul mangle pentru mangling pachete.

Lanțuri de tabel

fiecare tabel din tabelele menționate mai sus conține lanțuri; aceste lanțuri sunt containerul regulilor iptables.

tabelul de filtrare conține lanțuri de redirecționare, intrare și ieșire. Puteți crea un lanț personalizat pentru a vă salva Regulile pe acesta.

dacă un pachet vine la gazdă, iptables îl va procesa după regulile lanțului de intrare.

dacă pachetul merge la o altă gazdă, înseamnă că regulile lanțului de ieșire îl vor procesa.

iptables utilizează lanțul FORWARD pentru manipularea pachetelor care au accesat gazda, dar sunt destinate unei alte gazde.

Politica lanțului

fiecare lanț din tabelul de filtrare are o politică. Politica este acțiunea implicită pe care o iau iptables.

Politica ar putea fi picătură, respinge, și să accepte.

Politica de acceptare permite pachetelor să treacă firewall-ul. Politica DROP scade un pachet fără a informa Clientul. Politica de respingere scade, de asemenea, pachetul și informează expeditorul.

Din punct de vedere al securității, ar trebui să renunțați la toate pachetele care vin la gazdă și să acceptați doar pachetele care provin din surse de încredere.

adăugarea regulilor iptables

puteți adăuga o nouă regulă folosind comanda iptables astfel:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

să rupem această comandă în bucăți pentru a putea înțelege totul despre ea.

– A înseamnă că adăugăm o nouă regulă. În mod implicit, iptables adaugă toate regulile noi la tabelul de filtrare, cu excepția cazului în care specificați un alt tabel.

steagul-i specifică dispozitivul la care se va aplica regula. Dacă nu specificați un dispozitiv, iptables va aplica regula la tot traficul de intrare, indiferent de dispozitive.

steagul-p specifică protocolul pachetului pe care doriți să îl procesați, care este TCP în cazul nostru.

steagul –dport specifică portul de destinație, care este 80.

– d specifică adresa IP de destinație, care este 1.2.3.4. Dacă nu este specificată nicio adresă IP de destinație, regula se va aplica întregului trafic de intrare pe eth1, indiferent de adresa IP.

– j specifică acțiunea sau acțiunea de salt de făcut. Aici Acceptăm pachetele folosind Politica de acceptare.

regula de mai sus permite traficul HTTP de intrare, care este pe portul 80.

Ce zici de a permite traficul de ieșire?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

puteți utiliza steagul-A pentru a adăuga reguli la lanțul de ieșire.

steagul-o este utilizat pentru dispozitivul utilizat pentru traficul de ieșire.

steagul-sport specifică portul sursă.

puteți utiliza numele Serviciului ca http sau https în locul numărului de port numeric pe sport sau dport. Toate numele serviciilor sunt în fișierul/etc / services.

ar trebui să utilizați numele serviciului, mai degrabă decât un număr de port, ceea ce face regulile de citire mai ușor.

reguli iptables ordine

iptables plasează noi reguli la sfârșitul lanțului. Puteți să-l adăugați în partea de sus utilizând opțiunea-I.

secvența regulilor contează așa cum veți vedea acum. Puteți introduce regulile exact acolo unde doriți folosind steagul I.

uitați-vă la următoarele reguli pentru a înțelege cum contează ordonarea regulilor:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

prima regulă acceptă tot traficul UDP vine la eth1, iar numărul 3 este ordinea regulii.

a doua regulă scade traficul care intră în portul 80.

prima regulă va accepta tot traficul, apoi a doua regulă care ar trebui să renunțe la trafic nu va face nimic, deoarece iptables trece traficul în prima regulă.

Regulile dvs. ar trebui să aibă sens, deoarece ordinea regulilor din lanț contează.

lista reguli iptables

puteți lista Regulile într-un lanț folosind –l Pavilion:

$ iptables -L INPUT

puteți afișa numerele de linie pentru reguli folosind-line-Numere:

$ iptables -L INPUT --line-numbers

lista arată numele serviciilor. Puteți afișa numere de port în schimb folosind opțiunea-n:

$ iptables -L INPUT -n --line-numbers

regula de mai sus va face listarea mai rapidă, deoarece împiedică iptables de la rezoluția DNS și căutările de servicii.

puteți enumera toate regulile pentru toate lanțurile astfel:

$ iptables -L -n --line-numbers

pentru a obține câte pachete procesate de fiecare regulă, puteți utiliza steagul-v:

$ iptables -L -v

De asemenea, puteți reseta contoarele la zero folosind steagul-Z.

acum putem adăuga o regulă nouă la orice lanț pe care îl dorim, putem introduce regula într-o anumită ordine și putem enumera regulile pentru orice lanț sau toate lanțurile, dar cum rămâne cu ștergerea unei reguli?

ștergerea regulilor

puteți șterge o regulă folosind-D flag:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

această comandă va șterge regula HTTP pe care ați specificat-o mai devreme.

înainte de a șterge o regulă, asigurați-vă doar de specificația regulii listând-o, apoi ștergeți-o.

puteți șterge regula folosind numărul de ordine în loc să scrieți specificațiile regulii.

$ iptables -D INPUT 2

puteți șterge toate regulile dintr-un anumit lanț folosind steagul-F, ceea ce înseamnă spălarea tuturor regulilor.

$ iptables -F INPUT

Dacă uitați să menționați numele lanțului atunci când utilizați steagul-F, atunci toate regulile lanțului vor fi șterse.

înlocuirea regulilor

puteți înlocui regulile existente cu propria regulă folosind steagul-R:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

această comandă va înlocui prima regulă din lanțul de intrare cu regula tastată.

listarea tabelului Specific

pentru a lista un tabel specific, utilizați steagul-t cu numele tabelului astfel:

$ iptables -L -t nat

aici enumerăm regulile din tabelul nat.

Iptables lanț definit de utilizator

pentru a crea un lanț definit de utilizator, utilizați steagul-N.

$ iptables -N MY_CHAIN

De asemenea, îl puteți redenumi folosind steagul-E.

$ iptables -E MY_CHAIN NEW_NAME

și puteți șterge lanțul definit de utilizator folosind-X flag.

$ iptables -X MY_CHAIN

dacă nu menționați numele lanțului atunci când utilizați-X flag, acesta va șterge toate lanțurile definite de utilizator. Nu puteți șterge lanțurile încorporate, cum ar fi intrarea și ieșirea.

redirecționarea către un lanț definit de utilizator

puteți redirecționa pachetele către un lanț definit de utilizator, cum ar fi lanțurile încorporate folosind-J flag.

$ iptables -A INPUT -p icmp -j MY_CHAIN

regula de mai sus va redirecționa tot traficul ICMP către lanțul MY_CHAIN.

setarea politicii implicite pentru lanțuri

puteți utiliza steagul-P pentru a seta politica implicită pentru un anumit lanț. Politica implicită ar putea fi acceptați, respingeți și renunțați.

$ iptables -P INPUT DROP

deci, acum, lanțul de intrare va scadea orice pachet veni dacă nu scrie o regulă pentru a permite orice trafic de intrare.

Syn Flooding

atacatorul trimite pachete SYN numai fără a finaliza strângerea de mână TCP și, ca urmare, gazda primitoare ar avea multe conexiuni deschise, iar serverul dvs. devine prea ocupat pentru a răspunde altor clienți.

putem folosi modulul limită al iptables firewall pentru a ne proteja de inundațiile SYN.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

aici specificăm doar 10 pachete SYN pe secundă. Puteți ajusta această valoare în funcție de nevoile dvs. de rețea.

dacă acest lucru va accelera rețeaua dvs., puteți utiliza cookie-uri SYN.

Syn Cookies

în

/etc/sysctl.conf

fișier și adăugați această linie:

net.ipv4.tcp_syncookies = 1

apoi salvați și reîncărcați.

$ sysctl -p

Drop pachete de stat nevalide

pachetele de stat nevalide sunt pachete care nu aparțin nici unei conexiuni și le aruncați.

$ iptables -A INPUT -m state --state INVALID -j DROP

această regulă va renunța la toate pachetele de stare nevalide primite.

Drop pachete fragmentate

pachetele fragmentate sunt bucăți rupte de pachete mari malformate și ar trebui să scrieți reguli pentru a le arunca.

steagul-f spune firewall-ului iptables să selecteze toate fragmentele. Deci, dacă nu utilizați iptables ca router, puteți renunța la pachete fragmentate.

$ iptables -A INPUT -f -j DROP

Salvați Regulile iptables

dacă reporniți serverul, veți pierde toate regulile pe care le-ați scris, Deci cum să le persistați?

puteți salva toate regulile folosind comanda iptables-save dacă utilizați CentOS sau Red Hat.

iptables-save > /etc/sysconfig/iptables

pe CentOS 7, puteți salva reguli de genul acesta:

$ service iptables save

puteți salva un tabel specific, cum ar fi doar tabelul de filtrare:

$ iptables-save -t filter

De asemenea, puteți utiliza iptables-restore pentru a restabili Regulile.

pe distribuții bazate pe Debian, puteți utiliza pachetul iptables-persistent pentru a salva și restaura Regulile.

în primul rând, instalați-l:

$ apt-get install iptables-persistent

apoi puteți salva și restaura reguli:

$ netfilter-persistent save
$ netfilter-persistent reload

sper că veți găsi iptables firewall ușor. Continuă să te întorci.

mulțumesc.

fondator al LikeGeeks. Lucrez ca administrator de sistem Linux din 2010. Sunt responsabil pentru întreținerea, securizarea și depanarea serverelor Linux pentru mai mulți clienți din întreaga lume. Îmi place să scriu scripturi shell și Python pentru a-mi automatiza munca.