15. Tűzfalak

A Cisco hálózati eszközeiben a hozzáférések kontrollja ún. ACL-ek (Access Control List) alapján kerülnek beállításra. Az ACL-eknek a Cisco terminológiájában két típusa létezik, ezek a normál és a kiterjesztett listák. A normál listák egyszerűbb szintaxissal írhatók le; ennek elsődleges oka a lehetőségek szűkebb tárháza: a normál listák csak a csomagok célhálózatának leírását tartalmazzák, így döntéseket is csak ezek alapján lehet hozni. A gyakorlatban a kiterjesztett listák használata lényegesen szélesebb szolgáltatás készletet nyújt, ezekben a cél cím és portszám mellett a forrás cím és portszám is megadható. A magasabb szintű paraméterezhetőség viszont értelemszerűen bonyolultabb konfigurációs parancsok megadását is igényli.

15.1. Normál ACL-ek

Az ACL-ek alkalmazását a gyakorlatban két lépésben végezzük. Először létrehozzuk a listát, majd azt később egy interfészhez rendeljük úgy, hogy meghatározzuk, hogy az abban foglalt szabályok a bejövő vagy a kimenő forgalomhoz tartoznak-e. Ebből az is következik, hogy amennyiben külön akarunk megkötéseket érvényesíteni a bejövő és kimenő forgalmat is, akkor két önálló listát kell majd készítenünk és a megfelelő interfészhez hozzárendelnünk.

Mivel több listát is készíthetünk, azokat meg kell különböztetnünk egymástól. Erre használhatunk egyszerű sorszámokat, vagy a funkcióikat leíró neveket. Fontos, hogy a normál ACL-ek sorszámai 0 és 99 közé kell, hogy essenek. Az előbbi módon kialakított listák neve sorszámozott míg az utóbbiaké nevesített.

A listák megadásában sajnos van egy kellemeten pont, a hálózat megadásakor nem a nagy nehezen megtanult alhálózati maszkot kell megadni, hanem annak inverzét, amihez sajnos még egy (ha nem is bonyolult) számítási műveletet meg kell tanulnunk. Lássunk néhány példát!

Készítsünk egy ACL-t, amely lehetővé teszi a 192.168.10.0-s hálózatba irányuló forgalmat! A beállításhoz rendeljünk hozzá egy leírást is a Engedelyezve a 192.168.10.0/24 szöveggel! A lista megadását konfigurációs módban, az access-list parancs megadásával kezdjük, amelyet a lista sorszáma követ. Ez után a permit vagy a deny kulcsszó következik annak függvényében, hogy a listában meghatározott hálózatok forgalmát engedélyezni vagy tiltani akarjuk. Végül a célhálózat megadása következik úgy, hogy abban az alhálózati maszk inverzét kell megadni, példánkban a 255.255.255.0 helyett a 0.0.0.255-öt.

R1(config)# access-list 10 permit 192.168.10.0 0.0.0.255 remark Engedelyezve a 192.168.10.0/24

Az inverz netmaszk kiszámítása két módon is gyorsan elvégezhető. A bináris alak esetében egyszerűen meg kell fordítani a biteket, így a 11111111.11111111.11111111.00000000 inverze 00000000.00000000.00000000.11111111 lesz. A decimális alak esetén hasonlóan egyszerű metodika alkalmazható, a hagyományos netmaszk értékét ki kell vonni a 255.255.255.255-ből, ami így 0.0.0.255 lesz.

  255.255.255.255
- 255.255.255.  0
-----------------
    0.  0.  0.255

Ugyanebben a listában tiltsuk le a 192.168.10.5-ös gép elérését! A beállításban a lista száma változatlan marad, de a tiltás miatt most a permit helyett most deny-t kell használni. A hálózat címe most egyetlen hostot kell, hogy lefedjen, melynek netmaszkja a 255.255.255.255 lenne, az inverz megadási mód miatt így most 0.0.0.0-t használunk:

R1(config)# access-list 10 deny 192.168.10.5 0.0.0.0 remark Tiltjuk a 192.168.10.5 elérését.

A gyakorlatban egyetlen cím megadására a host kulcsszó alkalmazásával egy egyszerűbb forma is alkalmazható, ekkor az egyetlen hostot leíró 0.0.0.0 leírása nem szükséges. Bár használata nélkülözhető. legalább olvasni tudnunk kell az ily módon megadott szabályokat is. A host kulcsszó használata esetén annak egyértelműsége miatt a leírások megadása nem lehetséges:

R1(config)# access-list 10 deny host 192.168.10.11

Az ACL-ek felépítésekor gyakran minden forgalmat tiltunk, és kivételként soroljuk fel azokat a forgalmakat, amelyeket engedélyezni szeretnénk. A router a megadott szabályokat sorba rendezi, előre helyezve a hostokra és hátrább sorolva az egyre nagyobb és nagyobb hálózatokra vonatkozókat. Az ACL-ek utolsó szabálya rendszerint egy „minden egyéb forgalom tiltása” tartalmú sor, melyet a default route-nél látott 0.0.0.0 0.0.0.0 írna le, de az ACL-ek esetében az inverz megadási mód miatt a 0.0.0.0 255.255.255.255 inverz netmaszkot kell használni:

R1(config)# access-list 10 deny 0.0.0.0 255.255.255.255 remark Minden mas forgalom tiltasa

Ennek is van rövid megadási módja, melyben az any kulcsszót használjuk (megjegyzések ebben az esetben sem használhatók):

R1(config)# access-list 10 deny any

15.2. ACL-ek alkalmazása

Az elkészített ACL-eket a router egyes interfészeihez kell rendelni és meg kell adni, hogy az abban foglalt szabályokat a bejövő vagy a kimenő csomagokra szeretnénk érvényesíteni. Az eddig kialakított listát alkalmazzuk az alábbi hálózat R1 routerén! A célunk az, hogy a 192.168.100.0/24-es hálózat gépei el tudják érni a 192.168.200.5-ös IP című webszervert úgy, hogy a 192.168.200.0/24 hálózat minden más gépe felé irányuló forgalmat tiltsunk (utóbbi a$ PC2 munkaállomás pingelésével ellenőrizhető).

ACL-ek alkalmazása a hálózatban

ACL-ek alkalmazása a hálózatban

Készítsük el a router konfigurációját a fentiek alapján! Az eddigiek alapján készítsük el a szükséges ACL-t, és a 10-es sorban rendeljük hozzá a router 192.168.200.1-es című interfész kimenő forgalmának szabályozásához:

Router> ena
Router# conf term
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)# hostname R1
R1(config)# no ip domain-lookup
R1(config)# access-list 10 permit host 192.168.200.5
R1(config)# access-list 10 deny any
R1(config)# int g0/0/0
R1(config-if)# ip address 192.168.100.1 255.255.255.0
R1(config-if)# no sh
R1(config-if)# exit
R1(config)# int g0/0/1
R1(config-if)# ip address 192.168.200.1 255.255.255.0
R1(config-if)# ip access-group 10 out
R1(config-if)# no sh
R1(config-if)# end

A tűzfal beállításait a ping paranccsal ellenőrizhetjük, PC0-ról pingeljük meg a webszervert és PC2-t! Ha a konfigurációnk helyes, a webszerver pingelhető, tartalma a böngészőben elérhető, de a PC2-vel semmilyen hálózati kapcsolat nem működik.

C:\>ping 192.168.200.5
Pinging 192.168.200.5 with 32 bytes of data:
Reply from 192.168.200.5: bytes=32 time<1ms TTL=127
Reply from 192.168.200.5: bytes=32 time<1ms TTL=127

Ugyanakkor a 192.168.100.0/24 hálózatból nem érhető el a 200.0/24-es hálózat egyetlen más gépe sem:

C:\>ping 192.168.200.11
Pinging 192.168.200.11 with 32 bytes of data:
Request timed out.
Request timed out.

Az ACL-ek listázásra két módszert is kínál a Cisco IOS. Az show access-lists megleníti az összes ACL-t és azok tartalmát úgy, hogy az egyes beállítások sorszáma is leolvasható:

R1# sh access-lists
Standard IP access list 10
    10 permit host 192.168.200.5
    20 deny any

A listák egyes elemei szüksége esetén törölhetők. Az alábbi példában a 10-es lista 1-es sorszámú szabályát töröljük:

R1(config)# ip access-list standard 10
R1(config-std-nacl)# no 10
R1(config-std-nacl)# end

R1# show access-lists
Standard IP access list 10
    20 deny any

Természetesen az interfész hozzárendelések is törölhetők, ennek módja szinte azonos az hozzárendeléssel, a különbség a no kulcsszó alkalmazásában van:

R1(config)# int g0/0/0
R1(config-if)# no ip access-group 10 out

15.3. Nevesített listák

Az ACL-ek nem csak sorszámozottak, hanem nevesítettek is lehetnek, ekkor bár tartalmuk azonos, a megadásuk szintaxisa részben eltérő. Hozzuk létre az előző feladat 10-es ACL-jét úgy, hogy annak neve OUT-FILTER legyen! Mivel még mindig csak standard listát készítünk, a leírásban ezt jelezni kell a standard kulcsszóval:

R1(config)# ip access-list standard OUT-FILTER
R1(config)# remark Csak a 200.5-os gep erheto el
R1(config)# permit host 192.168.200.5
R1(config)# remark Minden mas tiltasa
R1(config)# deny any

Rendeljük hozzá ezt a listát a router 192.168.200.1-es interfészéhez!

R1(config)# int g0/0/0
R1(config-if)# ip address 192.168.100.1 255.255.255.0
R1(config-if)# ip access-group OUT-FILTER out
R1(config-if)# no sh
R1(config-if)# exit

A teljes konfigurációs beállítás ezzel az alábbi lesz:

Router> ena
Router# conf term
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)# hostname R1
R1(config)# no ip domain-lookup

R1(config)# ip access-list standard OUT-FILTER
R1(config-std-nacl)# permit host 192.168.200.5
R1(config-std-nacl)# deny any

R1(config-std-nacl)# int g0/0/0
R1(config-if)# ip address 192.168.100.1 255.255.255.0
R1(config-if)# no sh
R1(config-if)# exit
R1(config)# int g0/0/1
R1(config-if)# ip address 192.168.200.1 255.255.255.0
R1(config-if)# ip access-group OUT-FILTER out
R1(config-if)# no sh

15.4. Kiterjesztett ACL

Ahogyan már említettem, a kiterjesztett listák alkalmazása sokkal részletesebb szabályok megadását teszi lehetővé, mert ezekben a forrás és a célhálózat mellett a forrás és a cél port is megadható. A kiterjesztett listákat csak nevesített formában fogjuk használni. A szabályok megadására lássunk néhány példát!

  • A 192.168.10.55-ös IP című gép IP kapcsolatot létesíthet a 192.168.200.11 géppel:

    permit ip host 192.168.10.55 host 192.168.200.11
    
  • A 192.168.10.55-ös IP című gép nem létesíthet a 80-as porton keresztül kapcsolatot a 192.168.200.11 géppel (a portszám és a protokoll neve is megadható):

    deny ip host 192.168.10.55 host 192.168.200.11 eq 80
    deny ip host 192.168.10.55 host 192.168.200.11 eq www
    
  • A 192.168.10.0/24 hálózat gépei a 80-as porton keresztül elérhetik a 192.168.200.0/24 hálózatban levő webszervereket:

    permit tcp 192.168.10.0 0.0.0.255 192.168.200.0 0.0.0.255 eq 80
    
  • Az icmp csomagok bárhová küldhetők:

    permit icmp any any
    
  • UDP csomagon egyáltalán nem küldhetők:

    deny udp any any
    

Gyakorlati példánkhoz használjuk most is az előző hálózatot, de a szabályaink most legyenek sokkal összetettebbek:

  1. A 192.168.100.0/24 hálózatban bármelyik gép érje el a webszervert a 80-as porton!

  2. A 192.168.100.12-es gép érje el a webszerver 21-es porton működő FTP szolgáltatást!

  3. Csak a 192.168.100.12-es gép tudja pingelni a webszervert!

  4. Minden más, a 192.168.200.0/24 hálózatba irányuló forgalmat tiltsunk le, úgy, hogy PC0 tudja pingelni a PC2 gépet!

A megoldásban tehát kiterjesztett listát fogunk alkalmazni, amelynek megadása során az egyes szabályokat azok definiálása előtt a remark paranccsal dokumentáljuk is:

Router> ena
Router# conf term
Enter configuration commands, one per line.  End with CNTL/Z.
Router(config)# hostname R1
R1(config)# no ip domain-lookup

R1(config)# ip access-list extended KIMENO
R1(config-ext-nacl)# remark 1-es szabaly: a webszervert minden gep eleri
R1(config-ext-nacl)# permit tcp 192.168.100.0 0.0.0.255 host 192.168.200.5 eq www
R1(config-ext-nacl)# remark 2-es szabaly: 100.12 tud ftp kapcsolatot letesiteni 200.5-tel
R1(config-ext-nacl)# permit tcp host 192.168.100.12 host 192.168.200.5 eq 21
R1(config-ext-nacl)# remark 3-as es 4-es szabalyok: ping kapcsolatok
R1(config-ext-nacl)# permit icmp host 192.168.100.12 host 192.168.200.5
R1(config-ext-nacl)# permit icmp host 192.168.100.11 host 192.168.200.11
R1(config-ext-nacl)# exit

R1(config)# int g0/0/0
R1(config-if)# ip address 192.168.100.1 255.255.255.0
R1(config-if)# no sh
R1(config-if)# exit
R1(config)# int g0/0/1
R1(config-if)# ip address 192.168.200.1 255.255.255.0
R1(config-if)# ip access-group KIMENO out
R1(config-if)# no sh
R1(config-if)# end

Ellenőrizzük a konfiguráció helyességét! Először listázzuk az ACL-eket! Ehhez használjuk a running-config kimenetét, amelyet szűrjünk a ip access-list szekcióra! (Használhatnánk a show access-lists parancsot is, az azonban a megjegyzéseinket nem jelenítené meg.)

R1# sh run | section ip access-list
ip access-list extended KIMENO
    remark 1-es szabaly: a webszervert minden gep eleri
    permit tcp 192.168.100.0 0.0.0.255 host 192.168.200.5 eq www
    remark 2-es szabaly: 100.12 tud ftp kapcsolatot letesiteni 200.5-tel
    permit tcp host 192.168.100.12 host 192.168.200.5 eq ftp
    remark 3-as es 4-es szabalyok: ping kapcsolatok
    permit icmp host 192.168.100.12 host 192.168.200.5
    permit icmp host 192.168.100.11 host 192.168.200.11

Vegyük sorra a tűzfal szabályait! Ellenőrizzük a webszerver elérhetőségét mindkét gépről!

A web kapcsolat működik

A web kapcsolat működik

Az FTP kapcsolat tesztelése parancssorból történik. A követelmény szerint a 192.168.200.5-ös gépet csak a PC1-ről, azaz a 192.168.100.12-es IP című gépről lehessen elérni. A tesztelést a parancssor ftp parancsával végezzük az alábbi példa alapján:

C:\>ftp 192.168.200.5
Trying to connect...192.168.200.5
Connected to 192.168.200.5
220- Welcome to PT Ftp server
Username:

PC0-ról viszont nem működik az ftp parancs, így az erre vonatkozó követelményt teljesítettük:

C:\>ftp 192.168.200.5
Trying to connect...192.168.200.5
%Error opening ftp://192.168.200.5/ (Timed out)

A harmadik, icmp csomagokra vonatkozó szabály tesztelése a már ismert ping paranccsal történik, a 192.168.100.11-es gépről nem, a 192.168.100.12-esről viszont működik a parancs:

C:\>ping 192.168.200.5
Pinging 192.168.200.5 with 32 bytes of data:
Reply from 192.168.100.1: Destination host unreachable.
C:\>ping 192.168.200.5
Pinging 192.168.200.5 with 32 bytes of data:
Reply from 192.168.200.5: bytes=32 time<1ms TTL=127

Végül ellenőrizzük az utolsó követelményt: csak PC0 tudja pingelni PC2-t:

C:\>ping 192.168.200.11
Pinging 192.168.200.11 with 32 bytes of data:
Reply from 192.168.200.11: bytes=32 time<1ms TTL=127

De PC1 esetében ugyanez nem működik:

C:\>ping 192.168.200.11
Pinging 192.168.200.11 with 32 bytes of data:
Request timed out.
Reply from 192.168.100.1: Destination host unreachable.

Az ellenőrzések igazolják a szabályok működőképességét.

15.5. Telnet és SSH kapcsolatok védelme

Az ACL-eket gyakran alkalmazzuk a hálózati eszközök management felületének védelmére is. Ezek a beállítások az eddig bemutatott példa alapján könnyen megérthetők. Az alábbi példában S1 switch ssh kapcsolatát csak az 192.168.100.11-es adminisztrátori munkaállomásról tesszük elérhetővé, minden más forrásból tiltjuk.

Első lépésként létrehozzuk azt az ACL-t amely a feladatban megfogalmazott hozzáféréseket tartalmazza:

ip access-list standard ADMIN-HOST
permit 192.168.100.11
deny any
exit

Majd az így létrehozott listát az ssh kapcsolathoz rendeljük úgy, hogy a listában foglalt szabályok a bejövő kapcsolatokra legyenek érvényesek. Figyeld meg, hogy ebben az esetben nem a korábban használt ip access-group, hanem az access-class parancsot kell használni! A konfiguráció beállítása ettől eltekintve azonos a SSH kapcsolat beállítása fejezetben már bemutaottal. Ezt az alábbi folyamat példázza, melyben kiemeltem a hozzáférés szempontjából lényeges sorokat:

Switch> ena
Switch# conf term
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)# hostname S1
S1(config)# no ip domain-lookup

S1(config)# ip access-list standard ADMIN-HOST
S1(config-std-nacl)# permit 192.168.100.11
S1(config-std-nacl)# deny any
S1(config-std-nacl)# exit

S1(config)# int vlan1
S1(config-if)# ip address 192.168.100.2 255.255.255.0
S1(config-if)# no shutdown
S1(config-if)# exit

S1(config)# username admin
S1(config)# ip domain-name uni-eszterhazy.hu
S1(config)# crypto key generate rsa general-keys modulus 2048
...
S1(config)# ip ssh version 2
S1(config)# line vty 0 15
S1(config-line)# password sshpass
S1(config-line)# privilege level 15
S1(config-line)# transport input ssh
S1(config-line)# access-class ADMIN-HOST in
S1(config-line)# login
S1(config-line)# exit
S1(config)# end

15.6. Feladatok

  1. Magyarázd el az alábbi lista elemek jelentését!
    1. access-list 10 permit 10.0.0.0 0.0.0.255 remark A

    2. access-list 10 permit 10.0.0.0 0.0.0.255 remark A

  2. Az alábbi konfigurációs beállítások mellett képes elérni X gép Y-t?

Kiterjesztett ACL: forrás, cél és port alapján (100-199). A _forráshoz_ minél közelebb legyen Sorszámozott:

eng/tilt protokoll forrás port cél port

  • access-list 100 permit tcp 192.168.10.0 0.0.0.255 any eq www

Nevesített (lehet standard és extended is):

ip access-list standard SRC-FILTER permit host 192.168.10.10 permit 192.168.10.0 0.0.0.255 deny any

ip access-list extended FTP-FILTER permit tcp 192.168.10.0 0.0.0.255 any eq ftp permit tcp 192.168.10.0 0.0.0.255 any eq ftp-data majd:

Access lista hozzárendelése Interfészhez:

interface Serial 0/1/0 ! Számozott: ip access-group 20 in|out ! Nevesített: ip access-group SRC-FILTER in|out

Törlés:

ip access-list standard 1 no 10

no access-list 10 no access-list extended FTP-FILTER

Szerkesztés:

ip access-list extended SURFING no 10 10 permit tcp 192.168.10.0 0.0.0.255 any eq www

Lekérdezés/statisztikák:

show access-lists show run | section access-list

Statisztika törlse:

clear access-list counters NO-ACCES

PC —— Router —– PC 1.10 — 1.1-10.1 — 10.10

15.6.1. R1

ena conf term hostname R1 no ip domain-lookup

access-list 10 remark 1.10-bol jovo csomagok tiltása access-list 10 deny host 192.168.1.10

ip access-list standard PERMIT-ACCESS remark 1.10 mint forrás tiltása permit host 192.168.1.10

int g0/0/0 ip address 192.168.1.1 255.255.255.0 ! Forráshoz közel tiltjuk ! ip access-group 10 out ip access-group PERMIT-ACCESS out no sh

int g0/0/1 ip address 192.168.10.1 255.255.255.0 no sh

end

15.6.2. VTY vonalak:

ip access-list standard ADMIN-HOST permit 192.168.10.10 deny any exit

line 0 4 transport input ssh access-class ADMIN-HOST in end