Linux 802.1x en una red cableada de Windows

11

Estoy buscando usar mi estación de trabajo Linux en la red de nuestra empresa, pero me he encontrado con algunos problemas, específicamente 802.1xi.

Soy root en mi máquina y administrador de dominio de Windows, por lo que debería poder acceder a lo que sea necesario para que esto funcione. Actualmente, mi máquina Linux tiene conectividad restringida, lo que me lleva a creer que se ha puesto en un vlan predeterminado para clientes que no son 802.1x.

Supongo que mi pregunta general es: ¿cómo puedo hacer que mi máquina Linux use 802.1x en la red de Windows cableada? La red es un dominio típico de Windows y utiliza cuentas de máquina y de usuario.

Esto es lo que sé y he probado hasta ahora:

Creo que voy a necesitar obtener un certificado de máquina de cliente válido para la máquina, el certificado de CA para el dominio y la clave privada para el cliente

Idea 1, tome una clave válida de una máquina Windows / máquina de dominio ca Ejecuté una VM de Windows en la máquina Linux, y la uní al dominio, pensando que esto produciría un certificado de cliente válido que podría obtener para la máquina Linux. - con ese fin, exporté el certificado de cliente y el certificado de ca del servidor de Windows ca, luego los convertí a formato PEM, listos para el administrador de red en Linux (suponiendo que necesita PEM no DER). - Luego intenté exportar la clave privada en la máquina virtual de Windows usando certmgr, pero se marcó como no exportable :-(

La idea 2 era powerbroker ... - Usé powerbroker open (formalmente de la misma manera) para unir la máquina Linux al dominio, getent passwd ahora muestra a todos los usuarios del dominio. - Pensé que esto pondría un certificado de cliente y una clave privada en el sistema en algún lugar (/ etc / ssl / certs?) Pero no puedo encontrar nada

Idea 3, pregúntale a alguien que sepa lo que realmente está haciendo.

Debo señalar que originalmente esta máquina Linux tenía Windows (que p2v'd en la instalación de Linux), así que sé que el conmutador de red está configurado correctamente, y el MAC, etc., es aceptado en la red; Estoy bastante seguro de que es solo un problema de 802.1x

Editar: olvidé por completo mencionar su giro fedora 21 xfce, 64 bits.

Sirex
fuente
¿Qué suplicante estás usando? Xsupplicant, wpa_supplicant o rodando el tuyo?
Brian
su fedora 21 fuera de la caja, parece que solo está instalado wpa_supplicant. Sin embargo, estoy usando el administrador de red para intentar conectarme (con el escritorio xfce).
Sirex
sí, eso resume más o menos lo lejos que ya llegué. Mirando las máquinas Windows, parecen usar PEAP con MSCHAP v2, así que eso es lo que probé en las máquinas Linux. Principalmente creo que estoy luchando por saber dónde / cómo obtener certificados válidos, y cómo debería ser mi nombre de usuario ('bob' '[email protected]' 'dominio \ bob'? He intentado varias formas de para que funcione, pero hasta ahora no ha tenido éxito, solo vuelve a solicitar mi contraseña nuevamente
Sirex
Intenté exportar el certificado de CA (en la 'idea 1') pero todavía me vuelven a solicitar la contraseña, y no estoy seguro de si voy por el camino correcto con el formato PEM. También hay una casilla de verificación 'no se requiere certificado de CA', pero no sé si a AD le gustaría eso (supongo que eso es solo una decisión del lado del cliente para deshacerse de la verificación de CA de todos modos, ¿no?)
Sirex

Respuestas:

10

¡Malas noticias para todos! Parece que hay un error no corregido en Fedora 21: la conexión por cable con 802.1x PEAP / MSCHAPv2 no funciona . Entonces, aunque la respuesta a continuación puede funcionar para otras distribuciones, los usuarios de Fedora 21 no tienen suerte.


Nunca lo intenté yo mismo, pero esta publicación parece contener un tutorial bastante detallado para configurar 802.1x entre el cliente Linux y el dominio de Windows. Tenga en cuenta la parte de solicitud de certificado: debe resolver su problema de certificado no exportable. Las versiones de software son bastante antiguas ( Ubuntu es 8.04 y Power Broker de Beyond Trust todavía es igual ), pero la idea básica me parece sólida.

He formateado la publicación mencionada anteriormente para que sea más fácil de leer. Las citas hacen que los cuadros de código sean grises sobre grises, así que lo descarté, lo siento:


Descargo de responsabilidad: esta guía está escrita desde la perspectiva de la distribución Linux Ubuntu 8.04. Para que esto funcione con otras distribuciones de Linux o Unix, es posible que sea necesario realizar algunos cambios.

Las dos cosas principales que son necesarias para que su máquina Linux se autentique a través de 802.1x es un certificado de cliente y una cuenta en el dominio de Windows. Durante el proceso de autenticación, el cliente Linux presenta su certificado de computadora al conmutador, que a su vez lo presenta al servidor RADIUS que verifica el certificado y verifica la cuenta de computadora a la que está asignado el certificado en Active Directory. Si el certificado y la cuenta de la computadora son válidos, entonces el servidor RADIUS aprueba la solicitud de autenticación enviándola de vuelta al conmutador, que a su vez autentica el puerto al que está conectada la caja Linux.

Lo primero que debe hacerse es unir su computadora Linux al dominio de Windows. Dado que Linux no puede unirse de forma nativa a un dominio de Windows, debemos descargar el software necesario para permitirnos hacer esto. Del mismo modo, hace que el software nos permita hacer exactamente esto. Para instalar esto en Ubuntu es muy simple, solo siga estos pasos:

  1. sudo apt-get update
  2. sudo apt-get install likewise-open
  3. sudo domainjoin-cli join enter the FQDN of your domain here enter your admin account here, puede usar el formato [email protected]. También debe poder usar la versión de GUI yendo aSystem → Administration → Likewise.
  4. sudo update-rc.d igualmente-abre valores predeterminados
  5. sudo /etc/init.d/likewise-open start

Si no está ejecutando Ubuntu, puede descargar el software aquí http://www.likewisesoftware.com/products/likewise_open . Ahora puede cerrar sesión y volver a iniciar sesión con su cuenta de dominio. Creo que tanto el formato [email protected]como el dominio \ usuario funcionan. Probaré esto más tarde.

Hay tres archivos ubicados en la máquina Linux que deben configurarse correctamente para que esta autenticación tenga lugar. Estos tres archivos son:

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

Primero configuraremos el software para permitir que nuestra máquina Linux use un certificado de cliente para autenticarse en una red habilitada para 802.1x; wpa_supplicantserá utilizado para esto

Siga estos pasos para configurar su archivo wpa_supplicant.conf:

  1. sudo gedit /etc/wpa_supplicant.conf
  2. Pegue lo siguiente en el archivo y guárdelo:

    # 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" 
    }
    

Ahora debemos editar su archivo de interfaces. Siga estos pasos para configurar su archivo de interfaces:

  1. sudo gedit / etc / network / interfaces
  2. Pegue lo siguiente en el archivo debajo de la eth0interfaz y guárdelo:

    # 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
    

El siguiente paso es generar e instalar sus certificados. Tendremos que generar un certificado autofirmado, luego generar una solicitud de certificado basada en el certificado autofirmado que creamos, luego instalar los certificados.

Nota: Al crear sus certificados, siempre que solicite su nombre, debe proporcionar el nombre de la computadora que se autenticará. Para estar seguro, recomiendo que el nombre coincida con la forma en que se asigna a la computadora, incluida la distinción entre mayúsculas y minúsculas. Si no está seguro de cómo se asigna a su computadora, abra una terminal y escriba hostname.

Sigue estos pasos:

  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 enter a name for your private key/certificate here-out .pem

    Ejemplo: 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

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

Todos los certificados creados se colocan en su directorio de inicio ( /home/<username>). La siguiente parte es solicitar un certificado de su CA utilizando la solicitud de certificado que se creó en el paso anterior. Esto tendrá que hacerse en una máquina con Windows, ya que por alguna razón Linux y Windows no se llevan muy bien al solicitar y descargar certificados; Me pareció más fácil enviarme la solicitud de certificado por correo electrónico y realizarla en una máquina con Windows.

Siga estos pasos para completar la solicitud de certificado:

  1. Vaya a su directorio de inicio en la máquina Linux y busque su archivo de solicitud de certificado
  2. Envíe el archivo por correo electrónico o abra el archivo con un editor de texto (como gedit) y copie y pegue la solicitud en un correo electrónico y envíelo a usted mismo.
  3. En un cliente de Windows, abra una página web con IE en el sitio web de su CA (como http://caname/certsrv).
  4. Seleccione Solicitar un certificado
  5. Solicitud de certificado avanzada
  6. Ahora abra su correo electrónico y reciba la solicitud de certificado que se envió por correo electrónico.
  7. Si se envió el archivo por correo electrónico, ábralo con el bloc de notas y copie y pegue el contenido en el cuadro de solicitud de certificado codificado Base-64. Si se envió por correo electrónico el contenido del archivo de solicitud de certificado en lugar del archivo en sí, simplemente copie y pegue la solicitud desde allí en el cuadro de solicitud de certificado codificado Base-64.
  8. Haga clic en Enviar y descargue el certificado en forma de Base 64, no DER.
  9. Guarde el certificado en su escritorio y your Linux machine nameasígnele el nombre .pem. El sistema agregará automáticamente .ceral final, así que simplemente elimínelo. Linux usa .pem para extensiones de certificados.
  10. Tome este archivo y envíelo por correo electrónico.
  11. Ahora, en su máquina Linux, obtenga su certificado y guárdelo en algún lugar (preferiblemente su carpeta de inicio para mantener las cosas organizadas y juntas).
  12. Ahora, necesitamos copiar su certificado que acaba de recibir en su /etc/ssl/certscarpeta, y debemos copiar su clave / certificado privado y la clave privada creada anteriormente en su /etc/ssl/privatecarpeta. Ahora, solo root tiene permiso para hacer esto, por lo que puede hacerlo mediante la línea de comandos escribiendo sudo cp /home/<username>/<certificate>.pem /etc/ssl/privateo /etc/ssl/certs. Esto también se puede hacer desde la GUI copiando y pegando usando el comando gksudo y escribiendo nautilus. Nautilus es el navegador de archivos GUI que usa Ubuntu y lo ejecutará como root, lo que le permite copiar y pegar en directorios a los que solo root tiene acceso.

Ahora que nuestros certificados están en su lugar, necesitamos decirle a openssl cómo queremos usar los certificados. Para hacer esto, debemos editar el archivo openssl.cnf y decirle que autentique nuestra máquina Linux como cliente y no como usuario.

Para hacer esto, siga estos pasos:

  1. sudo gedit /etc/ssl/openssl.cnf
  2. Desplácese hacia abajo hasta la mitad y debería ver una sección llamada [usr_cert]. En esta sección, necesitamos el lugar donde nsCertTypese define como "Para el uso normal del cliente, esto es típico" , y debería haberlo nsCertType = client, emaily se comentará. Elimine el comentario de esta línea y elimine el correo electrónico para que se muestre nsCertType = client. Ahora guarda el archivo.

Ahora debe tener todo lo que necesita configurado correctamente para que una máquina Linux se ejecute en un entorno de dominio de Windows y se autentique con 802.1x.

Todo lo que queda ahora es reiniciar su servicio de red para que Linux use el wpa_supplicant.confarchivo que ahora está vinculado a su eth0interfaz y se autentique. Así que solo corre sudo service networking restart. Si no obtiene una dirección IP después de que su interfaz vuelva a funcionar, puede solicitar manualmente una IP de su servidor DHCP escribiendo sudo dhclient.


beatcracker
fuente
Acabo de probar esto, y lo intenté cuando encontré ese artículo por primera vez. Lo intentaré de nuevo, palabra por palabra, por si acaso.
Sirex
No, no puedo hacer que esto funcione. Pensé que la solicitud de firma avanzada sería tipo 'estación de trabajo' pero solo tenía 'usuario' y 'servidor web' disponibles.
Sirex
Ok, entonces tal vez podríamos ir por otra ruta. Hay una forma, alebit hacky, de exportar certificados marcados como no exportables: github.com/iSECPartners/jailbreak o blog.gentilkiwi.com/mimikatz ( stackoverflow.com/questions/3914882/… ). ¿Podría intentar obtener un certificado de su Windows p2v'd y usarlo para la autenticación?
beatcracker
la aplicación jailbreak me permitió obtener la clave privada. No funcionó para mí en modo TLS. El modo PEAP solo quiere el certificado CA, que puedo quitar del servidor ca / ​​certsrv / url, pero tampoco funciona. Tal vez no me gusta mi 'identidad anónima', tipo de nombre de usuario y contraseña, supongo que es 'nombre de usuario' o '[email protected]', pero tampoco funciona para mí. Pegaré los registros de mensajes.
Sirex
1
¡Malas noticias para todos! Parece que es un error en Fedora 21: la conexión por cable con 802.1x PEAP / MSCHAPv2 no funciona .
beatcracker