[[oktatas:hálózat:cisco|< Cisco]] ====== ACL ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2016, 2017, 2018, 2019 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Bevezetés ===== Ez a leírás a forrásban megjelölt anyag alapján készült. Az utasítások át lettek alakítva a Cisco PacketTracer 7.0 routereihez. A CPT-ben például nincs ftp-data port, helyette 20 számot írtam. A forrásban megadott dinamikus útválasztó protokollok egyáltalán nem használhatók. ===== Fogalmak ===== * helyettesítő_maszk = wilcard_maszk Helyettesítő maszk például: Ha a normál maszk 255.255.255.0, akkor a wildcard_maszk: 0.0.0.255 ===== Előfeltevés ===== Mielőtt elkezdesz ACL-t állítgatni, a következő ismeretek szükségesek: * alapvető IP címzési ismertek * szoftveres portok ismerete * TCP és UDP protokoll ismerete * HTTP, FTP, SMTP, POP3, IMAP, Telnet, SSH alapszintű ismerete ===== Az ACL-ek osztályozása ===== * szabványos ACL-ek * kiterjesztett ACL-ek * dinamikus ACL-ek (lock és key) * IP alapú ACL-ek * rugalmas ACL-ek * idő alapú ACL-ek, időtartományok * magyarázott IP ACL-ek * kontextus alapú ACL-ek * proxy azonosítás * terjesztett idő alapú ACL-ek Ez a dokumentum a szabványos és kiterjesztett ACL-ekről szól. ===== Szabványos ACL-ek ===== Az ACL-ek általános szintaxisa: access-list lista_száma {permit|deny} {forrásIpCím|forrásIpTartomány helyettesítő_maszk|any} A szabványos ACL-ek sorba, egymás után, összehasonlítják az IP csomagok forrás IP címét a beállítottakkal, ami alapján szabályozzák a forgalmat. A lista száma 1 és 99 közé kell essen szabványos ACL esetén. 100 és 199 közötti azonosítót a kiterjesztett ACL-ekhez használhatók. A példa kedvéért legyen két gép, amely forgalomirányítón keresztül éri el a szervert: * PC0: 1.1.1.11 * PC1: 1.1.1.12 * Server0: 2.2.2.2 {{:oktatas:hálózat:cisco:szabvanyos_acl_01.png|}} Csak a PC0 gép számára szeretném engedélyezni a szerver elérését. Elsőként létre kell hoznunk egy szabályt, egy sorszámmal, majd hozzá kell rendelni az egyik hálózati interfészhez. R1(config)#access-list 1 permit 1.1.1.11 R1(config)#int g0/0 R1(config-if)#ip access-group 1 in R1(config-if)#end Az első parancs létrehoz egy 1-s azonosító számú hozzáférési listát, egyetlen szabállyal, amely megengedi a 1.1.1.11-s gépnek, hogy átmenjen a forgalomirányítón. A második parancs kiválasztja a g0/0 interfészt. A következő hozzárendeli az 1-es azonosítójú listát az interfészhez. Az alapértelmezett irányelv a tiltás, így minden tiltva van, amit nem engedünk meg. A 1.1.1.11 gép így eléri a szervert, az 1.1.1.12 gép viszont nem. Ha később a PC1 számára is szeretném megengedni a szerver elérést, akkor írjuk be: R1(config)#access-list 1 permit 1.1.1.12 A szabályokat úgy is összeállíthatjuk, hogy alapértelmezetten mindent engedünk, és beállítjuk mit tiltunk: R1(config)#access-list 1 deny host 1.1.1.12 R1(config)#access-list 1 permit any A sorrend nem mindegy: R1(config)#access-list 1 permit any R1(config)#access-list 1 deny host 1.1.1.12 Ha egy szabály illeszkedik egy csomagra, akkor az a szabály alkalmazásra kerül, és az utána következő szabályokat már figyelmen kívül hagyja. A fenti utóbbi tiltás, tehát nem fog működni, mert hamarabb van egy mindent megengedő szabály. A vty terminálokon az "ip access-group" helyett használjuk az "access-class" utasítást: R1(config)#access-list 1 permit 1.1.1.11 R1(config)#line vty 0 15 R1(config-if)#access-class 1 in R1(config-if)#end R1# show access-list ===== Számozott ACL javítása ===== A számozott ACL-ek a nevesített módban javíthatók, az alábbi módon: R1(config)# access-list 1 deny 192.168.10.5 0.0.0.0 R1(config)# access-list 1 permit 192.168.10.0 0.0.0.255 R1(config)# exit R1# R1# show access-lists 1 Standard IP access list TILT 10 deny 192.168.10.5 20 permit 192.168.10.0, wildcard bits 0.0.0.255 R1# R1#conf t R1(config)# ip access-list standard 1 R1(config-std-nacl)# no 10 R1(config-std-nacl)# 10 deny host 192.168.10.11 R1(config-std-nacl)# end R1# R1# show access-lists Standard IP access list 1 10 deny 192.168.10.11 20 permit 192.1678.10.0, wildcard bits 0.0.0.255 R1# A forgalomirányítók a show access-list parancs esetén megmutatják a sorszámot is, ahogy az előbb kódban látható. A **Packet Tracerben** nem jelennek meg a sorszámok. Ha azonban megadjuk a lista számát: # show access-list 1 Ebben az esetben megjelenik a sorszám is. Ha belépünk ACL javítómódba: R1(config)# ip access-list standard 1 R1(config-std-nacl)# A "do show access-list" paranccsal szintén megnézhetők az beállítások. A **Packet Tracer** itt fordítva működik; A "do show access-list 1" esetén nem mutatja a sorszámot; A "do show access-list" esetén mutatja. ===== Kiterjesztett ACL-ek ===== ==== A kiterjesztett ACL-ek ==== A kiterjesztett ACL-ek sorba egymás után összehasonlítják az IP csomagok forrás és cél címeit az ACL-ben beállítottakkal, ami alapján szabályozzák a forgalmat. A kiterjesztett ACL segítségével lehetőség van a következők szűrésére is: * protokoll * port szám * különböző szolgáltatáskódok (DSCP) * precedencia alapján * a szinkronizáló sorszám állapot alapján (SYN bit) A parancs általános szintaxisa: access-list lista_száma {deny | permit} protocol forrás forrás_helyettesítő_maszk [forrásport] cél cél_helyettesítő_maszk [célport] A következőkben olyan szintaktikát látunk, amely a fizikai eszközök IOS rendszerein elérhető, de Packet Tracerben nem. IP esetén: access-list lista_száma [dynamic dynamic_név [timeout perc]] {deny | permit} protokoll forrás forrás_wildcard_maszk cél cél_wildcard_maszk [precedence precedencia] [tos tos] [log | log-input] [time-range idő_intervallum][töredékek] ICMP esetén access-list lista_száma [dynamic dynamic-név [timeout perc]] {deny | permit} icmp forrás forrás_wildcard_maszk cél cél_wildcard_maszk [icmp-type [icmp-kód] | [icmp-üzenet]] [precedence precedencia] [tos tos] [log | log-input] [time-range idő_intervallum [fragments] TCP esetén access-list lista_száma [dynamic dynamic-név [timeout perc]] {deny | permit} tcp source forrás_wildcard_maszk [operator [port]] destination cél_wildcard_maszk [operator [port]] [established] [precedence precedencia] [tos tos] [log | log-input] [time-range idő_intervallum_név][töredékek] UDP access-list lista_száma [dynamic dynamic-név [timeout perc]] {deny | permit} udp source forrás_wildcard_maszk [operator [port]] destination cél_wildcard_maszk [operator [port]] [precedence precedencia] [tos tos] [log | log-input] [time-range idő_intervallum_név][töredékek] ==== Adott port tiltása ==== Szeretnénk egy adott szolgáltatás forgalmát letiltani. Legyen a példa kedvéért két hálózat, A és B. Mindként hálózatban két gép: {{:oktatas:hálózat:cisco:kiterjesztett_acl_01.png|}} Szeretnénk tiltani a routeren a telnet elérését. A szervereken a web tiltása a forgalomirányítón: R1(config)#int g0/0 R1(config-if)#ip access-group 100 in R1(config-if)#exit R1(config)#access-list 100 deny tcp any any eq 80 R1(config)#access-list 100 permit ip any any Elemezzük a tiltó parnacsot: R1(config)#access-list 100 deny tcp any any eq 80 * 100 - az ACL bejegyzés száma - ACE (Access Control Entry) * deny - tiltás * Illeszkednie kell a csomagnak a következőkre: * tcp - TCP forgalom legyen * any - (első any) bárhonnan jön - forrás * any - (második any) bárhova megy - cél * eq 80 - célport 80 (webszerver) Láthatjuk, hogy csak a webes elérés van tiltva. Bármelyik PC-ből ha böngészőben megpróbáljuk megnézni a bármelyik szerver weblapját, az nem elérhető. Ha viszont, bármely PC-ről a ping paranccsal megvizsgálom a kapcsolatot a szerverekhez, a kapcsolat működni fog. Működnie is kell mivel a ping ICMP protokollt használ. ==== Munkamenet csak a belső hálózatról ==== Ha TCP kapcsolatot használ egy hálózati eszköz, akkor kiépíti vagyis stabilizálja a kapcsolatot. A kiépített kapcsolatot munkamenetnek hívjuk. A munkamenetben a kapcsolat kétirányú. A kapcsolatkezdeményezőtől van egy kapcsolat a cél felé, és céltól is mennek válasz csomagok a kezdeményező felé. Utóbbi csomagok a már kiépített, stabil munkamenethez tartoznak. A már kiépített kapcsolatokra beállíthatók szűrési szabályok. Tegyük fel, hogy van A és B hálózat. Szeretnénk, ha az A hálózatról elérhető lenne a B hálózat, de a B hálózatról ne lehessen elérni az A hálózatot. {{:oktatas:hálózat:cisco:kiterjesztett_acl_02.png|}} A szándékaink tehát a következők: * A hálózatról kezdeményezhető munkamenet a B hálózat felé * B hálózatról nem kezdeményezhető munkamenet az A hálózat felé A konfiguráció megengedi, hogy ha egy csomag az GigabitEthernet 0/1 interfészen tart befele, akkor azt elfogadjuk ha: * nincs beállítva a TCP fejlécben a SYN jelző * a célcím nagyobb mint 1023 Magyarázat: * Ha be van állítva a SYN jelző a TCP fejlécben, akkor éppen egy új kapcsolat kiépítése történik. * Ha cél nagyobb mint 1023, csak akkor lehet a válasz forgalom. Beállítás: R1(config)#access-list 101 permit tcp any any gt 1023 established R1(config)#int g0/1 R1(config-if)#ip access-group 101 in ==== FTP tiltása ==== Ha FTP-t használunk mindig két csatorna épül ki egy kapcsolathoz. Egy **vezérlő** és egy **adat** csatorna. Bármelyiket tiltjuk a a kapcsolatot megakadályoztuk. A következő példában az FTP kapcsolat vezérlő és adat csatornáját tiltjuk. Topológia: {{:oktatas:hálózat:cisco:szabvanyos_acl_03.png|}} Beállítások: R1(config)#int g0/0 R1(config-if)#ip access-group 100 in R1(config-if)#exit R1(config)#access-list 100 deny tcp any any eq ftp R1(config)#access-list 100 deny tcp any any eq ftp-data R1(config)#access-list 100 permit ip any any Lista ürítése: R1(config)#no access-list 100 ==== Aktív FTP engedése ==== Az FTP kapcsolat lehet aktív és passzív. Aktív kapcsolat esetén a kliens kiépít egy kapcsolatot a szerver 21-es portjára. A szerver is kiépít saját 20-as portjáról egy adatkapcsolati csatornát a kliens felé. {{:oktatas:hálózat:cisco:aktiv_ftp_kialakulasa.png|}} Aktív FTP kapcsolat engedélyezése: {{:oktatas:hálózat:cisco:kiterjesztett_acl_04.png|}} R1(config)#int g0/0 R1(config-if)#ip access-group 100 in R1(config-if)#exit R1(config)#access-list 100 permit tcp any host 2.2.2.3 eq ftp R1(config)#access-list 100 permit tcp any host 2.2.2.3 eq 20 established R1(config)#int g0/1 R1(config-if)#ip access-group 101 in R1(config)#exit R1(config)#access-list 101 permit host 2.2.2.3 eq ftp any established R1(config)#access-list 101 permit host 2.2.2.3 eq 20 any ==== Passzív FTP engedése ==== Passzív kapcsolat esetén a kliens kezdeményez egy kapcsolatot a szerver 21-s portjára, majd kezdeményez egy másik kapcsolatot a szerver 1023 feletti portjára. Az következő ábra egy lehetséges portkiosztást mutat be: {{:oktatas:hálózat:cisco:passziv_ftp_kialakulasa.png|}} {{:oktatas:hálózat:cisco:kiterjesztett_acl_04.png|}} R1(config)#int g0/0 R1(config-if)#ip access-group 100 in R1(config-if)#exit R1(config)#access-list 100 permit tcp any host 2.2.2.3 eq ftp R1(config)#access-list 100 permit tcp any host 2.2.2.3 gt 1024 R1(config)#int g0/1 R1(config-if)#ip access-group 101 in R1(config-if)#exit R1(config)#access-list 101 permit tcp host 2.2.2.3 eq ftp any established R1(config)#access-list 101 permit tcp host 2.2.2.3 gt 1024 any established ==== ICMP engedése ==== {{:oktatas:hálózat:cisco:kiterjesztett_acl_04.png|}} R1(config)#int g0/0 R1(config-if)#ip access-group 100 in R1(config-if)#exit R1(config)#access-list 100 permit icmp any any echo R1(config)#int g0/1 R1(config-if)#ip access-group 101 in R1(config-if)#exit R1(config)#access-list 101 permit icmp any any echo-reply ==== Több szolgáltatás engedése ==== A www, telnet, smtp, pop3 és ftp engedése. Tegyük fel, hogy az előbbi szolgáltatásokat szeretnénk elérni a B hálózat egyik szerverén: {{:oktatas:hálózat:cisco:kiterjesztett_acl_06.png|}} Megvalósítás a következő módon: R1(config)#int g0/0 R1(config-if)#ip access-group 100 in R1(config-if)#exit R1(config)#access-list 100 permit tcp any any eq www R1(config)#access-list 100 permit tcp any any eq telnet R1(config)#access-list 100 permit tcp any any eq smtp R1(config)#access-list 100 permit tcp any any eq pop3 R1(config)#access-list 100 permit tcp any any eq 21 R1(config)#access-list 100 permit tcp any any eq 20 ==== DNS engedése ==== A DNS szervert UDP és TCP-én keresztül is engedni kell. UDP csatornán megy a szimpla névlekérdezés. TCP-én keresztül történik a zónafájlok átvitele az elsődlees szerverről a másodlagos szerverre. Legyen A és egy B hálózat: {{:oktatas:hálózat:cisco:kiterjesztett_acl_07.png|}} A B hálózatban van egy DNS szerver, amit az A hálózat gépei használnak. Ennek engedélyezése: R1(config)#int g0/0 R1(config-if)#ip access-group 100 in R1(config-if)#exit R1(config)#access-list 100 permit udp any any eq domain R1(config)#access-list 100 permit tcp any any eq 53 A tcp esetén nem használható a domain kulcsszó. Helyette 53-as port. A DNS szerver tesztelése: nslookup valami.hu 2.2.2.3 A valami.hu a kereset tartománynév, az IP cím a DNS szerver IP címe. ===== Nevesített szabványos ACL ===== Nevesített szabványos ACL: R1(config)# ip access-list standard S1 R1(config-std-nacl)# deny 192.168.10.11 0.0.0.0 R1(config-std-nacl)# end Nevesített szabványos ACL módosítása: R1# show access-lists Standard IP access list TILT 10 deny 192.168.11.10 20 permit 192.168.10.0, wildcard bits 0.0.0.255 R1#conf t R1(config)# ip access-list standard TILT R1(config-std-nacl)# 15 deny host 192.168.11.11 R1(config-std-nacl)# end R1# show access-lists Standard IP access list TILT 10 deny 192.168.11.10 15 deny 192.168.11.11 20 permit 192.1678.10.0, wildcard bits 0.0.0.255 R1# ===== Nevesített kiterjesztett ACL ===== Használat: R1(config)# ip access-list extended KER 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 NEZ 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-if)# ip access-group KER in R1(config-if)# ip access-group NEZ out Ellenőrzés: R1# show access-lists R1# show ip int g0/0 ===== VTY vonalak védelme ===== R1(config)# line vty 0 4 R1(config-line)# login local R1(config-line)# transport input ssh R1(config-line)# access-class 2 in R1(config-line)# exit R1(config)# access-list 2 permit 192.168.10.0 0.0.0.255 R1(config)# access-list 2 deny any ===== Függelék ===== ==== Példák 001 ==== Adott 3 PC: * 192.168.5.10 * 192.168.5.11 * 192.168.5.12 PC0 \ \ \ \ PC1----===-------------------===---------Server0 / / / / PC2 Csak a 192.168.5.10 érheti el router mögötti szervert: R1(config)#access-list 1 permit 192.168.5.10 R1(config)#int g0/0 R1(config-if)#ip access-group 1 in R1(config-if)#end Az "1"-es az ACL neve. Az in befele jövő csomagokra vonatkozik a beállítás. Az in helyet írhatunk out-t. Engedélyezés egy célhálózathoz: R1(config)#access-list 1 permit 195.100.100.0 0.0.0.255 Tiltás egy célgéphez: R1(config)#access-list 1 deny host 180.100.100.3 Illeszkedés forrásra és célra is: R1(config)#access-list 100 deny tcp 195.100.100.0 0.0.0.255 0.0.0.0 0.0.0.0 eq 80 A példában ha bármely webszerverhez jön egy kapcsolat a 195.100.100.0 hálózatból, akkor azt eldobjuk. ===== Forrás ===== * http://www.cisco.com/c/en/us/support/docs/ip/access-lists/26448-ACLsamples.html * https://www.pluralsight.com/blog/it-ops/cisco-access-lists