Ce document décrit comment configurer les dispositifs de sécurité Cisco ASA/PIX 8.x qui utilisent des expressions régulières avec le cadre de politique modulaire (MPF) afin de bloquer ou d'autoriser certains sites FTP par nom de serveur.
Ce document suppose que le dispositif de sécurité Cisco est configuré et fonctionne correctement.
Les informations contenues dans ce document sont basées sur les versions de matériel et de logiciel suivantes :
Appareil de sécurité adaptatif (ASA) de la gamme Cisco 5500 qui exécute le logiciel version 8.0(x) et ultérieure
Cisco Adaptive Security Device Manager (ASDM) version 6.x pour ASA 8.x
The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.
Pour plus d’informations sur les conventions utilisées dans ce document, reportez-vous aux Conventions relatives aux conseils techniques Cisco.
Le protocole MPF offre un moyen cohérent et flexible de configurer les fonctions des dispositifs de sécurité. Par exemple, vous pouvez utiliser MPF pour créer une configuration de délai d'attente spécifique à une application TCP particulière, par opposition à une configuration qui s'applique à toutes les applications TCP.
MPF prend en charge les fonctionnalités suivantes :
Normalisation TCP, limites et délais de connexion TCP et UDP, et randomisation des numéros de séquence TCP
CSC
Inspection d'application
IPS
Contrôle d'entrée QoS
Contrôle de sortie QoS
File prioritaire QoS
La configuration du MPF se compose de quatre tâches :
Identifiez le trafic de couche 3 et de couche 4 auquel vous souhaitez appliquer des actions. Référez-vous à Identification du trafic à l'aide d'un mappage de classe de couche 3/4 pour plus d'informations.
(Contrôle de l'application uniquement.) Définissez des actions spéciales pour le trafic d'inspection des applications. Référez-vous à Configuration d'actions spéciales pour les inspections d'application pour plus d'informations.
Appliquez des actions au trafic des couches 3 et 4. Référez-vous à Définition d'actions à l'aide d'une carte de stratégie de couche 3/4 pour plus d'informations.
Activez les actions sur une interface. Référez-vous à Application d'une politique de couche 3/4 à une interface à l'aide d'une politique de service pour plus d'informations.
Une expression régulière fait correspondre des chaînes de texte littéralement sous la forme d'une chaîne exacte ou à l'aide de métacaractères, de sorte que vous pouvez faire correspondre plusieurs variantes d'une chaîne de texte. Vous pouvez utiliser une expression régulière pour faire correspondre le contenu de certains trafics d'application. Par exemple, vous pouvez faire correspondre une chaîne d'URL à l'intérieur d'un paquet HTTP.
Remarque : utilisez Ctrl+V afin d'échapper tous les caractères spéciaux de la CLI, tels que les points d'interrogation (?) ou les tabulations. Par exemple, tapez d[Ctrl+V]g afin d'entrer d?g dans la configuration.
Afin de créer une expression régulière, utilisez la commande regex. En outre, la commande regex peut être utilisée pour diverses fonctionnalités qui nécessitent une correspondance de texte. Par exemple, vous pouvez configurer des actions spéciales pour l'inspection d'application avec l'utilisation du MPF qui utilise une carte de stratégie d'inspection. Référez-vous à la commande policy-map type inspect pour plus d'informations.
Dans la carte de stratégie d'inspection, vous pouvez identifier le trafic sur lequel vous voulez agir si vous créez une carte de classe d'inspection qui contient une ou plusieurs commandes match, ou vous pouvez utiliser des commandes match directement dans la carte de stratégie d'inspection. Certaines commandes match vous permettent d'identifier le texte d'un paquet à l'aide d'une expression régulière. Par exemple, vous pouvez faire correspondre des chaînes d'URL dans des paquets HTTP. Vous pouvez regrouper des expressions régulières dans une carte de classe d'expression régulière. Référez-vous à la commande class-map type regex pour plus d'informations.
Ce tableau répertorie les métacaractères qui ont des significations spéciales.
Caractère | Description | Remarques |
. | Point | Correspond à n'importe quel caractère unique. Par exemple, d.g correspond à « dog », « dag », « dtg » et à tout mot contenant ces caractères, tel que « doggonnit ». |
(exp) | Sous-Expression | Une sous-expression sépare les caractères des caractères environnants, de sorte que vous pouvez utiliser d'autres métacaractères sur la sous-expression. Par exemple, d(o|a)g correspond à dog et dag, mais do|ag correspond à do et ag. Une sous-expression peut également être utilisée avec des quantificateurs de répétition pour différencier les caractères destinés à la répétition. Par exemple, ab(xy){3}z correspond à abxyxyxyz. |
| | Alternance | Correspond à l'expression qu'elle sépare. Par exemple, dog|cat correspond à dog ou cat. |
? | Point d'interrogation | Quantificateur qui indique qu'il existe 0 ou 1 dans l'expression précédente. Par exemple, lo?se correspond à lse ou à lose. Remarque : vous devez saisir Ctrl+V, puis le point d'interrogation, sinon la fonction d'aide est appelée. |
* | Astérisque | Quantificateur qui indique qu'il existe 0, 1 ou n'importe quel numéro de l'expression précédente. Par exemple, lo*se correspond à lse, lose, lose, etc. |
{x} | Quantificateur de répétition | Répétez exactement x fois. Par exemple, ab(xy){3}z correspond à abxyxyxyz. |
{x,} | Quantificateur de répétition minimal | Répétez au moins x fois. Par exemple, ab(xy){2,}z correspond à abxyxyz, abxyxyxyz, etc. |
[abc] | Classe Character | Correspond à n'importe quel caractère entre crochets. Par exemple, [abc] correspond à a, b ou c. |
[^abc] | Classe de caractères inversée | Correspond à un caractère unique qui n'est pas contenu entre crochets. Par exemple, [^abc] correspond à tout caractère autre que a, b ou c. [^A-Z] correspond à tout caractère unique qui n'est pas une lettre majuscule. |
[a-c] | Classe de plage de caractères | Correspond à n'importe quel caractère de la plage. [a-z] correspond aux minuscules. Vous pouvez mélanger des caractères et des plages : [abcq-z] correspond à a, b, c, q, r, s, t, u, v, w, x, y, z et [a-cq-z] correspond à ce paramètre. Le tiret (-) est littéral uniquement s'il s'agit du dernier ou du premier caractère entre crochets : [abc-] ou [-abc]. |
"" | Guillemets | Conserve les espaces de fin ou de début dans la chaîne. Par exemple, « test » conserve l'espace de début lorsqu'il recherche une correspondance. |
^ | Caret | Spécifie le début d'une ligne. |
\ | Caractère d'échappement | Utilisé avec un métacaractère, correspond à un caractère littéral. Par exemple, \[ correspond au crochet gauche. |
carboniser | Caractère | Lorsque le caractère n'est pas un métacaractère, fait correspondre le caractère littéral. |
\r | Retour de chariot | Correspond à un retour chariot : 0x0d. |
\n | Nouvelle Ligne | Correspond à une nouvelle ligne : 0x0a. |
\t | Onglet | Correspond à un onglet : 0x09. |
\f | Alimentation | Correspond à un flux de formulaire : 0x0c. |
\xNN | Nombre hexadécimal échappé | Correspond à un caractère ASCII qui utilise un hexadécimal composé exactement de deux chiffres. |
\NNN | Nombre octal échappé | Correspond à un caractère ASCII octal qui est exactement à trois chiffres. Par exemple, le caractère 040 représente un espace. |
Cette section vous fournit des informations pour configurer les fonctionnalités décrites dans ce document.
Remarque : utilisez l'outil de recherche de commandes (clients enregistrés uniquement) pour obtenir plus d'informations sur les commandes utilisées dans cette section.
Ce document utilise la configuration réseau suivante :
Remarque : les sites FTP sélectionnés sont autorisés ou bloqués à l'aide d'expressions régulières.
Ce document utilise les configurations suivantes :
Configuration de l'interface de ligne de commande ASA |
---|
ciscoasa#show run
: Saved
:
ASA Version 8.0(4)
!
hostname ciscoasa
domain-name cisco.com
enable password 8Ry2YjIyt7RRXU24 encrypted
passwd 2KFQnbNIdI.2KYOU encrypted
names
!
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address 10.66.79.86 255.255.255.224
!
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address 10.238.26.129 255.255.255.248
!
interface Management0/0
shutdown
no nameif
no security-level
no ip address
!
!--- Write regular expression (regex) to match the FTP site you want !--- to access. NOTE: The regular expression written below must match !--- the response 220 received from the server. This can be different !--- than the URL entered into the browser. For example, !--- FTP Response: 220 g1u0103c.austin.hp.com
regex FTP_SITE1 "([0-9A-Za-z])*[Hh][Pp]\.[Cc][Oo][Mm]"
regex FTP_SITE2 "([0-9A-Za-z])* CISCO SYSTEMS ([0-9A-Za-z])*"
!--- NOTE: The regular expression will be checked against every line !--- in the Response 220 statement (which means if the FTP server !--- responds with multiple lines, the connection will be denied if !--- there is no match on any one line).
boot system disk0:/asa804-k8.bin
ftp mode passive
pager lines 24
logging enable
logging timestamp
logging buffered debugging
mtu outside 1500
mtu inside 1500
no failover
icmp unreachable rate-limit 1 burst-size 1
asdm image disk0:/asdm-61557.bin
no asdm history enable
arp timeout 14400
global (outside) 1 interface
nat (inside) 1 0.0.0.0 0.0.0.0
route outside 0.0.0.0 0.0.0.0 10.66.79.65 1
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
dynamic-access-policy-record DfltAccessPolicy
http server enable
http 0.0.0.0 0.0.0.0 inside
http 0.0.0.0 0.0.0.0 outside
no snmp-server location
no snmp-server contact
snmp-server enable traps snmp authentication linkup linkdown coldstart
telnet timeout 5
ssh scopy enable
ssh timeout 5
console timeout 0
management-access inside
threat-detection basic-threat
threat-detection statistics access-list
no threat-detection statistics tcp-intercept
class-map type regex match-any FTP_SITES
match regex FTP_SITE1
match regex FTP_SITE2
!−−− Class map created in order to match the server names !−−− of FTP sites to be blocked by regex.
class-map type inspect ftp match-all FTP_class_map
match not server regex class FTP_SITES
!−−− Write an FTP inspect class map and match based on server !--- names, user name, FTP commands, and so on. Note that this !--- example allows the sites specified with the regex command !--- since it uses the match not command. If you need to block !--- specific FTP sites, use the match command without the not option.
class-map inspection_default
match default-inspection-traffic
policy-map type inspect dns preset_dns_map
parameters
message-length maximum 512
policy-map type inspect ftp FTP_INSPECT_POLICY
parameters
class FTP_class_map
reset log
!−−− Policy map created in order to define the actions !--- such as drop, reset, or log.
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect h323 h225
inspect h323 ras
inspect netbios
inspect rsh
inspect rtsp
inspect skinny
inspect esmtp
inspect sqlnet
inspect sunrpc
inspect tftp
inspect sip
inspect xdmcp
inspect icmp
inspect ftp strict FTP_INSPECT_POLICY
!--- The FTP inspection is specified with strict option !--- followed by the name of policy.
service-policy global_policy global
prompt hostname context
Cryptochecksum:40cefb1189e8c9492ed7129c7577c477
: end |
Complétez ces étapes afin de configurer les expressions régulières et de les appliquer à MPF afin de bloquer les sites FTP spécifiques :
Déterminez le nom du serveur FTP.
Le moteur d'inspection FTP peut fournir une inspection en utilisant différents critères, tels que la commande, le nom de fichier, le type de fichier, le serveur et le nom d'utilisateur. Cette procédure utilise le serveur comme critère. Le moteur d'inspection FTP utilise la réponse du serveur 220 envoyée par le site FTP comme valeur de serveur. Cette valeur peut être différente du nom de domaine utilisé par le site. Cet exemple utilise Wireshark pour capturer des paquets FTP vers le site qui est inspecté afin d'obtenir la valeur de réponse 220 pour utilisée dans notre expression régulière à l'étape 2.
Sur la base de la capture, la valeur de réponse 220 pour ftp://hp.com est (par exemple) q5u0081c.atlanta.hp.com.
Créez des expressions régulières.
Choisissez Configuration > Firewall > Objects > Regular Expressions, et cliquez sur Add sous l'onglet Regular Expression afin de créer des expressions régulières comme décrit dans cette procédure :
Créez une expression régulière, FTP_SITE1, afin de faire correspondre la réponse 220 (telle qu'elle apparaît dans la capture de paquets dans Wireshark ou tout autre outil utilisé) reçue du site FTP (par exemple, « .* hp\.com.* »), et cliquez sur OK.
Remarque : vous pouvez cliquer sur Générer pour obtenir de l'aide sur la création d'expressions régulières plus avancées.
Une fois l'expression régulière créée, cliquez sur Apply.
Créez des classes d'expressions régulières.
Choisissez Configuration > Firewall > Objects > Regular Expressions, et cliquez sur Add sous la section Regular Expression Classes afin de créer la classe comme décrit dans cette procédure :
Créez une classe d'expression régulière, FTP_SITES, afin de correspondre à l'une des expressions régulières FTP_SITE1 et FTP_SITE2, et cliquez sur OK.
Une fois la carte de classe créée, cliquez sur Apply.
Inspectez le trafic identifié avec des cartes de classe.
Choisissez Configuration > Firewall > Objects > Class Maps > FTP > Add, cliquez avec le bouton droit de la souris et choisissez Add afin de créer une carte de classe pour inspecter le trafic FTP identifié par diverses expressions régulières comme décrit dans cette procédure :
Créez une carte de classe, FTP_Block_Site, afin de faire correspondre la réponse FTP 220 avec les expressions régulières que vous avez créées.
Si vous souhaitez exclure les sites spécifiés dans l'expression régulière, cliquez sur la case d'option Aucune correspondance.
Dans la section Valeur, choisissez une expression régulière ou une classe d'expression régulière. Pour cette procédure, choisissez la classe qui a été créée précédemment.
Cliquez sur Apply.
Définissez les actions pour le trafic correspondant dans la stratégie d'inspection.
Choisissez Configuration > Firewall > Objects > Inspect Maps > FTP> Add afin de créer une politique d'inspection, et définissez l'action pour le trafic correspondant comme requis.
Entrez le nom et la description de la stratégie d'inspection. (Par exemple, FTP_INSPECT_POLICY.)
Cliquez sur Details (Détails).
Cliquez sur l'onglet Inspections. (1)
Cliquez sur Add. (2)
Cliquez sur la case d'option Multiple matches, et choisissez la classe de trafic dans la liste déroulante. (3)
Sélectionnez l'action de réinitialisation souhaitée pour l'activer ou la désactiver. Cet exemple active la réinitialisation de connexion FTP pour tous les sites FTP ne correspondant pas à nos sites spécifiés. (4)
Cliquez sur OK, cliquez à nouveau sur OK, puis cliquez sur Apply. (5)
Appliquez la stratégie FTP d'inspection à la liste d'inspection globale.
Choisissez Configuration > Firewall > Service Policy Rules.
Sur le côté droit, sélectionnez la stratégie inspection_default, puis cliquez sur Edit.
Sous l'onglet Actions de règle (1), cliquez sur le bouton Configurer pour FTP. (2)
Dans la boîte de dialogue Select FTP Inspect Map, cochez la case Use strict FTP, puis cliquez sur la case d'option FTP inspect map for fine control over inspection.
La nouvelle stratégie d'inspection FTP, FTP_INSPECT_POLICY, doit être visible dans la liste.
Cliquez sur OK, cliquez à nouveau sur OK, puis cliquez sur Apply.
Référez-vous à cette section pour vous assurer du bon fonctionnement de votre configuration.
L'Outil Interpréteur de sortie (clients enregistrés uniquement) (OIT) prend en charge certaines commandes show. Utilisez l'OIT pour afficher une analyse de la sortie de la commande show .
show running-config regex : affiche les expressions régulières qui ont été configurées.
ciscoasa#show running-config regex regex FTP_SITE1 "[Cc][Ii][Ss][Cc][Oo]\.[Cc][Oo][Mm]" regex FTP_SITE2 ".*hp\.com.*"
show running-config class−map : affiche les mappages de classes qui ont été configurés.
ciscoasa#show running-config class-map class-map type regex match-any FTP_SITES match regex FTP_SITE1 match regex FTP_SITE2 class-map type inspect ftp match-all FTP_Block_Site match not server regex class FTP_SITES class-map inspection_default match default-inspection-traffic !
show running-config policy-map type inspect http : affiche les cartes de stratégie qui inspectent le trafic HTTP qui ont été configurées.
ciscoasa#show running-config policy-map type inspect ftp ! policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log !
Show running-config policy-map : affiche toutes les configurations de mappage de stratégie, ainsi que la configuration de mappage de stratégie par défaut.
ciscoasa#show running-config policy-map ! policy-map type inspect dns preset_dns_map parameters message-length maximum 512 policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log policy-map global_policy class inspection_default inspect dns preset_dns_map inspect h323 h225 inspect h323 ras inspect netbios inspect rsh inspect rtsp inspect skinny inspect esmtp inspect sqlnet inspect sunrpc inspect tftp inspect sip inspect xdmcp inspect ftp strict FTP_INSPECT_POLICY !
show running-config service-policy : affiche toutes les configurations de stratégie de service en cours d'exécution.
ciscoasa#show running-config service-policy service-policy global_policy global
Cette section fournit des informations que vous pouvez utiliser pour dépanner votre configuration.
Vous pouvez utiliser la commande show service-policy afin de vérifier que le moteur d'inspection inspecte le trafic et les autorise ou les abandonne correctement.
ciscoasa#show service-policy Global policy: Service-policy: global_policy Class-map: inspection_default Inspect: dns preset_dns_map, packet 0, drop 0, reset-drop 0 Inspect: h323 h225 _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: h323 ras _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: netbios, packet 0, drop 0, reset-drop 0 Inspect: rsh, packet 0, drop 0, reset-drop 0 Inspect: rtsp, packet 0, drop 0, reset-drop 0 Inspect: skinny , packet 0, drop 0, reset-drop 0 Inspect: esmtp _default_esmtp_map, packet 0, drop 0, reset-drop 0 Inspect: sqlnet, packet 0, drop 0, reset-drop 0 Inspect: sunrpc, packet 0, drop 0, reset-drop 0 Inspect: tftp, packet 0, drop 0, reset-drop 0 Inspect: sip , packet 0, drop 0, reset-drop 0 Inspect: xdmcp, packet 0, drop 0, reset-drop 0 Inspect: ftp strict FTP_INSPECT_POLICY, packet 40, drop 0, reset-drop 2
Révision | Date de publication | Commentaires |
---|---|---|
1.0 |
21-Jul-2009 |
Première publication |