artykuły
Powrót do listy artykułów

Temat artykułu: Jak działają ACL ?
Tekst napisał Cisco_FAQ dnia 07-03-2006

ACL, czyli Access Control List (lista kontroli dostępu) jest listą reguł, które kolejno sprawdzają pewne właściwości pakietu. ACL używane są głównie do filtrowania pakietów na interfejsach routerów i przełączników, ale służą też do wskazywania ruchu route-mapom, crypto-mapom itd. Pamiętaj, że każdą stworzoną ACLkę musisz przypisać do jakiegoś interfejsu, lub do konkretnej funkcjonalności - inaczej po prostu nie będzie działać!

Dla ruchu IP interesujące są dwa typy list ACL - standardowe i rozszerzone. Standardowa lista IP pozwala sprawdzić tylko adres źródłowy pakietu, np.:

ip access-list standard 10
 permit host 192.168.0.10
 ! Pozwalamy przejść pakietom z 192.168.0.10

Każda zdefiniowana ACLka zawiera domyślnie na końcu wpis odrzucający każdy ruch (default deny), jeśli więc skonstruujesz swoją ACLkę tak, by najpierw odrzucała jakiś konkretny ruch, a później chciałbyś żeby przepuszczała pozostały, musisz go wprost przepuścić, np. tak:

ip access-list standard 10
 deny host 192.168.0.10
 ! blokujemy wprost ruch z 192.168.0.10
 deny host 192.168.0.11
 ! blokujemy wprost ruch z 192.168.0.11
 deny host 192.168.0.33
 ! blokujemy wprost ruch z 192.168.0.33

 deny host 192.168.0.91
 ! blokujemy wprost ruch z 192.168.0.91
 deny host 192.168.0.206
 ! blokujemy wprost ruch z 192.168.0.206
 permit any
 ! przepuszczamy pozostały ruch IP

Stworzenie standardowej listy ACL odbywa się przez nadanie jej identyfikatora od 1 do 99 (oraz od IOSu 12.0, z dodatkowego zakresu 1300-1999).

Rozszerzone ACL dostępne są w dwóch rodzajach - numerowane, w zakresie od 100 do 199 (od IOS 12.0 również 2000-2699), oraz nazwane. Termin rozszerzone oznacza, że pozwalają one sprawdzać ze szczegółami pewne standardowe pola pakietów (IP oraz w warstwie czwartej, czyli porty TCP/UDP oraz rodzaje i typy ICMP).

Załóżmy, że chcemy zablokować ruch do naszego routera o adresie 169.254.10.1 na port 80. Możemy napisać:

ip access-list extended 100
 deny tcp any host 169.254.10.1 eq 80
 ! ruch pakietów zawierających TCP z dowolnej lokalizacji
 ! (any) do hosta o adresie 169.254.10.1 na port docelowy 80

 ! ma zostać zablokowany
 permit ip any any
 ! przepuszczamy pozostały ruch IP

Warto zwrócić na skrócony zapis - rozszerzone listy dostępu wymagają użycia adresu źródłowego i docelowego, jako pary adres i maska. Zamiast takiej konstrukcji można użyć słów any (odpowiada konstrukcji 0.0.0.0 0.0.0.0, czyli dowolny adres), oraz host A.B.C.D (co odpowiada konstrukcji A.B.C.D 255.255.255.255, czyli tylko ten konkretny jeden adres).

Rozszerzone ACL oferują pewne dodatkowe testy - podstawowe, dostępne w praktycznie wszystkich IOSach począwszy od 12.0 to między innymi:

Dla protokołów TCP i UDP dostępne są słowa kluczowe sprawdzające port:

eq X
port źródłowy lub docelowy równy X, w zależności od miejsca umieszczenia warunku
gt X
port źródłowy lub docelowy większy niż X, w zależności od miejsca umieszczenia warunku
lt X
port źródłowy lub docelowy mniejszy niż X, w zależności od miejsca umieszczenia warunku
range X Y
zakres portów źródłowych lub docelowych od X do Y, w zależności od miejsca umieszczenia warunku

Natomiast dla TCP możemy jeszcze dodatkowo wskazać flagi ustawione w pakiecie:

syn
Ustawiona flaga SYN, początek normalnego połączenia, np.:
!
ip access-list extended Internet2Serwer
 permit tcp any gt 1023 host 169.254.10.1 eq 25 syn
!
ack
Ustawiona flaga ACK - większość pakietów w strumieniu TCP.
established
Specjalne słowo kluczowe, pasuje do pakietów, z ustawioną flagą ACK, ale zgaszoną flagą SYN, RST lub FIN. Innymi słowy, chodzi o pakiety należące do zestawionych połączeń.
rst
Ustawiona flaga Reset - zwykle koniec połączenia.

Stworzoną ACL należy przypisać do interfejsu. Obowiązuje reguła, że do jednego interfejsu można przypisać dwie ACLki - jedną kontrolującą ruch wejściowy i jedną kontrolującą ruch wyjściowy (z routera, bądź przechodzący przez router i wychodzący tym akurat interfejsem).

interface serial 0.99
 ip access-group 100 in
 ! ruch wchodzący interfejsem będzie sprawdzany wg ACLki 100
 ip access-group 110 out
 ! ruch wychodzący interfejsem będzie sprawdzany wg ACLki 110