Cisco ACL pentru avansat. Liste de acces extinse. Arc de foc. Protejați-vă de hackeri folosind IPTABLES, IPFW și PF Cum să blocați traficul icmp

Blocarea răspunsurilor ping în sistemul de operare poate preveni atacurile de inundare a pachetelor ICMP, dar majoritatea sistemelor folosesc acest serviciu pentru monitorizarea online (monitorizarea sistemului). În subiectul meu „Blocați răspunsuri Ping (ICMP) în Unix/Linux”, vă voi spune cum îl puteți dezactiva în continuare.

Blocarea PING către un server este utilă dacă serverul se confruntă în mod constant cu un fel de atac DoS folosind funcția PING. Când folosim IPTables, pur și simplu putem opri blocarea trecerii pachetelor ICMP (de fapt, blocarea PING) către server. Înainte de a începe acest lucru, trebuie să aveți o idee despre ce sunt Iptables în Linux. Iptables este un sistem firewall cu un set de reguli care controlează pachetele de intrare și de ieșire. Implicit, Iptables funcționează fără reguli, puteți crea, adăuga, edita reguli.

Dezactivați Ping folosind iptables

O explicație a unora dintre parametrii din iptables care sunt necesari pentru a crea reguli de control al pachetelor ICMP:

R: Adaugă reguli.
-D: Îndepărtează regula de pe masă.
-p: Opțiune pentru a specifica protocolul (unde 'icmp').
--icmp-type: Opțiune pentru a specifica tipul.
-J: Du-te la lanț.

Mai jos, voi da exemple clare.

Cum să blochezi PING pe un server cu mesaje de eroare?
Astfel, puteți bloca parțial PING cu mesajul de eroare „Destination Port Unreachable”. Adăugați următoarele reguli Iptables pentru a bloca PING cu un mesaj de eroare:

# iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT

Bloc PING pe server fără mesaje de eroare.
Pentru a face acest lucru, utilizați comanda pentru IPtabels:

# iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP # iptables -A INPUT -p icmp --icmp-type echo-reply -j DROP

Blochează toate pachetele ICMP de intrare și de ieșire de pe server.

Permiteți ping folosind iptables

Dacă ați blocat ping-ul pe server și nu știți cum să îl recuperați. Acum vă voi spune cum să o faceți. Acest lucru se face prin adăugarea următoarei reguli la IPtables:

# iptables -A INTRARE -p icmp --icmp-type echo-request -j ACCEPT # iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Aceste reguli vor permite trecerea pachetelor ICMP de la și către server.

Blocarea Ping-ului cu parametrii Kernel

De asemenea, putem bloca răspunsurile ping direct cu parametrii kernelului. Puteți bloca răspunsurile ping temporar sau definitiv, iar mai jos vă arată cum să faceți acest lucru.

Blocați temporar Ping
Puteți bloca temporar răspunsurile ping folosind următoarea comandă

# echo „1” >

Pentru a debloca această comandă, executați următoarele:

# echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

Respinge-l pe Ping cu totul
Puteți bloca răspunsurile ping adăugând următorul parametru la fișierul de configurare:

# vim /etc/sysctl.conf

Si scrie:

[...] net.ipv4.icmp_echo_ignore_all = 1 [...]

sysctl este folosit pentru a modifica parametrii kernelului în timpul execuției, unul dintre acești parametri ar putea fi „demonul ping”, dacă doriți să dezactivați ping-ul, trebuie doar să faceți ceva de genul:

# sysctl -w net.ipv4.icmp_echo_ignore_all=1

Acum încercați să dați ping la mașină, nu există răspunsuri, nu? Pentru a reactiva ping-ul, utilizați:

# sysctl -w net.ipv4.icmp_echo_ignore_all=0

Indicatorul W este folosit dacă doriți să modificați unele setări.

Acum rulați următoarea comandă pentru a aplica imediat setările fără a reporni sistemul:

# sysctl -p

# sysctl --system

Iată configurația mea completă:

# cd /usr/local/src && wget http://site/wp-content/uploads/files/sysctl_conf.txt

si apoi poti face:

# cp /usr/local/src/sysctl_conf.txt /etc/sysctl.conf

Asta e tot pentru mine, subiectul „Răspunsuri Blocare Ping (ICMP) în Unix/Linux” este finalizat.

Puteți afla cum să configurați MikroTik într-un curs online despre echipamente de la acest producător. Autorul cursului este un trainer certificat MikroTik. Puteți citi mai multe la sfârșitul articolului.

Articolul răspunde la întrebarea cât de periculos este blocarea traficului ICMP.

ICMP este un element al disputei

Mulți administratori de rețea cred că Protocolul de mesaje de control al Internetului (ICMP) este un risc de securitate și, prin urmare, ar trebui să fie întotdeauna blocat. Este adevărat că protocolul are anumite probleme de securitate și că unele solicitări ar trebui să fie blocate pentru a bloca tot traficul ICMP!

Traficul ICMP are multe funcții importante; Unele dintre ele sunt utile pentru depanare, în timp ce altele sunt necesare pentru ca rețeaua să funcționeze corect. Mai jos sunt câteva părți importante ale protocolului ICMP de care ar trebui să le cunoașteți. Ar trebui să luați în considerare cum să le direcționați cel mai bine prin rețeaua dvs.

Solicitare eco și răspuns eco

IPv4 – Cerere ecou (Tip8, Code0) și răspuns ecou (Tip0, Code0)
IPv6 – Solicitare ecou (Tip128, Code0) și răspuns ecou (Tip129, Code0)

Știm cu toții bine că ping-ul este unul dintre primele instrumente de depanare. Da, dacă activați procesarea pachetelor ICMP pe hardware-ul dvs., aceasta înseamnă că gazda dvs. este acum descoperită, dar a dvs. nu ascultă deja pe portul 80 și trimite răspunsuri la solicitările clientului? Desigur, blocați și aceste solicitări dacă doriți cu adevărat DMZ-ul dvs. la marginea rețelei. Dar blocând traficul ICMP în rețeaua dvs., nu vă veți consolida securitatea, dimpotrivă, veți ajunge la un sistem cu un proces de depanare inutil de complex („Vă rugăm să verificați dacă gateway-ul răspunde la solicitările rețelei?”, „Nu, dar asta nu mă supără deloc, pentru că nu-mi pasă.”

Amintiți-vă, puteți, de asemenea, să permiteți cererilor să meargă într-o anumită direcție; de exemplu, configurați echipamentul astfel încât solicitările Echo din rețeaua dvs. să ajungă la Internet și răspunsurile Echo de la Internet către rețeaua dvs., dar nu invers.

Fragmentarea pachetului este necesară (IPv4) / Pachetul prea mare (IPv6)

IPv4 – (Tip3, Cod4)
IPv6 – (Tip2, Cod0)

Aceste componente ale protocolului ICMP sunt foarte importante deoarece sunt o componentă importantă în Path MTU Discovery (PMTUD), care este o parte integrantă a protocolului TCP. Permite două gazde să ajusteze valoarea TCP Maximum Segment Size (MSS) la o valoare care se potrivește cu cel mai mic MTU de-a lungul căii de comunicații dintre cele două destinații. Dacă de-a lungul căii pachetelor există un nod cu o unitate de transmisie maximă mai mică decât expeditorul sau destinatarul și nu au mijloacele pentru a detecta această coliziune, atunci traficul va fi oprit în liniște. Și nu veți înțelege ce se întâmplă cu canalul de comunicare; cu alte cuvinte, „vor veni zile vesele pentru tine”.

Nu fragmentați – ICMP nu va trece!

Transmiterea pachetelor IPv4 cu setul de biți Don't Fragment (majoritatea dintre ele!) sau pachete IPv6 (rețineți că nu există fragmentare de către routere în IPv6) care sunt prea mari pentru a fi transmise prin interfață va determina routerul să renunțe la pachet. și generați răspuns la sursa de transmisie cu următoarele erori ICMP: Fragmentare necesară ( Fragmentarea necesară), sau Pachet prea mare ( Pachetul de asemenea Mare). Dacă răspunsurile cu aceste erori nu pot fi returnate expeditorului, atunci acesta va interpreta absența răspunsurilor de confirmare cu privire la livrarea pachetelor ACK ( Confirmare) de la receptor ca congestie/pierdere și sursa de retransmitere a pachetelor care vor fi, de asemenea, aruncate.

Este dificil să identifici cauza unei astfel de probleme și să o rezolvi rapid, procesul de strângere de mână TCP funcționează bine, deoarece implică pachete mici, dar de îndată ce are loc un transfer de date în bloc, sesiunea de transfer se blochează, deoarece sursa transferului nu se îngheață; primi mesaje de eroare.

Explorarea căii de livrare a pachetelor

RFC 4821 a fost conceput pentru a ajuta participanții la traficul de rețea să evite această problemă utilizând explorarea căilor de pachete (Descoperire MTU cale (PLPMTUD). Standardul vă permite să detectați cantitatea maximă de date (Unitate de transmisie maximă (MTU), care poate fi transmis prin protocol într-o singură iterație, prin creșterea treptată a dimensiunii maxime a blocului de date util (Dimensiunea maximă a segmentului (MSS), pentru a găsi dimensiunea maximă posibilă a unui pachet fără a-l fragmenta pe traseul de la emițător la receptor. Această funcționalitate reduce dependența de primirea în timp util a răspunsurilor de eroare prin Internet Control Message Protocol (ICMP) și este disponibilă în majoritatea stivelor de dispozitive de rețea și a sistemelor de operare client. Din păcate, nu este la fel de eficientă ca obținerea directă a datelor despre dimensiunea maximă posibilă a pachetelor transmise. Vă rugăm să permiteți acestor mesaje ICMP să revină la sursa de transmisie, bine?

Timpul de transmisie a pachetului a fost depășit

IPv4 – (Tip11, Cod0)
IPv6 – (Tip3, Cod0)

Traceroute este un instrument foarte util pentru depanarea conexiunilor de rețea între două gazde, detaliind fiecare pas al căii.


Trimite un pachet cu durata de viață a pachetului de date pentru protocolul IP (Timp de trăit (TTL) egal 1 pentru ca primul router să trimită un mesaj de eroare (inclusiv propria sa adresă IP) că pachetul și-a depășit timpul de viață. Apoi trimite un pachet cu TTL 2 și așa mai departe. Această procedură este necesară pentru a detecta fiecare nod de-a lungul căii pachetului.

NDP și SLAAC (IPv6)

Solicitare router (RS) (Tip133, Cod0)
Publicitate pentru router (RA) (Tip134, Cod0)
Solicitare vecină (NS) (Tip135, Cod0)
Anunț pentru vecini (NA) (Tip136, Cod0)
Redirecționare (Tip137, Cod0)

În timp ce IPv4 a folosit Address Resolution Protocol (ARP) pentru a mapa straturile 2 și 3 ale modelului de rețea OSI, IPv6 utilizează o abordare diferită sub forma Neighbor Discovery Protocol (NDP). NDP oferă multe funcții, inclusiv descoperirea routerului, descoperirea prefixelor, rezoluția adreselor și multe altele. Pe lângă NDP, StateLess Address AutoConfiguration (SLAAC) vă permite să configurați dinamic o gazdă într-o rețea, similar conceptului Dynamic Host Configuration Protocol (DHCP) (deși DHCPv6 este destinat unui control mai granular).

Aceste cinci tipuri de mesaje ICMP nu trebuie blocate în rețeaua dumneavoastră (ignorând perimetrul exterior) pentru ca protocolul de transfer de date IP să funcționeze corect.

Numerotarea tipului ICMP

Internet Control Message Protocol (ICMP) conține multe mesaje care sunt identificate prin câmpul „tip”.

Tip Nume Caietul de sarcini
0 Echo Răspuns
1 Nealocat
2 Nealocat
3 Destinație indisponibilă
4 Stingere sursă (învechit)
5 Redirecţiona
6 Adresă de gazdă alternativă (învechit)
7 Nealocat
8 Ecou
9 Publicitate la router
10 Solicitare router
11 Timp depășit
12 Problema parametrilor
13 Marca temporală
14 Răspuns marcaj temporal
15 Solicitare de informații (învechit)
16 Răspuns la informații (învechit)
17 Solicitare de mască de adresă (învechit)
18 Adresă Mască răspuns (învechit)
19 Rezervat (pentru securitate) Solo
20-29 Rezervat (pentru experimentul de robustețe) ZSu
30 Traceroute (învechit)
31 Eroare de conversie a datagramei (învechit)
32 Redirecționare gazdă mobilă (învechit) David_Johnson
33 IPv6 Unde ești (învechit)
34 IPv6 Sunt aici (învechit)
35 Solicitare de înregistrare mobilă (învechit)
36 Răspuns de înregistrare mobil (învechit)
37 Solicitare nume de domeniu (învechit)
38 Răspuns nume de domeniu (învechit)
39 SKIP (învechit)
40 Photoris
41 Mesaje ICMP utilizate de protocoale experimentale de mobilitate, cum ar fi Seamoby
42 Solicitare Echo extinsă
43 Răspuns Echo extins
44-252 Nealocat
253 Experimentul 1 în stil RFC3692
254 Experimentul 2 în stil RFC3692
255 Rezervat

Câteva cuvinte despre limitele de viteză

În timp ce mesajele ICMP precum cele descrise în acest articol pot fi foarte utile, rețineți că generarea tuturor acestor mesaje ocupă timp CPU pe routerele dvs. și generează trafic. Chiar vă așteptați să obțineți 1000 de ping-uri pe secundă prin firewall într-o situație normală? Va fi considerat trafic normal? Probabil că nu. Limitați lățimea de bandă a rețelei pentru aceste tipuri de trafic ICMP după cum credeți de cuviință; acest pas vă poate ajuta să vă securizați rețeaua.

Citiți, cercetați și înțelegeți

Având în vedere că discutarea subiectului „a bloca sau a nu bloca” pachetele ICMP duce întotdeauna la confuzie, dispute și dezacorduri, vă sugerez să continuați să studiați acest subiect pe cont propriu. Am oferit multe link-uri pe această pagină, cred că pentru o înțelegere mai completă a problemelor, ar trebui să petreceți timp citindu-le. Și faceți alegeri informate cu privire la ceea ce funcționează cel mai bine pentru rețeaua dvs.

MikroTik: unde să faceți clic pentru a-l face să funcționeze?
Pentru toate avantajele sale, produsele MikroTik au un dezavantaj - o mulțime de informații dispersate și nu întotdeauna de încredere despre configurația sa. Vă recomandăm o sursă de încredere în limba rusă, unde totul este adunat, logic și structurat - curs video „ Configurarea echipamentului MikroTik" Cursul include 162 de lecții video, 45 de lucrări de laborator, întrebări și note de autotest. Toate materialele rămân la tine pe termen nelimitat. Puteți urmări gratuit începutul cursului lăsând o solicitare pe pagina cursului. Autorul cursului este un trainer certificat MikroTik.

Deci, să continuăm să ne ocupăm de ACL-uri. De data aceasta, avem ACL-uri extinse. Vom lua topologia din articolul anterior, sper că ați studiat-o temeinic. Dacă nu este cazul, atunci vă recomand cu căldură să o citiți, astfel încât materialele din acest articol să fie mai înțelese.

În primul rând, voi începe cu ce sunt ACL-urile extinse. ACL-urile extinse vă permit să specificați protocolul, adresa de destinație și porturile în plus față de adresa sursă. Precum și parametri speciali ai unui anumit protocol. Cel mai bine este să înveți din exemple, așa că haideți să creăm o nouă sarcină, complicând-o pe cea anterioară. Apropo, cineva ar putea fi interesat să se ocupe de problemele de distribuție a traficului prin prioritate după aceasta, recomand Clasificarea și marcarea QoS un articol bun, deși în limba engleză. Ei bine, deocamdată, să revenim la sarcina noastră:

Sarcină.

  1. Permiteți cereri de ecou de la gazdele din rețeaua 192.168.0.0/24 către server.
  2. De la server – interziceți cererile de eco către rețeaua internă.
  3. Permite accesul WEB la server de la nodul 192.168.0.11.
  4. Permite accesul FTP de la gazda 192.168.0.13 la server.

Sarcină complexă. De asemenea, o vom rezolva cuprinzător. În primul rând, mă voi uita la sintaxa pentru utilizarea unui ACL extins.

Opțiuni ACL extinse

<номер от 100 до 199> <действие permit, deny> <протокол> <источник> <порт> <назначение> <порт> <опции>

Numerele de port sunt indicate numai pentru protocoalele TCP/UDP, desigur. Pot exista și prefixe echivalentul(numărul portului egal cu cel specificat), gt/lt(numărul portului este mai mare/mai mic decât cel specificat), neq(numărul portului nu este egal cu cel specificat), gamă(gamă de porturi).

ACL-uri denumite

Apropo, listele de acces nu pot fi doar numerotate, ci și denumite! Poate că această metodă ți se va părea mai convenabilă. De data asta vom face exact asta. Aceste comenzi sunt executate în contextul configurației globale, iar sintaxa este:

Router(config)#ip lista de acces extinsă<имя>

Deci, să începem să formăm regulile.

  1. Permiterea ping-urilor din rețea 192.168.0.0/24 la server. Aşa, ecou-cererile sunt un protocol ICMP, vom selecta subrețeaua noastră ca adresă sursă, adresa serverului ca adresă de destinație, tipul mesajului – pe interfața de intrare ecou, la ieșire – ecou-răspuns. Router(config)#ip access-list extins INT_IN Router(config-ext-nacl)#permit icmp 192.168.0.0 0.0.0.255 gazdă 10.0.0.100 echo Hopa, ce este în neregulă cu masca de subrețea? Da, acesta este un truc ACL. Așa-numitul WildCard-masca. Se calculează ca masca inversă față de cea obișnuită. Aceste. 255.255.255.255 – masca de subrețea. În cazul nostru, subrețeaua 255.255.255.0 , după scădere ceea ce rămâne este just 0.0.0.255 .Cred că această regulă nu are nevoie de explicații? Protocol icmp, adresa sursă – subrețea 192.168.0.0/24 , adresa de destinatie – gazdă 10.0.0.100, tipul mesajului – ecou(cerere). Apropo, este ușor de observat asta gazdă 10.0.0.100 echivalent 10.0.0.100 0.0.0.0 .Aplicam aceasta regula la interfata. Router(config)#int fa0/0
    Router(config-if)#ip acces-grup INT_IN în Ei bine, ceva de genul acesta. Acum, dacă verificați ping-urile, este ușor să vedeți că totul funcționează bine. Aici, însă, ne așteaptă o surpriză, care va apărea puțin mai târziu. Nu o voi dezvălui încă. Cine a ghicit - bravo!
  2. De pe server – interzicem toate cererile de eco către rețeaua internă (192.168.0.0/24). Definim o nouă listă denumită, INT_OUT, și o atașăm la interfața cea mai apropiată de server.
    Router(config)#ip access-list extins INT_OUT
    Router(config-ext-nacl)#deny icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo
    Router(config-ext-nacl)#exit
    Router(config)#int fa0/1
    Router(config-if)#ip acces-grup INT_OUT în
    Lasă-mă să explic ce am făcut. A creat o listă de acces extinsă cu numele INT_OUT, dezactivând protocolul din ea icmp cu tip ecou de la gazdă 10.0.0.100 pe subrețea 192.168.0.0/24 și aplicat la intrarea interfeței fa0/1, adică cel mai apropiat de server. Încercăm să trimitem ping de pe server.
    SERVER>ping 192.168.0.11
    Ping 192.168.0.11 cu 32 de octeți de date:

    Răspuns de la 10.0.0.1: Gazda destinație inaccesibilă.
    Răspuns de la 10.0.0.1: Gazda destinație inaccesibilă.
    Răspuns de la 10.0.0.1: Gazda destinație inaccesibilă.
    Statistici ping pentru 192.168.0.11:
    Pachete: trimise = 4, primite = 0, pierdute = 4 (pierdere de 100%)
    Ei bine, părea să funcționeze așa cum ar trebui. Pentru cei care nu știu să trimită ping-uri, faceți clic pe nodul care ne interesează, de exemplu, un server. Accesați fila Desktop, acolo Prompt de comandă și acum, gluma promisă. Încercați să trimiteți un ping de la gazdă, ca în primul punct. PC>ping 10.0.0.100
    Ping 10.0.0.100 cu 32 de octeți de date:
    Solicitarea a expirat.
    Solicitarea a expirat.
    Solicitarea a expirat.
    Solicitarea a expirat.

    Iată una pentru tine. Totul a funcționat! De ce s-a oprit? Aceasta este surpriza promisă. Vă explic care este problema. Da, prima regulă nu a dispărut. Permite trimiterea unei cereri de ecou către nodul serverului. Dar unde este permisiunea de a transmite răspunsuri eco? A plecat! Trimitem o cerere, dar nu putem accepta un răspuns! De ce a funcționat totul înainte? Pe atunci nu aveam un ACL pe interfață. fa0/1. Și din moment ce nu există ACL, atunci totul este permis. Va trebui să creați o regulă pentru a permite primirea răspunsurilor icmp.

    Adăugați la lista INT_OUT

    Să adăugăm același lucru la lista INT_IN.

    Router(config-ext-nacl)#permit icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo-reply

    Acum nu te plânge. Totul merge grozav!

  3. Permitem accesul WEB la server de la nodul *.11. Facem la fel! Aici, totuși, trebuie să știți puțin despre cum apar apelurile prin intermediul protocoalelor de nivel 4 (TCP, UDP). Portul client este selectat în mod arbitrar > 1024, iar portul serverului este selectat corespunzător serviciului. Pentru WEB, acesta este portul 80 (protocolul http). Dar serverul WEB? În mod implicit, serviciul WEB este deja instalat pe server, îl puteți vedea în setările nodului. Asigurați-vă că există o bifă. Și vă puteți conecta la server selectând comanda rapidă „Web Browser” de pe „Desktop” al oricărui nod. Desigur, nu va exista acces acum. Pentru că avem ACL-uri pe interfețele routerului și nu au nicio regulă de permisiuni pentru acces. Ei bine, să creăm o listă de acces INT_IN (care se află pe interfață fa0/0) adăugați regula: Router(config-ext-nacl)#permit tcp host 192.168.0.11 gt 1024 host 10.0.0.100 eq 80 Adică, permitem protocolul TCP de la gazda noastră (port arbitrar, > 1024) la adresa serverului , port HTTP.

    Și, desigur, regula opusă este în lista INT_OUT (care se află pe interfață fa0/1):

    Router(config-ext-nacl)#permit tcp host 10.0.0.100 eq 80 host 192.168.0.11 stabilit

    Adică permitem TCP din port 80 servere pe gazdă *.11 , iar conexiunea ar trebui să fie deja stabilită! Poate in schimb stabilit indica la fel GT 1024, va funcționa la fel de bine. Dar sensul este puțin diferit.

    Raspunde in comentarii ce ar fi mai sigur?

  4. Permitem accesul FTP de la un nod *.13 la server. De asemenea, nu este absolut nimic complicat Să ne uităm la modul în care interacțiunea are loc prin protocolul FTP. În viitor, intenționez să dedic o serie întreagă de articole lucrării diferitelor protocoale, deoarece acest lucru este foarte util în crearea unor reguli ACL precise (lunetist). Ei bine, deocamdată: Acțiuni server și client:+ Clientul încearcă să stabilească o conexiune și trimite un pachet (care conține o indicație că va funcționa în modul pasiv) către portul 21 al serverului de la portul său X (X > 1024, portul liber) + Serverul trimite un răspuns și raportează numărul portului său pentru a forma un canal de date Y (Y > 1024) către portul client X, extras din antetul pachetului TCP.+ Clientul inițiază o comunicare pentru a transfera date pe portul X+1 către portul server Y (luat din antet). a tranzacției anterioare). Aşa ceva. Sună puțin complicat, dar trebuie doar să-ți dai seama Adăugați regulile la lista INT_IN:

    permis gazdă tcp 192.168.0.13 gt 1024 gazdă 10.0.0.100 eq 21
    permis gazdă tcp 192.168.0.13 gt 1024 gazdă 10.0.0.100 gt 1024

    Și adăugați reguli la lista INT_OUT:

    permite gazdă tcp 10.0.0.100 eq gazdă ftp 192.168.0.13 gt 1024
    permis gazdă tcp 10.0.0.100 gt 1024 gazdă 192.168.0.13 gt 1024

    Verificăm din linia de comandă cu comanda ftp 10.0.0.100, unde ne conectăm folosind datele noastre de autentificare cisco:cisco(luat din setările serverului), introduceți comanda acolo dir si vom vedea ca datele, precum si comenzile, sunt transmise cu succes.

Cam atât se referă la listele de acces extinse.

Deci, să ne uităm la regulile noastre:

Acces la router#sh
Lista de acces IP extinsă INT_IN
permis icmp 192.168.0.0 0.0.0.255 gazdă 10.0.0.100 echo (17 meci(e))
permis gazdă icmp 10.0.0.100 192.168.0.0 0.0.0.255 echo-reply
permis gazdă tcp 192.168.0.11 gt 1024 gazdă 10.0.0.100 eq www (36 meci(e))
permis gazdă tcp 192.168.0.13 gt 1024 gazdă 10.0.0.100 eq ftp (40 potrivire(e))
permis gazdă tcp 192.168.0.13 gt 1024 gazdă 10.0.0.100 gt 1024 (4 meci(e))
Lista de acces IP extinsă INT_OUT
deny icmp host 10.0.0.100 192.168.0.0 0.0.0.255 echo (4 meci(e))
permis gazdă icmp 10.0.0.100 192.168.0.0 0.0.0.255 echo-reply (4 potrivire(e))
permis gazdă tcp 10.0.0.100 eq www gazdă 192.168.0.11 stabilită (3 potriviri)
permis gazdă tcp 10.0.0.100 eq gazdă ftp 192.168.0.13 gt 1024 (16 potriviri)
permis gazdă tcp 10.0.0.100 gt 1024 gazdă 192.168.0.13 gt 1024 (3 meci(e))


Firewall-ul unui sistem Linux este controlat de programul iptables (pentru ipv4) și ip6tables (pentru ipv6). Această foaie de cheat acoperă cele mai comune moduri de a folosi iptables pentru cei care doresc să-și protejeze sistemul de hackeri sau pur și simplu să înțeleagă configurarea.

Semnul # înseamnă că comanda este executată ca root. Deschideți o consolă cu drepturi de root în avans - sudo -i pe sisteme bazate pe Debian sau su pe altele.

1. Afișați starea.

# iptables -L -n -v

Exemplu de ieșire de comandă pentru un firewall inactiv:

Chain INPUT (politică ACCEPT 0 pachete, 0 octeți) pkts bytes target prot opt ​​in out source destination Chain FORWARD (policy ACCEPT 0 pachete, 0 bytes) 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ă

Pentru un firewall activ:

Lanț INPUT (politică DROP 0 pachete, 0 octeți) pkts bytes target prot opt ​​in out source destination 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 stare INVALID 394 43586 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 stare RELATED,STABLISHED 93 17292 ACCEPT toate -- br0 * 0.0.0.0/0 0.0.0.0/0 1 142 ACCEPTĂ toate -- lo * 0.0.0.0.0 . Lanț FORWARD (politică DROP 0 pachete, 0 octeți) pkts bytes target prot opt ​​in out source destination 0 0 ACCEPT all -- br0 br0 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- * * 0.0. 0.0/0 0.0 .0.0/0 stare INVALID 0 0 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 0 0 ACCEPT all -- * * 0/0. 0 0.0.0.0 /0 stare RELATED,ESTABLISHED 0 0 wanin all -- vlan2 * 0.0.0.0/0 0.0.0.0/0 0 0 wanout all -- * vlan2 0.0.0.0/0 0.0.0.0.0/0 0 0 ACCEPT -- br0 * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (politica ACCEPT 425 pachete, 113K bytes) pkts bytes target prot opt ​​in out sursă destinație Chain wanin (1 referințe) pkts bytes target prot optin out source destination Chain wanout (1 referințe) pkts bytes target prot opt ​​in out source destination

Unde:
-L: Arată lista de reguli.
-v: Afișează informații suplimentare. Această opțiune arată numele interfeței, opțiunile, măștile TOS. Afișează și sufixele „K”, „M” sau „G”.
-n: Afișează adresa IP și portul ca numere (fără a utiliza servere DNS pentru a rezolva numele. Acest lucru va accelera afișarea).

2. Afișați o listă de reguli cu numere de rând.

# iptables -n -L -v --line-numbers

Eșantion de ieșire:

Lanț INPUT (policy DROP) num target prot opt ​​​​sursă destinație 1 DROP toate -- 0.0.0.0/0 0.0.0.0/0 stare INVALID 2 ACCEPT toate -- 0.0.0.0/0 0.0.0.0/0 stare RELATED,STABLISHED 3 ACCEPT toate -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPTĂ toate -- 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy DROP) num target prot opt ​​​​sursa destinație 1 ACCEPT toate -- 0.0 .0.0/0 0.0.0.0/0 2 DROP toate -- 0.0.0.0/0 0.0.0.0/0 stare INVALID 3 TCPMSS tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS TCPMSS PMTU 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 stare RELATED,STABLISHED 5 wanin all -- 0.0.0.0/0 0.0.0.0/0 6 wanout all -- 0.0.0.0/0 0.0.0.0/0 7 ACCEPT all - - 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT) num target prot opt ​​​​source destination Chain wanin (1 referințe) num target prot opt ​​​​source destination Chain wanout (1 referințe) num target prot opt ​​sursă destinație

Puteți utiliza numerele de rând pentru a adăuga reguli noi.

3. Afișați lanțul de reguli INPUT sau OUTPUT.

# iptables -L INPUT -n -v
# iptables -L OUTPUT -n -v --line-numbers

4. Opriți, porniți, reporniți firewall-ul.

Prin forțele sistemului însuși:
# service ufw stop
# service ufw start

De asemenea, puteți utiliza comenzi iptables pentru a opri firewall-ul și pentru a elimina toate regulile:
# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X
# iptables -P INTRARE ACCEPT
# iptables -P ACCEPT IEȘIRE
# iptables -P FORWARD ACCEPT

Unde:
-F: Spală toate regulile.
-X: Șterge lanțul.
-t table_name: Selectați un tabel (nat sau mangle) și eliminați toate regulile.
-P: Selectați acțiunile implicite (cum ar fi DROP, REJECT sau ACCEPT).

5. Ștergeți regulile firewall.

Pentru a afișa numărul rândului cu regulile existente:

# iptables -L OUTPUT -n --line-numbers
# iptables -L OUTPUT -n --line-numbers | Mai puțin
# iptables -L OUTPUT -n --line-numbers | grep 202.54.1.1

Să obținem o listă de adrese IP. Uită-te la numărul din stânga și șterge linia corespunzătoare. De exemplu, pentru numărul 3:
# iptables -D INTRARE 3

Sau găsiți adresa IP sursă (202.54.1.1) și eliminați-o din regulă:
# iptables -D INPUT -s 202.54.1.1 -j DROP

Unde:
-D: Îndepărtează una sau mai multe reguli din lanț.

6. Adăugați o regulă la firewall.

Pentru a adăuga una sau mai multe reguli la un lanț, mai întâi afișăm lista folosind numerele de rând:
# iptables -L INPUT -n --line-numbers

Eșantion de ieșire:

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, INSTALAT

Pentru a introduce o regulă între rândurile 1 și 2:
# iptables -I INPUT 2 -s 202.54.1.2 -j DROP

Să verificăm dacă regula a fost actualizată:
# iptables -L INPUT -n --line-numbers

Ieșirea va fi astfel:

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 -- 202.54.1.2 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0. 0.0/0 stare NOU, INSTALAT

7. Salvați regulile firewall.

Prin iptables-salvare:
# iptables-save > /etc/iptables.rules

8. Restabilirea regulilor.

Prin iptables-restore
# iptables-restore

9. Setați politicile implicite.

Pentru a reseta tot traficul:
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -L -v -n

După comenzile de mai sus, niciun pachet nu va părăsi această gazdă.
# ping google.com

10. Blocați numai conexiunile de intrare.

Pentru a elimina toate pachetele de intrare care nu sunt inițiate de dvs., dar permiteți traficul de ieșire:
# iptables -P INPUT DROP
# iptables -P FORWARD DROP
# iptables -P ACCEPT IEȘIRE
# iptables -A INPUT -m stare --state NEW,STABLISHED -j ACCEPT
# iptables -L -v -n

Pachetele de ieșire și cele care au fost reținute în cadrul sesiunilor stabilite sunt permise.
# ping google.com

11. Resetați adresele rețelelor izolate din rețeaua publică.

# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP

Lista adreselor IP pentru rețele izolate:
10.0.0.0/8 -j (A)
172.16.0.0/12 (B)
192.168.0.0/16 (C)
224.0.0.0/4 (MULTICAST D)
240.0.0.0/5 (E)
127.0.0.0/8 (LOOPBACK)

12. Blocarea unei anumite adrese IP.

Pentru a bloca adresa unui atacator 1.2.3.4:
# iptables -A INPUT -s 1.2.3.4 -j DROP
# iptables -A INPUT -s 192.168.0.0/24 -j DROP

13. Blocați cererile de porturi de intrare.

Pentru a bloca toate cererile primite pe portul 80:
# iptables -A INPUT -p tcp --dport 80 -j DROP
# iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

Pentru a bloca cererea portului 80 de la adresa 1.2.3.4:
# 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

14. Blocați cererile către adresa IP de ieșire.

Pentru a bloca un anumit domeniu, aflați adresa acestuia:
# gazdă -t a facebook.com

Concluzie: facebook.com are adresa 69.171.228.40

Să găsim CIDR pentru 69.171.228.40:
#whois 69.171.228.40 | grep CIDR

Concluzie:
CIDR: 69.171.224.0/19

Să blocăm accesul la 69.171.224.0/19:
# iptables -A OUTPUT -p tcp -d 69.171.224.0/19 -j DROP

De asemenea, puteți utiliza un domeniu pentru a bloca:
# iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
# iptables -A OUTPUT -p tcp -d facebook.com -j DROP

15. Înregistrați evenimentul și resetați-l.

Pentru a înregistra mișcarea pachetelor înainte de resetare, adăugați o regulă:

# 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

Să verificăm jurnalul (în mod implicit /var/log/messages):
# coada -f /var/log/messages
# grep -i --color „IP SPOOF” /var/log/messages

16. Înregistrați evenimentul și resetați (cu o limită a numărului de înregistrări).

Pentru a evita umplerea partiției cu un jurnal umflat, limităm numărul de intrări folosind -m. De exemplu, pentru a înregistra maximum 7 linii la fiecare 5 minute:
# 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

16. Resetați sau permiteți traficul de la anumite adrese MAC.

# iptables -A INPUT -m mac --mac-source 00:0F:EA:91:04:08 -j DROP
## *permite numai portul TCP # 8080 de la adresa mac 00:0F:EA:91:04:07 * ##
# iptables -A INTRARE -p tcp --destination-port 22 -m mac --mac-source 00:0F:EA:91:04:07 -j ACCEPT

17. Permiteți sau respingeți solicitările Ping ICMP.

Pentru a dezactiva ping-ul:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

Permiteți anumite rețele/gazde:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT

Permiteți doar o parte din solicitările ICMP:
### ** presupune că politicile implicite de intrare sunt setate la DROP ** ###
# iptables -A INTRARE -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
## ** permiteți-ne să răspundem la cerere ** ##
# iptables -A INTRARE -p icmp --icmp-type echo-request -j ACCEPT

18. Deschideți o serie de porturi.

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

19. Deschideți o serie de adrese.

## permite conexiuni la portul 80 (Apache) dacă adresa este în intervalul de la 192.168.1.100 la 192.168.1.200 ##
# iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

## exemplu pentru nat ##
# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25

20. Închideți sau deschideți porturile standard.

Înlocuiți ACCEPT cu DROP pentru a bloca portul.

## ssh tcp portul 22 ##
iptables -A INPUT -m stare --state NOU -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

## cupe (serviciu de imprimare) portul udp/tcp 631 pentru rețeaua locală ##
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

## sincronizare oră prin NTP pentru rețeaua locală (portul udp 123) ##
iptables -A INPUT -s 192.168.1.0/24 -m stare --state NOU -p udp --dport 123 -j ACCEPT

## portul tcp 25 (smtp) ##
iptables -A INPUT -m stare --state NOU -p tcp --dport 25 -j ACCEPT

# porturi server dns ##
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

## http/https www port server ##
iptables -A INPUT -m stare --state NOU -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m stare --state NOU -p tcp --dport 443 -j ACCEPT

## portul tcp 110 (pop3) ##
iptables -A INPUT -m stare --state NOU -p tcp --dport 110 -j ACCEPT

## portul tcp 143 (imap) ##
iptables -A INPUT -m stare --state NOU -p tcp --dport 143 -j ACCEPT

## Server de fișiere Samba pentru rețeaua locală ##
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

## server proxy pentru rețeaua locală ##
iptables -A INPUT -s 192.168.1.0/24 -m stare --state NOU -p tcp --dport 3128 -j ACCEPT

## server mysql pentru rețeaua locală ##
iptables -I INTRARE -p tcp --dport 3306 -j ACCEPT

21. Limitați numărul de conexiuni paralele la server pentru o singură adresă.

Pentru restricții, se folosește modulul connlimit. Pentru a permite doar 3 conexiuni ssh per client:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Setați numărul de solicitări HTTP la 20:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

Unde:
--connlimit-above 3: Specifică că regula se aplică numai dacă numărul de conexiuni depășește 3.
--connlimit-mask 24: Specifică masca de rețea.

Ajutor cu iptables.

Pentru a găsi ajutor cu iptables, utilizați man:
$ man iptables

Pentru a vedea ajutor pentru anumite comenzi și obiective:
# iptables -j DROP -h

Verificarea regulii iptables.

Verificarea porturilor deschise/închise:
# netstat -tulpn

Verificăm deschiderea/închiderea unui anumit port:
# netstat -tulpn | grep:80

Să verificăm dacă iptables permite conectarea la portul 80:
# iptables -L INPUT -v -n | grep 80

În caz contrar, să-l deschidem tuturor:
# iptables -A INPUT -m stare --state NOU -p tcp --dport 80 -j ACCEPT

Verifica folosind telnet
$ telnet ya.ru 80

Puteți folosi nmap pentru a verifica:
$ nmap -sS -p 80 ya.ru

Iptables este un instrument grozav în mâinile unui administrator. Dacă trebuie să vă protejați ușor și simplu în desktop Ubuntu, atunci ar trebui să știți că există un add-on convenabil pentru consolă pentru iptables numit UFW și pentru acesta există un program grafic GUFW. Materialul video vă va ajuta să vă faceți Ubuntu și mai sigur.