810 likes | 1.13k Views
ACL : notions avancées. Le principe des ACL a été expliqué au chapitre précédent Ces ACL de base présentent des limitations qui peuvent être résolues par l’utilisation des : ACL dynamiques ACL « réflexives » ACL à caractère temporel turbo ACL ACL dépendantes du contexte : le CBAC.
E N D
ACL : notions avancées • Le principe des ACL a été expliqué au chapitre précédent • Ces ACL de base présentent des limitations qui peuvent être résolues par l’utilisation des : • ACL dynamiques • ACL « réflexives » • ACL à caractère temporel • turbo ACL • ACL dépendantes du contexte : le CBAC RE16
Commenter une ACL • Alors que nous allons sérieusement compliquer l’écriture et le rôle des ACL, il est utile de de les commenter dans la configuration du routeur ou du firewall • Un commentaire d’ACL sera visible dans la configuration, mais il sera aussi affiché par la commande show access-lists • Une remarque d’ACL est donc différente d’un commentaire introduit par ! Miami(config)# access-list 102 remark Allow traffic to file server Miami(config)# access-list 102 permit ip any host 128.88.1.6 RE16
Méthode de travail • Il est important de respecter les conseils suivants : • il faut d’abord bien réfléchir à ce que l’on veut autoriser et interdire • ce travail doit se faire avant de faire quoi que ce soit sur les routeurs • il faut s’arranger pour pouvoir « copier/coller » les ACLs • ne pas hésiter à stocker des ACLs dans des fichiers texte pour faire une sorte de « librairie » d’ACLs • si possible, tester les ACLs hors ligne avant de les installer sur le réseau exploité RE16
ACL dynamique • Une ACL dynamique permet de résoudre le problème de l’authentification • Les ACL classiques utilisent l’adresse IP pour déterminer quelle machine communique, mais il n’y a pas de vérification de l’identité de l’utilisateur lui-même • Il est souvent utile de demander à l’utilisateur de s’identifier : • nom d’utilisatreur • mot de passe • Il faut alors utiliser une ACL dynamique RE16
ACL dynamique • Il faut les utiliser quand : • on veut qu’un utilisateur particulier distant (ou un petit groupe) puisse accéder à certaines ressources du réseau, à travers Internet • on veut qu’un groupe d’hôtes du réseau local puisse accéder à un hôte d’un autre réseau protégé par un firewall • Il est possible de limiter la durée de l’autorisation de connexion RE16
ACL dynamique • Un utilisateur sollicite une session telnet sur le firewall configuré avec une ACL dynamique (ligne vty) • L’IOS Cisco ouvre une session telnet et demande son nom et son mot de passe à l’utilisateur • L’authentification peut être assurée par le firewall lui-même ou par un serveur TACACS+ ou RADIUS • Quand l’utilisateur est indentifié, le firewall met fin à la session telnet • Il crée ensuite une entrée temporaire dans l’ACL dynamique (cette instruction temporaire permet de limiter l’accès à certaines machines) • Les données sont échangées à travers le firewall • L’IOS détruit l’entrée temporaire au bout d’un certain temps paramétrable (soit en mesurant une durée d’inactivité, soit en mesurant le temps de connexion) RE16
ACL dynamique • ACL dynamique car elle n’apparaît que sur sollicitation de l’utilisateur, et après authentification de celui-ci Je m’identifie en faisant un telnet Je laisse passer seulement si il s’identifie ! RE16
ACL dynamique définition de l’utilisateur et de son mot de passe Exemple avec authentification locale au routeur username toto password tutu interface ethernet0 ip address 172.18.23.2 255.255.255.0 ip access-group 101 in access-list 101 permit tcp any host 172.18.23.2 eq telnet access-list 101 dynamic mytestlist timeout 120 permit ip any any line vty 0 login local autocommand access-enable timeout 5 autorisation du telnet sur l’@IP de l’interface du routeur entrée dynamique qui autorise tout le trafic IP définition d’une ligne vty • commande d’activation de la partie dynamique de l’ACL : • elle sera ajoutée après un telnet authentifié • elle restera dans l’ACL pendant 5 minutes l’authentification se fera en local RE16
ACL dynamique • L’entrée dynamique ne peut pas être la seule entrée de l’ACL • L’instruction ajoutée dans une liste dynamique l’est toujours au début de la liste • Il ne faut qu’une instruction dynamique par ACL (seule la première sera prise en compte) • Utiliser un nom différent pour chaque instruction dynamique • Il faut autoriser le telnet sur le routeur pour que tout cela puisse marcher • Il faut toujours définir un temps de connexion maximum RE16
ACL dynamique • Utilise un mécanisme d’authentification des utilisateurs (et pas seulement des hôtes) • Permet de réduire la taille des ACL classiques en réduisant le nombre des instructions nécessaires • Avec cette technique, on peut spécifier quel utilisateur peut accéder à des ressources (définies en @IP et n° de port), en spécifiant depuis quels hôtes il a le droit de le faire • On peut ainsi donner un accès dynamique à un utilisateur à travers un firewall, sans compromettre les autres restrictions de sécurité RE16
Proxy d’authentification • Les ACLs dynamiques obligent l’utilisateur à initier une session telnet • Le proxy d’authentification permet d’obtenir à peu près le même fonctionnement, mais en passant par un navigateur Internet • Il peut être utilisé depuis l’intérieur du réseau comme depuis l’extérieur RE16
Proxy d’authentification • Les utilisateurs qui sont bloqués par une ACL peuvent (si le routeur est configuré en ce sens) utiliser un simple navigateur web pour s’identifier auprès du serveur TACACS+ ou RADIUS • Ils doivent se connecter au serveur HTTP résidant dans le routeur prévu à cet effet • Ce serveur HTTP remplace le serveur telnet comme intermédiaire entre l’utilisateur et le serveur TACACS+ ou RADIUS • Après authentification, le serveur donnera au routeur l’instruction qu’il doit ajouter en tête d’ACL pour permettre à l’utilisateur de rentrer sur le réseau RE16
Proxy d’authentification • Les différences entre les ACL dynamiques et le proxy d’authentification sont : • l’ACL dynamique est activée par une connexion telnet sur le routeur, alors que le proxy d’authentification est activé par HTTP sur le routeur • le proxy d’authentification ne supporte pas l’authentification locale (nécessité d’un serveur TACACS+ ou RADIUS) • contrairement aux ACLs dynamiques, le serveur d’authentification peut ajouter plusieurs instruction à l’ACL • le serveur d’authentification n’a qu’une temporisation absolue, et pas de temporisation d’inactivité RE16
ACL réflexive • Permet de filtrer les paquets IP en fonction des informations de session (qui a commencé ?) des couches supérieures • On peut ainsi autoriser un certain trafic, seulement si il a été initié depuis l’intérieur du réseau • On pouvait déjà obtenir ce fonctionnement avec des ACL étendues, en utilisant l’option established, mais cette option ne vaut que pour TCP (UDP est en effet un protocole non connecté) • Les ACL réflexives permettent de faire ce type de filtrage avec TCP, mais aussi UDP et ICMP RE16
ACL étendue : rappel Si je mets une ACL pour interdire à host d’envoyer des requêtes HTTP, le serveur ne verra jamais rien • Quand on utilise un numéro de port pour filtrer, il faut savoir que seul le port destination est filtré Si je mets une ACL qui filtre le trafic HTTP en entrée, alors host peut faire une requête, le serveur peut répondre, et cette réponse ne sera pas bloquée en entrée du routeur ! Le filtrage ne se fait que sur le port destination On peut n’autoriser le trafic HTTP que en réponse à une demande de host en utilisant : access-list 101 permit tcp any any eq http established • Cette technique utilise les bits ACK et RST de l’en-tête TCP, et n’est donc pas valable pour UDP et ICMP RE16
ACL réflexive • Les sessions TCP sont suivies grâce aux bits ACK, RST et FIN des en-têtes TCP • La fin de la session TCP est repérée de la façon suivante : • quand le bit FIN de l’en-tête TCP est placé à 1, le routeur devine que la session va se terminer, il attend 5 secondes pour laisser le temps à l’hôte et au serveur de terminer leur session, puis il bloque le trafic • quand le bit RST est mis à 1, le routeur détecte une interruption abrupte de session et bloque immédiatement le trafic • par défaut au bout d’un certain temps (paramétrable) d’inactivité pour cette session RE16
ACL réflexive • Les sessions UDP sont suivies par les couples @IP source/destination n° port source/destination • La fin de la session ne peut être détectée que par défaut au bout d’un certain temps d’inactivité RE16
ACL réflexive • Il y a deux restrictions à l’utilisation des ACL réflexives : • elles doivent être utilisées uniquement avec les ACLs étendues (cela ne marche pas avec les standards qui ne portent pas mention des n° de port) • cette technique ne fonctionne pas avec les applications qui changent de numéro de port en cours de session (par exemple FTP en mode actif) RE16
FTP : rappel • Le mode par défaut de FTP est le mode actif • En mode actif : • le client ouvre une connexion de contrôle sur le port 21 du serveur • quand le client demande des données le serveur utilise son port 20 pour lui envoyer • En mode passif : • le client ouvre une connexion de contrôle sur le port 21 du serveur • le serveur lui indique un numéro de port pour le transfert des données • quand le client demande des données, il sollicite une connexion sur le port que le serveur lui a indiqué Le mode actif est donc incompatible avec les ACLs réflexives RE16
ACL réflexive : exemple 1 S1 côté réseau local côté réseau d’interconnexion interface Serial 1 description Acces à Internet ip access-group inboundfilters in ip access-group outboundfilters out ! ip reflexive-list timeout 120 ! ip access-list extended outboundfilters permit tcp any any reflect tcptraffic ! ip access-list extended inboundfilters permit bgp any any permit eigrp any any deny icmp any any evaluate tcptraffic utilisation d’ACL nommées sessions considérées comme inactives et par conséquent interdites au bout de 120 secondes définition de l’ACL nommée outboudfilters, elle ne contient qu’une instruction : autoriser tout le trafic IP, mais en pistant au passage les sessions sous le nom tcptrafic • définition de l’ACL nommée inboundfilters : • on autorise tout le trafic BGP • on autorise tout le trafic EIGRP • on interdit tout trafic ICMP • tout le reste est évalué selon la règle tcptrafic RE16
ACL réflexive : exemple 1 S1 côté réseau local côté réseau d’interconnexion interface Serial 1 description Acces à Internet ip access-group inboundfilters in ip access-group outboundfilters out ! ip reflexive-list timeout 120 ! ip access-list extended outboundfilters permit tcp any any reflect tcptraffic ! ip access-list extended inboundfilters permit bgp any any permit eigrp any any deny icmp any any evaluate tcptraffic remarque : on peut intercaler des instructions classiques (non réflexives), elles sont alors normalement évaluées. Ceci est utile quand on ne souhaite pas tout pister ! RE16
ACL réflexive : exemple 2 E0 S1 côté réseau local côté réseau d’interconnexion interface Ethernet 0 description Acces a notre reseau ip access-group inboundfilters in ip access-group outboundfilters out ! ip reflexive-list timeout 120 ! ip access-list extended outboundfilters deny icmp any any evaluate tcptraffic ! ip access-list extended inboundfilters permit tcp any any reflect tcptraffic DMZ www smtp dns • l’accès à la DMZ doit être possible à l’initiative l’extérieur : • on ne peut pas mettre l’ACL réflexive sur S1 • il faut la mettre sur E0 RE16
ACL à caractère temporel • Ce genre d’ACL permet d’interdire certains trafics pendant certains périodes • La référence de temps utilisée est l’horloge interne du routeur, il est dans ce cas intéressant d’utiliser le protocole NTP (Network Time Protocol ) pour bien synchroniser tous les équipements les connexions telnet sont autorisées les lundi, mercredi et vendredi de 8h à 17h RE16
Turbo ACL • Quand une ACL contient un grand nombre d’instructions, cela peut gravement ralentir le fonctionnement du routeur • les Turbo ACLs sont utilisables avec les IOS Cisco 12.1.5.T et sont disponibles uniquement sur les routeurs des séries 7200, 7500, et supérieures RE16
Context Based Acces Control : CBAC • Les ACL étendues permettent de filtrer le trafic en sortie du réseau car seul le port destination est filtré. • Le retour vers le client ne peut être filtré car le numéro de port utilisé est aléatoire • un « faux retour » ne peut pas filtré • Les ACL réflexives sont plus performantes que les ACL étendues car elles tiennent compte de l’information de session • un « faux retour » sera bloqué en entrée, sauf si il arrive pendant une session ouverte • Le CBAC est plus performant car il tient compte en plus d’informations protocolaires de niveau application RE16
CBAC • Les limitations des ACL classiques sont : • le filtrage ne se fait que sur les @IP et ports source et destination • les ports ouverts le sont tout le temps • Les limitations des ACL réflexives sont : • elles ne fonctionnent pas avec les applications qui négocient les ports • elles ne permettent pas de limiter le nombre de sessions autorisées simultanément • elles ne tiennent pas compte des informations du protocole de niveau application RE16
CBAC • Les paquets qui arrivent sur l’interface externe du firewall sont inspectés par les ACL classiques • Seuls les paquets qui passent ce premier barrage sont inspectés par le CBAC • CBAC interdit ou autorise uniquement le trafic TCP ou UDP spécifié • Des tables d’état sont mises à jour grâce aux informations de session, pour chaque connexion active (ouverture, synchronisation, acquittements, relachement) • Le filtrage se fait par l’ajout dynamique d’ACL ip inspect name inspection-name protocol [timeout seconds] RE16
CBAC • Le CBAC est capable de reconnaître les commandes des protocoles d’applications sur les canaux de contrôle • Le CBAC utilise les numéros de séquence de tous les segments TCP • Utilisé pour protéger un serveur, le CBAC est aussi capable de reconnaître certaines attaques de niveau application comme le DoS. Dans ce cas, il peut : • générer des messages d’alerte • bloquer les paquets concernés RE16
CBAC : client sortant • Le trafic autorisé en sortie (tout ou seulement certains protocoles) est inspecté pour : • en extraire les informations de session et d’état du protocole de transport mais aussi du protocole d’application • ajouter une ACL en entrée pour laisser entrer le trafic réponse • Le trafic autorisé en entrée est inspecté pour : • voir si il fait partie d’une session en cours • voir si il est conforme à la table d’état des protocoles de transport et d’application RE16
CBAC : client entrant • Le CBAC utilise des temporisations et des valeurs seuil pour gérer les états des sessions • Les sessions qui ne sont pas établies complètement (de part et d’autre) au bout d’un certain temps sont fermées par envoi d’une fin de session de part et d’autre • Fixer des valeurs de temporisation de session protège des attaques DoS en libérant les resources du serveur • Le nombre de sessions demi-ouvertes est ainsi contrôlable, ce qui protège le serveur RE16
CBAC : client entrant • Plusieurs seuils sont possibles pour bloquer les attaques DoS : • le nombre de connexions simultanées possibles • le nombre de connexions par unité de temps • le nombre de demi-connexion par hôte • Ce type de filtrage est à mettre en oeuvre uniquement sur les protocoles d’application que l’on veut filtrer, tous les autres étants interdits RE16
CBAC RE16
CBAC • Les protocoles de niveau transport supportés sont : • TCP (canal de contrôle seulement) • UDP (canal de contrôle seulement) RE16
CBAC • Les protocoles de niveau application supportés sont : • RPC • FTP • TFTP • UNIX R-commands (rlogin, rexec, rsh, ...) • SMTP • HTTP Java • SQL*Net • RTSP (RealNetworks) • H.323 (NetMeeting, ProShare, CUSeeMe) • Autres multimedia : • Microsoft NetShow • StreamWorks • VDOLive RE16
Alertes et rapports d’audit • CBAC génère des alertes temps réel et des rapports d’audit • Les rapports d’audit sont envoyés à un serveur Syslog Spour rendre compte de toutes les transactions qui sont apparues sur le réseau • On peut configurer les alertes et rapports d’audit sur la base des protocoles d’application RE16
Configuration du CBAC • Les étapes de la mise en fonction du CBAC sont : • fixer les paramètres des alertes et des rapports d’audit • fixer les temporisations et les seuils (nombre de connexions) • definir le Port-to-Application Mapping (PAM) • definir les règles d’inspection • appliquer les règles d’inspection et les ACL aux interfaces • Tester le fonctionnement RE16
CBAC : alertes no ip inspect alert-off • Met en route les alertes qui sont envoyées à la console • Une alerte est générée quand un paquet IP se voit rejeté par le CBAC RE16
CBAC : rapports ip inspect audit-trail • Autorise le serveur Syslog et le met en fonction Router(config)# logging on Router(config)# logging 10.0.0.3 Router(config)# ip inspect audit-trail RE16
CBAC : temporisations Router(config)# ip inspect tcp synwait-time seconds • Spécifie combien le firewall laissera de temps pour que la connexion TCP atteigne l’état “établie” Router(config)# ip inspect tcp finwait-time seconds • Spécifie combien le firewall attendra de temps l’échange des bits FIN avant d’interdire la session RE16
CBAC : temporisations Router(config)# ip inspect tcp idle-time seconds ip inspect udp idle-time seconds • Spécifie le temps maximum d’inactivité autorisé Router(config)# ip inspect dns-timeout seconds • Même chose pour une session DNS RE16
CBAC : seuils Router(config)# ip inspect max-incomplete high number • Définition du nombre maximum de demi-sessions. Quand ce nombre est atteint, le routeur détruit les sessions les plus anciennes jusqu’à ce que le nombre atteigne le seuil bas défini ci-dessous Router(config)# ip inspect max-incomplete low number • Définition du nombre de demi-sessions ouvertes qui provoque l’arret de la destruction des plus anciennes RE16
CBAC : seuils Router(config)# ip inspect one-minute high number • Définition du nombre maximum de nouvelles demi-sessions autorisées par minute. Si ce nombre est dépassé, le firewall detruit les plus anciennes jusqu’à ce que leur nombre atteigne le seuil bas défini ci-dessous Router(config)# ip inspect one-minute low number • Définition du nombre de demi-sessions ouvertes qui provoque l’arret de la destruction des plus anciennes RE16
CABC : limitation du nombre de demi-connexions par hôte Router(config)# • Définition du nombre maximum de demi-sessions TCP vers le même hôte destination avant que le routeur ne commence à les détruire • Quand le nombre de demi-sessions vers le même hôte a été dépassé, le firewall détruit les détruit de la façon suivante : • si block-time est à 0, la plus vielle demi-session est détruite pour faire place à la nouvelle • si block-time plus grand que 0, toutes les demi-connexions existantes sont détruites, et les nouvelles connexions vers cet hôte sont interdites pendant le temps correspondant à block-time ip inspect tcp max-incomplete host number block-time seconds RE16
CBAC : Port-to-Application Mapping • Il est possible de configurer les numéros de port que le firewall attribue aux applications • CBAC utilise le PAM pour déterminer quel port est attribué aux applications RE16
CBAC : Port Mapping Router(config)# ip port-map appl_name port port_num • Fait correspondre un port à une application Router(config)# access-list permit acl_num ip_addr ip port-map appl_name port port_num list acl_num • Même chose pour un hôte particulier Router(config)# access-list permit acl_num ip_addrwildcard_mask ip port-map appl_name port port_num list acl_num • Même chose pour un réseau particulier RE16
CBAC : port mapping Router# show ip port-map • montre toutes les informations relatives au port mapping Router# show ip port-map appl_name • même chose pour une application Router# show ip port-map port port_num • même chose pour un port particulier Router# sh ip port-map ftp Default mapping: ftp port 21 system defined Host specific: ftp port 1000 in list 10 user RE16
Définit le protocole d’application à inspecter Sera appliqué à une interface Alertes,rapports d’audit ettimeout sont configurables par protocole et sont prioritaires sur les réglages globaux CBAC : inspection d’un protocole d’application Router(config)# ip inspect name inspection-nameprotocol [alert {on|off}] [audit-trail {on|off}] [timeout seconds] Router(config)# ip inspect name FWRULE smtp alert on audit-trail on timeout 300 Router(config)# ip inspect name FWRULE ftp alert on audit-trail on timeout 300 RE16
CBAC : java Router(config)# ip inspect name inspection-name http java-list acl-num [alert {on|off}] [audit-trail {on|off}] [timeout seconds] • Contrôle le blocage de java avec une ACL standard Router(config)# ip inspect name FWRULE http java-list 10 alert on audit-trail on timeout 300 Router(config)# ip access-list 10 deny 172.26.26.0 0.0.0.255 Router(config)# ip access-list 10 permit 172.27.27.0 0.0.0.255 RE16
CBAC : application RPC Router(config)# ip inspect name inspection-name rpcprogram-number number [wait-time minutes] [alert {on|off}] [audit-trail {on|off}] [timeout seconds] • Autorise certains numéros de programmes RPC • wait-timelimite la durée de connexion Router(config)# ip inspect name FWRULE rpc program-number 100022 wait-time 0 alert off audit-trail on RE16