Listy ACL – kontrola dostępu
Czy zastanawialiście się w jaki sposób router filtruje ruch sieciowy? Skąd urządzenie wie, komu zezwolić np. na dostęp do sieci wewnętrznej LAN, a komu nie zezwolić? Z jakiego urządzenia np. możemy wyjść z sieci LAN na „świat”? Na te i na wiele innych pytań postaramy się odpowiedzieć w dzisiejszym artykule, który poświęcony jest listom kontroli dostępu.
Jeśli chcesz zobaczyć temat w formie video – KLIKNIJ 🙂
ACL – co to takiego?
ACL (ang. Access Control List), czyli lista kontroli dostępu. Ta funkcja służy głównie do filtrowania ruchu sieciowego i jest nie odłącznym elementem zabezpieczenia sieci. Listy filtrują taki ruch w oparciu
o adres źródła oraz maskę. Ponadto wytyczne mogą zawierać protokoły, numery portów, docelowy adres IP albo rodzaj wiadomości. Zdefiniowane zasady dostępu bądź zakazy wykonywane są zgodnie z zasadą „od góry do dołu” linijka po linijce. Innym zastosowaniem list ACL jest np.:
- definicja ruchu do translatora adresów sieciowych, czyli NAT;
- szyfrowanie;
- filtracja protokołów innych niż IP.
Lecz są to opcje zaawansowane i omówione zostaną w innym artykule.
Zastosowanie list
Do czego może posłużyć lista ACL Administratorowi?
- Zabezpieczenie dostępu do sieci – Administrator może zdefiniować obszary w swojej sieci LAN oraz określić ich dostępność urządzeniom znajdującym się w tej sieci.
- Określenie typu przenoszonego ruchu sieciowego – Administrator może określić uprawnienia użytkownikom do określonych usług np. użytkownicy mogą korzystać z komunikacji www ale wysyłać lub pobierać pliki z zewnątrz już nie mogą, gdyż zablokowany jest ruch FTP.
- Kontrola nad wydajnością sieci – Administrator może mieć kontrolę nad jakością swojej sieci poprzez np. zablokowanie ruchu video, dzięki czemu sieć będzie mniej obciążona i zwiększy się jej efektywność.
Zasada działania listy ACL
Jak wspomniano wcześniej listy filtrują ruch opierając się na adresie źródłowym oraz masce. Po co maska? Nie wystarczy sam adres IP źródła? Na to pytanie odpowiemy w dalszej części artykułu, gdyż
w tej chwili mogłoby to trochę wprowadzić zamieszanie. Zacznijmy od początku. Aby lepiej zrozumieć ogólną zasadę działania listy ACL przyjrzyjmy się poniższemu schematowi.

Przyjmijmy, że lista ACL została utworzona na routerze brzegowym. Załóżmy również, że pewne pakiety danych próbują zostać wysłane z sieci LAN w stronę sieci Internet i odwrotnie. Trafiają one do routera, który kieruje je do konkretnego portu. Na tych portach została przypisana utworzona przez Administratora lista dostępowa. Router przystępuje do przeglądania jej wpisów od góry do dołu, linijka po linijce w celu odpowiedniego dopasowania przychodzącego lub wychodzącego pakietu z informacją w liście. Pakiet zostanie przepuszczony jeśli w warunku listy do którego będzie dopasowanie, zadeklarowana została instrukcja typu permit. Natomiast jeśli w warunku będzie wpis typu deny, to pakiet zostanie odrzucony. Trzeba w tym miejscu zaznaczyć, że w przypadku wystąpienia pierwszego poprawnego dopasowania do warunków w liście ACL, kolejne warunki tej listy nie są już sprawdzane. Domyślnie na żadnych portach w routerze nie są stworzone żadne listy ACL.
A gdzie takie listy tworzymy? Przeważnie takie listy zakłada się na routerach łączących sieć wewnętrzną z siecią Internet, a także na routerach w dwóch różnych obszarach sieci wewnętrznej np. na routerze w głównej siedzibie firmy i routerze w oddziale firmy.
Budowa listy ACL
Listy dostępowe definiuje się na routerze w trybie konfiguracji globalnej. Każda lista posiada unikalny identyfikator, czyli liczbę. Trzeba pamiętać, że nie jest możliwe skonfigurowanie dwóch list
o takim samym identyfikatorze na jednym urządzeniu. Każda lista musi mieć swoją unikalną liczbę. Jaka to liczba? Czy może być ona dowolna? Niestety nie. Każdy taki numer określa rodzaj listy. Poniżej przedstawione zostały zakresy numerów do odpowiednich typów list:
- [1-99] – standardowa lista dostępu IP
- [100-199] – rozszerzona lista dostępu IP
- [1000-1099] – lista dostępu IPX SAP
- [1100-1199] – rozszerzona lista dostępu 48-bitowych adresów MAC
- [1200-1299] – lista dostępu adresu skonsolidowanego IPX
- [1300-1999] – standardowa lista dostępu IP (rozszerzony zakres)
- [200-299] – lista dostępu typu-kodu protokołu
- [300-399] – DECnet
- [600-699] – Appletalk
- [700-799] – lista dostępu 48-bitowych adresów MAC
- [800-899] – standardowa lista dostępu IPX
- [900-999] – rozszerzona lista dostępu IPX
- [2000-2699] – rozszerzona lista dostępu IP (rozszerzony zakres).
Aby stworzyć standardową listę ACL (ang. standard ACL) należy wykonać poniższe kroki:
- utworzenie listy – access-list [identyfikator]
- zdefiniowanie opcji dostępu: permit, jeśli zezwala się na niego lub denny, gdy się go odmawia – access-list [identyfikator] permit lub access-list [identyfikator] deny
- podanie adresu IP lub nazwę hosta – access-list [identyfikator] permit [adres lub host] lub access-list [identyfikator] denny [adres lub host].
Gdy lista została utworzona to następnie przypisuje się ją do konkretnego interfejsu na routerze. Jest to bardzo ważna czynność bez której lista nie będzie w ogóle działać. Aby tego dokonać przechodzimy do konfiguracji danego interfejsu na routerze i wydajemy poniższe polecenie
ip access-group [lista ACL] [in \ out].
In lub out określa czy lista jest wejściowa czy wyjściowa.
W urządzeniach Cisco występują dwa rodzaje list: standardowa i rozszerzona. Jaka jest różnica między tymi listami? Mianowicie lista standardowa jak wspomniano wcześniej filtruje ruch na podstawie adresu źródłowego IP. Jeśli chodzi o listę rozszerzoną ma ona znacznie więcej funkcji, gdyż filtruje ruch nie tylko na podstawie adresu źródłowego ale również według adresu docelowego, numeru portu, protokołu lub np. rodzaju wiadomości. Lecz dziś zajmiemy się tylko listami standardowymi. Rozszerzone omówimy w innym artykule.
Lista wejściowa i wyjściowa – zasady działania
Wracając do tematu list wejściowych in i wyjściowych out. Na czym polega różnica działania takich list? Na te pytania pomoże odpowiedzieć nam poniższy rysunek.

Jak możemy zaobserwować działanie listy ACL na wejście rozpoczyna się wejściem pakietu danych do routera. Router porównuje informacje zawarte w pakiecie do wpisów zawartych w liście ACL. Porównanie trwa tak długo aż router znajdzie pierwsze dopasowanie. Następnie router sprawdza
w trafionym wpisie czy pakiet danych może zostać przekazany dalej czy jednak ma zostać odrzucony. Może wystąpić też taka sytuacja, że po przeanalizowaniu wszystkich instrukcji w liście nie wystąpi żadne dopasowanie i wtedy pakiet zostaje z automatu odrzucony. Dlaczego tak się dzieje? Ponieważ
w liście ACL widnieje domyślna dodawana nie jawna instrukcja denny any, czyli odrzuć wszystko.
Teraz omówmy działanie listy ACL, która zostaje przypisana do interfejsu wyjściowego na routerze. Na początku router musi sprawdzić czy otrzymany pakiet danych jest możliwy do wysłania dalej. Aby to zrobić urządzenie przegląda wpisy w tablicy routingu. Jeśli takiej możliwości nie ma to router przerywa dalsze przekazywanie pakietów . Natomiast jeśli routing jest możliwy to wtedy analizuje wpisy w utworzonej liście ACL. Etap analizy wpisów listy ACL wygląda identycznie jak w przypadku analizy listy wejściowej. Jeśli dopasowanie istnieje to sprawdzana jest następnie instrukcja zezwalająca na wysłanie pakietu. Jeżeli takiego dopasowania nie ma to z automatu pakiet jest odrzucany. Tak więc różnica jest w krokach początkowych algorytmu kiedy pakiet z danymi dociera do routera. Reszta etapów algorytmu jest taka sama w obydwu przypadkach.
Tworzenie listy dostępu – praktyka
Aby lepiej zrozumieć jak działają listy ACL, jak się je tworzy i jakie mają zastosowanie należy wykonać praktyczny eksperyment. Do tego posłuży nam poniższy schemat topologii sieci, który został wykonany w programie GNS3.

Ten eksperyment polega na zaimplementowaniu dopasowania ruchu sieciowego aby umożliwić niektórym użytkownikom dostęp do zasobu sieciowego, a innym go ograniczyć. Powszechnym mechanizmem do iterowania ruchu jak już powiedzieliśmy jest lista dostępu ACL, która umożliwia kontrolę dostępu na podstawie nagłówka pakietu w warstwie trzeciej. Sieć wewnętrzna LAN ma być tak skonstruowana aby komunikacja między dwoma komputerami była możliwa w ramach wewnętrznej sieci LAN. Ponadto z urządzenia PC1 ma być możliwa komunikacja z siecią zewnętrzną ale już z komputera PC2 ten ruch ma być zablokowany. Jak to zrobić? Od czego zacząć?
Adresacja wstępna
Pierwszym krokiem jaki należy wykonać jest adresacja urządzeń wewnątrz sieci LAN.
PC1> IP 192.168.1.100/24 192.168.1.254 PC2> IP 192.168.1.200/24 192.168.1.254
Następnie adresujemy porty na routerze R1 według powyższego schematu.
R1(config)# interface FastEthernet0/0 R1(config-if)# ip address 192.168.1.254 255.255.255.0 R1(config-if)#no shutdown R1(config)# interface Serial3/0 R1(config-if)# ip address 10.10.10.1 255.255.255.252 R1(config-if)#no shutdown
Teraz zaadresujemy porty na routerze o nazwie Internet, który w naszym schemacie symuluje sieć WAN.
Internet(config)# interface Serial3/0 Internet(config-if)# ip address 10.10.10.2 255.255.255.252
Dla naszych potrzeb ćwiczeniowych na obu routerach skonfigurujemy routing aby komunikacja między siecią LAN i WAN była możliwa. W naszym eksperymencie zrobimy prosty routing OSPF.
R1(config)# router ospf 1 R1(config-router)#network 10.10.10.0 0.0.0.3 area 0 R1(config-router)#network 192.168.1.0 0.0.0.255 area 0 Internet(config)# router ospf 1 Internet(config-router)#network 10.10.10.0 0.0.0.3 area 0
Teraz sprawdźmy czy urządzenia wewnątrz sieci LAN mogą komunikować się ze sobą.
PC1> ping 192.168.1.200 84 bytes from 192.168.1.200 icmp_seq=1 ttl=64 time=0.686 ms 84 bytes from 192.168.1.200 icmp_seq=2 ttl=64 time=1.024 ms 84 bytes from 192.168.1.200 icmp_seq=3 ttl=64 time=0.543 ms PC2> ping 192.168.1.100 84 bytes from 192.168.1.100 icmp_seq=1 ttl=64 time=0.588 ms 84 bytes from 192.168.1.100 icmp_seq=2 ttl=64 time=0.596 ms 84 bytes from 192.168.1.100 icmp_seq=3 ttl=64 time=0.648 ms
Komunikacja jest prawidłowa. Ruch między komputerami odbywa się bez problemów. Teraz sprawdźmy czy możliwy jest ruch sieciowy z obu PC na adres portu wychodzącego z routera w kierunku sieci Internet.
PC1> ping 10.10.10.1 84 bytes from 10.10.10.1 icmp_seq=1 ttl=255 time=14.937 ms 84 bytes from 10.10.10.1 icmp_seq=2 ttl=255 time=15.299 ms 84 bytes from 10.10.10.1 icmp_seq=3 ttl=255 time=14.474 ms PC2> ping 10.10.10.1 84 bytes from 10.10.10.1 icmp_seq=1 ttl=255 time=14.937 ms 84 bytes from 10.10.10.1 icmp_seq=2 ttl=255 time=15.299 ms 84 bytes from 10.10.10.1 icmp_seq=3 ttl=255 time=14.474 ms
Jak widać oba urządzenia pingują adres portu wychodzącego z routera w stronę sieci Internet. To teraz wydajmy polecenie ping z obu PC na adres portu routera symulującego Internet w stronę naszego routera.
PC1> ping 10.10.10.2 84 bytes from 10.10.10.2 icmp_seq=1 ttl=254 time=44.716 ms 84 bytes from 10.10.10.2 icmp_seq=2 ttl=254 time=45.204 ms 84 bytes from 10.10.10.2 icmp_seq=3 ttl=254 time=45.351 ms PC2> ping 10.10.10.2 84 bytes from 10.10.10.2 icmp_seq=1 ttl=254 time=44.716 ms 84 bytes from 10.10.10.2 icmp_seq=2 ttl=254 time=45.204 ms 84 bytes from 10.10.10.2 icmp_seq=3 ttl=254 time=45.351 ms
Oba komputery mogą komunikować się z siecią Internet. Ale nasze zadanie polega na tym aby ten ruch był możliwy tylko z PC1, a z PC2 komunikacja ma być zabroniona.
Konfiguracja listy ACL według schematu
Tak więc przystępujemy do stworzenia listy ACL na routerze. Przechodzimy w tryb konfiguracji globalnej i wydajemy poniższe polecenia:
R1(config)# access-list 1 deny 192.168.1.200 R1(config)# access-list 1 permit 192.168.1.0 0.0.0.255
Pierwsza instrukcja dotyczy zablokowania ruchu z adresu IP, który został nadany komputerowi PC2. Drugi wpis dotyczy zezwolenia na ruch w stronę sieci Internet z adresu IP, który został przypisany urządzeniu PC1.
Gdy już stworzyliśmy prostą listę dostępu należy ją teraz przypisać do interfejsu, który wychodzi
z routera na „świat”. W naszym przypadku będzie to interfejs Serial3/0. Przechodzimy w tryb konfiguracji danego interfejsu i wydajemy poniższe polecenie.
R1(config)#interface serial3/0 R1(config-if)# ip access-group 1 out
W tym momencie przypisaliśmy stworzoną wcześniej listę ACL do danego interfejsu z udostępnieniem w kierunku wychodzącym. Można byłoby alternatywnie powyższą listę zastosować w kierunku przychodzącym na interfejsie fastEthernet0/0. To rozwiązanie uniemożliwiłoby hostowi PC2 dostęp do Internetu. Ponadto zablokowałoby wszelką komunikację między PC2, a routerem.
Po wykonaniu powyższych kroków sprawdźmy czy możliwa jest komunikacja z PC1 w stronę sieci Internet.
PC1> ping 10.10.10.2 84 bytes from 10.10.10.2 icmp_seq=1 ttl=254 time=44.716 ms 84 bytes from 10.10.10.2 icmp_seq=2 ttl=254 time=45.204 ms 84 bytes from 10.10.10.2 icmp_seq=3 ttl=254 time=45.351 ms 84 bytes from 10.10.10.2 icmp_seq=4 ttl=254 time=45.270 ms 84 bytes from 10.10.10.2 icmp_seq=5 ttl=254 time=45.148 ms
Ruch odbywa się bez zarzutów. Teraz sprawdźmy czy z urządzenia PC2 jest możliwe wysyłanie pakietów w stronę sieci Internet.
PC2> ping 10.10.10.2 *192.168.1.254 icmp_seq=1 ttl=255 time=14.840 ms (ICMP type:3, code:13, Communication administratively prohibited) *192.168.1.254 icmp_seq=2 ttl=255 time=15.013 ms (ICMP type:3, code:13, Communication administratively prohibited) *192.168.1.254 icmp_seq=3 ttl=255 time=15.260 ms (ICMP type:3, code:13, Communication administratively prohibited) *192.168.1.254 icmp_seq=4 ttl=255 time=15.587 ms (ICMP type:3, code:13, Communication administratively prohibited) *192.168.1.254 icmp_seq=5 ttl=255 time=15.514 ms (ICMP type:3, code:13, Communication administratively prohibited)
Jak widzimy ruch został zablokowany. Otrzymujemy komunikat (ICMP type:3, code:13, Communication administratively prohibited). Ten komunikat świadczy o tym, że cel został nie osiągnięty z powodu zabronionej administracyjnie komunikacji. W tym komunikacie mamy zawarte jaki typ został zablokowany (ICMP), jaki rodzaj (type3: cel nieosiągnięty) oraz kod opisu(code 13: komunikacja zabroniona administracyjnie).
Tabela z kodami i opisami alertów
Poniżej znajduje się tabela z przykładowymi kodami oraz opisami danego typu komunikacji w tym przypadku ICMP.
| RODZAJ | KOD | OPIS |
| 0 – Echo Odpowiedz | 0 | Odpowiedź echo (używana do pingowania) |
| 1 i 2 | Skryty | |
| 3 – Cel nieosiągalny | 0 | Sieć docelowa jest nieosiągalna |
| 1 | Host docelowy nieosiągalny | |
| 2 | Protokół docelowy jest nieosiągalny | |
| 3 | Port docelowy jest nieosiągalny | |
| 4 | Wymagana fragmentacja i ustawiona flaga DF | |
| 5 | Trasa źródłowa nie powiodła się | |
| 6 | Nieznana sieć docelowa | |
| 7 | Nieznany host docelowy | |
| 8 | Host źródłowy izolowany | |
| 9 | Sieć zabroniona administracyjnie | |
| 10 | Host administracyjnie zabroniony | |
| 11 | Sieć nieosiągalna dla TOS | |
| 12 | Host nieosiągalny dla TOS | |
| 13 | Komunikacja zabroniona administracyjnie | |
| 14 | Naruszenie pierwszeństwa gospodarza | |
| 15 | Obowiązuje odcięcie pierwszeństwa | |
| 4 – Ugaszanie źródła | 0 | Tłumienie źródła (kontrola przeciążenia) |
| 5 – Przekieruj wiadomość | 0 | Przekieruj Datagram dla sieci |
| 1 | Przekieruj datagram dla hosta | |
| 2 | Przekieruj Datagram dla TOS i sieci | |
| 3 | Przekieruj Datagram dla TOS i hosta | |
| 6 | Alternatywny adres hosta | |
| 7 | Skryty | |
| 8 – Prośba o echo | 0 | Żądanie echa (używane do pingowania) |
| 9 – Reklama routera | 0 | Reklama routera |
| 10 – Pozyskiwanie routera | 0 | Wykrywanie/wybór/pozyskiwanie routera |
| 11 – Przekroczono czas | 0 | TTL wygasł w tranzycie |
| 1 | Przekroczono czas ponownego złożenia fragmentu | |
| 12 – Problem z parametrem: Zły nagłówek IP | 0 | Wskaźnik wskazuje błąd |
| 1 | Brak wymaganej opcji | |
| 2 | Zła długość | |
| 13 – Znacznik czasu | 0 | Znak czasu |
| 14 – Odpowiedź sygnatury czasowej | 0 | Odpowiedź sygnatury czasowej |
| 15 – Prośba o informacje | 0 | Prośba o informacje |
| 16 – Odpowiedź informacyjna | 0 | Informacja Odpowiedz |
| 17 – Żądanie maski adresowej | 0 | Żądanie maski adresu |
| 18 – Odpowiedź maski adresu | 0 | Odpowiedź maski adresu |
| 19 | Zarezerwowane dla bezpieczeństwa | |
| 20 do 29 | Zarezerwowane dla eksperymentu odporności | |
| 30 – Traceroute | 0 | Prośba o informacje |
| 31 | Błąd konwersji datagramu | |
| 32 | Przekierowanie hosta mobilnego | |
| 33 | Gdzie jesteś (pierwotnie przeznaczone dla IPv6) | |
| 34 | Here-I-Am (pierwotnie przeznaczone dla IPv6) | |
| 35 | Żądanie rejestracji mobilnej | |
| 36 | Mobilna odpowiedź rejestracyjna | |
| 37 | Żądanie nazwy domeny | |
| 38 | Odpowiedź nazwy domeny | |
| 39 | SKIP Algorithm Discovery Protocol, proste zarządzanie kluczami dla protokołu internetowego | |
| 40 | Photuris, awarie bezpieczeństwa | |
| 41 | ICMP dla eksperymentalnych protokołów mobilności | |
| 42 do 255 | Skryty |
Czyli jak widzimy utworzona przez nas lista dostępu ACL działa poprawnie. Przepuszcza oraz blokuje ruch tym urządzeniom z sieci LAN w stronę sieci Internet, które zostały zadeklarowane w instrukcji utworzonej listy dostępu.
Podsumowanie
Powyższy eksperyment potwierdza poprawność działania listy dostępu ACL. Dzięki niej możliwe jest filtrowanie ruchu sieciowego co daje Administratorowi kontrolę nad bezpiecznym ruchem pakietów w sieci LAN. Lecz trzeba pamiętać aby taka lista działała poprawnie Administrator musi dokładnie przemyśleć i poprawnie zadeklarować instrukcje w liście dostępu.
