Login

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1

ARGOMENTO:

OpenLDAP authentication server per accesso amministrativo 10 Anni 1 Mese fa #1

  • gica78r
  • Avatar di gica78r Autore della discussione
  • Offline
  • Platinum Member
  • Platinum Member
  • Messaggi: 166
  • Ringraziamenti ricevuti 9
Ciao a tutti e scusate per la lunga latitanza... ogni tanto riciccio. Vado dritto al punto: sto configurando un firewall Cisco ASA 5510 (ASA v. 8.4, ASDM 7.1) per eseguire l'autenticazione degli utenti usando come backend un server ActiveDirectory/OpenLDAP e sto incontrando qualche difficoltà. Il mio obiettivo è quello di regolare tramite LDAP sia l'accesso amministrativo al dispositivo (ssh/asdm) che i login al servizio di Remote Access VPN. Il server ActiveDirectory/OpenLDAP che sto usando non è Microsoft (manco morto) ma GNU/Linux, in particolare Zentyal 3.7. Il mio problema riguarda in particolare l'accesso amministrativo al firewall; ho tentato due configurazioni, una via ActiveDirectory (che funziona) e l'altra via OpenLDAP, che invece non funziona ma che preferirei rispetto alla prima.

Configurazione funzionante (ActiveDirectory)
Sul server Zentyal è configurato un utente "normale", senza privilegi particolari se non quello di essere un utente del dominio. Questo utente si chiama "ciscoasa". Sul firewall ho quindi configurato un server group chiamato NetworkSecurity e al suo interno ho definito un server di tipo Microsoft:
aaa-server NetworkSecurity (office-lan) host 192.168.168.100
 server-port 389
 ldap-base-dn dc=domain,dc=lan
 ldap-scope subtree
 ldap-naming-attribute sAMAccountName
 ldap-login-password *****
 ldap-login-dn ciscoasa@domain.lan
 server-type microsoft
 ldap-attribute-map ADGroupMember

Il cuore di questa configurazione sta nel mapping degli attributi ldap, mostrato di seguito:
ldap attribute-map ADGroupMember
  map-name  memberOf IETF-Radius-Service-Type
  map-value memberOf CN=NetAdmins,OU=Groups,DC=domain,DC=lan 6

Questa configurazione in pratica fa in modo che, quando un utente si logga, si verifica la sua appartenenza al gruppo NetAdmins tramite una query sull'attributo sAMAccountName sul server ActiveDirectory e, in caso affermativo, il corrispondente attributo IETF-Radius-Service-Type viene impostato al valore 6, il ché permette l'accesso alla console (via ssh e asdm) e alla modalità privilegiata, secondo la configurazione seguente:
aaa authentication enable console NetworkSecurity LOCAL
aaa authentication http console NetworkSecurity LOCAL
aaa authentication ssh console NetworkSecurity LOCAL
aaa authorization exec authentication-server

Come anticipato, questa cosa funziona perfettamente, ma a me non piace dover usare un account di dominio (in questo caso ciscoasa) per fare da autenticatore verso il server ActiveDirectory. Il server Zentyal offre anche il servizio OpenLDAP e un account di tipo read-only, e mi piacerebbe utilizzare questo per fare da autenticatore. Quella che segue è la configurazione (non funzionante).

Configurazione NON funzionante (OpenLDAP)
In questo caso non è possibile eseguire la query sull'attributo sAMAccountName, ma si possono ottenere le stesse informazioni usando l'attributo uid:
aaa-server OpenLDAP protocol ldap
aaa-server OpenLDAP (office-lan) host 192.168.168.100
 server-port 390
 ldap-base-dn dc=n3tcom,dc=lan
 ldap-group-base-dn ou=Groups,dc=domain,dc=lan
 ldap-scope subtree
 ldap-naming-attribute uid
 ldap-login-password *****
 ldap-login-dn cn=zentyalro,dc=domain,dc=lan
 server-type openldap
 ldap-attribute-map openldap

Si noti che su Zentyal il servizio ldap è in ascolto sulla porta 390 anziché sulla canonica 389. Anche in questo caso definisco un mapping sugli attributi (praticamente identico al precedente):
ldap attribute-map openldap
  map-name  memberOf IETF-Radius-Service-Type
  map-value memberOf cn=NetAdmins,ou=Groups,dc=domain,dc=lan 6

Ovviamente la configurazione AAA cambierà per usare questo nuovo server group:
aaa authentication enable console OpenLDAP LOCAL
aaa authentication http console OpenLDAP LOCAL
aaa authentication ssh console OpenLDAP LOCAL
aaa authorization exec authentication-server

Questa configurazione funziona fino all'autenticazione, nel senso che, per il firewall, l'utente viene autenticato con successo, persò sembra che non abbia effetto il mapping dell'attributo memberOf su IETF-Radius-Service-Type e quindi l'accesso alla console viene rifiutato col messaggio "Attempted console login failed user 'username' did NOT have appropriate Admin Rights."


Se eseguo manualmente una query verso il server OpenLDAP posso vedere con certezza che l'utente appartiene al gruppo NetAdmins:

root@zentyal-dc:~# ldapsearch -H ldap://127.0.0.1:390 -x -D "cn=zentyalro,dc=domain,dc=lan" -W -b "dc=domain,dc=lan" "(uid=username)" memberOf
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=domain,dc=lan> with scope subtree
# filter: (uid=username)
# requesting: memberOf
#

# username, Users, domain.lan
dn: uid=username,ou=Users,dc=domain,dc=lan
memberOf: cn=__USERS__,ou=Groups,dc=domain,dc=lan
memberOf: cn=Domain Admins,ou=Groups,dc=domain,dc=lan
memberOf: cn=RemoteAccessVPN,ou=Groups,dc=domain,dc=lan
memberOf: cn=NetAdmins,ou=Groups,dc=domain,dc=lan


Questo invece è quello che viene mostrato sul firewall (debug ldap 255) durante una transazione per l'autenticazione di un utente:

fw-cisco-asa-5510-1#
[39] Session Start
[39] New request Session, context 0xabdab88c, reqType = Authentication
[39] Fiber started
[39] Creating LDAP context with uri=ldap://192.168.168.100:390
[39] Connect to LDAP server: ldap://192.168.168.100:390, status = Successful
[39] supportedLDAPVersion: value = 3
[39] Binding as zentyalro
[39] Performing Simple authentication for zentyalro to 192.168.168.100
[39] LDAP Search:
Base DN = [dc=DOMAIN,dc=lan]
Filter = [uid=username]
Scope = [SUBTREE]
[39] User DN = [uid=username,ou=Users,dc=DOMAIN,dc=lan]
[39] Server type for 192.168.168.100 unknown - no password policy
[39] Binding as username
[39] Performing Simple authentication for username to 192.168.168.100
[39] Processing LDAP response for user username
[39] Authentication successful for username to 192.168.168.100
[39] Retrieved User Attributes:
[39] objectClass: value = inetOrgPerson
[39] objectClass: value = posixAccount
[39] objectClass: value = passwordHolder
[39] objectClass: value = systemQuotas
[39] objectClass: value = krb5Principal
[39] objectClass: value = krb5KDCEntry
[39] objectClass: value = shadowAccount
[39] objectClass: value = zentyalSambaLink
[39] uid: value = username
[39] loginShell: value = /bin/bash
[39] gidNumber: value = 1901
[39] homeDirectory: value = /home/username
[39] krb5PrincipalName: value = Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
[39] krb5MaxLife: value = 86400
[39] krb5MaxRenew: value = 604800
[39] krb5KDCFlags: value = 126
[39] uidNumber: value = 3000043
[39] msdsObjectGUID: value = fa361546-f7d7-4ed2-a88e-6f51f1851a5b
[39] krb5KeyVersionNumber: value = 1
[39] quota: value = 1024
[39] Fiber exit Tx=327 bytes Rx=693 bytes, status=1
[39] Session End



Qualcuno di voi ha mai avuto modo di configurare qualcosa del genere (accesso amministrativo con autenticazione tramite OpenLDAP) su un ASA o su un altro apparato di rete e saprebbe darmi qualche consiglio o suggerimento? Ad esempio, una cosa che mi viene in mente è quella di usare un altro tipo di mapping, ma non saprei quale altro attributo dell'ASA mappare su memberOf.


Grazie e scusate per la lunghezza del post... :P

Gianluca

Si prega Accedi a partecipare alla conversazione.

OpenLDAP authentication server per accesso amministrativo 10 Anni 1 Mese fa #2

  • instructor
  • Offline
  • Administrator
  • Administrator
  • Messaggi: 1385
  • Ringraziamenti ricevuti 172
Che dire, veramente interessante, se riuscissimo a risolverlo vorrei chiederti di riorganizzare il post per pubblicare questo come blog vista la sua validità

Premetto che secondo me l'AAA è uno degli aspetti più complessi in una configurazione di rete specialmente se si cerca di uscire dalle soluzioni proprietarie come stai tentando di fare.

Detto questo personalmente ho sempre prediletto per l'accesso alla command line TACACS vista la sua fantastica granularità e scalabilità di configurazione, ma per questo avresti bisogno di un ACS o di un ISE se usassi RADIUS (per il futuro facci un pensierino perchè soprattutto ISE è veramente potente :) )

Intanto le due situazioni che confronti non sono esattamente allineate, infatti Active Durectory da quanto riporti sembrerebbe funzionare in quanto fai authentication e authorizazion in locale, mentre con LDAP la fai verso il server che è la tua vera intenzione.

Ciò che manca è la configurazine dell'autorizzazione lato server, se fosse un radius dovresti inviare al firewall l'attributo proprietario Cisco
cisco-avpair = "shell:priv-lvl=15"
Trattandosi di LDAP non so esattamente come funzioni l'authorizzazione ma immagino ci sia bisogno di un attributo per autorizzare l'utente a livello 15

Con tacacs la cosa è totalmente differente, puoi autorizzare ogni singolo comando verificandolo sul server dandoti una grandissima scalabilità nella configurazione dei privilegi.

Si prega Accedi a partecipare alla conversazione.

Ultima Modifica: da instructor.

OpenLDAP authentication server per accesso amministrativo 10 Anni 1 Mese fa #3

  • gica78r
  • Avatar di gica78r Autore della discussione
  • Offline
  • Platinum Member
  • Platinum Member
  • Messaggi: 166
  • Ringraziamenti ricevuti 9

vspaziani ha scritto: Detto questo personalmente ho sempre prediletto per l'accesso alla command line TACACS vista la sua fantastica granularità e scalabilità di configurazione, ma per questo avresti bisogno di un ACS o di un ISE se usassi RADIUS (per il futuro facci un pensierino perchè soprattutto ISE è veramente potente :) )


Nel mio piccolo utilizzo tac_plus su macchine Linux oppure questa implementazione di tacacs su Windows. Quest'ultimo, se installato su un domain controller Active Directory, può sfruttare gli attributi degli utenti per conferire le autorizzazioni sui dispositivi di rete.

Intanto le due situazioni che confronti non sono esattamente allineate, infatti Active Durectory da quanto riporti sembrerebbe funzionare in quanto fai authentication e authorizazion in locale, mentre con LDAP la fai verso il server che è la tua vera intenzione.


Non mi pare (a meno di errori di trascrizione); le due configurazioni sono identiche, cambia solo il nome del server group (nel primo caso si chiama NetworkSecurity, nel secondo OpenLDAP). Ho fatto in questo modo per evitare di apportare continuamente modifiche allo stesso server group. L'autenticazione LOCAL è solo di fallback nel caso l'authentication server non sia raggiungibile.

Ciò che manca è la configurazine dell'autorizzazione lato server, se fosse un radius dovresti inviare al firewall l'attributo proprietario Cisco
<strong>cisco-avpair = "shell:priv-lvl=15"</strong>
Trattandosi di LDAP non so esattamente come funzioni l'authorizzazione ma immagino ci sia bisogno di un attributo per autorizzare l'utente a livello 15.


Dalla documentazione dell'ASA , l'attributo da configurare per l'accesso amministrativo è IETF-Radius-Service-Type, a cui bisogna assegnare il valore 6:

The following example shows how to limit management sessions to the ASA based on an LDAP attribute called accessType. The accessType attribute has three possible values:

• VPN

• admin

• helpdesk

Each value is mapped to one of the valid IETF RADIUS Service-Types that the ASA supports: remote-access (Service-Type 5) Outbound, admin (Service-Type 6) Administrative, and nas-prompt (Service-Type 7) NAS Prompt.


Questa fonte utilizza l'attributo LDAP accessType, mentre io sto cercando di usare sempre memberOf come faccio nel caso di Active Directory. A quanto pare è questa cosa che non funziona. Ora cerco di individuare quell'attributo sul mio server OpenLDAP e di configurare l'ASA di conseguenza. Vi aggiornerò col risultato.

Grazie :)

Si prega Accedi a partecipare alla conversazione.

OpenLDAP authentication server per accesso amministrativo 10 Anni 1 Mese fa #4

  • instructor
  • Offline
  • Administrator
  • Administrator
  • Messaggi: 1385
  • Ringraziamenti ricevuti 172
Scusami hai ragione, ho letto male, ad ogni modo potrebbe aiutare un debug sul processo di authorizzazione. Come workaround certamente installare un radius che authentichi sullo stesso db utenti.

Si prega Accedi a partecipare alla conversazione.

OpenLDAP authentication server per accesso amministrativo 10 Anni 1 Mese fa #5

  • gica78r
  • Avatar di gica78r Autore della discussione
  • Offline
  • Platinum Member
  • Platinum Member
  • Messaggi: 166
  • Ringraziamenti ricevuti 9
Per il momento ho risolto utilizzando il workaround di installare un server TACACS+ sulla stessa macchina che fa da domain controller Active Directory (avrei potuto usare anche un'altra macchina), configurando TACACS per consultare il database e gli attributi degli utenti active directory. In questo modo, se non altro, mantengo comunque centralizzata la gestione delle credenziali e dei permessi. L'implementazione di TACACS+ che ho usato stavolta non è quella che avevo citato precedentemente ma quella di Marc Huber ( link ), che pare più facile da integrare con ActiveDirectory/LDAP ma non è in genere presente nei repository delle varie distribuzioni Linux. E' comunque molto facile da compilare ed installare.

Si prega Accedi a partecipare alla conversazione.

OpenLDAP authentication server per accesso amministrativo 10 Anni 4 Settimane fa #6

  • instructor
  • Offline
  • Administrator
  • Administrator
  • Messaggi: 1385
  • Ringraziamenti ricevuti 172
Probabilmente a causa della mia estrazione Cisco oriented, ma secondo me il tuo più che un workaround è da considerarsi una best practice, infatti generalmente quando si utilizza un server Cisco ACS per AAA per i possibili servizi di rete si utilzza RADIUS che è più supportato e standard, ma TACACS+ rimane la scelta migliore per il management su Cisco. Tutto sommato la cosa davvero importante è avere un database unico utenti, poco importa se si parlano lingue diverse per diverse auth e authz.

Se mai avessi tempo e volessi pubblicare un blog sull'argomento sei il beneveuto ovviamente.

Si prega Accedi a partecipare alla conversazione.

  • Pagina:
  • 1
Moderatori: jpalombi