Linux 802.1x su una rete cablata di Windows


11

Sto cercando di utilizzare la mia workstation Linux sulla nostra rete aziendale, ma ho riscontrato alcuni problemi, in particolare 802.1xi credo.

Sono root sul mio computer e un amministratore di dominio Windows, quindi dovrei essere in grado di accedere a tutto ciò di cui ho bisogno per farlo funzionare. Attualmente la mia macchina linux ha una connettività limitata che mi porta a credere che sia stata inserita in un vlan predefinito per client non 802.1x.

Immagino che la mia domanda generale sia: come posso fare in modo che la mia macchina Linux usi 802.1x sulla rete Windows cablata? La rete è un tipico dominio di Windows e utilizza account di macchine e utenti.

Questo è quello che so e ho provato finora:

Credo che avrò bisogno di ottenere un certificato macchina client valido per la macchina, il certificato CA per il dominio e la chiave privata per il client

Idea 1, estrarre una chiave valida da una macchina Windows / dominio. Ho eseguito una macchina virtuale Windows sulla macchina Linux e l'ho unita al dominio, pensando che questo avrebbe prodotto un certificato client valido che avrei potuto ottenere per la macchina Linux. - a tal fine ho quindi esportato il client cert e il certificato dal server windows ca, quindi li ho convertiti in formato PEM, pronti per il gestore di rete su Linux (supponendo che abbia bisogno di PEM e non di DER). - Ho quindi tentato di esportare la chiave privata sulla VM di Windows stessa usando certmgr, ma era contrassegnata come non esportabile :-(

Idea 2 era powerbroker ... - Ho usato powerbroker open (formalmente allo stesso modo) per unire la macchina linux al dominio, getent passwd ora mostra tutti gli utenti del dominio. - Pensavo che questo avrebbe messo un client cert e una chiave privata sul sistema da qualche parte (/ etc / ssl / certs?) Ma non riesco a trovare nulla

Idea 3, chiedi a qualcuno che sa cosa sta realmente facendo.

Dovrei sottolineare che originariamente questa macchina Linux aveva Windows su di essa (che ho installato sull'installazione di Linux), quindi so che lo switch di rete è impostato correttamente e il MAC ecc. È accettato sulla rete; sono abbastanza sicuro che sia solo un problema 802.1x

Modifica: completamente dimenticato di menzionare il suo fedora 21 xfce spin, 64 bit.


Quale supplicante stai usando? Xsupplicant, wpa_supplicant o rolling your?
Brian,

la sua fedora 21 è pronta all'uso, sembra che sia installato solo wpa_supplicant. Sto usando il gestore di rete per provare a connettermi (con il desktop xfce).
Sirex,


sì, questo riassume più o meno quanto sono già arrivato. Guardando le macchine Windows sembrano usare PEAP con MSCHAP v2, quindi è quello che ho provato sulle macchine Linux. Principalmente penso che sto lottando per sapere dove / come ottenere certificati validi e come dovrebbe essere il mio nome utente ('bob' 'bob@domain.com' 'domain \ bob'? Ho provato diversi modi di per farlo funzionare, ma finora nessun successo, richiede nuovamente la password
Sirex,

Ho provato ad esportare il certificato CA (in "idea 1") ma mi viene ancora richiesto di inserire la password e non sono certo che sto percorrendo la strada giusta con il formato PEM. C'è anche una casella di controllo "non è richiesto alcun certificato CA", ma non so se AD lo vorrebbe (suppongo che sia solo una decisione lato client di abbandonare comunque il controllo CA, giusto?)
Sirex

Risposte:


10

Cattive notizie a tutti! Sembra che ci sia un bug non corretto in Fedora 21: connessione cablata con PEAP / MSCHAPv2 802.1x non funzionante . Quindi, mentre la risposta qui sotto potrebbe funzionare per altre distro, gli utenti di Fedora 21 sono attualmente sfortunati.


Non l'ho mai provato da solo, ma questo post sembra contenere una procedura dettagliata per la configurazione di 802.1x tra client Linux e dominio Windows. Nota la parte di richiesta del certificato: dovrebbe risolvere il problema del certificato non esportabile. Le versioni del software sono piuttosto vecchie ( Ubuntu è 8.04 e anche Power Broker di Beyond Trust è ancora simile ), ma l'idea di base mi sembra solida.

Ho formattato il post sopra per facilitarne la lettura. Citando le caselle di codice diventano grigie su grigie, quindi l'ho abbandonato, scusa:


Disclaimer: questa guida è scritta dal punto di vista della distribuzione Ubuntu 8.04 di Linux. Per farlo funzionare con altre distribuzioni Linux o Unix, potrebbe essere necessario apportare alcune modifiche.

Le due cose principali necessarie per l'autenticazione della macchina Linux su 802.1x sono un certificato client e un account nel dominio Windows. Durante il processo di autenticazione, il client Linux presenta il proprio certificato del computer allo switch, che a sua volta lo presenta al server RADIUS che verifica il certificato e verifica l'account del computer a cui è assegnato il certificato in Active Directory. Se il certificato e l'account del computer sono validi, il server RADIUS approva la richiesta di autenticazione rinviandola allo switch, che a sua volta autentica la porta a cui è connessa la scatola Linux.

La prima cosa da fare è unire il tuo computer Linux al dominio Windows. Poiché Linux non può unirsi nativamente a un dominio Windows, dobbiamo scaricare il software necessario per consentirci di farlo. Allo stesso modo crea software per permetterci di fare proprio questo. Per installarlo su Ubuntu è molto semplice, basta seguire questi passaggi:

  1. sudo apt-get update
  2. sudo apt-get install allo stesso modo-open
  3. sudo domainjoin-cli join enter the FQDN of your domain here enter your admin account here, è possibile utilizzare il formato user@domain.com. Dovresti anche essere in grado di utilizzare la versione della GUI andando suSystem → Administration → Likewise.
  4. sudo update-rc.d allo stesso modo apre impostazioni predefinite
  5. sudo /etc/init.d/likewise-open start

Se non si esegue Ubuntu, è possibile scaricare il software qui http://www.likewisesoftware.com/products/likewise_open . È ora possibile disconnettersi e riconnettersi utilizzando il proprio account di dominio. Credo che entrambi i formati di user@domain.comdominio e utente funzionino entrambi. Lo proverò più tardi.

Esistono tre file situati sulla macchina Linux che devono essere configurati correttamente affinché questa autenticazione abbia luogo. Questi tre file sono:

  1. /etc/wpa_supplicant.conf
  2. / etc / network / interfaces
  3. /etc/openssl/openssl.cnf

Innanzitutto configureremo il software per consentire alla nostra macchina Linux di utilizzare un certificato client per l'autenticazione su una rete abilitata 802.1x; wpa_supplicantsarà usato per questo.

Attenersi alla seguente procedura per configurare il file wpa_supplicant.conf:

  1. sudo gedit /etc/wpa_supplicant.conf
  2. Incolla quanto segue nel file e salvalo:

    # Where is the control interface located? This is the default path:
    ctrl_interface=/var/run/wpa_supplicant
    
    # Who can use the WPA frontend? Replace "0" with a group name if you
    # want other users besides root to control it.
    # There should be no need to chance this value for a basic configuration:
    ctrl_interface_group=0
    
    # IEEE 802.1X works with EAPOL version 2, but the version is defaults 
    # to 1 because of compatibility problems with a number of wireless
    # access points. So we explicitly set it to version 2:
    eapol_version=1
    
    # When configuring WPA-Supplicant for use on a wired network, we don't need to
    # scan for wireless access points. See the wpa-supplicant documentation if you
    # are authenticating through 802.1x on a wireless network:
    ap_scan=0
    
    network={ 
        ssid="<enter any name here, it doesn't matter>" 
        key_mgmt=IEEE8021X 
        eap=TLS 
        identity="<FQDN>/computers/<Linux computer name>" 
        client_cert="/etc/ssl/certs/<your authentication certificate name>.pem" 
        private_key="/etc/ssl/private/<your private key name>.pem" 
    }
    

Ora dobbiamo modificare il file delle interfacce. Seguire questi passaggi per configurare il file delle interfacce:

  1. sudo gedit / etc / network / interfaces
  2. Incolla quanto segue nel file sotto l' eth0interfaccia e salvalo:

    # Configure the system to authenticate with WPA-Supplicant on interface eth0
    wpa-iface eth0
    
    # In this case we have a wired network:
    wpa-driver wired
    
    # Tell the system we want to use WPA-Supplicant with our configuration file:
    wpa-conf /etc/wpa_supplicant.conf
    

Il prossimo passo è generare e installare i tuoi certificati. Dovremo generare un certificato autofirmato, quindi generare una richiesta di certificato basata sul certificato autofirmato che abbiamo creato, quindi installare i certificati.

Nota: quando si creano i certificati, ogni volta che viene richiesto il proprio nome, è necessario fornire il nome del computer che eseguirà l'autenticazione. Per sicurezza, consiglio di far corrispondere il nome al modo in cui è assegnato al computer, inclusa la distinzione tra maiuscole e minuscole. Se non sei sicuro di come sia assegnato al tuo computer, apri un terminale e digita hostname.

Segui questi passi:

  1. sudo openssl req -x509 -nodes -days enter in days how long you want the cert valid for-newkey rsa: 1024 -keyout enter a name for your private key/certificate here.pem -out enter a name for your private key/certificate here.pem

    Esempio: sudo openssl req -x509 -nodes -days 365 -newkey rsa: 1024 -keyout privcert.pem -out privcert.pem

  2. openssl req -new -newkey rsa: 1024 -nodes -keyout enter a name for your private key here.pem - out enter a name for your certificate request here.pem

    Esempio: sudo openssl req -new -newkey rsa: 1024 -nodes -keyout privkey.pem -out certreq.pem

Tutti i certificati creati vengono inseriti nella tua home directory ( /home/<username>). La parte successiva è richiedere un certificato alla propria CA utilizzando la richiesta di certificato creata nel passaggio precedente. Questo dovrà essere fatto su un computer Windows, poiché per qualche ragione Linux e Windows non vanno molto d'accordo quando si richiedono e si scaricano certificati; Ho appena trovato più semplice inviare a me stesso la richiesta di certificato ed eseguirla su un computer Windows.

Seguire questi passaggi per completare la richiesta di certificato:

  1. Vai alla tua home directory sul computer Linux e trova il file di richiesta del certificato
  2. Invia il file a te stesso tramite email o apri il file con un editor di testo (come gedit) e copia e incolla la richiesta in un messaggio di posta elettronica e invialo a te stesso.
  3. Su un client Windows, apri una pagina Web utilizzando IE sul sito Web della tua CA (come http://caname/certsrv).
  4. Seleziona Richiedi un certificato
  5. Richiesta avanzata di certificati
  6. Ora apri la tua e-mail e ottieni la richiesta di certificato che hai inviato per e-mail.
  7. Se hai inviato il file tramite e-mail, aprilo con il blocco note e copia e incolla il contenuto nella casella di richiesta del certificato con codifica Base-64. Se ti sei inviato per e-mail il contenuto del file di richiesta del certificato anziché il file stesso, copia e incolla la richiesta da lì nella casella di richiesta del certificato con codifica Base-64.
  8. Fare clic su Invia e scaricare il certificato nel modulo Base-64, non DER.
  9. Salvare il certificato sul desktop e denominarlo your Linux machine name.pem. Il sistema lo aggiungerà automaticamente .ceralla fine, quindi cancellalo. Linux utilizza .pem per le estensioni del certificato.
  10. Prendi questo file e invialo a te stesso.
  11. Ora, sulla tua macchina Linux, ottieni il tuo certificato e salvalo da qualche parte (preferibilmente la tua cartella home per mantenere le cose organizzate e insieme).
  12. Ora, dobbiamo copiare il certificato che hai appena ricevuto nella tua /etc/ssl/certscartella e dobbiamo copiare la tua chiave privata / certificato e la chiave privata creata precedentemente nella tua /etc/ssl/privatecartella. Ora, solo root ha i permessi per farlo, quindi puoi farlo dalla riga di comando digitando sudo cp /home/<username>/<certificate>.pem /etc/ssl/privateo /etc/ssl/certs. Questo può essere fatto anche dalla GUI copiando e incollando usando il comando gksudo e digitando nautilus. Nautilus è il browser di file della GUI che Ubuntu utilizza e lo eseguirà come root consentendoti di copiare e incollare nelle directory a cui solo root ha accesso.

Ora che i nostri certificati sono attivi, dobbiamo dire a openssl come vogliamo usare i certificati. Per fare ciò, dobbiamo modificare il file openssl.cnf e dirgli di autenticare la nostra macchina Linux come client piuttosto che come utente.

Per fare ciò segui questi passaggi:

  1. sudo gedit /etc/ssl/openssl.cnf
  2. Scorri verso il basso per circa metà strada e dovresti vedere una sezione chiamata [usr_cert]. In questa sezione è necessario il punto in cui nsCertTypeè definito "Per un normale utilizzo da parte del cliente questo è tipico" , e dovrebbe avere nsCertType = client, emaile verrà commentato. Rimuovi il commento da questa riga ed elimina l'email in modo che sia visibile nsCertType = client. Ora salva il file.

Ora dovresti avere tutto ciò di cui hai bisogno configurato correttamente per avere una macchina Linux in esecuzione in un ambiente di dominio Windows e autenticarti usando 802.1x.

Ora non resta che riavviare il servizio di rete in modo che Linux utilizzi il wpa_supplicant.conffile che è ora collegato alla tua eth0interfaccia e esegua l'autenticazione. Quindi corri e basta sudo service networking restart. Se non si ottiene un indirizzo IP dopo il ripristino dell'interfaccia, è possibile richiedere manualmente un IP dal server DHCP digitando sudo dhclient.



ho appena provato questo e l'ho provato quando ho trovato l'articolo per la prima volta. Ci proverò ancora parola per parola, per ogni evenienza.
Sirex,

no, non riesco a farlo funzionare. Avrei pensato che la richiesta di firma avanzata fosse di tipo "workstation" ma avevo solo "user" e "web server" disponibili.
Sirex,

Ok, quindi forse potremmo seguire un'altra strada. C'è un modo, alebit hacky, a certs esportazione contrassegnate come non esportabile: github.com/iSECPartners/jailbreak o blog.gentilkiwi.com/mimikatz ( stackoverflow.com/questions/3914882/... ). Potresti provare a catturare un certificato dal tuo Windows p2v e utilizzarlo per l'autenticazione?
Beatcracker

l'app di jailbreak mi permette di ottenere la chiave privata. Non ha funzionato per me in modalità TLS. La modalità PEAP vuole solo il certificato CA, che posso scaricare dal server ca / ​​certsrv / url, ma funziona anche quel dosent. Forse non mi piace la mia "identità anonima", il tipo di nome utente e la password, presumo che sia "nome utente" o "nomeutente@dominio.com", ma nessuno dei due funziona per me. Incollerò i log dei messaggi.
Sirex,

1
Cattive notizie a tutti! Sembra che sia un bug in Fedora 21: connessione cablata con PEAP / MSCHAPv2 802.1x non funzionante .
Beatcracker
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.