Home Technologie siecioweSecurity ACL – Wszystko co musisz wiedzieć o listach dostępu
ACL Access Control List

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

Rafał Rudewicz

Listy kontroli dostępu to zestaw komend które definiują które pakiety mogą zostać wpuszczone lub wypuszczone z sieci w zależności od tego co mają segmenty w nagłówkach. Filtrowanie może odbywać się na podstawie źródłowego adresu ip, w takim wypadku mówimy o standardowych listach dostępowych lub w znacznie rozszerzonej wersji na podstawie źródłowego i/lub docelowego adresu ip, protokołu oraz konkretnego numeru portu tcp/udp. Dodatkowo każda ACL’ka jest przypisywana do interfejsu w konkretnym kierunku (in lub out).

Poprawnie skonfigurowane ACL’ki 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

Poprawnie skonfigurowane ACL’ki zapewniają:

Standard ACL

Access Control Lists dzielą się zasadniczno na standardowe (tylko ipv4) i rozszerzone (ipv4/ipv6) oraz ze względu na sposób identyfikacji na numeryczne i nazwane.

Standardowe ACL tworzymy poprzez wydanie komendy access-list  następnie podajemy identyfikator listy (słownie lub numerycznie). W kolejnym kroku definiujemy czy ruch ma zostać przepuszczony (permit) lub odrzucony (deny). Na końcu polecenia definiujemy zakres adresów których dotyczy lista dostępowa poprzez podanie adresu ip podsieci/hosta oraz wildcard mask (maska blankietowa) lub poprzez użycie słówka 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’ki możemy dodatkowo dodać opis w używająć 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ą ACL’kę należy podpiąć do interfejsu we 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’kę dla dostępu konsolowego lub wirtualnego terminalu dodajemy za pomocą komendy access-class

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

Logika ACL

Tworząc dowolną listę należy pamiętać, że szukając dopasowania router przeszukuje listę do pierwszego pasującego dopasowania. Jeśli na początku listy będą zbyt ogólne wpisy to istnieje szansa przepuszczenia ruchu który przy prawidłowej konfiguracji powinien zostać zablokowany.

Tworząc dowolną listę należy pamiętać, że szukając dopasowania router przeszukuje listę do pierwszego pasującego dopasowania. Jeśli na początku listy będą zbyt ogólne wpisy to istnieje szansa przepuszczenia ruchu który przy prawidłowej konfiguracji powinien zostać zablokowany.

Extended ACL

Rozszerzone listy dostępu pozwalają na znacznie precyzyjniejsze określenie jakiego rodzaju ruchu dotyczy konkretna lista poprzez określenie adresu ip źródła i celu, rodzaju protokołu oraz numeru portu.

Rozszerzone ACL tworzymy poprzez wydanie komendy access-list  następnie podajemy identyfikator listy (słownie lub numerycznie). W kolejnym kroku definiujemy czy ruch ma zostać przepuszczony (permit) lub odrzucony (deny). Opcjonalnie możemy zdefiniować czy router ma fitrować pakiety tcp/udp lub innego protokołu np. igmp. W rozszerzonych listach oprócz źródłowego adresu ip należy również zdefiniować docelowy zakres adresów których dotyczy lista dostępowa. Ostatnim  krokiem jest podanie portu lub zakresu portów. Ponieważ część protokołów wymaga nawiązania połaczenia w dwóch kierunkach należy zezwolnić na nawiązanie sesji na żądanie pochodzące z sieci wewnętrznej po przez 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

Gotową ACL’kę należy podpiąć do interfejsu we właściwym kierunku (ruch wchodzący – in lub wychodzący out)

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

Modyfikacja ACL

Istniejące listy możemy edytować na dwa sposoby. Pierwszy sposób to usunięcie konkretnej listy dostępowej i wprowadzenie jej od nowa. Pamiętać należy jednak, że dana access-lista będzie nadal widnieć pod interfejsami do których została zastosowana, co może skutkować całkowitym zablokowaniem ruchu, w końcu na końcu każdej access-listy mamy 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 konkrentej 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

IPv6 Access control lists

ACL dla IP w wersji 6 są bardzo podobno do rozszerzonych list dostępowych IPv4 jednakże mają kilka różnić. Wszystkie listy są nazwane (nazwy muszą się różnić od tych dla ipv4), nie mamy już numerowanych list. Z użycia znikły również maski blankietowe (wildcard mask). Z różnic na końcu każdej ACL pojawiają się zawsze 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 lokajnej na rzecz usługi warstwy 3 Neighbor discovery z automatu 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ą ACL’kę należy podpiąć do interfejsu we właściwym 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ępową dla dostępu konsolowego lub wirtualnego terminalu dodajemy tak samo jak w przypadku ACL dla IPv4

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

Najlepsze praktyki podczas konfiguracji ACL

  • Standard ACL zakładamy jak najbliżej celu, ponieważ ruch filtrujemy na podstawie źródła pakietu.
  • Extended ACL zakładamy jak najbliżej źródła celu, ponieważ jesteśmy w stanie bardzo precyzyjnie określić który rodzaj ruchy jest przez niepożądany i poprzez takie filtrowanie możemy zaoszczędzić przepustowość w naszej sieci.
  • Na końcu każdej ACL dodajemy permit lub deny any, pozwala to dokładniej śledzić statyski naszej listy ponieważ standardowo każda ACL kończy się niejawną opcją deny any

Możesz być również zainteresowany tymi artykułami:

Zostaw komentarz