[[oktatas:hálózat:cisco_szerint_a_hálózat|< Cisco szerint a hálózat]] ====== ACL ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2018 * [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: http://szit.hu ===== Az ACL ===== Az ACL az Access Control List rövidítése, magyarul hozzáférési lista. Egy forgalomirányítón a bejövő és kimenő csomagokat szűrhetjük IP címek vagy portszámok alapján. A szűrést az OSI rétegmodell 3. és 4. rétegében végezzük. {{:oktatas:hálózat:cisco_szerint_a_hálózat:osi_modell_csomagszures.png|}} Az ilyen szűréseket csomagszűrésnek nevezzük. A szabályok összeállítása során a csomagok számára illeszkedési szabályokat írunk le. Az illeszkedés a következőket tartalmazhatja: * bejövő vagy kimenő csomag * forrás IP címre illesztés * cél IP-re címre illesztés * portra illesztés A szabályhoz hozzátartozik, hogy a csomagot vagy megtartjuk vagy eldobjuk: * engedés * tiltás Ezt nevezzük vezérlésnek. A szabályokat szokás hozzáférésvezérlő bejegyzésnek vagy angolosan Access Control Entry néven nevezni; röviden ACE. De lehet simán ACL bejegyzés. Az ACL-ek két csoportba oszthatók. Vannak a szabványos ACL-ek, amelyek csak forrás IP címre illeszthetők és vannak a kiterjesztett ACL-ek. Csoportosítás: * szabványos ACL * kiterjesztett ACL Az ACL-ek a forgalomirányító által előállított csomagokra nem vonatkoznak. ==== A működésről ==== A szabályokat sorba felvesszük, egy-egy parancs formájában. Amikor egy csomag érkezik a forgalomirányítóra, sorba veszi a bejegyzett szabályokat, addig amíg nem talál egy illeszkedő szabályt. Ha illeszkedik egy szabályra (pl. forrás IP cím van csak megadva és arra egyezik a csomagban található információ), akkor alkalmazza a megadott utasítást, ami engedés vagy eldobás. Ha egy csomag nem illeszkedik egyetlen szabályra sem, akkor a csomag eldobásra kerül, mivel a szabályok végén van egy implicit (ha nem állítjuk be, akkor is ott van) szabály, amit mindent tilt. ==== Bejövő/kimenő ACL-ek ==== Egy ACL konfigurálható úgy, hogy kimenő csomagokra illeszkedjen, vagy a bejövő csomagokra. A bejövő ACL-ek hatékonyabbak, mivel ha tiltani kell egy csomagot, akkor vele megkíméljük az útválasztási folyamatban való részvételtől. Ha már kifele tiltunk, ezt nem tudjuk megtenni. {{:oktatas:hálózat:cisco_szerint_a_hálózat:inbound_outbound.png|}} ==== Szabványos ACL ==== A szabványos ACL vagy normál ACL. Csak forrás IP cím alapján működik. Például: access-list 10 permit 192.168.30.0 0.0.0.255 ==== Kiterjesztett ACL ==== Több tulajdonság alapján is képes szűrni: * protokoll típusa * forrás IPv4 cím * cél IPv4 cím * forrás TCP/UDP port * cél TCP/UDP port Például: access-list 103 permit tcp 192.168.30.0 0.0.0.255 any eq 80 ==== ACL azonosítása ==== Minden szabálynak szükséges egy azonosító. Az azonosítók a következők lehetnek: * név * szám Használható számok: * 1-99 és 1300-1999 szabványos IP ACL * 100-199 és 2000-2699 kiterjesztett IP ACL A használható nevek: * lehet benne betű és szám * lehet kapitális ==== Helyettesítő maszk ==== Az IPv4 ACL esetén szükség van helyettesítő maszkra. IPv6 esetén nem használunk ilyet. Helyettesítő maszk használata: ^ Helyettesítő maszk hálózat esetén ^^^ ^ ^ Decimális ^ Bináris ^ | IP cím | 192.168.10.0 | 11000000.10101000.00001010.00000000 | | helyettesítő \\ maszk | 0.0.255.255 | 000000000.00000000.11111111.11111111 | | kapott hálózati \\ cim | 192.168.0.0 | 11000000.10101000.00000000.00000000 | ^ Helyettesítő maszk IP cím esetén ^^^ ^ ^ Decimális ^ Bináris ^ | IP cím | 192.168.1.1 | 11000000.10101000.00000001.00000001 | | helyettesítő \\ maszk | 0.0.0.0 | 000000000.00000000.00000000.00000000 | | kapott hálózati \\ cím | 192.168.1.1 | 11000000.10101000.00000001.00000001 | ^ Ha az IP cím bármivel egyezhet ^^^ ^ ^ Decimális ^ Bináris ^ | IP cím | 192.168.1.1 | 11000000.10101000.00000001.00000001 | | helyettesítő \\ maszk | 0.0.0.0 | 11111111.11111111.11111111.11111111 | | kapott hálózati \\ cím | 0.0.0.0 | 00000000.00000000.00000000.00000000 | ^ 192.168.1.0/24 felel meg ^^^ ^ ^ Decimális ^ Bináris ^ | IP cím | 192.168.1.1 | 11000000.10101000.00000001.00000001 | | helyettesítő \\ maszk | 0.0.0.255 | 000000000.00000000.00000000.11111111 | | kapott hálózati \\ cím | 192.168.1.0 | 11000000.10101000.00000001.00000000 | ==== Számítási példák ==== === Példa 1 === A 192.168.3.0 hálózat össze felhasználója kapjon hozzáférést. Konvjuk a 255.255.255.255-ből a maszkot: 255.255.255.255 - 255.255.255.000 000.000.000.255 === Számítás 2 === A 192.168.3.32/28 hálózat 14 felhasználója kapjon hozzáférést. Konvjuk a 255.255.255.255-ből a maszkot: 255.255.255.255 - 255.255.255.240 000.000.000.015 === Példa 3 === 2 hálózatot szeretnénk engedni: Konvjuk a 255.255.255.255-ből a maszkot: 255.255.255.255 - 255.255.254.000 000.000.001.255 Lehetne így beállítani: R1(config)# access-list 10 permit 192.168.10.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.11.0 0.0.0.255 De hatékonyabb így: R1(config)# access-list 10 permit 192.168.10.0 0.0.1.255 === Példa 4 === 192.168.16.0-tól -- 192.168.31.0-ig szeretnénk engedni Így is lehet: R1(config)# access-list 10 permit 192.168.16.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.17.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.18.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.19.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.20.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.21.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.22.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.23.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.24.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.25.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.26.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.27.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.28.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.29.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.30.0 0.0.0.255 R1(config)# access-list 10 permit 192.168.31.0 0.0.0.255 Vagy így: R1(config)# access-list 10 permit 192.168.16.0 0.0.15.255 Miért lett 15 helyettesítő maszk? Az alábbi listában felírtam az IP címek 3. oktetjét decimálisan, majd binárisan. A bináris résznél megnézzük hány balról nézve hány számjegy egyezik meg minden oszlopban. Ez 4 darab. Akkor a maszkot így írhatnám fel: 11110000, az első 4 darab 1-es a többi 0. Ezt invertáljuk, akkor megkapjuk: 00001111. Ha ezt átszámoljuk decimális számrendszerbe, akkor 15-öt kapunk. 16 00010000 17 00010001 18 00010010 19 00010011 20 00010100 21 00010101 22 00010110 23 00010111 24 00011000 25 00011001 26 00011010 27 00011011 28 00011100 29 00011101 30 00011110 31 00011111 Egyezés az első 4 számban (binárisan) maszk 4 oktetben 1 van: 11110000 = 240 > villcard > 15 ==== Helyettesítő maszk kulcsszavak ==== * host * any Ezek használhatók IPv4 és IPv6 esetén is. * 0.0.0.0 maszkot helyettesíti * Csak egy adott állomás felé feleltetünk meg Eredeti: 192.168.10.10 0.0.0.0 Helyette: host 192.168.10.10 Az any kulcsszó: A 255.255.255.255 maszk helyett használható bármely cím megadható. Eredeti maszk: 0.0.0.0 255.255.255.255 Helyette: any Any host használat: R1(config)# access-list 1 permit 0.0.0.0 255.255.255.255 R1(config)# access-list 1 permit any R1(config)# access-list 1 permit 192.168.10.10 0.0.0.0 R1(config)# access-list 1 permit host 192.168.10.10 ===== Irányelvek ===== Hol használjunk ACL-t? * használjuk belső és külső (Internet hálózat között * hálózat két része között A három P * egy ACL protokollonként * minden protokollhoz külön ACL * egy ACL irányonként * külön bejövő és külön a kimenő * egy ACL interfészenként ==== ACL-ek elhelyezése ==== * szabványos ACL közel a célhoz. * Kiterjesztett ACL közel a forráshoz. {{:oktatas:hálózat:cisco_szerint_a_hálózat:acl_ref_halozat_01.png|}} Szeretnénk szűrni a 192.168.10.0/24 hálózatból jövő csomagokat a 192.168.40.0/24 felé. {{:oktatas:hálózat:cisco_szerint_a_hálózat:acl_ref_halozat_02.png|}} A szeretnénk a 192.168.20.0/24 hálózatból minden forgalmat szűrni a 192.168.30.0/24 és a 192.168.40.0/24 felé. {{:oktatas:hálózat:cisco_szerint_a_hálózat:acl_ref_halozat_03.png|}} {{:oktatas:hálózat:cisco_szerint_a_hálózat:acl_utolso_szabaly.png|}} {{:oktatas:hálózat:cisco_szerint_a_hálózat:acl_szabalyok_sorba.png|}} ===== Szabványos ACL számozva ===== ==== Lépések ==== Két lépés: * beállítjuk az ACL-t * interfészhez kötjük ==== Számozás ==== Az access-list parancsa számára első paraméterként meg kell adnunk egy számot. A szám 1-99 közötti szám. A Cisco IOS 12.0.1-től megadható a 1300-1999 közötti szám is. ==== Szintaxis ==== Router(config)# access-list lista_száma { deny | permit | remark } forrás [ forrás_helyettesítő_maszk ][ log ] * lista_száma -- 1-99, 1300-1999 közötti szám, szabványos ACL esetén * deny -- tiltás * permit -- engedés * remark -- megjegyzés * forrás -- a forrás IP címe * forrás_helyettesítő_maszk -- a forrás helyettesítő maszkja * log -- naplózás ==== Példa ==== ACL létrehozása: R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 Most lépjünk ki, nézzük meg: R1#show access-list Megjegyzés az ACL számhoz: R1(config)#access-list 1 remark teszt megjegyzes Megnézzük: R1# show running-config A megjegyzések maximum 100 karakter hosszúak lehetnek. ACL megszüntetése: R1(config)# no access-list 1 Ellenőrizzük: R1# show access-list Egy gép engedélyezése: R1(config)# access-list 1 permit host 192.168.10.11 Nézzük a következ példát, ahol két bejegyzésünk van: R1(config)# access-list 1 permit host 192.168.10.11 R1(config)# access-list 1 permit host 192.168.10.12 R1#show access-list Standard IP access list 1 10 permit host 192.168.10.11 20 permit host 192.168.10.12 Itt jól látható, hogy az 1 számú listáról van szó, két bejegyzésünk van. Mindkét bejegyzés kapott egy sorszámot, 10 és 20 számmal. Ha csinálunk két 2 számú bejegyzést, akkor listázásnál: R1# show access-list Standard IP access list 1 10 permit host 192.168.10.11 20 permit host 192.168.10.12 Standard IP access list 2 10 permit host 192.168.20.11 20 permit host 192.168.20.12 ==== Interfészhez kötés ==== Az ACL attól, hogy létrehoztuk őket, nem fognak működni. Azokat interfészhez kell kötni. Legyen a következő bejegyzés: R1(config)#access-list 1 permit 192.168.10.0 0.0.0.255 Interfészhez kötéshez, lépjünk be a kívánt interfészbe. R1(config)# int g0/0 Kössük össze az ACL-t és az interfészt: R1(config-if)# ip access-group 1 in ===== Szabványos ACL névvel ===== R1(config)# ip access-list standard NO_ACCESS R1(config-std-nad)# deny host 192.168.10.11 R1(config-std-nad)# permit any R1(config-std-nad)# exit R1(config)# interface g0/0 R1(config)# ip access-group NO_ACCESS out ===== Példa a szabványos ACL-re ===== ==== Számozott ==== R1(config)# access-list 1 remark Tiltott vendég R1(config)# access-list 1 deny host 192.168.10.10 R1(config)# access-list 1 remark Engedély a 192.168.x.x felől R1(config)# access-list 1 permit 192.168.0.0 0.0.255.255 R1(config)# interface s0/0/0 R1(config-if)# ip access-group 1 out R1(config-if)# ==== Nevesített ==== R1(config)# ip access-list standard NO_ACCESS R1(config-std-nacl)# remark Tiltjuk a Lab allomast R1(config-std-nacl)# deny host 192.168.11.10 R1(config-std-nacl)# remark Engedjuk minden mast R1(config-std-nacl)# permit any R1(config-std-nacl)# exit R1(config)# interface g0/0 R1(config-if)# ip access-group NO_ACCESS out Ellenőrzés: R1# show access-lists R1#show ip int g0/0 ===== ACL módosítása ===== ==== Számozott ACL módosítása ==== R1(config)# access-list 1 deny host 192.168.10.99 R1(config)# access-list 1 permit 192.168.0.0 0.0.255.255 Szerkesztőmód: R1(config)# ip access-list standard 1 Mint a nevesített ACL esetén. FIGYELEM! Packet Tracer esetén a ''show access-lists 1'' utasításnál nem lesz sorszám. R1(config)# ip access-list standard 1 R1(config-std-nacl)# do show access-lists 1 10 deny host 192.168.10.99 20 permit 192.168.0.0 0.0.255.255 R1(config-std-nacl)# no 10 R1(config-std-nacl)# 10 deny host 192.168.10.11 ==== Nevesített ACL módosítása ==== R1# show access-lists ... Standard IP access list NO_AC 10 deny host 192.168.11.11 20 permit any R1(config)# ip access-list standard NO_AC R1(config-std-nacl) 15 deny host 192.168.11.11 FIGYELEM! Packet Tracer esetén a show access-lists NO_AC utasításnál nem lesz sorszám. ==== Statisztika az illeszkedésre ==== R1# show access-lists Standard IP access list 1 10 deny host 192.168.10.10 (8 match)) 20 permit 192.168.0.0, wilcard bits 0.0.255.255 Számláló törlése: R1# clear access-list counters 1 ==== Sorrend a számozásban ==== A ''show access-list'' hatására a IOS kiírja az ACL bejegyzéseket, abban sorrendben ahogy azok végrehajtásra kerülnek. A módosítások hatására a számozás sorrendje nem biztos, hogy megegyezik a a végrehajtás sorrendjével. Megoldás, ha elmentjük a konfigurációt, majd újraindítjuk a forgalomirányítót. ===== TTY sáv védelme ===== Csak a 192.168.10.0/24 hálózatból lehet vty sávon bejönni: R1(config)# access-list 17 permit 192.168.10.0 0.0.0.255 R1(config)# access-list 17 deny any R1(config)# R1(config)# line vty 0 4 R1(config-line)# login local R1(config-line)# transport input ssh R1(config-line)# access-class 17 in R1(config-line)# exit Ellenőrzéshez használjuk az ssh-t a 192.168.10.0/24 egyik gépéről, majd egy másik hálózatból is. ===== Kiterjesztett ACL ===== ==== Szolgáltatások engedése ==== access-list 101 permit tcp 192.168.10.0 0.0.0.255 any eq 23 access-list 101 permit tcp 192.168.10.0 0.0.0.255 any eq 21 access-list 101 permit tcp 192.168.10.0 0.0.0.255 any eq 20 access-list 101 permit tcp 192.168.10.0 0.0.0.255 any eq telnet access-list 101 permit tcp 192.168.10.0 0.0.0.255 any eq ftp access-list 101 permit tcp 192.168.10.0 0.0.0.255 any eq ftp-data Az eq után tett kérdőjel kiírja milyen neveket használhatunk: access-list 101 permit tcp 192.168.10.0 0.0.0.255 any eq ? {{:oktatas:hálózat:cisco_szerint_a_hálózat:acl_ref_halozat_04.png|}} R1(config)# access-list 102 permit tcp 192.168.10.0 0.0.0.25 any eq 80 R1(config)# access-list 102 permit tcp 192.168.10.0 0.0.0.25 any eq 443 R1(config)# access-list 103 permit tcp any 192.168.10.0 0.0.0.255 established Az utolsó parancs engedi a forgalmat visszafele, ha az egy létező kapcsolathoz tartozik. Interfészhez kötés: R1(config)# interface g0/0 R1(config-if)# ip access-group 102 in R1(config-if)# ip access-group 103 out ==== Következő példa ==== Tiltsuk meg a 192.168.30.0/24 hálózatból az 192.168.40.0/24-es hálózatban az FTP elérését. {{:oktatas:hálózat:cisco_szerint_a_hálózat:acl_ref_halozat_05.png|}} R2(config)# access-list 101 deny tcp 192.168.40.0 0.0.0.255 192.168.30.0 0.0.0.0 eq ftp R1(config)# access-list 101 deny tcp 192.168.41.0 0.0.0.255 192.168.30. 0.0.0.255 eq ftp-data R1(config)# access-list 101 permit ip any any R1(config)# int g0/0 R1(config)# ip access-group 101 in Telnet csak a 192.168.30.0/24 hálózatból: R2(config)# access-list 102 permit tcp 192.168.30.0 0.0.0.255 192.168.10.0 0.0.0.0 eq 23 R1(config)# access-list 102 deny ip any any R1(config)# int s0/0/0 R1(config)# ip access-group 102 in ==== Nevesített kiterjesztett ACL ==== R1(config)# ip access-list extended BONGESZ R1(config-ext-nacl)# permit tcp 192.168.10.0 0.0.0.255 any eq 80 R1(config-ext-nacl)# permit tcp 192.168.10.0 0.0.0.255 any eq 443 R1(config-ext-nacl)# exit R1(config)# ip access-list extended BONGESZ_STABIL R1(config-ext-nacl)# permit tcp any 192.168.10.0 0.0.0.255 established R1(config-ext-nacl)# exit R1(config)# int g0/0 R1(config-ext-nacl)# ip access-group BONGESZ in R1(config-ext-nacl)# ip access-group BONGESZ_STABIL out ==== Kiterjesztett ACL ellenőrzése ==== R1# show access-lists R1# show access-lists Extended IP access list BONGESZ 10 permit tcp 192.168.10.0 0.0.0.255 any eq www 20 permit tcp 192.168.10.0 0.0.0.255 any eq 443 Extended IP access list BONGESZ_STABIL 10 permit tcp any 192.168.10.0 0.0.0.255 established ==== Csomagfeldolgozás ==== Bejövő csomagok feldolgozása: {{:oktatas:hálózat:cisco_szerint_a_hálózat:csomagfeldolgozas.png|}} Kimenő csomagok feldolgozása: {{:oktatas:hálózat:cisco_szerint_a_hálózat:kimeno_csomagok_feldolgozasa.png|}} ===== IPv6 ACL ===== * nincs helyettesítőmaszk * csak nevesített ACL van * nincs szabványos, mint az IPv4 esetén ==== IPv6 példa ==== R1(config)# ipv6 access-list NO-R3-LAN-ACCESS R1(config-ipv6-acl)# deny ipv6 2001:db8:def:30::/64 any R1(config-ipv6-acl)# permit ipv6 any any R1(config-ipv6-acl)# end R1(config)# interface s0/0/0 R1(config)# ipv6 traffic-filter NO-R3-LAN-ACCESS in R1(config)# ipv6 access-list NO-FTP-TO11 R1(config-ipv6-acl)# deny tcp any 2001::db8:def:11::/64 ftp R1(config-ipv6-acl)# deny tcp any 2001::db8:def:11::/64 ftp-data R1(config-ipv6-acl)# permit ipv6 any any R1(config-ipv6-acl)#exit R1(config)# interface g0/0 R1(config-if)# ipv6 traffic-filter NO-FTP-TO in Ellenőrzés: R1#show ipv6 interface g0/0 R1#show access-list R1#show running-config