MDstable
NoteSnippetChecklistPlaybook

Hardening infrastructure réseau

Sécuriser switches, routeurs, NTP, SNMP, accès de gestion — bonnes pratiques CIS

snippetintermediate 2025-05-14 7 min read
hardeningnetworkciscoswitchroutersnmpntpmanagementaclsecurity

Accès de gestion

text
Variables
{{MGMT_SUBNET}}
{{WILDCARD_MASK}}
{{TACACS_IP}}
{{TACACS_KEY}}
! Désactiver Telnet, SSH v2 uniquement
line vty 0 15
transport input ssh
exec-timeout 5 0
login local
logging synchronous
! Générer les clés RSA (minimum 2048, recommandé 4096)
crypto key generate rsa modulus 4096
ip ssh version 2
ip ssh time-out 60
ip ssh authentication-retries 3
! ACL de restriction sur les VTY (accès uniquement depuis sous-réseau de gestion)
ip access-list standard MGMT-ACL
permit {{MGMT_SUBNET}} {{WILDCARD_MASK}}
deny any log
line vty 0 15
access-class MGMT-ACL in
! Authentification AAA avec TACACS+
aaa new-model
aaa authentication login default group tacacs+ local
aaa authorization exec default group tacacs+ local
aaa accounting exec default start-stop group tacacs+
tacacs-server host {{TACACS_IP}} key {{TACACS_KEY}}
text
Variables
{{ENABLE_SECRET}}
{{PLAIN}}
{{ADMIN_USER}}
{{PASSWORD}}
! Mots de passe sécurisés
service password-encryption
enable secret {{ENABLE_SECRET}}
! enable secret utilise bcrypt (type 9) depuis IOS 15.3+
! enable password {{PLAIN}} ← JAMAIS (stocké en clair)
! Username avec privilege level et secret (type 9)
username {{ADMIN_USER}} privilege 15 algorithm-type sha256 secret {{PASSWORD}}
! Bannière légale (obligatoire pour les poursuites légales en cas d'intrusion)
banner motd ^
*** AUTHORIZED ACCESS ONLY ***
This system is for authorized use only. All activity is logged and monitored.
Unauthorized access is prohibited and subject to legal prosecution.
^

SNMP

text
Variables
{{ANY_COMMUNITY}}
{{GROUP_NAME}}
{{SNMP_USER}}
{{AUTH_PASS}}
{{PRIV_PASS}}
{{VIEW_NAME}}
{{NMS_SERVER_IP}}
{{COMMUNITY}}
{{NMS_IP}}
! Désactiver SNMP v1 et v2c (non chiffrés, community string = mot de passe en clair)
no snmp-server community public
no snmp-server community private
no snmp-server community {{ANY_COMMUNITY}}
! Si SNMP non utilisé — désactiver complètement
no snmp-server
! SNMPv3 avec authPriv (authentification SHA + chiffrement AES)
snmp-server group {{GROUP_NAME}} v3 priv
snmp-server user {{SNMP_USER}} {{GROUP_NAME}} v3 auth sha {{AUTH_PASS}} priv aes 256 {{PRIV_PASS}}
snmp-server view {{VIEW_NAME}} iso included
! ACL sur les requêtes SNMP (autoriser uniquement le serveur NMS)
ip access-list standard SNMP-ACL
permit {{NMS_SERVER_IP}}
deny any log
snmp-server community {{COMMUNITY}} RO SNMP-ACL ! Si v2c obligatoire
snmp-server host {{NMS_IP}} version 3 priv {{SNMP_USER}}
! Désactiver les traps inutiles, activer les critiques
snmp-server enable traps config
snmp-server enable traps envmon
snmp-server enable traps bgp
⚠ Attention —

SNMP v1/v2c transmettent la community string en clair dans chaque paquet. Sur un réseau sniffable, tout attaquant peut capturer la community string et lire/écrire la configuration complète de vos équipements réseau. Migrer vers SNMPv3 authPriv est non-négociable.

NTP

text
Variables
{{NTP_SERVER_1}}
{{NTP_SERVER_2}}
{{NTP_KEY}}
{{INTERNAL_NTP_SERVERS}}
{{MANAGEMENT_SUBNET}}
! Serveurs NTP internes (hiérarchie)
ntp server {{NTP_SERVER_1}} prefer
ntp server {{NTP_SERVER_2}}
! Authentification NTP (empêche l'usurpation de serveur NTP)
ntp authenticate
ntp authentication-key 1 md5 {{NTP_KEY}}
ntp trusted-key 1
ntp server {{NTP_SERVER_1}} key 1
! Restreindre qui peut interroger ce routeur comme source NTP
ntp access-group peer NTP-PEERS
ntp access-group serve-only NTP-CLIENTS
ntp access-group query-only NTP-QUERY
ip access-list standard NTP-PEERS
permit {{INTERNAL_NTP_SERVERS}}
ip access-list standard NTP-CLIENTS
permit {{MANAGEMENT_SUBNET}}
! Vérifier la synchronisation NTP
! show ntp status
! show ntp associations

Sécurité des ports switch

text
Variables
{{UNUSED_PORTS}}
{{ACCESS_PORT}}
{{USER_VLAN}}
{{UPLINK}}
! Désactiver les ports inutilisés
interface range GigabitEthernet1/0/{{UNUSED_PORTS}}
shutdown
switchport access vlan 999
description DISABLED_PORT
spanning-tree bpduguard enable
! VLAN 999 = Black Hole VLAN (non routé, non trunk)
vlan 999
name BLACKHOLE
! Désactiver CDP sur les ports vers les utilisateurs
interface GigabitEthernet1/0/{{ACCESS_PORT}}
no cdp enable
no lldp transmit
no lldp receive
! BPDU Guard — protège contre les switches non autorisés
! (envoyer un BPDU sur un port access = erreur, port bloqué immédiatement)
spanning-tree portfast bpduguard default ! Globalement sur tous les ports PortFast
interface GigabitEthernet1/0/{{ACCESS_PORT}}
spanning-tree portfast
spanning-tree bpduguard enable
! DHCP Snooping — empêche les DHCP servers non autorisés (rogue DHCP)
ip dhcp snooping
ip dhcp snooping vlan {{USER_VLAN}}
no ip dhcp snooping information option ! Eviter les problèmes avec certains DHCP servers
! Ports de confiance (uplinks vers le vrai serveur DHCP)
interface GigabitEthernet1/0/{{UPLINK}}
ip dhcp snooping trust
! Dynamic ARP Inspection — empêche ARP spoofing/poisoning
ip arp inspection vlan {{USER_VLAN}}
ip arp inspection validate src-mac dst-mac ip
interface GigabitEthernet1/0/{{UPLINK}}
ip arp inspection trust

Sécurité des interfaces routeur

text
! Désactiver les fonctions inutiles sur les interfaces internes
interface GigabitEthernet0/0
no ip proxy-arp ! Evite les attaques de type man-in-the-middle
no ip redirects ! Pas de redirection ICMP (peut révéler la topologie)
no ip unreachables ! Limiter les infos données à un attaquant sur WAN
! Interface WAN — protection supplémentaire
interface GigabitEthernet0/1
no ip directed-broadcast ! Empêche Smurf amplification attacks
no ip proxy-arp
no ip redirects
no ip unreachables
ip access-group WAN-IN in
! uRPF — Unicast Reverse Path Forwarding (anti-spoofing)
interface GigabitEthernet0/1
ip verify unicast source reachable-via rx
! ACL anti-spoofing sur l'interface WAN (bloquer RFC 1918 entrant depuis Internet)
ip access-list extended WAN-IN
deny ip 10.0.0.0 0.255.255.255 any log
deny ip 172.16.0.0 0.15.255.255 any log
deny ip 192.168.0.0 0.0.255.255 any log
deny ip 127.0.0.0 0.255.255.255 any log
deny ip 0.0.0.0 0.255.255.255 any log
deny ip 169.254.0.0 0.0.255.255 any log
deny ip 224.0.0.0 31.255.255.255 any log
permit ip any any

Plan de contrôle (Control Plane Policing)

text
! CoPP — protège le CPU du routeur contre les attaques par flood vers le plan de contrôle
! (BGP, OSPF, SSH, ICMP, etc. — limiter le trafic qui atteint le CPU)
class-map match-any CRITICAL-TRAFFIC
match access-group name CRITICAL-ACL
class-map match-any IMPORTANT-TRAFFIC
match access-group name ROUTING-PROTOCOLS
class-map match-any NORMAL-TRAFFIC
match access-group name SSH-TRAFFIC
policy-map COPP-POLICY
class CRITICAL-TRAFFIC
police rate 8000 bps burst 1500
class IMPORTANT-TRAFFIC
police rate 64000 bps burst 8000
class NORMAL-TRAFFIC
police rate 32000 bps burst 4000
class class-default
drop
control-plane
service-policy input COPP-POLICY
! Protections TCP
ip tcp synwait-time 10
service tcp-keepalives-in
service tcp-keepalives-out
! Désactiver les services legacy inutiles
no service pad
no service udp-small-servers
no service tcp-small-servers
no ip bootp server
no service finger
no ip source-route ! Empêche le source routing (peut bypasser les ACLs)
no ip gratuitous-arps
no ip http server ! Interface web HTTP non chiffrée
no ip http secure-server ! Désactiver aussi HTTPS si non nécessaire

Logging

text
Variables
{{SYSLOG_IP}}
! Configurer le syslog centralisé
logging host {{SYSLOG_IP}}
logging trap informational
logging source-interface Loopback0 ! Source d'IP stable pour les logs
logging on
! Format des timestamps (critiques pour la forensique)
service timestamps log datetime msec show-timezone
service timestamps debug datetime msec show-timezone
! Buffer local (en cas de perte de connectivité vers le syslog)
logging buffered 1048576 informational
! Vérifier les logs locaux
! show logging | tail 50
! Activer les logs sur les ACL (ajouter le mot-clé 'log' aux règles critiques)
ip access-list extended WAN-IN
deny ip any any log ! Loguer les refus

Sauvegarde et gestion de configuration

text
Variables
{{BACKUP_USER}}
{{BACKUP_SERVER}}
! Sauvegarder la configuration via TFTP/SCP (automatisé)
archive
path scp://{{BACKUP_USER}}@{{BACKUP_SERVER}}/configs/$h-$t
write-memory
! Chiffrer les mots de passe dans la config
service password-encryption
! Après toute modification — sauvegarder
write memory
! ou : copy running-config startup-config

Checklist hardening réseau

Checklist0/16
💡 Tip —

no service pad, no service udp-small-servers, no service tcp-small-servers — ces services legacy Cisco (echo, chargen, discard) sont actifs par défaut sur les vieux IOS et créent une surface d'attaque inutile (amplification UDP, test de connectivité pour les attaquants). Les désactiver systématiquement dans tout template de configuration initiale.

OPS·BRAIN v1.075 notes · Securitylocal