CURSUL 07

Liste de acces

Durată: 115 min de predare Nivel: licență, anul III - fără cunoștințe prealabile Disciplină: Rețele Locale Laborator asociat: Laboratorul 06 PDF: descarcă suportul EN English version

Un ruter, lăsat în pace, dirijează tot ce primește. Nu are opinii despre trafic: dacă are o rută, trimite pachetul mai departe. Lista de acces este mecanismul prin care îi dăm, pentru prima dată, dreptul de a spune nu. Este totodată limbajul în care se descrie traficul pe echipamentele Cisco - aceleași liste apar mai târziu la NAT, la calitatea serviciilor și la filtrarea rutelor. Cursul acesta pornește de la zero: ce este o regulă, cum se citește o listă, de ce ordinea liniilor decide totul și de ce masca folosită aici este pe dos față de tot ce ați învățat până acum.

1Recapitulare4 min

Ce trebuie să aveți în minte
  • Ruterul ia o decizie pentru fiecare pachet în parte, pe baza tabelei de rutare.
  • Decizia se ia prin longest prefix match: cea mai specifică rută câștigă.
  • Un pachet fără rută este aruncat. Ruterul nu îl păstrează și nu îl ghicește.
  • Ruterul decapsulează cadrul, citește antetul IP, apoi reîncapsulează pachetul într-un cadru nou pe interfața de ieșire.
  • Rutarea trebuie configurată în ambele sensuri - altfel răspunsul nu are pe unde să vină înapoi.

Ultimul punct revine astăzi, într-o formă nouă și mult mai neplăcută: nu doar rutarea trebuie gândită în ambele sensuri, ci și filtrarea. O listă care permite corect traficul dus, dar uită traficul întors, produce exact același simptom - „nu merge" - dintr-un motiv complet diferit.

Rezultate ale învățării

  • Să explicați ce este un ACL și ce poate identifica dintr-un pachet
  • Să parcurgeți mental o listă de reguli și să spuneți exact ce se întâmplă cu un pachet dat
  • Să calculați o mască wildcard și să spuneți ce interval de adrese acoperă
  • Să alegeți între o listă standard și una extinsă și să știți unde se plasează fiecare
  • Să scrieți liste cu nume și să editați o singură linie fără să rescrieți tot
  • Să permiteți traficul de întoarcere fără să deschideți rețeaua din exterior
  • Să depanați o listă folosind contorul de potriviri

2Definiția listei de acces8 min

Ideea, înainte de orice sintaxă

Imaginați-vă că ruterul are, pe fiecare ușă, o foaie de hârtie cu propoziții de forma: „dacă pachetul arată așa → lasă-l" sau „dacă pachetul arată așa → aruncă-l".

Fiecare propoziție are deci două părți: un criteriu (cum arată pachetul) și o acțiune (permit sau deny). O propoziție se numește regulă sau ACE (Access Control Entry). Foaia întreagă se numește listă de acces, sau ACL.

Atât. Restul cursului este despre cum se scriu criteriile, în ce ordine se citesc propozițiile și pe care dintre uși se lipește foaia.

Access Control List (ACL)
O succesiune ordonată de condiții definite de administrator, folosită pentru identificarea unor tipuri de trafic. Traficul identificat poate fi apoi filtrat, marcat, translatat, criptat sau asociat cu alte acțiuni. Lista în sine nu face nimic până nu este aplicată undeva.

Ultima propoziție merită subliniată, pentru că e sursa primei confuzii de laborator: o listă scrisă în configurație și neaplicată pe nicio interfață nu filtrează absolut nimic. Este doar un text. Aplicarea se face separat, cu o a doua comandă.

Filtrarea nu este singura utilizare

ACL-ul este, pe un echipament Cisco, modul standard de a răspunde la întrebarea „despre care trafic vorbim?". De aceea îl veți întâlni în locuri care nu au nicio legătură cu securitatea:

UtilizareCe face lista acoloUnde apare în curs
Filtraredecide ce trece și ce nu - singurul caz în care deny chiar aruncă pachetecursul de azi
NATidentifică adresele interne care au voie să fie translatatecursul 9
QoSidentifică traficul care primește prioritate în cozicursul 4 (802.1p)
Acces la echipamentde pe ce adrese se poate deschide o sesiune SSH pe rutersecțiunea 12
Filtrarea rutelorce actualizări de rutare se acceptă de la vecinicursul 10
VPNce trafic „interesant" declanșează construirea tunelului criptatcursul 9
Consecință practică Într-un ACL folosit pentru NAT sau pentru VPN, permit nu înseamnă „lasă să treacă", ci „acesta este traficul despre care vorbesc". Iar deny nu aruncă nimic - doar exclude traficul din selecție. Aceeași sintaxă, cu totul alt înțeles al cuvintelor.

Ce poate „vedea" o listă dintr-un pachet

Criteriile disponibile acoperă nivelurile 3 și 4 ale modelului OSI - exact antetele pe care ruterul le citește oricum:

NivelCriteriuExemplu de scriere
3adresa IP sursăhost 192.168.1.7
3adresa IP destinație10.0.0.0 0.0.0.255
3protocolul încapsulatip, icmp, ospf, gre
4portul sursă sau destinațieeq 80, range 20 21
4tipul mesajului ICMPecho, echo-reply
4starea conexiunii TCP (aproximativ)established

Ce nu poate vedea un ACL clasic: numele utilizatorului, conținutul paginii cerute, numele domeniului, faptul că un fișier conține un virus. Toate acestea sunt la nivelurile 5–7 și cer un echipament de alt tip.

Analogie Un portar la intrarea unei clădiri de birouri poate verifica de unde veniți, unde vreți să ajungeți și la ce etaj - pentru că scrie pe legitimație. Nu poate verifica ce aveți în geantă și nici ce intenții aveți. Un ACL este acest portar. Un firewall modern este portarul plus scanerul de bagaje.

3Ruter cu ACL sau firewall dedicat?6 min

Întrebarea apare imediat ce cineva realizează că ruterul poate filtra: dacă poate, de ce mai cumpărăm firewall-uri? Răspunsul e că fac lucruri diferite, iar diferența nu e de calitate, ci de rol.

Ruter cu liste de acces
  • Funcția principală este rutarea; filtrarea e un supliment
  • Decizii pe baza nivelurilor 3 și 4
  • Fără stare: fiecare pachet e judecat izolat, ca și cum ar fi primul
  • Nu costă nimic în plus - echipamentul există deja
  • Perfect pentru filtre simple și pentru protejarea echipamentului însuși
Firewall dedicat
  • Funcția principală este filtrarea; poate ruta, dar limitat
  • Decizii pe baza nivelurilor 3–7, cu inspecție de conținut
  • Cu stare: ține minte sesiunile deschise și acceptă automat răspunsurile
  • Criptare hardware, jurnalizare serioasă, interfață de administrare
  • Necesar la marginea oricărei rețele care expune servicii

Un ACL costă latență și încărcare pe procesorul ruterului: fiecare pachet trebuie comparat, în cel mai rău caz, cu toate regulile din listă. Pe un ruter mic, o listă de 300 de linii aplicată pe interfața de Internet se simte.

Unde se pun serviciile expuse public

Arhitectura clasică plasează un firewall între ruterul de margine și rețeaua internă și scoate serviciile publice - server web, server de mail - într-o zonă separată, numită DMZ (Demilitarized Zone).

Serviciile publice stau într-o zonă separată: dacă un server din DMZ este compromis, atacatorul nu are automat acces la rețeaua internă. Internetnesigur ruterACL de bază firewallcu stare3 interfețe DMZweb, mail, DNS public rețeaua internăstații, servere interne permis dinexterior inițiere doardinspre interior
Fig. 1 - Poziția ACL-ului în arhitectura de margine. Ruterul face prima triere, grosieră; firewall-ul face deciziile fine și ține evidența sesiunilor.

4Cum se citește o listă de reguli10 min

Aceasta este secțiunea care, dacă e înțeleasă bine, face restul cursului aproape banal. Sunt trei propoziții.

Cele trei propoziții
1. Regulile se testează secvențial, de sus în jos.
2. La prima potrivire se aplică acțiunea, iar restul listei nu se mai citește.
3. Dacă nicio regulă nu se potrivește, se aplică deny any - o regulă invizibilă, aflată automat la sfârșitul oricărei liste.
Parcurgerea unei liste, pas cu pas
Lecția care se învață o singură dată O listă aplicată din greșeală pe interfața prin care sunteți conectat prin SSH vă va deconecta instantaneu de la echipament, iar reconectarea nu va mai fi posibilă. Într-un laborator este o lecție de zece secunde; într-o rețea reală, pe un ruter aflat la 200 de kilometri, este o deplasare la fața locului.

Obiceiul profesional: pe echipamente aflate la distanță, aplicați lista cu un reload in 5 programat înainte. Dacă vă blocați singur, ruterul repornește peste cinci minute cu configurația veche. Dacă totul merge, anulați repornirea cu reload cancel.

Ordinea de parcurgere, ca exercițiu

Puneți pașii în ordine

5Unde se aplică o listă10 min

O listă scrisă nu face nimic. Ca să aibă efect, trebuie legată de un loc precis, iar locul are trei coordonate.

CoordonatăCe înseamnăValori
protocolul rutatpentru ce familie de adrese se aplicăIPv4, IPv6
interfațape ce ușă a ruterului stă foaiaGi0/0, Se0/1/0, VLAN 10…
direcțiatraficul care intră sau cel care iesein, out
„In" și „out" se judecă din perspectiva ruterului

Aceasta e sursa a jumătate din greșelile de laborator. in și out nu se referă la rețeaua dumneavoastră, ci la ruter.

in = traficul care intră în ruter prin acea interfață, venind dinspre cablu.

out = traficul care iese din ruter prin acea interfață, plecând spre cablu.

Deci același pachet, care merge de la LAN spre Internet, este in pe interfața dinspre LAN și out pe interfața dinspre Internet. Puteți alege să îl opriți în oricare dintre cele două locuri - dar în locuri diferite, cu efecte diferite.

cadru primit ACL inbound?pe interfața de intrare decizia de rutaretabela de rutare ACL outbound?pe interfața de ieșire pachet trimis deny → drop deny → drop fără rută → drop Un pachet poate fi filtrat de două ori: la intrare și la ieșire.
Fig. 2 - Traseul unui pachet prin ruter. ACL-ul inbound este verificat înainte de decizia de rutare, deci un pachet respins acolo nici măcar nu consumă timp de căutare în tabelă.
De ce inbound este, de obicei, mai eficient Un pachet oprit la intrare este aruncat înainte ca ruterul să caute în tabela de rutare, să decrementeze TTL și să recalculeze suma de control. Pentru trafic pe care oricum nu îl vrem, e muncă economisită.

Excepția: dacă o singură regulă trebuie să se aplice traficului venit din mai multe interfețe de intrare, o singură listă out pe interfața de ieșire înlocuiește trei sau patru liste in.
Exercițiu rezolvat

Un ruter cu 2 interfețe rulează dual stack (IPv4 și IPv6). Care este numărul maxim de ACL-uri de filtrare care pot fi aplicate simultan?

Vezi rezolvarea

Regula generală: pe o interfață, pentru un protocol rutat și o direcție, poate exista o singură listă activă.

Deci: 2 interfețe × 2 protocoale rutate × 2 direcții = 8 liste.

Corolarul practic: dacă aplicați o a doua listă pe aceeași interfață, direcție și protocol, ea nu se adaugă la prima - o înlocuiește, tăcut. Un motiv în plus să folosiți liste cu nume, unde adăugarea unei reguli se face în interiorul listei existente.

6Masca wildcard12 min

Aici trebuie să vă dezvățați ceva. Într-o listă de acces, adresele nu se însoțesc de mască de rețea, ci de mască wildcard, iar regula ei este exact inversă.

Regula wildcard, în două rânduri
Bitul 0 înseamnă „acest bit trebuie să se potrivească".
Bitul 1 înseamnă „ignoră acest bit, poate fi orice".
De ce e pe dos și cum să nu vă mai încurcați

La masca de rețea, 1 înseamnă „partea de rețea" - adică partea fixă. La wildcard, partea fixă e marcată cu 0.

Trucul de memorare: la wildcard, 1 = wild = liber = orice. Cifra 1 seamănă cu un semn de exclamare: „nu mă interesează!".

Iar pentru cazurile obișnuite există o scurtătură aritmetică: wildcard = 255.255.255.255 minus masca. Scădeți octet cu octet:

255.255.255.255 − 255.255.255.0  =  0.0.0.255
255.255.255.255 − 255.255.248.0 =  0.0.7.255

Wildcard-ul poate însă face lucruri pe care o mască de rețea nu le poate. Masca cere ca biții de 1 să fie contigui, de la stânga. Wildcard-ul nu are această restricție: putem lăsa un bit de 0 pe ultima poziție și selecta astfel doar adresele pare dintr-o rețea. E rar folosit, dar explică de ce cele două nu sunt același lucru cu semnele schimbate.

Testor de mască wildcard

Porniți de la ce e deja în casetă: 172.16.8.0 0.0.7.255 acoperă opt rețele de clasă C consecutive, de la 172.16.8.0 la 172.16.15.255. Uitați-vă la reprezentarea binară: cei trei biți liberi din al treilea octet produc exact 2³ = 8 combinații.

Apoi încercați trei lucruri:

  • wildcard 0.0.0.0 peste 10.1.1.7 - o singură adresă, echivalentul lui host;
  • wildcard 0.0.0.1 peste 11.2.2.90 - exact două adrese, .90 și .91; e trucul prin care două reguli devin una;
  • wildcard 255.255.255.255 peste orice adresă - absolut tot, echivalentul lui any.

Cuvintele cheie care scurtează scrierea

Cuvânt cheieEchivalent completSens
any0.0.0.0 255.255.255.255orice adresă
host XX 0.0.0.0exact adresa X
adresă scrisă singurăX 0.0.0.0tot exact adresa X, în listele standard

Calculator: de la prefix la wildcard și înapoi

Prefix → wildcard

Alegeți /22 și citiți rezultatul: wildcard-ul este 0.0.3.255, adică patru rețele de clasă C. Alegeți /30 - cazul legăturilor între rutere - și obțineți 0.0.0.3: patru adrese, din care două utilizabile.

Exercițiu rezolvat

Scrieți criteriul care selectează doar subrețelele 192.168.16.0/24 până la 192.168.19.0/24, într-o singură linie.

Vezi rezolvarea

Sunt patru rețele de clasă C consecutive, deci un bloc de 4 × 256 = 1024 adrese, adică un /22.

Verificarea alinierii: 16 împărțit la 4 dă rest 0, deci blocul este aliniat și poate fi scris ca prefix unic. (Dacă am fi pornit de la .17, nu s-ar fi putut.)

Wildcard-ul pentru /22 este 0.0.3.255. Criteriul se scrie:

192.168.16.0 0.0.3.255

Verificare: al treilea octet are ultimii doi biți liberi, deci ia valorile 16, 17, 18, 19. Exact ce voiam.

7Listele standard10 min

TipIdentificareCriteriiUnde se plasează
Standardnumere 1–99 și 1300–1999doar adresa sursăcât mai aproape de destinație
Extinsănumere 100–199 și 2000–2699sursă, destinație, protocol, portcât mai aproape de sursă
Cu numeun nume ales de administratorstandard sau extinsădupă tipul ei

O listă standard răspunde la o singură întrebare: de unde vine pachetul? Nu poate spune nimic despre destinație, protocol sau port. E puțin - dar e suficient pentru cazul frecvent „stația aceasta nu are voie în segmentul acela".

anatomia unei reguli standard
R(config)# access-list 50 deny host 172.16.1.1
                       │   │    │
                       │   │    └── criteriul: ce sursa
                       │   └─────── actiunea: permit sau deny
                       └─────────── numarul listei (1-99 => standard)
exemplu complet: blochează o stație, permite restul rețelei
R(config)# access-list 50 remark blocheaza statia problematica
R(config)# access-list 50 deny host 172.16.1.1
R(config)# access-list 50 permit 172.16.0.0 0.0.255.255

R(config)# interface fastEthernet 0/1
R(config-if)# ip access-group 50 in
Ordinea decide totul Dacă cele două reguli ar fi inversate, stația 172.16.1.1 s-ar potrivi cu permit 172.16.0.0 0.0.255.255 - pentru că face parte din acea rețea - ar fi acceptată, iar regula de deny nu ar fi verificată niciodată.

Regula mai specifică trebuie să fie întotdeauna deasupra celei mai generale. Aceasta este singura regulă de aur a listelor de acces.

De ce lista standard se plasează lângă destinație

De ce lista standard merge lângă destinație

8Listele extinse12 min

Lista extinsă răspunde la patru întrebări deodată: de unde, unde, cu ce protocol și pe ce port. Prețul este o sintaxă mai lungă și obligația de a nu greși ordinea argumentelor.

anatomia unei reguli extinse
access-list 101 deny tcp host 172.16.6.1 192.168.1.0 0.0.0.255 eq 23
            │    │    │        │              │                  │
            │    │    │        │              │                  └ portul destinatie
            │    │    │        │              └──── destinatia + wildcard
            │    │    │        └───────────────── sursa (aici: o singura statie)
            │    │    └────────────────────────── protocolul: ip, tcp, udp, icmp...
            │    └─────────────────────────────── actiunea
            └──────────────────────────────────── numarul (100-199 => extinsa)
Ordinea argumentelor: sursă înainte de destinație, întotdeauna Este greșeala numărul unu la liste extinse. deny tcp A B eq 80 înseamnă „de la A spre B, portul 80 al lui B". Dacă inversați A și B, lista este sintactic corectă și complet inutilă.

Iar dacă vreți să filtrați după portul sursă, acesta se scrie imediat după sursă: permit tcp any eq 80 192.168.0.0 0.0.0.255 înseamnă „de la orice server web, spre rețeaua noastră".

Protocoale și porturi uzuale

ServiciuProtocolPortCuvânt cheie IOS
WebTCP80eq www sau eq 80
Web securizatTCP443eq 443
SSHTCP22eq 22
TelnetTCP23eq telnet
FTP (control)TCP21eq ftp
DNSUDP (și TCP)53eq domain
DHCPUDP67, 68eq bootps / eq bootpc
PingICMP-echo, echo-reply

Operatorii disponibili pentru porturi: eq (egal), neq (diferit), lt (mai mic), gt (mai mare) și range 20 21 (interval închis).

patru reguli extinse, citite în cuvinte
! permite tot traficul IP de la o singura statie, catre orice destinatie
access-list 101 permit ip host 10.0.0.1 any

! opreste tot traficul cu originea in reteaua 10.0.0.0/24
access-list 101 deny ip 10.0.0.0 0.0.0.255 any

! opreste Telnet de la o statie anume catre o retea anume
access-list 101 deny tcp host 172.16.6.1 192.168.1.0 0.0.0.255 eq 23

! permite Telnet de la toate statiile dintr-o retea, spre oriunde
access-list 101 permit tcp 172.16.6.0 0.0.0.255 any eq telnet

Evaluator interactiv

Evaluator de listă de acces

Editați lista din caseta de sus și urmăriți cum se schimbă verdictele. Trei observații merită făcute cu atenție.

Prima. Regula 4, deny ip host 192.168.10.66 any, pare să blocheze stația problematică - dar tabelul arată că pachetul ei este permis, de regula 3. Motivul este ordinea: permit icmp 192.168.10.0 0.0.0.255 any se potrivește prima, iar restul listei nu se mai verifică. Mutați regula 4 deasupra regulii 3 și priviți cum se schimbă verdictul. Aceasta este, în două rânduri, întreaga capcană a listelor de acces: o regulă corectă, plasată prea jos, nu există.

A doua. Ultimul pachet, venit din altă rețea, nu se potrivește cu nicio regulă și cade pe deny implicit - deși nimeni nu a scris acea linie nicăieri.

A treia. Ștergeți ultima linie, permit ip 192.168.10.0 0.0.0.255 any, și priviți câte pachete rămân permise. Este demonstrația practică a faptului că o listă fără o linie de permisiune finală este un zid.

Unde se plasează lista extinsă

De ce regulile de plasare sunt inversate O listă standard nu poate specifica destinația. Plasată lângă sursă, ar bloca traficul acelei surse spre orice destinație. Plasarea lângă destinație limitează dauna la exact segmentul vizat.

O listă extinsă descrie precis și sursa, și destinația, deci nu există risc de daună colaterală. Atunci e mai eficient să opriți traficul cât mai devreme, ca să nu consume bandă traversând rețeaua degeaba.
Ce tip de listă, unde

9Listele cu nume și editarea lor7 min

Listele numerotate au două neajunsuri serioase, iar al doilea e cel care doare.

Listă numerotată
  • Se cheamă „254" - peste șase luni nimeni nu mai știe ce face
  • Nu se poate șterge o singură linie. no access-list 254 șterge toată lista
  • Regulile noi se adaugă obligatoriu la sfârșit - deci sub permit-ul general
  • O modificare înseamnă: șterge tot, rescrie tot, sperând că nu ai uitat nimic
Listă cu nume
  • Se cheamă FILTRU_DMZ_IN - se înțelege din nume
  • Fiecare regulă are un număr de secvență, iar no 30 șterge doar regula 30
  • O regulă nouă se poate insera între altele, dându-i un număr intermediar
  • Este forma obligatorie pentru liste reflexive și pentru IPv6
De ce numerele de secvență merg din 10 în 10

IOS numerotează automat regulile cu 10, 20, 30… tocmai ca să vă lase loc între ele. Dacă mai târziu aveți nevoie de o regulă între 10 și 20, îi dați numărul 15 și ea se așază exact acolo.

Dacă ați fi numerotat din 1 în 1, nu ați mai fi avut unde insera nimic - și ar fi trebuit să renumerotați lista cu ip access-list resequence.

crearea și editarea unei liste cu nume
R(config)# ip access-list extended FILTRU_LAN_IN
R(config-ext-nacl)# 20 permit ip any any

! ne dam seama ca lipsesc doua reguli, si trebuie sa fie INAINTE
R(config-ext-nacl)# 5 permit icmp host 10.0.0.1 any
R(config-ext-nacl)# 10 deny icmp any any

! regula de pe linia 5 avea adresa gresita: o stergem punctual
R(config-ext-nacl)# no 5
R(config-ext-nacl)# 5 permit icmp host 10.0.0.2 any

! aplicarea pe interfata - la fel ca la listele numerotate
R(config)# interface fastEthernet 0/1
R(config-if)# ip access-group FILTRU_LAN_IN in
Metoda de siguranță pentru liste lungi Chiar și cu liste cu nume, pentru o modificare majoră profesioniștii lucrează așa: copiază lista din show running-config într-un editor de text, o modifică acolo, o testează mental, apoi șterge lista veche și lipește noua versiune într-o singură operație. Astfel rețeaua nu petrece niciun moment cu o listă pe jumătate scrisă.

10Liste care țin cont de context9 min

Problema traficului de întoarcere

Vrem ca stațiile noastre să navigheze pe web, dar nimeni din exterior să nu poată iniția o conexiune spre ele. Sună simplu. Nu este.

De ce un ACL clasic nu poate exprima asta

Un ACL vede pachete, nu conexiuni. Când serverul web răspunde, pachetul lui vine dinspre exterior, spre rețeaua noastră - exact ca un pachet trimis de un atacator.

Ruterul nu ține minte că noi am întrebat primii. Fiecare pachet e judecat ca și cum ar fi primul din lume. Așa că orice regulă care lasă răspunsul să intre lasă și atacul să intre.

Aceasta este definiția lui fără stare (stateless), și e diferența fundamentală față de un firewall.

Soluția minimală: established

Opțiunea established se potrivește cu pachetele TCP care au bitul ACK sau RST setat - adică cele care fac parte dintr-o conversație deja pornită. Primul pachet al unei conexiuni noi, cel cu SYN singur, nu are ACK, deci nu se potrivește și este oprit.

ieșire liberă, intrare doar ca răspuns
R0(config)# ip access-list extended IESIRE_HTTP
R0(config-ext-nacl)# 10 permit tcp 192.168.0.0 0.0.0.255 any eq www

R0(config)# ip access-list extended INTRARE_HTTP
R0(config-ext-nacl)# 10 permit tcp any eq www 192.168.0.0 0.0.0.255 established

R0(config)# interface fa1/0
R0(config-if)# ip access-group IESIRE_HTTP out
R0(config-if)# ip access-group INTRARE_HTTP in

Observați structura celei de-a doua reguli: sursa este any eq www - orice server web - iar destinația este rețeaua noastră. Este oglinda primei reguli, cu sursa și destinația inversate, plus cuvântul magic la final.

Limitele lui established
  • Verifică doar biții ACK și RST - un atacator poate fabrica un pachet cu ACK setat, fără să existe vreo conexiune
  • Funcționează exclusiv pentru TCP; UDP-ul și ICMP-ul nu au biți de control, deci nu au echivalent
  • Nu se descurcă cu aplicații care negociază porturi dinamic (FTP activ, SIP, jocuri online)

Listele reflexive

Un ACL reflexiv construiește dinamic regulile de întoarcere, pe baza sesiunilor observate la ieșire. Când o stație internă deschide o conexiune, ruterul creează automat, temporar, regula inversă - și o șterge când sesiunea se încheie sau expiră.

Se definesc doar prin liste extinse cu nume și folosesc două cuvinte cheie: reflect, care marchează traficul de urmărit, și evaluate, care aplică regulile generate din el.

ACL reflexiv pentru HTTP și ICMP
R0(config)# ip access-list extended OUTBOUND
R0(config-ext-nacl)# 10 permit tcp 192.168.0.0 0.0.0.255 any eq www reflect TRAFIC_HTTP
R0(config-ext-nacl)# 20 permit icmp 192.168.0.0 0.0.0.255 any reflect TRAFIC_ICMP

R0(config)# ip access-list extended INBOUND
R0(config-ext-nacl)# 10 evaluate TRAFIC_HTTP
R0(config-ext-nacl)# 20 evaluate TRAFIC_ICMP

R0(config)# interface fastEthernet 1/0
R0(config-if)# ip access-group OUTBOUND out
R0(config-if)# ip access-group INBOUND in

Acesta este primul pas real spre un firewall cu stare: ruterul nu mai judecă fiecare pachet izolat, ci ține minte ce sesiuni au fost inițiate din interior. Spre deosebire de established, funcționează și pentru UDP și ICMP, pentru că se bazează pe perechea de adrese și porturi, nu pe biții TCP.

Liste condiționate temporal

Uneori regula nu depinde de trafic, ci de ceas: acces permis doar în programul de lucru, backup permis doar noaptea.

Telnet permis doar în programul de lucru
R(config)# time-range PROGRAM_LUCRU
R(config-time-range)# periodic Monday Tuesday Wednesday Thursday Friday 9:00 to 18:00

R(config)# ip access-list extended ACL_ORAR
R(config-ext-nacl)# 10 permit tcp any 192.168.1.0 0.0.0.255 eq telnet time-range PROGRAM_LUCRU

R# show time-range
Ceasul ruterului trebuie să fie corect O listă temporală depinde de ora echipamentului. Un ruter repornit își pierde ceasul și pornește, de regulă, de la 1 martie 1993 - moment în care regula dumneavoastră nu se mai aplică niciodată, sau se aplică permanent. Sincronizarea prin NTP nu este un moft, ci o precondiție.

11Verificare, jurnalizare, comentarii6 min

Trei mecanisme fac diferența între un ACL scris și un ACL înțeles.

Comentariile - remark, maximum 100 de caractere - explică intenția fiecărui grup de reguli, nu sintaxa lor. Peste șase luni, când altcineva citește configurația, un comentariu valorează cât zece minute de reconstituit raționamentul.

Jurnalizarea - cuvântul cheie log la finalul unei reguli - generează un mesaj care conține numărul listei, acțiunea, adresa sursă și numărul de pachete. Mesajul apare la primul pachet care se potrivește și apoi din 5 în 5 minute, mecanism gândit exact ca să nu inunde jurnalele.

Terminal: comenzile de verificare
Contorul de potriviri este cel mai bun instrument de depanare Rulați show access-lists și uitați-vă la numărul din paranteze de lângă fiecare regulă.

Zero potriviri pe o regulă care ar trebui să prindă trafic înseamnă că traficul nu ajunge acolo: fie lista e pe interfața greșită, fie pe direcția greșită, fie o regulă de deasupra a prins deja traficul. În exemplul din terminal, regula 40 are 0 matches - și e chiar cazul discutat mai devreme, în care regula 30 prinde traficul înaintea ei.

Multe potriviri pe un deny pe care nu îl așteptați înseamnă că filtrați ceva ce nu voiați. Ambele situații se văd în trei secunde.

12Protejarea accesului la echipament5 min

Până acum am filtrat trafic care trece prin ruter. Ultima aplicație este diferită: filtrăm traficul care se oprește la ruter - sesiunile de administrare.

Un ruter accesibil prin SSH de oriunde din Internet este o parolă distanță de un dezastru. Soluția standard nu este o listă pe interfață, ci una aplicată pe liniile virtuale (VTY), cu o comandă diferită: access-class în loc de ip access-group.

SSH permis doar din rețeaua administratorilor
R(config)# access-list 5 remark doar statiile administratorilor
R(config)# access-list 5 permit 192.168.99.0 0.0.0.255

R(config)# line vty 0 15
R(config-line)# access-class 5 in
R(config-line)# transport input ssh
R(config-line)# exec-timeout 5 0
ComandăUnde se aplicăCe filtrează
ip access-grouppe o interfațătraficul care trece prin ruter
access-classpe liniile VTYcine se poate conecta la ruter

Avantajul acestei abordări: lista se aplică o singură dată și acoperă toate interfețele, indiferent pe unde ar veni încercarea de conectare. Un ACL pe interfață ar trebui replicat pe fiecare ușă.

13Erori frecvente4 min

  • „Am scris lista, dar nu filtrează nimic" Lista există în configurație, dar nu a fost aplicată pe nicio interfață. Este doar text. Verificați cu show ip interface ce listă e aplicată și pe ce direcție.
  • „Am pus regula, dar nu are efect" O regulă de deasupra prinde deja traficul. Regula dumneavoastră nu e citită niciodată. show access-lists → 0 matches. Mutați regula mai sus. Specificul deasupra generalului.
  • „Am blocat tot, deși voiam să blochez o singură stație" Lista are doar reguli deny. După ele vine deny any implicit. Adăugați o linie permit finală pentru restul traficului.
  • „Ping-ul merge într-un sens, dar nu se întoarce" Ați permis traficul dus și ați uitat răspunsul. Ca și la rutare, filtrarea se gândește în ambele sensuri. Fie o regulă pentru echo-reply, fie established, fie o listă reflexivă.
  • „Am confundat in cu out" Direcția se judecă din perspectiva ruterului, nu a rețelei. Întrebați-vă: pachetul intră în ruter pe această interfață, sau iese din el?
  • „Am folosit masca de rețea în loc de wildcard" permit 10.0.0.0 255.255.255.0 se acceptă fără eroare și selectează cu totul altceva. Wildcard = 255.255.255.255 minus masca. Verificați cu show access-lists, unde IOS afișează explicit wildcard bits.
  • „Am aplicat lista pe interfața prin care eram conectat" Sesiunea se închide instantaneu și nu se mai poate redeschide. Pe echipamente la distanță: reload in 5 înainte, reload cancel după ce confirmați că merge.

14Rezumat și glosar4 min

Ce trebuie să rămână
  • Un ACL este o listă ordonată de perechi criteriu–acțiune, citită de sus în jos, până la prima potrivire.
  • La sfârșitul oricărei liste există un deny any invizibil.
  • Lista trebuie aplicată pe o interfață și o direcție ca să aibă efect.
  • in și out se judecă din perspectiva ruterului.
  • Wildcard: 0 = trebuie să se potrivească, 1 = ignoră. Este inversul măștii.
  • Standard = doar sursa → lângă destinație. Extinsă = sursă, destinație, protocol, port → lângă sursă.
  • Listele cu nume permit editarea unei singure linii; cele numerotate, nu.
  • Traficul de întoarcere cere established sau o listă reflexivă.
  • show access-lists și contorul de potriviri rezolvă majoritatea problemelor.
ACLlistă ordonată de condiții pentru identificarea traficului
ACEo singură regulă din listă: un criteriu plus o acțiune
deny any implicitregula invizibilă de la sfârșitul oricărei liste
wildcardmască în care 0 înseamnă „fix" și 1 înseamnă „orice"
standardlistă care filtrează doar după adresa sursă
extinsălistă care filtrează după sursă, destinație, protocol și port
access-groupcomanda care leagă o listă de o interfață și o direcție
access-classcomanda care leagă o listă de liniile VTY
establishedopțiune care prinde doar pachetele TCP cu ACK sau RST
listă reflexivălistă care își generează singură regulile de întoarcere
remarkcomentariu în interiorul unei liste
DMZzonă separată pentru serviciile expuse public

15Întrebări de verificare6 min

16Direcții de aprofundare2 min

Am învățat să descriem traficul și să îl oprim pe un ruter Cisco, fără nicio noțiune de stare și fără niciun fel de criptografie. Cursul următor privește aceeași problemă din perspectiva unui firewall cu stare și a unei mașini Linux, și adaugă exact dimensiunea care lipsește complet aici: cum protejăm conținutul, nu doar traseul.

Laboratorul 6 configurează liste standard și extinse pe topologia firmei, împreună cu NAT - și veți vedea acolo, în practică, ce înseamnă „aceeași listă, alt înțeles al cuvântului permit".

  • Cisco - Security Configuration Guide: Access Control Lists
  • RFC 3871 - cerințe operaționale de securitate pentru infrastructura IP
  • RFC 2827 (BCP 38) - filtrarea la intrare împotriva adreselor sursă falsificate
  • Manualul iptables(8), pentru comparație cu abordarea Linux