Introduction
Ce chapitre présente d’abord les principes de base des ACLs Ciso IOS. Ensuite,
quelques exemples de mise en oeuvre en IPv4 démontrent leur usage. Enfin, le
document se termine par un exposé sur les ACLs IPv6 en Cisco IOS.
1. ACLs
Une liste d’accès est un ensemble d’instructions basées sur des protocoles de
couche 3 et de couches supérieures pour contrôler le trafic.
La configuration des ACLs IPv4 et des ACLs IPv6 sont similaires mais aussi très
différentes.
Cette fonctionnalité Cisco IOS est utile pour :
les fonctions de pare-feu
le marquage du trafic, QoS
les configurations NAT
le contrôle des logs
le contrôle des accès aux consoles virtuelles (VTY)
le contrôle des informations de routage
le contrôle du trafic SNMP, …
1.1 Deux types d’ACLs IPv4
Les deux types d’ACLs se distinguent en fonction des critères utilisés :
Une liste simple (standard) et l’autre plus complexe (étendue).
Standard : uniquement adresse IPv4 source
Étendue :
o protocole IPv4, ICMPv4, TCP, UDP, ESP, AH, … ou IPv6 et
supérieurs
o origine et destination
o ports ou types de messages
Les ACLs standard n’existent plus en IPv6.
Liste d’accès standard
Router(config)#access-list numéro-liste-accès {deny|permit} adresse-
source [masque-source] [log]
Liste d’accès étendue IPv4
Router(config)#access-list numéro-liste-accès {deny|permit} protocole
adresse-source masque-source [opérateur port] adresse-destination
masque-destination [opérateur port] [log]
Où protocole (IPv4) peut être :
<0-255> An IP protocol number
ahp Authentication Header Protocol
eigrp Cisco’s EIGRP routing protocol
esp Encapsulation Security Payload
gre Cisco’s GRE tunneling
icmp Internet Control Message Protocol
igmp Internet Gateway Message Protocol
ip Any Internet Protocol
ipinip IP in IP tunneling
ospf OSPF routing protocol
tcp Transmission Control Protocol
udp User Datagram Protocol
Où l’opérateur peut prendre les valeurs suivantes :
lt (less than) : “moins que”.
gt (greater than) : “plus que”.
eq (equal) : “égal à”.
neq (not equal) : “non équivalent”.
range (inclusive range) : “étendue d’une plage”.
Où le paramètre “port” peut prendre une valeur nominative ou numéraire :
de 0 à 65535 ou, par exemple, www, telnet, ftp, etc.
1.2 ACLs numérotées
Les ACLs numérotées sont constituées d’un ensemble de règles :
ordonnées selon la frappe
ayant un même numéro
Pratique obsolète (en IPv6) dont le numéro indique la nature :
IPv4 standard : 1 - 99 et 1300 - 1999
IPv4 étendue : 100 - 199 et 2000 - 2699
Par exemple :
En configuration globale : (config)#
access-list 1 deny host [Link]
access-list 1 permit any
L’ACL standard 1 empêche seulement le trafic venant de l’hôte
[Link]
Un autre exemple :
access-list 102 deny tcp any any eq 23
access-list 102 permit ip any any
L’ACL extended 102 empêche tout trafic vers le service Telnet et autorise
tout autre trafic IPv4.
Faut-il encore placer ces ACLs dans une fonction (filtrage, marquage,
règles NAT…)
1.3 ACL nommées
Les ACLs nommées se distinguent par un nom.
Il faut spécifier le type standard ou extended en IPv4.
Les ACLs IPv6 sont d’office “extended” de telle sorte que le paramètre
disparaît des commandes.
les règles s’incrémentent d’un numéro d’ordre (tous les 10). Cet ID permet
d’insérer des règles dans une liste.
(config)#ip access-list standard ACL_IPv4_STD
(config-std-nacl)#permit | deny ?
(config)#exit
(config)#ip access-list extended ACL_IPv4_EXT
(config-ext-nacl)#permit | deny ?
(config)#exit
(config)#ipv6 access-list ACL_IPv6
(config-ipv6-acl)#permit | deny ?
Par exemple :
(config)#ip access-list extended IPv4_LAN
(config-ext-nacl)#
permit tcp [Link] [Link] any eq 80
permit tcp [Link] [Link] any eq 443
#show access-lists
Extended IP access list IPv4_LAN
10 permit tcp [Link] [Link] any eq www
20 permit tcp [Link] [Link] any eq 443
1.4 Logique des ACLs appliquée sur les interfaces
Logique des ACLs appliquées sur les interfaces
Le routeur parcourt la liste d’accès et valide chaque règle jusqu’à
trouver une correspondance.
Si une correspondance est trouvée, le routeur prend la
décision permit ou deny correspondante. Il ne lit pas la suite de la
liste.
Une ACL se termine toujours par une règle deny any implicite.
On imagine aisément que plus il y a de règles à examiner, plus il y a
de la charge sur le matériel qui contrôle le trafic.
1.5 Masque Générique
Il ne faut pas confondre un masque générique (wilcard mask) avec un
masque de sous-réseau (subnet mask). Un masque générique est un
masque de filtrage.
Quand un bit aura une valeur de 0 dans le masque, il y aura
vérification de ce bit sur l’adresse IP de référence.
Lorsque le bit aura une valeur de 1, il n’y en aura pas.
Cette notion est utilisée dans les configurations OSPFv2 sous Cisco
IOS.
Masque de réseau
Un masque de réseau est un masque de division ou de regroupement.
Une addition booléenne d’une adresse IP et d’un masque de réseau
est utilisée pour distinguer la partie réseau de la partie hôte.
En binaire, alors qu’un masque de réseau est nécessairement une suite
homogène de 1 et puis de 0, un masque générique peut être une
suite quelconque de 1 et de 0 en fonction du filtrage que l’on veut
opérer sur des adresses IP.
Exemples de masque générique
Soit un masque générique [Link] demande une correspondance
exacte de l’adresse IP de référence :
permit [Link] [Link]
Le mot-clé host remplace [Link] :
permit host [Link]
[Link] filtre toutes les adresses IPv4.
permit [Link] [Link]
Le mot-clé any remplace [Link] [Link]
permit any
Filtrer [Link]/24
Réseau : [Link] [Link]
ACL : [Link] [Link]
Filtrer [Link]/30
Réseau : [Link] [Link]
ACL : [Link] [Link]
Masques de “summarization”
Filtrer tous les réseaux qui commencent en 192.168 :
ACL : [Link] [Link]
Numéros pairs sur le dernier octet du /24 :
ACL : [Link] [Link]
Numéros impairs sur le troisième octet :
ACL : [Link] [Link]
1.6 Applications
En soi, une ACL n’a pas de portée si elle n’est pas appliquée.
De manière non exhaustive, les ACLs trouvent une quantité d’applications en Cisco
IOS :
Filtrage sans état de trafic de données sur des interfaces.
Firewall (filtrage à état) sur des interfaces : ACL bloquante
Filtrage de trafic de trafic de gestion (sur une ligne VTY).
Trafic source dans une règle NAT (inside source list) pour désigner de
nombreuses adresses IP privées à traduire.
Transfert de port
Déboggage pour filtrer les sorties.
… et bien d’autres en ingénérie du trafic (VPN, QoS, filtrage du routage,
routage à la demande, …).
1.7 Direction des ACLs de Filtrage
Les liste d’accès s’appliquent sur les interfaces :
pour le trafic entrant sur l’interface, in
pour le trafic sortant de l’interface, out
#show access-lists
Extended IP access list IPv4_LAN
10 permit tcp [Link] [Link] any eq www
20 permit tcp [Link] [Link] any eq 443
(config)#int f0/0
(config-subif)#ip access-group IPv4_LAN in
Combien d’ACLs de filtrage sur une interface ?
“Une seule ACL par interface par protocole par direction”
Cela signifie que l’on pourra appliquer au maximum pour chaque interface 4 ACLs :
une ACL IPv4 in
une ACL IPv4 out
une ACL IPv6 in
une ACL IPv6 out
1.8 Autres types d’ACLs
Ce document ne couvre pas d’autres types d’ACLs Cisco :
ACLs established
Reflexive ACLs
Dynamic ACLs (sorte de Port Knocking)
Time-based ACLs that use time ranges
Authentication proxy
Turbo ACLs
Distributed time-based ACLs
2. Exemples de mise en œuvre ACLs IOS IPv4
Refuser l’accès d’un hôte à un réseau
Autoriser une plage contiguë d’adresses IP
Autoriser l’accès d’un hôte à une interface
Pare-simple CBAC
Autoriser des Pings (ICMP)
Autoriser le Web, le mail, FTP et SSH
Autoriser le trafic DNS
Autoriser le trafic de routage
Déboggage du trafic
Filtrage VTY (Telnet, SSH)
Filtrage NTP
Configurations NAT, PAT, transfert de ports (DNAT)
Règles implicites en IPv6
Filtrage IPv6
2.1. Refuser l’accès d’un hôte à un réseau
Refuser PC1 ([Link]) d’accéder à Server ([Link]) :
R1#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address Client-ID/ Lease expiration Type
Hardware address/
User name
[Link] 000c.298b.3f44 Mar 02 2015 12:08 AM Automatic
[Link] 0100.5079.6668.00 Mar 02 2015 12:41 AM Automatic
[Link] 000c.2995.6f42 Mar 02 2015 12:44 AM Automatic
R1(config)#ip access-list standard DENY_PC1_SERVER
R1(config-std-nacl)#deny host [Link]
R1(config-std-nacl)#exit
R1(config)#int f1/0
R1(config-if)#ip access-group DENY_PC1_SERVER out
2.2. Autoriser une plage contiguë d’adresses IP
Autoriser le trafic d’une série de LANs adressés en 192.168.X.X/24 derrière le pare-
feu :
R1(config)#ip access-list standard PERMIT_LANS
R1(config-std-nacl)#permit [Link] [Link]
2.3. Autoriser l’accès d’un hôte à une interface
R1#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address Client-ID/ Lease expiration Type
Hardware address/
User name
[Link] 000c.298b.3f44 Mar 02 2015 12:08 AM Automatic
[Link] 0100.5079.6668.00 Mar 02 2015 12:41 AM Automatic
[Link] 000c.2995.6f42 Mar 02 2015 12:44 AM Automatic
R1(config)#ip access-list standard PERMIT_PC1
R1(config-std-nacl)#permit host [Link]
R1(config-std-nacl)#exit
R1(config)#int f0/0
R1(config-if)#ip access-group PERMIT_PC1 in
2.4. Pare-feu simple CBAC
(config)#ip access-list extended IP_BLOCK
(config-ext-nacl)#100 deny ip any any
(config-ext-nacl)#exit
(config)#exit
(config)#int f0/0
(config-if)#ip access-group IP_BLOCK in
#show access-list IP_BLOCK
Extended IP access list IP_BLOCK
deny ip any any (39 match(es))
(config)#ip inspect name FW udp
(config)#ip inspect name FW tcp
(config)#int f0/0
(config-subif)#ip inspect FW out
On peut aussi demander à auto secure firewall en mode privilège :
R1#auto secure firewall
--- AutoSecure Configuration ---
*** AutoSecure configuration enhances the security of
the router, but it will not make it absolutely resistant
to all security attacks ***
AutoSecure will modify the configuration of your device.
All configuration changes will be shown. For a detailed
explanation of how the configuration changes enhance security
and any possible side effects, please refer to [Link] for
Autosecure documentation.
At any prompt you may enter '?' for help.
Use ctrl-c to abort this session at any prompt.
Gathering information about the router for AutoSecure
Is this router connected to internet? [no]: yes
Enter the number of interfaces facing the internet [1]:
Interface IP-Address OK? Method Status Protocol
GigabitEthernet0/0 [Link] YES NVRAM up up
GigabitEthernet0/1 unassigned YES NVRAM administratively down down
GigabitEthernet0/2 [Link] YES NVRAM up up
GigabitEthernet0/3 unassigned YES NVRAM administratively down down
Enter the interface name that is facing the internet: GigabitEthernet0/1
Configure CBAC Firewall feature? [yes/no]: yes
This is the configuration generated:
ip inspect audit-trail
ip inspect dns-timeout 7
ip inspect tcp idle-time 14400
ip inspect udp idle-time 1800
ip inspect name autosec_inspect ftp timeout 3600
ip inspect name autosec_inspect http timeout 3600
ip inspect name autosec_inspect rcmd timeout 3600
ip inspect name autosec_inspect realaudio timeout 3600
ip inspect name autosec_inspect smtp timeout 3600
ip inspect name autosec_inspect tftp timeout 30
ip inspect name autosec_inspect udp timeout 15
ip inspect name autosec_inspect tcp timeout 3600
ip access-list extended autosec_firewall_acl
permit udp any any eq bootpc
deny ip any any
interface GigabitEthernet0/1
ip inspect autosec_inspect out
ip access-group autosec_firewall_acl in
!
end
Apply this configuration to running-config? [yes]: yes
Applying the config generated to running-config
R1#
*Aug 14 [Link].669: %AUTOSEC-5-ENABLED: AutoSecure is configured on the
device
2.5. Autoriser des Pings (ICMP)
Le plus simplement du monde avec CBAC :
R1(config)#ip inspect name FW icmp
Autrement par ACL out WAN (f0/0) :
10 permit icmp any any echo-reply
2.6. Autoriser le Traffic DNS
Dur dur l’Internet sans DNS …
11 permit udp any eq domain any
2.7. Autoriser le Traffic DHCP
12 permit udp any eq bootps any eq bootpc
2.8. Autoriser le Web, le Mail, FTP et SSH
Par exemple Vers le serveur en DMZ [Link] venant de toutes les autres
zones :
R1(config)#ip access-list extended DMZ_SERVICES
R1(config-ext-nacl)#permit tcp any host [Link] eq www
R1(config-ext-nacl)#permit tcp any host [Link] eq 22
R1(config-ext-nacl)#permit tcp any host [Link] eq smtp
R1(config-ext-nacl)#permit tcp any host [Link] eq pop3
R1(config-ext-nacl)#permit tcp any host [Link] eq 21
R1(config-ext-nacl)#
R1(config-ext-nacl)#exit
R1(config)#int f1/0
R1(config-if)#ip access-group DMZ_SERVICES out
2.9. Autoriser les mises à jours de routage
permit udp any any eq rip
permit eigrp any any
permit ospf any any
permit tcp any any eq 179
permit tcp any eq 179 any
2.10. Débogage du trafic
Par exemple :
R1(config)#access-list 199 permit tcp host [Link] host [Link]
R1(config)#access-list 199 permit tcp host [Link] host [Link]
R1(config)#end
R1#debug ip packet 199 detail
IP packet debugging is on (detailed) for access list 199
2.11. Refuser/autoriser du trafic SSH
Sur une interface : Non
Sur l’accès à une console VTY : Oui
2.12. Contrôle des accès consoles VTY
(config)#ip access-list extended VTY
(config-ext-nacl)#permit ip host [Link] any
(config-ext-nacl)#permit ip [Link] [Link] any
(config-ext-nacl)#exit
(config)#line vty 0 4
(config-line)#ip access-class VTY in
2.13. Contrôle des requêtes NTP
Configuration du service NTP
ntp master 5
ip access-list standard LAN_R1
permit [Link] [Link]
ntp access-group serve-only LAN_R1
2.14. NAT
Le NAT permet de traduire :
les adresses internes (inside)
o privée (local) en
o publique (global)
les adresses externes (outside)
Le routeur NAT tient une table de traduction
Il transforme le trafic : il remplace les en-têtes IP et de couche transport
(UDP/TCP).
PAT
Un routeur peut prendre en compte le port TCP ou UDP utilisé. On appelle cette
technique “Port Address Translation”.
La méthode PAT permet de :
transférer un service TCP ou UDP sur une adresse privée vers une adresse
publique.
multiplexer la connectivité globale d’un LAN avec une seule adresse IP
publique.
Le “PAT” correspond au “NAT overload” de Cisco
Mise en oeuvre du PAT (NAT Overload)
access-list 1 permit [Link] [Link]
!
ip nat inside source list 1 interface f0/1 overload
!
interface f0/1.1
ip nat inside
interface f0/1.2
ip nat inside
interface f0/0
ip nat outside
!
end
Vérification du NAT/PAT
#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp [Link]:11 [Link]:11 [Link]:11 [Link]:11
icmp [Link]:12 [Link]:12 [Link]:12 [Link]:12
icmp [Link]:13 [Link]:13 [Link]:13 [Link]:13
icmp [Link]:14 [Link]:14 [Link]:14 [Link]:14
icmp [Link]:15 [Link]:15 [Link]:15 [Link]:15
Note :
Inside Local = adressage privé
Inside Global = adressage public
2.15. Transfert de port (DNAT)
Transfert de trafic du port TCP 3389 entrant sur une interface f0/1 (externe) vers
une adresse (interne) sur le même port.
(config)#
ip nat inside source static tcp [Link] 3389 interface f0/1 3389
2. ACLs Cisco IOS IPv6
3.1. Filtrages IPv6
Préfixes bogon
En-têtes et extension d’en-tête
Filtrage des tunnels (6in4, GRE, IPSEC, …)
Firewall L2
Logs et performances
Dans le document qui suit, on développera :
ACL : filtrage sans état
IPv6 IOS Firewall : SPI + ACL
IPv6 Zone-Based Firewall (ZBF)
3.2. Cisco IPv6 ACLs
Les ACLs IPv6 sont très similaires aux ACLs IPv4. Il n’y a plus que des ACLs
nommées étendues.
(config)#ipv6 access-list name
permit/deny protocol {source-ipv6-prefix/prefix-length | any | host source-ipv6-
address | auth} [operator [port-number]] {destination-ipv6-prefix/prefix-length |
any | host destination-ipv6-address | auth} [operator [port-number]] [dest-option-
type[doh-number | doh-type]] [dscp value] [flow-label value] [fragments] [log]
[log-input] [mobility] [mobility-type [mh-number | mh-type]] [reflect name
[timeout value]] [routing] [routing-type routing-number] [sequence value] [time-
range name]
Les ACLs IPv6 sont appliquées sur les interfaces en utilisant la commande :
(config-if)#ipv6 traffic-filter access-list-name {in | out}
Entrées implicites ACLs
Toutes les ACLs IPv6 contiennent deux règles implicites qui autorisent le trafic IPv6
neighbor discovery (ND) à l’envoi et à la réception :
permit icmp any any nd-na
permit icmp any any nd-ns
Comme les ACLs IPv4, les ACLs IPv6 contiennent une règle imlicite qui refuse tout
autre trafic.
deny ipv6 any any
Ces règles ne sont pas visibles dans la configuration? On conseillera de les encoder
explicitement. Entrer manuellement la règle implicite deny any any vous permettra
de journaliser les paquets refuser sans concerner neighbor discovery (ND).
3.3. Exemple ACL IPv6
Exemple refuser tout trafic TCP80 pour une adresse en dehors du LAN :
interface f0/0
description interface LAN
ipv6 traffic-filter BLOCK_HOST_01 in
!
ipv6 access-list BLOCK_HOST_01
sequence 20 deny tcp host [Link] any eq www
3.4. Trafic IPv6 à contrôler
Trafic à bloquer