Każdy system operacyjny routerów Cisco ma wbudowany mechanizm filtrowania ruchu poprzez listy dostępu. Filtrowanie pakietów jest jedną z podstawowych metod zabezpieczenia i ograniczenia ruchu w sieci. Mechanizm ten pozwala określić, z jakiej sieci źródłowej do jakiej sieci docelowej może odbywać się komunikacja, a także wskazać typ pakietów oraz aplikacji występujących na danym połączeniu. Pojęcie list dostępu nie jest jednak tożsame z filtrowaniem pakietów przez router. Jest to zestaw kryteriów, na podstawie których odpowiednie procesy routera podejmują decyzję, co zrobić z pakietami danego typu. Ta decyzja musi być jednoznaczna, sprowadza się ona do wyboru między dwoma stanami: zgoda na przetworzenie pakietu (allow) lub odmowa (deny). Listy dostępu znalazły zastosowanie w takich elementach konfiguracyjnych routera, jak:
Listy dostępu są więc podstawą do konfiguracji wielu procesów związanych nie tylko z bezpieczeństwem sieci. W tym artykule skupimy się na listach dostępu potrzebnych do zarządzania ruchem IP.
Router przetwarza sekwencyjnie kolejne warunki zapisane na liście
dostępu. Listy dostępu są zapisem kryteriów dotyczących typu i kierunku ruchu
pakietów, istotne jest więc, z jakiej perspektywy i w jakiej kolejności kryteria
te będą brane pod uwagę. Przetwarzanie ich jest sekwencyjne (p. rysunek) -
router analizuje jeden warunek po drugim, porównując nagłówek pakietu ze wzorcem
zapisanym w liście dostępu. Jeżeli są one zgodne, to na podstawie informacji w
danym wzorcu (permit lub deny) pakiet jest przekazywany do kolejnego procesu lub
odrzucany, w przeciwnym razie sprawdzane są następne warunki aż do wyczerpania
listy. Spełnienie warunku umieszczonego wyżej na liście zamyka proces
sprawdzania, warunek ten decyduje więc o odrzuceniu lub akceptacji pakietu
niezależnie od tego, czy pakiet spełniłby następne warunki.
Kolejność zapisów w listach dostępu ma więc zasadnicze znaczenie, możemy jednym wpisem zablokować wszystkie pakiety. W każdej liście dostępu, niezależnie od jej typu, występuje końcowy i ostateczny warunek, który odrzuca wszystkie pakiety. Jeżeli pakiet nie spełni żadnego z jawnie zadeklarowanych przez administratora warunków, to zostanie odrzucony - reguła ta nazwana jest implicit deny any (niejawne odrzucenie wszystkiego). Przy konstruowaniu listy dostępu należy więc mieć na uwadze dwa elementy: kolejność kryteriów oraz warunek ostateczny, który odrzuca wszystkie pakiety. Zarządzanie ruchem dotyczy zazwyczaj konkretnego interfejsu routera (przyłączonego do sieci lokalnej lub rozległej) i kierunku ruchu - ważne jest więc, z którym interfejsem routera skojarzymy listę dostępu oraz czy filtrowanie ma działać na wejściu czy na wyjściu interfejsu. Jeżeli lista dostępu została zadeklarowana na wejściu (in), to konfiguracja interfejsu "wejściowego" sprawdzana jest przed przystąpieniem do jakiegokolwiek przetwarzania. Natomiast jeżeli lista dostępu została przypisana do wyjścia (out) przez dany interfejs, to pakiet zostanie przetworzony zgodnie z następującą kolejnością (p. rysunek): router sprawdzi w tablicy routingu, przez który interfejs należy dany pakiet skierować - jeżeli do interfejsu nie została przypisana lista dostępu, pakiet umieszczany jest w buforze tego interfejsu; jeżeli zaś taka lista istnieje, to pakiet jest poddawany sprawdzeniu przed skierowaniem go do interfejsu.
|
|
| Wejściowa lista dostępu | Wyjściowa lista dostępu |
| Jeżeli z powodu konfiguracji warunków pakiet nie może być przesłany do sieci docelowej, router wysyła do nadawcy komunikat ICMP Destination net unreachable. Dotyczy to zarówno wejściowej, jak i wyjściowej listy dostępu. |
zapis podsieci 192.168.1.64/27
ostatni
oktet - zgodnie z maską podsieci 0 1 0 0 0 0 0 0
maska wzorca - ostatni oktet
0 0 0 1 1 1 1 1 = 31
zapis adresu podsieci w liście dostępu 192.168.1.64
0.0.0.31
| Typ list dostępu | Zakres numerów |
| IP Standard | 1 - 99 |
| IP Rozszerzona | 100 - 199 |
| Określana na podstawie kodu protokołu | 200 - 299 |
| DECnet | 300 - 399 |
| XNS Standard | 400 - 499 |
| XNS Rozszerzona | 500 - 599 |
| AppleTalk | 600 - 699 |
| MAC Address | 700 - 799 |
| IPX Standard | 800 - 899 |
| IPX Rozszerzona | 900 - 999 |
| IPX SAP | 1000 - 1099 |
| MAC Address Rozszerzona | 1100 - 1199 |
Często dla uproszczenia zapisu warunków list dostępu stosowane są tzw. ukryte maski wzorca, które pozwalają na wskazanie dowolnego adresu (any) lub konkretnego adresata (host). Na przykład host o adresie 131.108.1.100 można wskazać zapisem 131.108.1.100 0.0.0.0 lub też: host 131.108.1.100.
Listy dostępu identyfikowane są poprzez unikatowy numer, który wyróżnia je w całej konfiguracji routera. Wskazuje on jednoznacznie listę dostępu, jej typ oraz protokół, którego ona dotyczy. Zakresy tych numerów są z góry określone, więc posługiwanie się nimi będzie głównie zależeć od tego, jaki ruch chcemy filtrować. Zakres obsługiwanych list dostępu jest różny w zależności od wersji systemu operacyjnego routera; w modelu 2600 z systemem operacyjnym 12.0 w wersji Enterprise jest taki, jak w tabelce obok.
Listy standardowe są proste w konfiguracji, nie mają jednak zbyt wielu możliwości zaawansowanej analizy pakietów. Podczas konfiguracji warunków jedynym kryterium wyboru pakietu jest adres źródłowy (adres nadawcy). Standardową listę dostępu tworzymy poleceniem trybu konfiguracyjego:
C2600(config)#access-list numer_listy_dostępu {permit|deny}
adres_źródłowy_pakietu maska_wzorca log
Numer listy dostępu to wartość z przedziału od 1 do 99 (dla IP), natomiast adres źródłowy pakietu w połączeniu z maską wzorca jest zapisem adresu hosta lub sieci nadawcy. Proszę zwrócić uwagę na to, że w standardowej liście dostępu jedynie numer listy pozwala wskazać routerowi, które pakiety nas interesują. Lista ta nie odróżnia ruchu związanego z protokołem TCP czy UDP, nie wspominając już o typach aplikacji. Każdy kolejny warunek, który chcemy dopisać do listy dostępu musi zawierać ten sam numer listy, bardzo ważna jest kolejność warunków podawanych poleceniem access-list, ponieważ w takiej kolejności będą one analizowane. Opcja log spowoduje wysłanie komunikatu dla każdego pakietu dopasowanego do wzorca, korzystanie z niej nie jest zalecane podczas normalnej pracy routera ze względu na duże obciążenie procesora. Listę dostępu przypisujemy do wybranego interfejsu poleceniem trybu konfiguracji interfejsu:
C2600(config-if)#ip access-group numer_listy_dostępu {in|out}
Polecenie to dotyczy filtrowania pakietów na poziomie danego interfejsu i - tak jak wspominaliśmy - jest jednym z wariantów wykorzystania list dostępu. Oprócz podania numeru listy, którą chcemy skojarzyć z danym interfejsem, określamy tryb, w jakim lista ma być analizowana: na wejściu (in) czy na wyjściu pakietu z interfejsu (out). Domyślnie dla systemu 11.3 przyjmowana jest opcja out, natomiast wersja 12.0 wymaga podania jawnie opcji out lub in.
Prześledźmy konfigurację listy standardowej na przykładzie routera z
dostępem do dwóch sieci lokalnych i sieci rozległej (p. rysunek). Chcemy
zabronić komputerowi o adresie 131.107.1.100 korzystania z sieci rozległej (np.
z Internetu), lecz nie chcemy blokować mu dostępu do serwera znajdującego się w
innej sieci lokalnej.
Zastanówmy się najpierw, gdzie najlepiej umieścić listę dostępu - jej lokalizacja i budowa będą decydować o skuteczności naszej konfiguracji. Lista standardowa obejmuje jedynie adres nadawcy pakietu, więc nie możemy przypisać takiej listy do konfiguracji interfejsu E0, ponieważ to zablokowałoby nie tylko dostęp do zasobów sieci rozległej, lecz również do sieci lokalnej 131.108.1.0 - na tym poziomie router wie, od kogo jest pakiet, ale nie wie, do kogo jest kierowany. W tym przypadku naszą listę dostępu najlepiej jest przypisać do wyjścia (out) interfejsu S0, czyli do granicy sieci lokalnych. W trybie konfiguracji wydajemy polecenie:
C2600(config)#access-list 1 deny 131.107.1.100 0.0.0.0
lub w postaci skróconej:
C2600(config)#access-list 1 deny host 131.107.1.100
Tak zakończona lista spowodowałaby, iż żaden komputer z obu sieci lokalnych nie mógłby korzystać z Internetu, ponieważ każda lista zawiera niejawny warunek odrzucający wszystko (deny any). Potrzebne są więc dodatkowe warunki:
C2600(config)#access-list 1 permit 131.107.1.0 0.0.0.255 C2600(config)#access-list 1 permit 131.108.1.0 0.0.0.255
lub w skrócie:
C2600(config)#access-list 1 permit any
Tego rodzaju zapis nie jest wcale dla nas groźny. Pierwszy warunek określa adres hosta (131.107.1.100) i zabrania mu dostępu; ponieważ wszystkie pozostałe hosty nie spełniają tego warunku, będą podlegać regule zezwalającej na dostęp. Tak przygotowaną listę możemy przypisać do interfejsu S0:
C2600(config-if)ip access-group 1 out
W konfiguracji routera C2600 zobaczymy:
! Interface Serial 0 ip address 212.1.1.1 255.255.255.0 ip access-group 1 out ! access-list 1 deny host 131.107.1.100 access-list 1 permit 131.107.1.0 0.0.0.255 access-list 1 permit 131.108.1.0 0.0.0.255
Zmodyfikujmy teraz nasze zadanie: chcemy dać dostęp do Internetu tylko
komputerom z sieci 131.108.1.0, a komputerom z sieci 131.107.1.0 chcemy - ze
względów bezpieczeństwa - umożliwić korzystanie tylko z usług (np. FTP) serwera
o adresie 131.108.1.254. Na routerze c2600 wykonujemy polecenia:
c2600(config)#access-list 1 permit 131.108.1.0 0.0.0.255 c2600(config)#access-list 2 permit host 131.108.1.254 c2600(config)#interface S0 c2600(config-if)#ip access-group 1 out c2600(config-if)#interface E0 c2600(config-if)#ip access-group 2 out
Lista dostępu 1 pozwala na dostęp tylko nadawcom z sieci 131.108.1.0, co dla pakietów wysyłanych przez interfejs S0 jest wystarczające (pamiętajmy o ukrytej zasadzie deny any). Trudniejsze zadanie dotyczy sieci 131.107.1.0 - nie możemy w liście standardowej podać adresu docelowego (131.108.1.254), musimy więc prześledzić drogę pakietów IP. Jeżeli dowolny host z sieci 131.107.1.0 wyśle pakiet na adres 131.108.1.254, to router przy takiej konfiguracji nie ma podstaw, aby ten pakiet odrzucić. Co więcej, gdy pakiet z sieci 131.107.1.0 przesyłany jest na dowolny adres w sieci 131.108.1.0, router nie ma prawa zareagować. Ale gdy po otrzymaniu takiego pakietu odbiorca próbuje odesłać go do pierwotnego nadawcy (do sieci 131.107.1.0), router wstrzyma transmisję wszystkich pakietów zwrotnych do momentu, gdy nadawcą (odpowiadającym) będzie serwer o adresie 131.108.1.254, ponieważ reguła skojarzona z interfejsem E0 pozwala na wysłanie tylko takiego pakietu przez ten interfejs. Zwróćmy uwagę na to, że filtrowanie to zostało zrealizowane poprzez utworzenie dwóch niezależnych, standardowych list dostępu. Przy korzystaniu z nich należy jednak pamiętać o zasadzie, która pozwala na wykorzystanie w ramach jednego interfejsu TYLKO jednej listy dostępu związanej z określonym protokołem.
| Nie jest możliwe przypisanie do jednego interfejsu dwóch list (standardowych bądź rozszerzonych) lub jednej listy standardowej i jednej rozszerzonej dla danego protokołu. |
Podczas konfigurowania list dostępu należy pamiętać, iż każdy nowy warunek dopisywany jest na końcu listy, a zmiana kolejności warunków związana jest z utworzeniem nowej listy w prawidłowej kolejności. Również podczas próby usunięcia konkretnego warunku (np. poleceniem no ip access-list 1 permit 131.108.1.254) usunięta zostanie cała lista wraz ze wszystkimi warunkami w niej zdefiniowanymi, natomiast polecenie ip access-group pozostanie w konfiguracji interfejsu. Co prawda brak w konfiguracji listy o podanym numerze nie skutkuje podjęciem jakiegokolwiek działania w wyniku polecenia ip access-group, lecz pojawienie się listy o tym numerze spowoduje natychmiastowe filtrowanie pakietów zgodnie z nowymi kryteriami.
W obu tych przypadkach praktycznym rozwiązaniem jest zapisanie konfiguracji na serwerze TFTP i edycja pliku w celu uzyskania założonego efektu. Należy jednak pamiętać o tym, iż zmiana kolejności w warunkach listy dostępu w pliku konfiguracyjnym nie zostanie uwzględniona przy wczytaniu jej do routera. Jeżeli chcemy zachować listę dostępu z nową kolejnością warunków, musimy dopisać na początku listy nowy wiersz no access-list, podając numer naszej listy, wówczas router podczas interpretacji skryptu usunie istniejącą listę i utworzy ją na nowo w podanej kolejności warunków.
Jak wynika z wcześniejszych przykładów, możliwości list standardowych są ograniczone, a ich wprowadzenie może spowodować pewną nadmiarowość ruchu w sieci. Listy rozszerzone dają większe możliwości wyboru ruchu, który chcemy filtrować. Dzięki zastosowaniu maski wzorca możemy wskazać konkretny adres nadawcy i odbiorcy, całą sieć, podsieć lub wszystkich potencjalnych nadawców i odbiorców. Nowym rozwiązaniem w stosunku do list standardowych jest możliwość określenia protokołu, którego dotyczyć ma warunek. W listach standardowych numer listy informował router, że chodzi nam o cały ruch TCP/IP, natomiast w listach rozszerzonych dla stosu TCP/IP (numery od 100 do 199) istnieje możliwość wskazania zarówno protokołu IP jako podstawy do kontroli ruchu, jak również protokołu TCP, UDP, ICMP, IGMP, IGRP, OSPF i wielu innych, w zależności od systemu operacyjnego routera. Podczas konfiguracji listy dla protokołów TCP bądź UDP możemy też wybrać numery portów - kierowane do nich pakiety zostaną poddane filtrowaniu. Konstrukcja warunków dla listy rozszerzonej musi być wykonywana rozważniej i precyzyjniej, ponieważ nieznajomość budowy stosu TCP/IP lub sposobu działania poszczególnych protokołów może w znacznym stopniu utrudnić nam zadanie. Listę rozszerzoną tworzymy poleceniem:
C2600(config)#access-list numer_listy {permit|deny}
protokół adres_źródłowy [operator port]
adres_docelowy [operator port] [established] [log]
Adres źródłowy i adres docelowy konstruowany jest tak, jak w listach standardowych (adres hosta lub sieci i maska wzorca), możemy korzystać ze słów kluczowych host i any. Postać komendy access-list zależy od protokołu, którego dotyczy dany warunek. W przypadku protokołów warstwy transportowej (TCP czy UDP) możemy posłużyć się operatorem pozwalającym na wskazanie portów: Lt - mniejsze od, Gt - większe od, Eq - równe, Neq - różne od. Opcja established ma zastosowanie tylko dla protokołu TCP i dotyczy segmentów, w których został ustawiony bit synchronizacji (SYN) podczas zestawiania sesji TCP. Listę dostępu przypisujemy do wybranego interfejsu poleceniem (w trybie konfiguracji interfejsu) ip access-group numer_listy {in | out}.
Ponownie posłużmy się przykładowym układem złożonym z routera C2600,
dwóch segmentów sieci lokalnej i sieci rozległej (p. rysunek). Naszym celem jest
zablokowanie dostępu do usług FTP i telnet na serwerze 131.108.1.254 wszystkim
klientom. Nie chcemy jednak ograniczać ruchu pomiędzy sieciami lokalnymi a
siecią rozległą. Zarówno telnet (port 23), jak i FTP (port 20,21) korzystają z
protokołu TCP, więc to jego będzie dotyczyć lista dostępu:
C2600(config)#access-list 101 deny tcp any host 131.108.1.254 eq 23 C2600(config)#access-list 101 deny tcp any host 131.108.1.254 eq 21
Zwróćmy uwagę na sposób określenia usługi, czyli numeru portu, z którym jest ona związana. Za pomocą operatora eq (równy), zadeklarowaliśmy, że chcemy odrzucić wszystkie segmenty TCP od dowolnego nadawcy (any) kierowane na adres serwera (host 131.108.1.254), związane z portem TCP numer 23 i 21. Usługa FTP korzysta z dwóch portów TCP: 20 - do przesyłania danych i 21 - do zestawienia sesji FTP, wystarczy więc zablokować port 21. Tak zbudowana lista zablokuje dostęp nie tylko do usług FTP i telnet, ale również do wszystkich hostów i serwera w sieci 131.108.1.0 (listy rozszerzone zawierają niejawny warunek deny any any), musimy więc dopisać warunek zezwalający na komunikację z siecią 131.108.1.0:
C2600(config)#access-list 101 permit ip any any
Tym razem jako protokół wskazaliśmy IP, zezwalając na obsługę pakietów między dowolnymi hostami źródłowymi i docelowymi. Wpisanie protokołu IP pozwala na objęcie warunkiem wszystkich protokołów, które stosują pakiety IP, a więc całego ruchu w sieci TCP/IP. Jest to często stosowane rozwiązanie, którym należy posługiwać się bardzo rozważnie. Po utworzeniu listy dostępu, w konfiguracji interfejsu E0/1 wydajemy polecenie włączające proces filtrowania pakietów na wyjściu zgodnie z kryteriami listy rozszerzonej 101:
C2600(config-if)#ip access-group 101 out
Spróbujmy teraz zablokować dostęp z sieci rozległej do zasobów sieci
lokalnych z wyjątkiem usług DNS, WWW i FTP zlokalizowanych na serwerze
131.108.1.254. Dodatkowym wymogiem jest to, aby klienci z sieci lokalnej
131.107.1.0 mogli korzystać ze wszystkich zasobów sieci 131.108.1.0 oprócz
serwera 131.108.1.254, który jest przeznaczony dla użytkowników sieci
rozległej:
C2600(config)#access-list 111 permit tcp any host 131.108.1.254 eq www C2600(config)#access-list 111 permit tcp any host 131.108.1.254 eq ftp C2600(config)#access-list 111 permit tcp any host 131.108.1.254 eq ftp-data C2600(config)#access-list 111 permit tcp any host 131.108.1.254 eq domain C2600(config)#access-list 111 permit udp any host 131.108.1.254 eq domain C2600(config)#access-list 112 deny ip 131.107.1.0 0.0.0.255 host 131.108.1.254 C2600(config)#access-list 112 permit ip any any C2600(config)#interface S0/0 C2600(config-if)#ip access-group 111 in C2600(config)interface E0/0 C2600(config-if)#ip access-group 112 in
| W trakcie tworzenia list dostępu należy pamiętać o usługach, z których mogą korzystać routery Cisco (np. RADIUS czy TACACS) i nie blokować portów koniecznych do ich poprawnej pracy. |
Proszę zwrócić uwagę na konstrukcję listy 111, która ma zezwolić na dostęp tylko do wybranych usług - ich nazwy podane są po operatorze eq zamiast numerów portów (listę z numerami dobrze znanych portów można wyświetlić, wywołując system pomocy). W przypadku usługi DNS (domain) podaliśmy dwa numery portów: 53 dla TCP i 53 dla UDP. Ukryty warunek deny any any powinien skutecznie zablokować pozostałą komunikację. Skoro listą 111 posłużymy się podczas filtrowania pakietów wejściowych dla interfejsu S0/0, to możemy zabezpieczyć dostęp nie tylko do sieci lokalnej, w której znajduje się serwer, ale też do sieci 131.107.1.0, co również było naszym celem. Lista 112 została tak skonstruowana, że można ją wykorzystać w konfiguracji interfejsu zarówno E0/0, jak i E0/1. Praktyczniej jest jednak podać ją na wejściu interfejsu E0/0, wówczas pakiet będzie jedynie sprawdzany z listą dostępu, bez angażowania routera w proces przeglądania tablicy routingu - filtrowanie będzie lepiej zorganizowane, ponieważ odrzuci niepowołane pakiety już na początku ich drogi.
| Nie ma możliwości zablokowania listą dostępu ruchu generowanego przez wewnętrzne procesy routera. Dla przykładu wysłanie pakietów ICMP poleceniem ping wykonywanym z poziomu routera Cisco nie zostanie zablokowane pomimo listy obejmującej cały ruch IP dla dowolnego nadawcy i odbiorcy na wyjściu z interfejsu. |
Listy dostępu wyświetlić możemy poleceniem show access-lists (wszystkie protokoły) lub show ip access-lists (tylko listy związane z protokołem TCP/IP):
c2600#sh ip access-lists Extended IP access list 111 permit tcp any host 131.108.1.254 eq www (127 matches) permit tcp any host 131.108.1.254 eq ftp (9 matches) permit tcp any host 131.108.1.254 eq ftp-data (9 matches) permit tcp any host 131.108.1.254 eq domain (33 matches) permit udp any host 131.108.1.254 eq domain Extended IP access list 112 deny ip 131.107.1.0 0.0.0.255 host 131.108.1.254 permit ip any any (831 matches)
Każdy przypadek zgodności przetworzonego pakietu z warunkiem opisanym
w liście dostępu jest rejestrowany - na przykład 127 pakietów zostało
skierowanych do usługi WWW na serwerze 131.108.1.254 od momentu założenia
filtru. Po wyłączeniu filtrowania liczniki te nie są zerowane, przed ponownym
włączeniem filtrowania ruchu można wyzerować je wszystkie poleceniem clear
access-list counters lub wpisać po słowie counters numer wybranej listy.
Polecenie show ip interfaces pozwala sprawdzić, czy włączone jest
filtrowanie.
Jednym z najczęściej spotykanych ataków na sieć jest wykorzystywanie właściwości protokołów i usług sieciowych w celu dodatkowego obciążenia systemu operacyjnego i w rezultacie spowolnienia, a nawet zawieszenia jego pracy - przykładem jest rozpoczynanie w krótkim okresie czasu wielu sesji TCP. Rozszerzone listy dostępu umożliwiają zabezpieczenie sieci przed tą "pozorną komunikacją". Prześledźmy to na prostym przykładzie (p. rysunek). Chcemy, by router zezwolił jedynie na przesyłanie wiadomości do serwera pocztowego, zabezpieczając przy tym sieć lokalną przed nawiązywaniem jakichkolwiek sesji TCP z zewnątrz. Procedura nawiązywania sesji TCP (three-way handshake - potrójne podanie ręki) rozpoczyna się od ustawienia przez nadawcę pakietu bitu synchronizacji (SYN) rozpoczynającego sesję, następnie odbiorca potwierdza otrzymanie pakietu (bit ACK) oraz inicjuje zestawienie sesji (bit SYN), a w ostatniej fazie nadawca odsyła potwierdzenie, ustawiając bit ACK. Cała sekwencja polega więc w skrócie na ustawianiu na przemian bitów SYN- >ACK. Nakazując filtrowanie nagłówka TCP z ustawionym tylko bitem SYN możemy zabezpieczyć się przed próbą zestawienia sesji z zewnątrz i pozwolić jedynie na obsługę sesji już ustanowionych (opcja established):
| Zasady tworzenia list dostępu |
|---|
| - Nowe warunki dopisywane są do już istniejących, na końcu
listy dostępu. - Warunki bardziej szczegółowe należy umieszczać w miarę możliwości na początku listy. - Ostatnim warunkiem jest niejawne odrzucenie wszystkich pakietów i taka operacja będzie wykonywana, jeżeli pakiet nie będzie pasował do żadnego warunku. - Do interfejsu routera można przypisać tylko jedną listę związaną z danym protokołem. - Warunki można selektywnie usuwać tylko z list nazwanych (obsługiwanych od systemu 11.2) lub wprowadzając modyfikacje poprzez skrypt konfiguracyjny. - Filtrowaniu podlega jedynie ruch przechodzący przez router, a nie ten, którego inicjatorem jest router. - Polecenie ip access-group bez istniejącej w trybie konfiguracji listy dostępu nie filtruje żadnego ruchu. - W przypadku korzystania ze standardowych list dostępu należy umieszczać je jak najbliżej miejsca przeznaczenia pakietów. - W przypadku korzystania z rozszerzonych list dostępu należy umieszczać je jak najbliżej miejsca nadawcy pakietów. |
C2600(config)#access-list 105 permit tcp any host 131.108.1.254 eq smtp C2600(config)#access-list 105 permit tcp any any established C2600(config)#access-list 105 deny tcp any any C2600(config)#access-list 105 permit ip any any C2600(config)#interface S0/0 C2600(config-if)#ip access-group 105 in
Proszę zwrócić uwagę na to, że ta konfiguracja nie blokuje sesji zestawianych z sieci wewnętrznej, ponieważ komputery będą wprawdzie otrzymywać ustawiony bit SYN w nagłówku TCP, lecz łącznie z bitem ACK, czyli potwierdzeniem. Operatory list rozszerzonych są na tyle elastyczne, iż pozwalają na filtrowanie nie tylko bitu SYN, ale również pozostałych znaczników (bitów flagowych) nagłówka TCP (URG, PSH czy FIN), zakresu portów (opcja range - np. range 1 1024) oraz pól nagłówków protokołu IP (np. TOS - Type of Service czy znaczników fragmentacji).
Oprócz protokołów IP, TCP i UDP bardzo często w praktyce stosowane jest filtrowanie innych protokołów, takich jak ICMP czy IGMP. Dla przykładu, lista rozszerzona dla protokołu ICMP ma składnię:
C2600(config)#access-list numer_listy {permit|deny} icmp adres_źródłowy
adres_docelowy [typ_icmp [kod_icmp] | komunikat_icmp]
Wyobraźmy sobie, że chcemy zablokować wysyłanie odpowiedzi do programu ping. W takim przypadku musimy wskazać odpowiedni typ komunikatu ICMP, wpisując jego numer (w tym wypadku 0) lub nazwę (echo-reply):
C2600(config)#access-list 133 deny icmp any any echo-reply
Jednym poleceniem możemy też zablokować grupę komunikatów, np. posługując się nazwą unreachable zatrzymujemy wszystkie komunikaty związane z osiągalnością adresata - pamiętajmy, że temu ograniczeniu nie będą podlegać pakiety generowane przez router, na którym została utworzona lista dostępu.
Posługiwanie się nazwami zamiast uciążliwego numerowania list jest pewnym ułatwieniem, należy jednak pamiętać, że nie każdy system operacyjny na to pozwala (tylko od wersji 11.2). Po wpisaniu w trybie konfiguracji polecenia:
C2600(config)#ip access-list {standard | extended} nazwa_listy_dostępu
tworzona jest nowa nazwana lista dostępu, dla której kryteria definiowane są w kontekście routera: c2600(config-ext-nacl). Na przykład utworzenie listy do_sieci1, blokującej dostęp do usługi telnet na dowolnym serwerze w naszej sieci, można zawrzeć w kilku poleceniach:
C2600(config)#ip access-list extended do_sieci1 C2600(config-ext-nacl)#deny tcp any any eq 23 C2600(config-ext-nacl)#permit ip any any c2600(config-ext-nacl)#interface S0/0 C2600(config-if)#ip access-group do_sieci1 in
Opisane w taki sposób listy dostępu są z pewnością czytelniejsze i łatwiejsze do znalezienia, gdy musimy powrócić do naszej konfiguracji po długim okresie czasu.