> ## Content Index
> Fetch the complete content index at: https://innasiec.pl/llms.txt
> Use this file to discover other available public pages before exploring further.

# ACL - Wszystko co musisz wiedzieć o listach dostępu
- URL: https://innasiec.pl/acl-access-control-lists/
- Published: 2017-07-31T16:18:07.000Z
- Updated: 2024-06-25T20:10:00.000Z
- Author: Rafał Rudewicz
- Tags: #wordpress, Routing & Switching, #toc

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](https://innasiec.pl/content/images/2024/06/acl.webp)

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](https://innasiec.pl/content/images/2024/06/ACL-logic-1.webp)

### 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".