Routing & Switching

ACL - Wszystko co musisz wiedzieć o listach dostępu

ACL Access Control List
W: Routing & Switching

Listy kontrolne dostępu to zestawy poleceń, które określają, które pakiety mogą być przyjęte lub odrzucone przez sieć w zależności od zawartości segmentów w nagłówkach.

Filtrowanie może być wykonane na podstawie adresu IP źródłowego, co określa standardowe listy dostępowe, lub w bardziej rozbudowanej formie - na podstawie adresu IP źródłowego i/lub docelowego, protokołu oraz konkretnej liczby portu TCP/UDP.

Dodatkowo, każda lista ACL jest przypisywana do interfejsu w określonym kierunku (in lub out).

Przykładowa topologia sieci z wykorzystaniem ACL

Poprawnie skonfigurowane listy ACL zapewniają:

  • Podstawową optymalizację ruchu w sieci poprzez odrzucanie niepożądanych pakietów.
  • Dodatkową warstwę zabezpieczeń poprzez ściśle określone reguły, które definiują, które hosty/podsieci mogą się ze sobą komunikować.
  • Ograniczenie dostępu użytkownikom do zasobów sieciowych poprzez filtrowanie ruchu na podstawie protokołów, np. ftp lub http/https.

Logika ACL

Tworząc listę reguł, ważne jest pamiętanie, że router szuka dopasowania w kolejności, aż znajdzie pierwsze pasujące. Jeśli na początku listy znajdują się zbyt ogólne reguły, istnieje ryzyko, że ruch, który powinien być zablokowany przy właściwej konfiguracji, zostanie przepuszczony.

Dlatego kluczowe jest odpowiednie uporządkowanie reguł w liście, aby najbardziej szczegółowe reguły były umieszczone na początku. W ten sposób zapewnimy, że ruch sieciowy zostanie poprawnie zidentyfikowany i przetworzony zgodnie z oczekiwaniami.

Logika pracy ACL

Standardowe listy ACL

Listy ACL dzielą się zasadniczo na standardowe (tylko dla protokołu IPv4) i rozszerzone (dla protokołów IPv4/IPv6) oraz ze względu na sposób identyfikacji na numeryczne i nazwane.

Standardowe ACL tworzymy poprzez wpisanie polecenia access-list, a następnie podanie identyfikatora listy (słownie lub numerycznie). Następnie określamy, czy ruch ma być zezwolony (permit) lub zabroniony (deny). Na końcu definiujemy zakres adresów objętych listą dostępu, podając adres IP podsieci/hosta oraz maskę odwrotną (wildcard mask) lub używając słowa kluczowego any.

R1(config)#access-list 1 permit 192.168.0.0 0.0.0.255
R1(config)#access-list 1 deny any

Wildcard mask tworzymy następująco:
255.255.255.255
– 255.255.255.000   odejmujemy maskę podsieci
= 000.000.000.255

Do każdej ACL możemy dodatkowo dodać opis, używając polecenia remark.

R1(config)#access-list 1 remark Permit hosts from 192.168.0.0 LAN
R1#show running-config | include access-list 1
access-list 1 remark Permit hosts from 192.168.0.0 LAN
access-list 1 permit 192.168.0.0 0.0.0.255
access-list 1 deny any

Gotową listę ACL należy przypisać do odpowiedniego interfejsu w właściwym kierunku (ruch wchodzący – in lub wychodzący – out).

R1(config)#interface fastethernet 0/1 
R1(config-if)#access-group 1 in

ACL dla dostępu do konsoli lub wirtualnego terminalu dodajemy za pomocą polecenia access-class.

R1(config)#line vty 0 4 
R1(config-line)#access-class 1 in

Rozszerzone listy ACL

Rozszerzone listy ACL pozwalają bardziej precyzyjnie określić rodzaj ruchu dla konkretnej listy poprzez określenie adresu IP źródłowego i docelowego, rodzaju protokołu oraz numeru portu.

Tworzenie rozszerzonych ACL polega na wydaniu polecenia access-list, podaniu identyfikatora listy (słownie lub numerycznie) oraz określeniu, czy ruch ma być przepuszczony (permit) czy odrzucony (deny).

Dodatkowo można zdecydować, czy router ma filtrować pakiety TCP/UDP lub inne protokoły, np. IGMP. W rozszerzonych listach ACL oprócz adresu IP źródłowego należy również zdefiniować zakres docelowych adresów objętych listą dostępową.

Ostatnim krokiem jest podanie portu lub zakresu portów. Ponieważ niektóre protokoły wymagają nawiązania połączenia w obu kierunkach, należy zezwolić na nawiązanie sesji na żądanie pochodzące z sieci wewnętrznej poprzez opcję established.

R1(config)#access-list 103 permit tcp 192.168.0.0 0.0.0.255 any eq ssh
R1(config)#access-list 103 deny any any
R1(config)#access-list 104 permit tcp any 192.168.0.0 0.0.0.255 eq 80
R1(config)#access-list 105 permit tcp any 192.168.0.0 0.0.0.255 established

Modyfikacja ACL

Istniejące listy możemy edytować na dwa sposoby.

Pierwszym sposobem jest usunięcie konkretnej listy dostępowej i wprowadzenie jej od nowa. Należy jednak pamiętać, że dana lista dostępu nadal będzie widoczna pod interfejsami, do których została zastosowana. To może prowadzić do całkowitego zablokowania ruchu, ponieważ na końcu każdej listy dostępu znajduje się niejawne deny any.

R1(config)#no access-list 103

Drugi sposób to wykorzystanie numerów sekwencyjnych. Wprowadzając nowe pozycje do listy, są one automatycznie numerowane. Możliwe jest usunięcie lub nadpisanie konkretnej reguły, podając jej numer sekwencyjny.

R1#show access-lists
Extended IP access list 103
    10 permit tcp 192.168.0.0 0.0.0.255 any eq ssh
    20 deny any any
R1(config)#ip access-list extended 103
R1(config-ext-nacl)#no 10
R1#show access-lists 
Extended IP access list 103 
    20 deny any any

Listy ACL w IPv6

Listy ACL dla adresów IP w wersji 6 są bardzo podobne do rozszerzonych list dostępowych IPv4, jednak mają kilka różnic. Wszystkie listy są nazwane (nazwy muszą się różnić od tych dla IPv4), nie ma już numerowanych list. Zniknęły również maski blankietowe.

Na końcu każdej ACL zawsze pojawiają się niejawnie:

  • permit icmp any any nd-na
  • permit icmp any any nd-ns

Ponieważ IPv6 porzuciło mechanizm ARP do wykrywania hostów w sieci lokalnej na rzecz usługi warstwy 3 Neighbor Discovery, automatycznie zezwalamy na stosowanie komunikatów Neighbor Discovery — Neighbor Advertisement (nd-na) oraz Neighbor Discovery — Neighbor Solicitation (nd-ns).

R1(config)#ipv6 access-list NO-ACCESS-LAN
R1(config-ipv6-acl)# deny ipv6 any 2001:db8:cafe:30::/64
R1(config-ipv6-acl)# end

Gotową listę ACL należy przypisać do odpowiedniego interfejsu w odpowiednim kierunku (ruch wchodzący – in lub wychodzący – out).

R1(config)#interface gigabitethernet 0/1
R1(config-if)# ipv6 traffic-filter NO-ACCESS-LAN in

Listę dostępu dla dostępu konsolowego lub terminala wirtualnego dodajemy w taki sam sposób jak w przypadku listy ACL dla protokołu IPv4.

R1(config)#line vty 0 4 
R1(config-line)#access-class NO-ACCESS-LAN in

Najlepsze praktyki dotyczące konfiguracji ACL

Standardowe ACL powinno być umieszczone jak najbliżej celu, ponieważ filtrujemy ruch na podstawie źródła pakietu. Natomiast Extended ACL powinno być umieszczone jak najbliżej źródła ruchu, aby precyzyjnie określić, który rodzaj ruchu jest niepożądany. Dzięki takiej praktyce filtrowania możemy zaoszczędzić przepustowość w naszej sieci.

Na końcu każdej listy ACL zaleca się dodanie "permit" lub "deny any". Dzięki temu możliwe jest dokładniejsze monitorowanie statystyk listy. Warto zauważyć, że standardowo każde ACL kończy się domyślnie opcją "deny any".

Napisane przez
Rafał Rudewicz
Pasjonat sieci komputerowych i automatyzacji. CCNP Enterprise & DevNet Specialist. IP/MPLS SME. Dołącz do mnie, aby razem odkrywać fascynujący świat technologii!
Komentarze
Spis treści
Świetnie! Udało ci się pomyślnie zarejestrować.
Witaj z powrotem! Zalogowałeś się pomyślnie.
Pomyślnie subskrybowałeś Inna Sieć.
Twój link wygasł.
Sukces! Sprawdź swoją skrzynkę e-mailową, aby uzyskać magiczny link do logowania.
Sukces! Twoje informacje rozliczeniowe zostały zaktualizowane.
Twoje informacje rozliczeniowe nie zostały zaktualizowane.