venerdì 9 dicembre 2022

Script Python per accesso agli switch Cisco

Di seguito uno script Python che esegue l'accesso a due switch (possibile estendere la lista aggiungendo più IP) e fa lo show version

Lo script è stato testato su ambiente Debian con Python 3.10

$python -m pip install netmiko   -> importare la libreria netmiko

$touch script_ssh_cisco.py         -> creare il file

$vi script_ssh_cisco.py

import netmiko
from netmiko import ConnectHandler
device = ["10.5.1.13", "10.5.1.11"]
for x in device:
    cisco = {
        'device_type': 'cisco_ios',
        'ip':   x,
        'username': 'admin',
        'password': 'password',
        'secret': 'password',
    }
    print(' ')
    print(x)
    net_connect =ConnectHandler(**cisco)
    net_connect.enable()
    output =net_connect.send_command('show version | include IOS')
    print(output)

alla sezione password sostituire "password" con la password dell'utente admin, sempre tra " "
alla sezione secret sostituire "password" con la password di enable, sempre tra " "

$chmod u+x script_ssh_cisco.py   -> dare i permessi di esecuzione
$python script_ssh_cisco.py          -> lanciare lo script
 
10.5.1.13
Cisco IOS Software, C2960L Software (C2960L-UNIVERSALK9-M), Version 15.2(6)E2b, RELEASE SOFTWARE (fc3)
 
10.5.1.11
IOS (tm) C2950 Software (C2950-I6K2L2Q4-M), Version 12.1(22)EA13, RELEASE SOFTWARE (fc2)

Autenticazione Radius su Cisco Catalyst

(config)# radius server Test

(config)# address ipv4 10.7.1.20 auth-port 1645 acct-port 1646 -> andiamo a definire IP e porte

 (config)# timeout 5- -> andiamo a definire quanti sec. attendere prima della ritrasmissione

 (config)# retransmit 2 -> andiamo a definire quanti tentativi deve fare verso il radius

 (config)# key *******


adesso andiamo a creare un gruppo dove metteremo all'interno il nostro server Radius, per resilienza si consiglia di configurare due server e aggiungerli entrambi al gruppo.

Io ho creato solo la parte di "authentication" in quanto la password di enable preferisco metterla di volta in volta. E' stato configurato l'account locale admin, in modo che se il radius non dovesse essere disponibile è possibile collegarsi in locale, dopo GRP-TEST è stato definito il metedo di backup che è local-case

(config)# username admin secret 5 $1$VRx0$divcXTBZeAQVN2IJSGV7n.

(config)# aaa new-model

!

(config)# aaa group server radius GRP-TEST

 server name Test

!

aaa authentication login default group GRP-TEST local-case

Successivamente è necessario configurare il servizio sul Server Windows, impostare le policy con gli IP autorizzati e la key, per la configurazione della parte Windows potete fare riferimento al post:

Authentication Fortinet with Radius

!!Attenzione" l'autenticazione tra switch e Radius avviene in PAP, quando si configura la policy è necessario inserire il flag su PAP

Autenticazione LDAP su server CentOS 7

La guida è per sistemi CentOS 7, ma credo che non ci siano problemi su CentOS 8 o derivate Debian
installare i pacchetti:
yum install openldap-clients nss-pam-ldapd

Procedere con l'autoconfigurazione:
authconfig --enableldap \
--enableldapauth \
--ldapserver=test.local o indirizzo IP \
--ldapbasedn="dc=test,dc=local" \
--enablemkhomedir \
--update

Il comando "enablemkhomedir" farà in modo che all'accesso verrà creata la /home directory.
Creare su active directory un utente di servizio per l'integrazione e copiare il "distinguishedName"


Modificare il file /etc/nslcd.conf
# The distinguished name of the search base.
base dc=test,dc=local
# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.

binddn inserire il distinguishedName precedentemente copiato
binddn cn=ldaplinux,ou=Servizio,dc=test,dc=local
# The credentials to bind with.
# Optional: default is no credentials.
# Note that if you set a bindpw you should check the permissions of this file.
bindpw "inserire la password dell'account di servizio"
bindpw passwd

deccomentare tutta la parte riferita a Active Directory
# Mappings for Active Directory
pagesize 1000
referrals off
idle_timelimit 800
filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
map    passwd uid              sAMAccountName
map    passwd homeDirectory    unixHomeDirectory
map    passwd gecos            displayName
filter shadow (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
map    shadow uid              sAMAccountName
map    shadow shadowLastChange pwdLastSet
filter group  (objectClass=group)

Salvare e uscire
Riavviare il servizio:
#systemctl restart nslcd

A questo punto è necessario modificare gli attributi per l'account che dovrà autenticarsi.





Sulla macchina Linux verificare l'account modiificato su Active Directory
#id adm_ep_test
uid=5000(adm_ep_test) gid=100(users) gruppi=100(users)

Fare un test d'accesso:
#ssh adm_ep_test@localhost
adm_ep_test@localhost's password: 
Creating directory '/home/adm_ep_test'.
Last login: Mon May  9 15:17:42 2022 from ::1









 

Script Python per accesso agli switch Cisco

Di seguito uno script Python che esegue l'accesso a due switch (possibile estendere la lista aggiungendo più IP) e fa lo show version Lo...