Cisco – Implémenter SSH sur un Firewall

Voici une technologie permettant d’administrer les équipements de sécurité (les équipements réseaux en général), SSH. Ce petit tuto a pour vocation d’aider à la configuration du mécanisme sur un firewall Cisco.

Pour information, la configuration à été réalisée sur un firewall de type Cisco ASA. Ses commandes sont applicables sur un équipement de la gamme Cisco PIX ou ASA à partir de la version 7.x.

L’utilisation de la version 2 de SSH nécessite de disposer d’une licence compatible 3DES afin de pouvoir prendre en charge ce type de chiffrement, mais également l’AES.

Quelle est la raison pouvant nous amener à utiliser SSH plutôt que TELNET ?? et bien c’est simple, la sécurité fournie par SSH. Pour rappel, le protocole TELNET ne permet pas de garantir la confidentialité des échanges entre un client et un serveur. Avec SSH la communication entre le client et le serveur s’effectue de manière sécurisé. Une communication via SSH garantie une authentification, la confidentialité et l’intégrité des échanges entre le client et le serveur SSH.

Pour plus de détail sur le fonctionnement du protocole, je vous invite à lire la RFC suivante : rfc4251

Les étapes de mise en œuvre:

  1. Créer la paire de clés RSA
  2. Indiquer l’interface qui permettra l’accès administratif
  3. spécifier le time out
  4. Créer un compte en base local (base de données des comptes)
  5. Indiquer le type de base de compte (LOCAL, RADIUS, LDAP, TACAS …)
  6. Sauvegarder
  7. Tester la connexion

Les commandes nécessaires à la mise en œuvre :

La commande ci-dessous permet de créer la paire clés RSA, auquel il faut indiquer la taille de la clé :

asatest(config)# crypto key generate rsa modulus  { 512,768, 1024″ }

La commande ci-dessous permet de spécifier l’adresse IP ou le sous réseau autorisé » :

asatest(config)# ssh  » @ip  »  » masque  »  » interfaces « 

La commande ci-dessous permet de spécifier la version de SSH :

asatest(config)# ssh version < 1 ou  2 >

La commande ci-dessous permet de définir le temps de maintien d’une session avant coupure en cas d’inactivité (entre 1 – 60 minutes) :

asatest(config)# ssh timeout  » minutes « 

La commande ci-dessous permet de définir le temps de maintien d’une session avant coupure en cas d’inactivité :

asatest(config)# write mem

Définir et peupler la base de compte :

J’indique la source (LOCAL, TACACS, RADIUS) de la base de donnée de compte pour les accès SSH

asatest(config)# aaa authentication {ssh, http, telnet, enable } console {LOCAL, RADIUS, TACACS}

Je crée un compte dans la base locale « local »

username “nom_d’utilisateur” password “mot_de_passe” privilege

Exemple d’implémentation :

FW1(config)# crypto key generate rsa modulus 1024
Keypair generation process begin. Please wait…
FW1(config)# ssh 192.168.1.0 255.255.255.0 admin
FW1(config)# ssh version 2
FW1(config)# ssh timeout 5
FW1(config)# username test password test privilege 15
FW1(config)# aaa authentication ssh console LOCAL

Connexion au système depuis un routeur en SSH:

Router_test#ssh -l test 192.168.2.254

Password:
Type help or ‘?’ for a list of available commands.
FW1>

voir les traces de la connexion:

W1# %PIX-6-302013: Built inbound TCP connection 7 for admin:192.168.2.1/19445 (192.168.2.1/19445) to NP Identity Ifc:192.168.2.254/22 (192.168.2.254/22)
%PIX-6-113012: AAA user authentication Successful : local database : user = test
%PIX-6-113008: AAA transaction status ACCEPT : user = test
%PIX-6-611101: User authentication succeeded: Uname: test
%PIX-6-611101: User authentication succeeded: Uname: test
%PIX-6-605005: Login permitted from 192.168.2.1/19445 to admin:192.168.2.254/ssh for user « test »

Consulter les paramètres et diagnostiquer le service:

Vérifier les paramètres implémentés, « show ssh »:

FW1# show ssh
Timeout: 5 minutes
Version allowed: 2
192.168.0.0 255.255.0.0 admin
192.168.1.0 255.255.255.0 admin

Vérifier les paramètres implémentés dans le fichier de configuration, « show running-config ssh »:

FW1# show  run ssh
ssh 192.168.0.0 255.255.0.0 admin
ssh 192.168.1.0 255.255.255.0 admin
ssh timeout 5
ssh version 2

Consulter les sessions en cours:

FW1# show ssh sessions

SID Client IP       Version Mode Encryption Hmac     State            Username
0   192.168.2.1     1.99    IN   aes128-cbc sha1     KeysExchanged    test
OUT  aes128-cbc sha1     KeysExchanged    test

Diagnostiquer le service SSH via la commande « debug ssh <1 – 255> » :

J’ai volontairement mis en oeuvre le debug avec un niveau de sévérité maximum afin de voir l’entendu des informations pouvant être remontée.

Ont peux constater que le debug permet d’afficher toute la séquence d’authentification et les différents événements associés à la communication en cours.

FW1# debug ssh 255

SSH0: receive SSH message: 83 (83)
SSH0: client version is – SSH-1.99-Cisco-1.25

client version string:SSH-1.99-Cisco-1.25SSH0: begin server key generation
SSH0: complete server key generation, elapsed time = 1760 ms

SSH2 0: send: len 280 (includes padlen 4)
SSH2 0: SSH2_MSG_KEXINIT sent
SSH2 0: ssh_receive: 64 bytes received
SSH2 0: input: packet len 280
SSH2 0: partial packet 8, need 272, maclen 0
SSH2 0: ssh_receive: 64 bytes received
SSH2 0: partial packet 8, need 272, maclen 0
SSH2 0: ssh_receive: 64 bytes received
SSH2 0: partial packet 8, need 272, maclen 0
SSH2 0: ssh_receive: 64 bytes received
SSH2 0: partial packet 8, need 272, maclen 0
SSH2 0: ssh_receive: 24 bytes received
SSH2 0: partial packet 8, need 272, maclen 0
SSH2 0: input: padlen 4
SSH2 0: received packet type 20

SSH2 0: SSH2_MSG_KEXINIT received
SSH2 0:
kex_parse_kexinit: diffie-hellman-group1-sha1
SSH2 0:
kex_parse_kexinit: ssh-rsa
SSH2 0:
kex_parse_kexinit: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
SSH2 0:
kex_parse_kexinit: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
SSH2 0:
kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
SSH2 0:
kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
SSH2 0:
kex_parse_kexinit: none
SSH2 0:
kex_parse_kexinit: none
SSH2 0:
kex_parse_kexinit:
SSH2 0:
kex_parse_kexinit:
SSH2 0:
kex_parse_kexinit: diffie-hellman-group1-sha1
SSH2 0:
kex_parse_kexinit: ssh-rsa
SSH2 0:
kex_parse_kexinit: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
SSH2 0:
kex_parse_kexinit: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
SSH2 0:
kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
SSH2 0:
kex_parse_kexinit: hmac-sha1,hmac-sha1-96,hmac-md5,hmac-md5-96
SSH2 0:
kex_parse_kexinit: none
SSH2 0:
kex_parse_kexinit: none
SSH2 0:
kex_parse_kexinit:
SSH2 0:
kex_parse_kexinit:
SSH2: kex: client->server aes128-cbc hmac-sha1 none
SSH2: kex: server->client aes128-cbc hmac-sha1 none
SSH2 0: expecting SSH2_MSG_KEXDH_INIT
SSH2 0: ssh_receive: 64 bytes received
SSH2 0: input: packet len 144
SSH2 0: partial packet 8, need 136, maclen 0
SSH2 0: ssh_receive: 64 bytes received
SSH2 0: partial packet 8, need 136, maclen 0
SSH2 0: ssh_receive: 16 bytes received
SSH2 0: partial packet 8, need 136, maclen 0
SSH2 0: input: padlen 5
SSH2 0: received packet type 30

SSH2 0: SSH2_MSG_KEXDH_INIT received
dh_client_pub=
9864d3df3a5f694d b6820632f04d3163 5abaeb9bcf27a620 1672603039de8e4e
b16334ecab1a3fcd 23efa548c2065c1e 8b426d2fc9a81423 c482b60112273d3c
48e3e355e393e37d 8d4adcd8cc733a86 2cd904f255933a80 e57547a667e4dade
feb8f7bc82c0e088 688e4196f2872a14 44c33ba886e800b9 eec33d8d6f162dd4

my_dh_pub=
01be551a74055a9c 404484abc69803ac 601f5a8be2bd5fc5 9ad455710a6fc25c
dcc95104e24a9dca f41cbe3b3fd2a3ec daa6f4994dbb7a96 f283e5a90202dd59
1c2fc1bb2fd90cce cd8dcee038c2b108 e83195a190dff556 7bddd531648a4ecb
35bdb88e62ad05bb 01bafbe17ac3553c 0b3bff8d02e83ed8 aa1f6b556389a142

shared secret
5d90af53d07603d4 ed9b586dac25d4d1 fc93ea7b520d57ec 19a1a1eead5ec6e4
86a475f449571333 f88cabc095280d82 30301a9bc0b95cea f2c9b14196e4dcee
ec0e8b4d4734c594 7fb30552dd9f1db4 d91010a32cd907e0 76ef00f01256eaf1
5fdd28c891fc935e 1e4714049cce29ec 5065ccf79945b595 5db0b4cf7776450c

hash
d8380be9bb28adc9 16bf0010fe50766e 682183bc

SSH2 0: signature length 143
signature

000000077373682d 72736100000080b7 5559875250848cc7 f1051a99e6cc4cdb
f6d4a81b722eb416 81241d1d886fe1db e3e0baa35bfeb192 b06b06fae7839949
1e67fee5007f4fd0 c973278fbad52c46 d33475aac65a7c34 e36552d0e976704c
3b57e1b90839049a 0cdcd5c95833b10a 636e6549f56f354e c71fc8a0a884bc6f
17b60c33021448dd daa35e90e61edf

SSH2 0: send: len 448 (includes padlen 8)
key
6e971af9965f7940 a75abc59060a64c5 b46ad92e

key = A
6e971af9965f7940 a75abc59060a64c5 b46ad92e

key
4c753409a5e8079d 4df60b5f1e7180ed a8487bf6

key = B
4c753409a5e8079d 4df60b5f1e7180ed a8487bf6

key
c1a51af557e8ebc6 1ada10ec72232c01 3290fc81

key = C
c1a51af557e8ebc6 1ada10ec72232c01 3290fc81

key
4047320329cc2313 00b6f7d8c7f03956 dd5db9a0

key = D
4047320329cc2313 00b6f7d8c7f03956 dd5db9a0

key
26adb963e9c91b36 3f530f7c97bdfd82 bd83324d

key = E
26adb963e9c91b36 3f530f7c97bdfd82 bd83324d

key
2e7bc080b287fe48 8df55985e4ac0043 7ab8d692

key = F
2e7bc080b287fe48 8df55985e4ac0043 7ab8d692

SSH2: kex_derive_keys complete
SSH2 0: send: len 16 (includes padlen 10)
SSH2 0: newkeys: mode 1
SSH2 0: SSH2_MSG_NEWKEYS sent
SSH2 0: waiting for SSH2_MSG_NEWKEYS
SSH2 0: ssh_receive: 16 bytes received
SSH2 0: input: packet len 16
SSH2 0: partial packet 8, need 8, maclen 0
SSH2 0: input: padlen 10
SSH2 0: newkeys: mode 0
SSH2 0: received packet type 21

SSH2 0: SSH2_MSG_NEWKEYS received
SSH2 0: ssh_receive: 52 bytes received
SSH2 0: input: packet len 32
SSH2 0: partial packet 16, need 16, maclen 20
SSH2 0: MAC #3 ok
SSH2 0: input: padlen 10
SSH2 0: received packet type 5

SSH2 0: send: len 32 (includes padlen 10)
SSH2 0: done calc MAC out #3
SSH2 0: ssh_receive: 64 bytes received
SSH2 0: input: packet len 48
SSH2 0: partial packet 16, need 32, maclen 20
SSH2 0: ssh_receive: 4 bytes received
SSH2 0: partial packet 16, need 32, maclen 20
SSH2 0: MAC #4 ok
SSH2 0: input: padlen 8
SSH2 0: received packet type 50
SSH(test): user authen method is ‘use AAA’, aaa server group ID = 1

SSH2 0: send: len 32 (includes padlen 13

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *