« Configuration de base - commutateur cisco » : différence entre les versions

De Wiki doc

(Aération du code + Ajout astuce de connexion SSH + ajout section "Message d'accueil".)
(→‎Restriction d'accès réseau : Ajout d'une ligne d'exclusion journalisante à la fin de chaque règle d'acceptation.)
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:Cisco]]
[[Category:Cisco]]
Ce document décrit la configuration de base d'un commutateur Cisco afin d'avoir une sécurité et une base de travail convenable.
Ce document décrit la configuration de base d'un commutateur ''Cisco'' afin d'avoir une sécurité et une base de travail convenable.
{{info|Pour entrer ces commandes, il est nécessaire de rentrer en mode configuration via la commande '''conf t''' en mode privilège.}}


=Désactivation des protocoles non nécessaires=
{{info|Pour entrer ces commandes, il est nécessaire de rentrer en mode de configuration globale via la commande <syntaxhighlight lang="bash" inline>conf t</syntaxhighlight> en [https://www.cisco.com/E-Learning/bulk/public/tac/cim/cib/using_cisco_ios_software/02_cisco_ios_hierarchy.htm mode privilège].}}
  no ip domain-lookup
 
  no cdp run
Un commutateur ''Cisco WS-C3560CX-12PD-S'' avec ''IOS'' [https://logiciels.ycharbi.fr/Logiciels/Cisco/IOS/COMMUTATEURS/3560CX/c3560cx-universalk9-mz.152-7.E2.bin c3560cx-universalk9-mz.152-7.E2.bin] est utilisé pour cette documentation.
  no ip http server
 
  no ip http secure-server
=Identification=
  no service finger
Tout au long de votre configuration, il est important que vous nommiez un maximum les choses afin de les identifier plus facilement. Ceci permet de limiter les erreurs humaines et facilite la reprise d'une configuration.
 
=Nom d'hôte=
Avant toute chose, n'oubliez pas de définir un nom d'hôte à votre machine afin de l'identifier dans de futures usages (débogage, journalisation, sauvegardes, supervision, connexions multiples...)
 
hostname COM-DOC-1
 
=Bannière d'accueil=
Il est possible d'afficher un message avant la connexion d'un utilisateur. Bien que cette pratique soit déconseillée par la recommandation n°23 du guide de recommandation de l{{'}}''ANSSI'' traitant du sujet (première [[#Sources|source]]), elle permet dans certains environnement d'apporter des informations utiles aux administrateurs (pensez qu'elles peuvent également le faire pour un attaquant...).
banner motd ^
Votre message d'accueil avant connexion utilisateur.
Peut tenir sur plusieurs lignes.
^
 
=Accès à l'équipement=
==Utilisateurs système==
Il est important de créer des utilisateurs dédiés à chaque administrateur du système afin de permettre l'identification d'une modification ainsi qu'une révocation ultérieur des accès. Il est en outre possible de limiter un utilisateur à certaines commandes.
username p.nom privilege 15 algorithm-type sha256 secret MdP
 
L'usage d'un [[Radius - cisco|serveur d'authentification]] est également possible.
 
Pour empêcher la possibilité de passer du mode ''exec utilisateur'' au mode ''exec privilégié'', il est souhaitable de déplacer la commande <syntaxhighlight lang="bash" inline>enable</syntaxhighlight> dans l'environnement privilégié
privilege exec level 15 enable
 
L'ajout d'une protection compliquant les attaques par force brut est également une bonne pratique. Il est ainsi possible d'ajouter un délais de 2 secondes entres chaque tentatives et d’interdire la connexion pendant 5 minutes si 3 erreurs d'authentification ont eu lieu en 2 minutes.
login delay 2
login block-for 300 attempts 3 within 120
 
==Connexion distante==
Afin de prendre en main l'équipement à distance, le protocole ''SSH'' est généralement utilisé.
 
Par défaut, aucune clé n'existe, il convient d'en créer une :
crypto key generate rsa modulus 4096 usage-keys label SSH-DOC
 
{{info|À ce jour, ''IOS'' ne permet pas d'utiliser une clé à courbe elliptique pour l'usage de ''SSH''. Il convient alors de se rabattre sur la plus grande clé ''RSA'' possible tout en gardant à l'esprit d'une possible [https://www.technologyreview.com/2019/05/30/65724/how-a-quantum-computer-could-break-2048-bit-rsa-encryption-in-8-hours/ désuétude] lorsque les [https://arxiv.org/abs/1905.09749 ordinateurs quantiques] seront suffisamment développés.}}
 
Nous préciserons également la version du protocole, les algorithmes de cryptographie utilisés ainsi que la taille minimale de la clé ''Diffie-Hellman'' (à adapter en fonction de la tolérance de votre modèle)
  ip ssh version 2
  ip ssh server algorithm mac hmac-sha2-256 hmac-sha2-512
  ip ssh server algorithm encryption aes256-cbc aes256-ctr
  ip ssh dh min size 4096
 
{{info|La version [https://www.openssh.com/txt/release-8.8 8.8/8.8p1] d{{'}}''OpenSSH'' [https://www.openssh.com/releasenotes.html sortie] le 26/09/2021 a désactivée par défaut les signatures ''RSA'' utilisant l’algorithme ''SHA-1''. Afin de permettre une connexion à vos équipements, vous devez préciser l'usage de ces protocoles dans la commande de [https://networkengineering.stackexchange.com/questions/35312/configure-ssh-cipher-on-cisco-ios-12-255se7 connexion] <syntaxhighlight lang="bash" inline>ssh -oHostKeyAlgorithms=+ssh-rsa -oKexAlgorithms=+diffie-hellman-group14-sha1 p.nom@IP</syntaxhighlight> ou via le fichier de [[Ssh_-_cisco#Dans_la_configuration|configuration client]] avec les paramètres décrits dans la note de version cité précédemment.}}
 
==Restriction d'accès réseau==
Il peut être intéressant de restreindre l'accès à votre équipement dans son seul réseau d'administration afin de vous prémunir de tentatives extérieurs. Nous utiliserons des ''ACL'' sur les lignes d'accès utilisées par le service ''SSH'' (elles seront appliquées à la section dédiée aux [[#interfaces_en_ligne_de_commande|interfaces en ligne de commande]]).
 
===Restriction IPv4===
Règle de permission du réseau d'administration
access-list 1 permit 10.100.100.0 0.0.0.15 log
access-list 1 deny any log
 
''Note : les réseaux non autorisés seront expulsés et une ligne sera écrite dans le journal à chaque tentative.''
 
Règle d'interdiction globale
access-list 2 deny any log
 
===Restriction IPv6===
Lorsque cela est possible, j’apprécie le fait d'utiliser ''IPv6'' pour la connexion à mes équipements réseau afin d'apporter une rupture protocolaire ajoutant une barrière supplémentaire à un éventuel attaquant. L{{'}}''IPv6'' n'étant pas routable dans ''IPv4'', une erreur de configuration aura un impact négligeable sur l'accessibilité de la console d'administration (y compris via rebond ''SSH'' dans la mesure où le plan d'adressage d'administration est spécifique aux éléments actifs de réseau).
 
Permission du réseau d'administration
ipv6 access-list acl-admin-lan
  permit ipv6 FC00:10:100:100::/64 FC00:10:100:100::/64 log
  deny ipv6 any any log
 
Interdiction de tout le reste
ipv6 access-list acl-admin-rien
  deny ipv6 any any log
 
=Interfaces en ligne de commande=
Ces interfaces sont le point d'entré de l'administration de votre équipement. Il est impératif d'en restreindre l'accès en obligeant notamment d'authentifier les utilisateurs. La restriction des protocoles autorisés, l'application des ''ACL'' précédemment créées ainsi que la déconnexion automatique après inactivité prolongée sont de mise. Nous n'oublierons pas non plus de désactiver celles qui ne seront pas utilisées.
! Lignes séries
line console 0
  exec-timeout 5 0
  logging synchronous
  login local
! Lignes de sessions pour SSH
line vty 0 4
  access-class acl-admin-lan in
  access-class acl-admin-rien out
  exec-timeout 5 0
  logging synchronous
  login local
  transport input ssh
  transport output none
! Lignes inutilisées
  line vty 5 15
  access-class acl-admin-rien in
  access-class acl-admin-rien out
  no exec
  login
  transport input none
  transport output none
 
Pour rappel, une ligne ''VTY'' correspond à une connexion distante. Ici nous autorisons donc 5 sessions simultanées.
 
{{attention|Je recommande de tester une connexion à votre utilisateur avant d'enregistrer la configuration si vous ne voulez pas risquer de perdre du temps à réinitialiser votre mot de passe en cas de problème d'authentification.}}
 
=Protocoles à désactiver=
Par défaut, une myriade de services tournent sur un équipement ''Cisco''. En plus de charger pour rien le ''CPU'' et de générer des trames polluantes sur le réseau, ils offrent une surface d'attaque plus large aux quatre vents. Voici les éléments que je désactive :
  no service tcp-small-servers
  no service tcp-small-servers
  no service udp-small-servers
  no service udp-small-servers
  no service pad
  no service finger
no service config
  no ip source-route
  no ip source-route
  no service dhcp
  no ip http server
no ip http secure-server
no ip domain-lookup
ip arp proxy disable
no cdp run
service password-encryption
  no service password-recovery
  no service password-recovery
no snmp-server enable traps
no snmp-server
vtp mode off
service timestamps log datetime localtime
Dans certains cas, un certificat ''X.509'' est présent par défaut, il convient de le supprimer
no crypto pki trustpoint <TP-self-signed-123456789 >
=Trames géantes=
Si votre réseau permet l'usage des trames ''Ethernet'' géantes (''jumbo frame''), il est préférable de les activer sur votre commutateur afin d'accroitre les performances tout en réduisant la charge ''CPU'' (surtout si vous prévoyez une commutation à 10 gbps).
Activation des trames géantes (actif au prochain démarrage)
system mtu jumbo 9000
Permettre le routage des trames géantes
system mtu routing 9000
=Cloisonnement par VLAN=
Il est commun de dédier un ''VLAN'' par usage afin de simplifier un filtrage ultérieur, cloisonner certains ports et limiter les domaines de diffusion clients.
Une pratique recommandée (''R2-'' du guide de recommandation de l{{'}}[[#Sources|ANSSI]]) est de dédier un ''VLAN'' pour l'administration (à défaut d'utiliser une interface physique (''R1'')), un pour les interfaces inutilisées et un autre pour le ''VLAN'' natif d'un tronc ''802.1Q''. Ceci permettra d'éviter que des machines se retrouvent avec la possibilité d’accéder à des ressources non désirées.
Voici un exemple de configuration suivant les principes énoncés :
! Création d'un VLAN de cloisonnement
vlan 666
  name Quarantaine
  shutdown
  ! Création d'un VLAN natif alternatif
vlan 999
  name Natif
  shutdown
! Exemple de VLAN Production
vlan 10
  name Production
! Exemple de VLAN d'administration
vlan 100
  name Administration
{{astuce|Notez la valeur <syntaxhighlight lang="bash" inline>shutdown</syntaxhighlight> passée aux ''VLAN'' n'ayant pas vocation à mettre en lien des machines. Cette configuration permet d'empêcher la commutation des trames entre les machines appartenant à ces réseaux.}}
=Configuration des interfaces réseau=
Un commutateur contient souvent plus d'interfaces que le besoin réel. Il faut cependant prendre soin de configurer chacune d'elles afin de ne pas aboutir à un comportement inattendu.
==Interfaces non utilisées==
Les interfaces n'ayant pas vocation à accueillir des clients dans l'immédiat doivent êtres désactivées.
default interface range GigabitEthernet1/0/5 - 12
interface range GigabitEthernet1/0/5 - 12
  description --- Quarantaine ---
  switchport access vlan 666
  switchport mode access
  switchport nonegotiate
  shutdown
  no cdp enable
  no vtp
Pour résumer, les interfaces sont :
* éteintes
* placées dans un ''VLAN'' dédié aux interfaces inutilisées
* le mode ''access'' est forcé et la négociation de ce mode est désactivée
* les protocoles ''CDP'' et ''VTP'' sont désactivés
L'intérêt de désactiver les protocoles sur l'interface en plus de la configuration globale réside dans le fait que si un usage nécessite de réactiver l'un d'eux (pour par exemple la ''VOIP'' via ''Cisco Call Manager Express''), il faudra manuellement spécifier les interfaces supportant celui-ci (le comportement globale par défaut reste donc le blocage).
==Interface de production==
Pour un réseau de machines accédants aux même ressources, les interfaces peuvent êtres configurées comme suit :
default interface range GigabitEthernet1/0/1 - 4
int range g1/0/1 - 4
  description --- Production ---
  switchport mode access
  switchport access vlan 10
  switchport port-security
  switchport port-security maximum 1
  switchport port-security mac-address sticky
  switchport port-security violation shutdown
  switchport nonegotiate
  no cdp enable
  no vtp
  spanning-tree portfast
  spanning-tree bpduguard enable
Pour résumer, les interfaces sont :
* placées dans un ''VLAN'' dédié aux interfaces de production
* le mode ''access'' est forcé et la négociation de ce mode est désactivée
* les protocoles ''CDP'' et ''VTP'' sont désactivés
* le protocole ''Spanning tree'' est accéléré (à faire uniquement sur des équipements de terminaison)
* le verrouillage du port est activé en cas de détection d'une trame liée à ce protocole
* un [[Filtrage mac - cisco|filtrage par adresse MAC]] est actif et limité à une entrées par port (pensez à enregistrer la configuration après la première détection d'adresse)
* en cas de connexion non enregistrée, le port s'éteint


=Eteindre l'interface VLAN1=
En fonction de la politique que vous appliquez à votre site, il peut être intéressant de lever automatiquement le blocage d'un port en cas de violation afin de ne pas passer son temps à corriger des problèmes techniques superflus manuellement. Il faudra cependant s'atteler à corriger les problèmes humains à l'origine de ceux-ci...
Ceci évite aux machines hors des Vlans de pouvoir communiquer avec le commutateur.
  errdisable recovery cause psecure-violation
  int vlan1
  errdisable recovery interval 60
  shut


=Configuration port console et VTY=
==Interface d'administration==
!Port console
L'interface physique, contient la même configuration que celle de production (pensez à changer le ''VLAN''). L'interface de ''VLAN'' gérant le niveau 3 comporte quant à elle les paramètres qui suivent.
line console 0
 
  login local
La configuration suivante concerne l{{'}}''IPv6'' sans [https://mor-pah.net/2012/11/06/cisco-ios-disabling-ipv6-stateless-autoconfig/ auto-configuration] dans une plage à porté locale unique (RFC [https://datatracker.ietf.org/doc/html/rfc4193/ 4193]) :
exec-timeout 3 0
  interface Vlan100
logging synchronous
  description --- Administration ---
exit
  no ip address
!VTY 0-4
  ipv6 address FC00:10:100:100::1/64
line vty 0 4
  ipv6 enable
login local
  ipv6 nd prefix default no-autoconfig no-rtr-address
logging synchronous
  ipv6 nd prefix FC00:10:10:100::/64 no-advertise
transport input ssh
  ipv6 nd managed-config-flag
transport output ssh
  ipv6 nd other-config-flag
exec-timeout 3 0
  ipv6 nd router-preference High
  exit
 
!vty 5-15
==Interface de VLAN par défaut==
login
Cette interface se trouvant dans le ''VLAN'' natif présent par défaut dans ''IOS'' et non supprimable doit être désactivée afin de ne pas se retrouver avec un niveau 3 accessible à une machine non désirée (d'autant plus que la configuration par défaut est en client ''DHCP''...).
transport input none
  interface Vlan1
transport output none
  description --- Interface inactive ---
exit
  no ip address
!auxiliaire (peu courant)
  shutdown
  line auxiliaire 0
 
  login
==Interconnexion de commutateurs==
Lors de l'interconnexion de plusieurs commutateurs, le protocole ''IEEE 802.1Q'' doit systématiquement être utilisé (même pour un seul ''VLAN''). Une liste exhaustive des ''VLAN'' autorisés doit être explicitement indiquée et le ''VLAN'' natif doit être changé.
  default int g1/0/14
  int g1/0/14
  description --- Vers COM-DOC-2 ---
  switchport mode trunk
  switchport trunk native vlan 999
  switchport trunk allowed vlan 10,100
  switchport nonegotiate
  no cdp enable
  no vtp
 
=Journalisation=
Il est important d'avoir une trace des évènements ayants eu lieu sur notre équipement (notamment les connexions d'utilisateurs).


=Vlan Poubelle=
La journalisation des évènements peut s'effectuer dans le ''VTY'' courant (au même titre que la console série) en mode d'exécution privilégié via la commande
Une bonne pratique consite à créer un Vlan poubelle destiné à accueillir les ports inutilisés de sorte à ce que personnes ne puisse les exploiter pour atteindre d'autre machines.
terminal monitor


==Création du Vlan Poubelle==
Certains évènements peuvent être ajoutés à la journalisation via les paramètres de la commande <syntaxhighlight lang="bash" inline>login</syntaxhighlight> comme ceux en rapport avec l'état de connexion d'un utilisateur
  # vlan database
  login on-failure log
  vlan 66 name Poubelle
  login on-success log
!ou
(config) # vlan 66
name Poubelle
description --- Poubelle ---


==Attribution du Vlan aux interfaces inutilisées==
En mode de configuration globale, il est également possible d'ajouter ceux en rapport avec les connexions ''SSH''
int range fa0/13 - 17
  ip ssh logging events
switchport mode access
switchport access vlan 66
description --- Interface inutile ---
  shut


=Gestion utilisateur=
Afin de conserver ces journaux, il convient de les exporter en continu sur un [[Syslog - cisco|serveur dédié]].
Activation du service de hashage des mots de passe
service password-encryption
Création d'un utilisateur
username "prenom.nom" privilege 15 secret "mot de passe"
Ajout d'un mot de passe au mode enable
enable secret "mot de passe"
=Activation du SSH=
Le SSH a besoin d'un nom d'hôte et d'un nom de domaine pour pouvoir générer la clé RSA
hostname "nom de machine"
ip domain-name "nom de domain"
ip ssh version 2
crypto key generate rsa


{{info|Une clé RSA de minimum 768 bits est requise pour pouvoir utiliser du SSHv2. En dessous, on passe automatiquement en SSHv1.}}
=Sauvegarde=
La sauvegarde d'un équipement fait partie intégrante de sa maintenance. En cas de problème, elle permettra de restaurer un fonctionnement normal. Si les sauvegardes sont [[Archives - cisco|archivées]], elles permettent de suivre l'évolution d'une configuration et de restaurer certains paramètres ayant étés supprimées plusieurs sauvegardes en arrière.


{{astuce|Pour ce connecter via une machine Debian (à partir de Stretch selon mes tests). Il faut préciser la suite cryptographique à utiliser (IOS utilisant des trucks jugés trop faibles pour OpenSSH): <source lang="bash" inline>ssh -oHostKeyAlgorithms=+ssh-dss -oKexAlgorithms=+diffie-hellman-group1-sha1 admin@192.168.100.1</source>. J'ai trouvé ça [https://networkengineering.stackexchange.com/questions/35312/configure-ssh-cipher-on-cisco-ios-12-255se7 ici].}}
La méthode que je privilégie le plus possible est l'archivage sur un partage [[Webdav - cisco|WebDav via TLS]]. En cas d'impossibilité d'utiliser cette méthode, le protocole ''SCP'' (voir ''TFTP'' dans le pire des cas) peut être utilisée (il faudra toutefois prendre soin de définir un <syntaxhighlight lang="bash" inline>transport output</syntaxhighlight> adéquat dans vos ''VTY'').


=Message d'accueil=
=Sources=
Il est possible de définir une bannière d'accueil lors de la connexion à un équipement Cisco tout comme sous Linux via le ''Message Of The Day'' (MOTD). Pour ce faire, il suffit d'entrer (en mode de configuration) ceci:
* guide de [https://www.ssi.gouv.fr/guide/recommandations-pour-la-securisation-dun-commutateur-de-desserte/ recommandations pour la sécurisation d’un commutateur de desserte] (en cache [https://gitea.ycharbi.fr/ycharbi/Guides/src/branch/master/Guides_s%c3%a9curit%c3%a9/ANSSI/R%c3%a9seau/nt_commutateurs.pdf ici])
<source lang="bash">
* guide de [https://www.ssi.gouv.fr/guide/recommandations-de-securite-pour-la-mise-en-oeuvre-dun-systeme-de-journalisation/ recommandations de sécurité pour l'architecture d'un système de journalisation]
banner motd ^C
Votre message à afficher.
Vous pouvez y mettre plusieurs lignes.
Il faut finir le texte par le caractère qui vous a servi à entrer ici.
Comme avec n'importe quel EOF.
^C
</source>

Dernière version du 25 juin 2022 à 15:00

Ce document décrit la configuration de base d'un commutateur Cisco afin d'avoir une sécurité et une base de travail convenable.

INFORMATION

Pour entrer ces commandes, il est nécessaire de rentrer en mode de configuration globale via la commande conf t en mode privilège.

Un commutateur Cisco WS-C3560CX-12PD-S avec IOS c3560cx-universalk9-mz.152-7.E2.bin est utilisé pour cette documentation.

Identification

Tout au long de votre configuration, il est important que vous nommiez un maximum les choses afin de les identifier plus facilement. Ceci permet de limiter les erreurs humaines et facilite la reprise d'une configuration.

Nom d'hôte

Avant toute chose, n'oubliez pas de définir un nom d'hôte à votre machine afin de l'identifier dans de futures usages (débogage, journalisation, sauvegardes, supervision, connexions multiples...)

hostname COM-DOC-1

Bannière d'accueil

Il est possible d'afficher un message avant la connexion d'un utilisateur. Bien que cette pratique soit déconseillée par la recommandation n°23 du guide de recommandation de l'ANSSI traitant du sujet (première source), elle permet dans certains environnement d'apporter des informations utiles aux administrateurs (pensez qu'elles peuvent également le faire pour un attaquant...).

banner motd ^
Votre message d'accueil avant connexion utilisateur.
Peut tenir sur plusieurs lignes.
^

Accès à l'équipement

Utilisateurs système

Il est important de créer des utilisateurs dédiés à chaque administrateur du système afin de permettre l'identification d'une modification ainsi qu'une révocation ultérieur des accès. Il est en outre possible de limiter un utilisateur à certaines commandes.

username p.nom privilege 15 algorithm-type sha256 secret MdP

L'usage d'un serveur d'authentification est également possible.

Pour empêcher la possibilité de passer du mode exec utilisateur au mode exec privilégié, il est souhaitable de déplacer la commande enable dans l'environnement privilégié

privilege exec level 15 enable

L'ajout d'une protection compliquant les attaques par force brut est également une bonne pratique. Il est ainsi possible d'ajouter un délais de 2 secondes entres chaque tentatives et d’interdire la connexion pendant 5 minutes si 3 erreurs d'authentification ont eu lieu en 2 minutes.

login delay 2
login block-for 300 attempts 3 within 120

Connexion distante

Afin de prendre en main l'équipement à distance, le protocole SSH est généralement utilisé.

Par défaut, aucune clé n'existe, il convient d'en créer une :

crypto key generate rsa modulus 4096 usage-keys label SSH-DOC

INFORMATION

À ce jour, IOS ne permet pas d'utiliser une clé à courbe elliptique pour l'usage de SSH. Il convient alors de se rabattre sur la plus grande clé RSA possible tout en gardant à l'esprit d'une possible désuétude lorsque les ordinateurs quantiques seront suffisamment développés.

Nous préciserons également la version du protocole, les algorithmes de cryptographie utilisés ainsi que la taille minimale de la clé Diffie-Hellman (à adapter en fonction de la tolérance de votre modèle)

ip ssh version 2
ip ssh server algorithm mac hmac-sha2-256 hmac-sha2-512
ip ssh server algorithm encryption aes256-cbc aes256-ctr
ip ssh dh min size 4096

INFORMATION

La version 8.8/8.8p1 d'OpenSSH sortie le 26/09/2021 a désactivée par défaut les signatures RSA utilisant l’algorithme SHA-1. Afin de permettre une connexion à vos équipements, vous devez préciser l'usage de ces protocoles dans la commande de connexion ssh -oHostKeyAlgorithms=+ssh-rsa -oKexAlgorithms=+diffie-hellman-group14-sha1 p.nom@IP ou via le fichier de configuration client avec les paramètres décrits dans la note de version cité précédemment.

Restriction d'accès réseau

Il peut être intéressant de restreindre l'accès à votre équipement dans son seul réseau d'administration afin de vous prémunir de tentatives extérieurs. Nous utiliserons des ACL sur les lignes d'accès utilisées par le service SSH (elles seront appliquées à la section dédiée aux interfaces en ligne de commande).

Restriction IPv4

Règle de permission du réseau d'administration

access-list 1 permit 10.100.100.0 0.0.0.15 log
access-list 1 deny any log

Note : les réseaux non autorisés seront expulsés et une ligne sera écrite dans le journal à chaque tentative.

Règle d'interdiction globale

access-list 2 deny any log

Restriction IPv6

Lorsque cela est possible, j’apprécie le fait d'utiliser IPv6 pour la connexion à mes équipements réseau afin d'apporter une rupture protocolaire ajoutant une barrière supplémentaire à un éventuel attaquant. L'IPv6 n'étant pas routable dans IPv4, une erreur de configuration aura un impact négligeable sur l'accessibilité de la console d'administration (y compris via rebond SSH dans la mesure où le plan d'adressage d'administration est spécifique aux éléments actifs de réseau).

Permission du réseau d'administration

ipv6 access-list acl-admin-lan
 permit ipv6 FC00:10:100:100::/64 FC00:10:100:100::/64 log
 deny ipv6 any any log

Interdiction de tout le reste

ipv6 access-list acl-admin-rien
 deny ipv6 any any log

Interfaces en ligne de commande

Ces interfaces sont le point d'entré de l'administration de votre équipement. Il est impératif d'en restreindre l'accès en obligeant notamment d'authentifier les utilisateurs. La restriction des protocoles autorisés, l'application des ACL précédemment créées ainsi que la déconnexion automatique après inactivité prolongée sont de mise. Nous n'oublierons pas non plus de désactiver celles qui ne seront pas utilisées.

! Lignes séries
line console 0
 exec-timeout 5 0
 logging synchronous
 login local

! Lignes de sessions pour SSH
line vty 0 4
 access-class acl-admin-lan in
 access-class acl-admin-rien out
 exec-timeout 5 0
 logging synchronous
 login local
 transport input ssh
 transport output none

! Lignes inutilisées
line vty 5 15
 access-class acl-admin-rien in
 access-class acl-admin-rien out
 no exec
 login
 transport input none
 transport output none

Pour rappel, une ligne VTY correspond à une connexion distante. Ici nous autorisons donc 5 sessions simultanées.

ATTENTION

Je recommande de tester une connexion à votre utilisateur avant d'enregistrer la configuration si vous ne voulez pas risquer de perdre du temps à réinitialiser votre mot de passe en cas de problème d'authentification.

Protocoles à désactiver

Par défaut, une myriade de services tournent sur un équipement Cisco. En plus de charger pour rien le CPU et de générer des trames polluantes sur le réseau, ils offrent une surface d'attaque plus large aux quatre vents. Voici les éléments que je désactive :

no service tcp-small-servers
no service udp-small-servers
no service finger
no service config
no ip source-route
no ip http server
no ip http secure-server
no ip domain-lookup
ip arp proxy disable
no cdp run
service password-encryption
no service password-recovery
no snmp-server enable traps
no snmp-server
vtp mode off
service timestamps log datetime localtime

Dans certains cas, un certificat X.509 est présent par défaut, il convient de le supprimer

no crypto pki trustpoint <TP-self-signed-123456789 >

Trames géantes

Si votre réseau permet l'usage des trames Ethernet géantes (jumbo frame), il est préférable de les activer sur votre commutateur afin d'accroitre les performances tout en réduisant la charge CPU (surtout si vous prévoyez une commutation à 10 gbps).

Activation des trames géantes (actif au prochain démarrage)

system mtu jumbo 9000

Permettre le routage des trames géantes

system mtu routing 9000

Cloisonnement par VLAN

Il est commun de dédier un VLAN par usage afin de simplifier un filtrage ultérieur, cloisonner certains ports et limiter les domaines de diffusion clients.

Une pratique recommandée (R2- du guide de recommandation de l'ANSSI) est de dédier un VLAN pour l'administration (à défaut d'utiliser une interface physique (R1)), un pour les interfaces inutilisées et un autre pour le VLAN natif d'un tronc 802.1Q. Ceci permettra d'éviter que des machines se retrouvent avec la possibilité d’accéder à des ressources non désirées.

Voici un exemple de configuration suivant les principes énoncés :

! Création d'un VLAN de cloisonnement
vlan 666 
 name Quarantaine
 shutdown
 ! Création d'un VLAN natif alternatif
vlan 999 
 name Natif
 shutdown
! Exemple de VLAN Production
vlan 10
 name Production
! Exemple de VLAN d'administration
vlan 100 
 name Administration

ASTUCE

Notez la valeur shutdown passée aux VLAN n'ayant pas vocation à mettre en lien des machines. Cette configuration permet d'empêcher la commutation des trames entre les machines appartenant à ces réseaux.

Configuration des interfaces réseau

Un commutateur contient souvent plus d'interfaces que le besoin réel. Il faut cependant prendre soin de configurer chacune d'elles afin de ne pas aboutir à un comportement inattendu.

Interfaces non utilisées

Les interfaces n'ayant pas vocation à accueillir des clients dans l'immédiat doivent êtres désactivées.

default interface range GigabitEthernet1/0/5 - 12
interface range GigabitEthernet1/0/5 - 12
 description --- Quarantaine ---
 switchport access vlan 666
 switchport mode access
 switchport nonegotiate
 shutdown
 no cdp enable
 no vtp

Pour résumer, les interfaces sont :

  • éteintes
  • placées dans un VLAN dédié aux interfaces inutilisées
  • le mode access est forcé et la négociation de ce mode est désactivée
  • les protocoles CDP et VTP sont désactivés

L'intérêt de désactiver les protocoles sur l'interface en plus de la configuration globale réside dans le fait que si un usage nécessite de réactiver l'un d'eux (pour par exemple la VOIP via Cisco Call Manager Express), il faudra manuellement spécifier les interfaces supportant celui-ci (le comportement globale par défaut reste donc le blocage).

Interface de production

Pour un réseau de machines accédants aux même ressources, les interfaces peuvent êtres configurées comme suit :

default interface range GigabitEthernet1/0/1 - 4
int range g1/0/1 - 4
 description --- Production ---
 switchport mode access
 switchport access vlan 10
 switchport port-security
 switchport port-security maximum 1
 switchport port-security mac-address sticky
 switchport port-security violation shutdown
 switchport nonegotiate
 no cdp enable
 no vtp
 spanning-tree portfast
 spanning-tree bpduguard enable

Pour résumer, les interfaces sont :

  • placées dans un VLAN dédié aux interfaces de production
  • le mode access est forcé et la négociation de ce mode est désactivée
  • les protocoles CDP et VTP sont désactivés
  • le protocole Spanning tree est accéléré (à faire uniquement sur des équipements de terminaison)
  • le verrouillage du port est activé en cas de détection d'une trame liée à ce protocole
  • un filtrage par adresse MAC est actif et limité à une entrées par port (pensez à enregistrer la configuration après la première détection d'adresse)
  • en cas de connexion non enregistrée, le port s'éteint

En fonction de la politique que vous appliquez à votre site, il peut être intéressant de lever automatiquement le blocage d'un port en cas de violation afin de ne pas passer son temps à corriger des problèmes techniques superflus manuellement. Il faudra cependant s'atteler à corriger les problèmes humains à l'origine de ceux-ci...

errdisable recovery cause psecure-violation
errdisable recovery interval 60

Interface d'administration

L'interface physique, contient la même configuration que celle de production (pensez à changer le VLAN). L'interface de VLAN gérant le niveau 3 comporte quant à elle les paramètres qui suivent.

La configuration suivante concerne l'IPv6 sans auto-configuration dans une plage à porté locale unique (RFC 4193) :

interface Vlan100
 description --- Administration ---
 no ip address
 ipv6 address FC00:10:100:100::1/64
 ipv6 enable
 ipv6 nd prefix default no-autoconfig no-rtr-address
 ipv6 nd prefix FC00:10:10:100::/64 no-advertise
 ipv6 nd managed-config-flag
 ipv6 nd other-config-flag
 ipv6 nd router-preference High

Interface de VLAN par défaut

Cette interface se trouvant dans le VLAN natif présent par défaut dans IOS et non supprimable doit être désactivée afin de ne pas se retrouver avec un niveau 3 accessible à une machine non désirée (d'autant plus que la configuration par défaut est en client DHCP...).

interface Vlan1
 description --- Interface inactive ---
 no ip address
 shutdown

Interconnexion de commutateurs

Lors de l'interconnexion de plusieurs commutateurs, le protocole IEEE 802.1Q doit systématiquement être utilisé (même pour un seul VLAN). Une liste exhaustive des VLAN autorisés doit être explicitement indiquée et le VLAN natif doit être changé.

default int g1/0/14
int g1/0/14
 description --- Vers COM-DOC-2 ---
 switchport mode trunk
 switchport trunk native vlan 999
 switchport trunk allowed vlan 10,100
 switchport nonegotiate
 no cdp enable
 no vtp

Journalisation

Il est important d'avoir une trace des évènements ayants eu lieu sur notre équipement (notamment les connexions d'utilisateurs).

La journalisation des évènements peut s'effectuer dans le VTY courant (au même titre que la console série) en mode d'exécution privilégié via la commande

terminal monitor

Certains évènements peuvent être ajoutés à la journalisation via les paramètres de la commande login comme ceux en rapport avec l'état de connexion d'un utilisateur

login on-failure log
login on-success log

En mode de configuration globale, il est également possible d'ajouter ceux en rapport avec les connexions SSH

ip ssh logging events

Afin de conserver ces journaux, il convient de les exporter en continu sur un serveur dédié.

Sauvegarde

La sauvegarde d'un équipement fait partie intégrante de sa maintenance. En cas de problème, elle permettra de restaurer un fonctionnement normal. Si les sauvegardes sont archivées, elles permettent de suivre l'évolution d'une configuration et de restaurer certains paramètres ayant étés supprimées plusieurs sauvegardes en arrière.

La méthode que je privilégie le plus possible est l'archivage sur un partage WebDav via TLS. En cas d'impossibilité d'utiliser cette méthode, le protocole SCP (voir TFTP dans le pire des cas) peut être utilisée (il faudra toutefois prendre soin de définir un transport output adéquat dans vos VTY).

Sources