Linux 802.1x в проводной сети Windows

11

Я собираюсь использовать свою рабочую станцию ​​Linux в сети нашей компании, но у меня возникли некоторые проблемы, в частности, 802.1xi.

Я root на моей машине и администратор домена Windows, поэтому я должен иметь доступ ко всему, что мне нужно, чтобы это работало. В настоящее время моя Linux-машина имеет ограниченные возможности подключения, что заставляет меня поверить, что она была включена в стандартную сеть VLAN для клиентов, не поддерживающих стандарт 802.1x.

Я предполагаю, что мой общий вопрос: как я могу заставить мою машину linux использовать 802.1x в проводной сети Windows? Сеть представляет собой типичный домен Windows и использует учетные записи компьютеров, а также учетные записи пользователей.

Это то, что я знаю и пробовал до сих пор:

Я считаю, что мне нужно получить действительный сертификат клиентского компьютера для компьютера, сертификат CA для домена и закрытый ключ для клиента

Идея 1: получить действительный ключ от машины / домена с Windows. Я запустил виртуальную машину Windows на компьютере с Linux и соединил ее с доменом, думая, что это даст действительный сертификат клиента, который я мог бы получить для машины с Linux. - с этой целью я затем экспортировал сертификат клиента и сертификат с сервера Windows ca, а затем преобразовал их в формат PEM, готовый для сетевого менеджера в Linux (при условии, что требуется PEM, а не DER). - Затем я попытался экспортировать закрытый ключ на самой виртуальной машине Windows, используя certmgr, но он был помечен как не экспортируемый :-(

Идея 2 была powerbroker ... - Я использовал powerbroker open (формально аналогично), чтобы присоединить машину linux к домену, getent passwd теперь показывает всех пользователей домена. - Я думал, что это поместит клиентский сертификат и закрытый ключ в систему (/ etc / ssl / certs?), Но я ничего не могу найти

Идея 3, спросите кого-то, кто знает, что они на самом деле делают.

Я должен отметить, что изначально на этой машине с Linux имелись окна (которые я установил после установки Linux), поэтому я знаю, что сетевой коммутатор настроен правильно, и MAC и т. Д. Принимаются в сети; я уверен, что это просто проблема 802.1x

Редактировать: полностью забыл упомянуть его Fedora 21 XFCE Spin, 64bit.

Sirex
источник
Какой соискатель вы используете? Xsupplicant, wpa_supplicant или вы катаетесь самостоятельно?
Брайан
его fedora 21 из коробки, похоже, установлен только wpa_supplicant. Я использую сетевой менеджер, чтобы попытаться подключиться (с рабочим столом xfce).
Sirex
да, это более или менее подводит итог, как далеко я уже получил. Глядя на машины Windows, кажется, они используют PEAP с MSCHAP v2, так что я попробовал это на машинах Linux. В основном я думаю, что мне трудно узнать, где / как получить действительные сертификаты и как должно выглядеть мое имя пользователя ('bob' 'bob@domain.com' 'domain \ bob'? Я пробовал довольно много способов заставить его работать, но пока безуспешно, он просто снова запрашивает мой пароль
Sirex
Я попытался экспортировать сертификат CA (в «идее 1»), но мне все еще сообщают о пароле, и я не уверен, что даже иду по правильному маршруту с форматом PEM. Также есть флажок «сертификат CA не требуется», но я не знаю, понравится ли это AD (я предполагаю, что это всего лишь решение на стороне клиента отказаться от проверки CA, правда?)
Sirex

Ответы:

10

Плохие новости всем! Кажется, в Fedora 21 есть нефиксированная ошибка: проводное соединение с 802.1x PEAP / MSCHAPv2 не работает . Поэтому, хотя приведенный ниже ответ может работать для других дистрибутивов, пользователям Fedora 21 в настоящее время не повезло.


Сам никогда не пробовал, но этот пост, кажется, содержит довольно подробное пошаговое руководство по настройке 802.1x между клиентом Linux и доменом Windows. Обратите внимание на часть запроса сертификата: она должна решить вашу проблему неэкспортируемого сертификата. Версии программного обеспечения довольно старые ( Ubuntu 8.04 и Power Broker от Beyond Trust все еще аналогичны ), но основная идея кажется мне твердой.

Я отформатировал вышеупомянутый пост, чтобы его было легче читать. При цитировании поля кода становятся серыми на сером, поэтому я пропустил их, извините:


Отказ от ответственности: Это руководство написано с точки зрения дистрибутива Linux Ubuntu 8.04. Чтобы это работало с другими дистрибутивами Linux или Unix, могут потребоваться некоторые изменения.

Две основные вещи, которые необходимы вашей Linux-машине для аутентификации через 802.1x - это сертификат клиента и учетная запись в домене Windows. Во время процесса аутентификации клиент Linux представляет свой сертификат компьютера коммутатору, который, в свою очередь, представляет его RADIUS-серверу, который проверяет сертификат и проверяет учетную запись компьютера, которой назначен сертификат в Active Directory. Если сертификат и учетная запись компьютера действительны, то сервер RADIUS утверждает запрос аутентификации, отправляя его обратно на коммутатор, который, в свою очередь, проверяет подлинность порта, к которому подключен блок Linux.

Первое, что нужно сделать, это присоединить ваш компьютер Linux к домену Windows. Поскольку Linux не может присоединиться к домену Windows, мы должны загрузить необходимое программное обеспечение, чтобы мы могли это сделать. Аналогичным образом создает программное обеспечение, чтобы позволить нам сделать это. Чтобы установить это на Ubuntu, это очень просто, просто выполните следующие действия:

  1. sudo apt-get update
  2. sudo apt-get установить аналогично-открыть
  3. sudo domainjoin-cli присоединиться enter the FQDN of your domain here enter your admin account here, вы можете использовать формат user@domain.com. Вы также должны иметь возможность использовать версию GUI, перейдя вSystem → Administration → Likewise.
  4. sudo update-rc.d аналогично-открытые значения по умолчанию
  5. sudo /etc/init.d/likewise-open start

Если вы не используете Ubuntu, вы можете загрузить программное обеспечение здесь http://www.likewisesoftware.com/products/likewise_open . Теперь вы можете выйти и снова войти, используя учетную запись вашего домена. Я считаю, что любой формат user@domain.comи домен \ пользователь оба работают. Я проверю это позже.

На компьютере Linux есть три файла, которые должны быть правильно настроены, чтобы эта аутентификация прошла. Эти три файла:

  1. /etc/wpa_supplicant.conf
  2. / и т.д. / сеть / интерфейсы
  3. /etc/openssl/openssl.cnf

Сначала мы настроим программное обеспечение, чтобы позволить нашей машине Linux использовать сертификат клиента для аутентификации в сети с поддержкой 802.1x; wpa_supplicantбудет использоваться для этого.

Выполните следующие шаги для настройки вашего файла wpa_supplicant.conf:

  1. sudo gedit /etc/wpa_supplicant.conf
  2. Вставьте следующее в файл и сохраните его:

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

Теперь мы должны отредактировать файл вашего интерфейса. Выполните следующие шаги для настройки файла интерфейсов:

  1. sudo gedit / etc / network / interfaces
  2. Вставьте следующее в файл под eth0интерфейсом и сохраните его:

    # 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
    

Следующим шагом является создание и установка ваших сертификатов. Нам нужно будет создать самоподписанный сертификат, затем сгенерировать запрос сертификата на основе созданного нами самоподписанного сертификата, а затем установить сертификаты.

Примечание: при создании ваших сертификатов, когда он запрашивает ваше имя, вы должны указать имя компьютера, который будет проходить аутентификацию. В целях безопасности я рекомендую сделать так, чтобы имя совпадало с тем, как оно назначено компьютеру, в том числе с учетом регистра. Если вы не уверены, как он назначен вашему компьютеру, откройте терминал и введите имя хоста.

Следуй этим шагам:

  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

    Пример: 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

    Пример: sudo openssl req -new -newkey rsa: 1024 -nodes -keyout privkey.pem -out certreq.pem

Все созданные сертификаты находятся в вашем домашнем каталоге ( /home/<username>). Следующая часть - запросить сертификат у вашего ЦС, используя запрос на сертификат, созданный на предыдущем шаге. Это необходимо сделать на компьютере с Windows, поскольку по какой-то причине Linux и Windows не очень хорошо ладят при запросе и загрузке сертификатов; Я просто обнаружил, что мне проще отправить запрос на сертификат по электронной почте и выполнить его на компьютере с Windows.

Для завершения запроса сертификата выполните следующие действия:

  1. Перейдите в свой домашний каталог на компьютере с Linux и найдите файл запроса сертификата.
  2. Либо отправьте файл по электронной почте себе, либо откройте файл в текстовом редакторе (например, gedit), скопируйте и вставьте запрос в электронное письмо и отправьте его себе.
  3. В клиенте Windows откройте веб-страницу с помощью IE на веб-сайте своего ЦС (например, http://caname/certsrv).
  4. Выберите Запросить сертификат
  5. Расширенный запрос сертификата
  6. Теперь откройте свою электронную почту и получите запрос на сертификат, который вы отправили себе по электронной почте.
  7. Если вы отправили файл по электронной почте, откройте его с помощью блокнота, скопируйте и вставьте содержимое в поле запроса сертификата в кодировке Base-64. Если вы отправили по электронной почте содержимое файла запроса сертификата, а не сам файл, просто скопируйте и вставьте запрос оттуда в поле запроса сертификата в кодировке Base-64.
  8. Нажмите Submit и загрузите сертификат в форме Base-64, а не DER.
  9. Сохраните сертификат на рабочем столе и назовите его your Linux machine name.pem. Система автоматически добавит .cerего в конец, поэтому просто удалите его. Linux использует .pem для расширений сертификатов.
  10. Возьми этот файл и отправь его обратно себе.
  11. Теперь, на вашем Linux-компьютере, получите свой сертификат и сохраните его где-нибудь (желательно в вашей домашней папке, чтобы все было организованно и вместе).
  12. Теперь нам нужно скопировать ваш сертификат, который вы только что получили, в вашу /etc/ssl/certsпапку, и нам нужно скопировать ваш личный ключ / сертификат и закрытый ключ, созданный ранее в вашей /etc/ssl/privateпапке. Теперь только root имеет право делать это, так что вы можете сделать это с помощью командной строки, набрав sudo cp /home/<username>/<certificate>.pem /etc/ssl/privateили /etc/ssl/certs. Это также можно сделать из графического интерфейса, скопировав и вставив команду gksudo и введя команду nautilus. Nautilus - это файловый браузер с графическим интерфейсом, который использует Ubuntu, и он запускает его как root, позволяя копировать и вставлять в каталоги, к которым имеет доступ только root.

Теперь, когда наши сертификаты готовы, нам нужно сообщить openssl, как мы хотим использовать сертификаты. Чтобы сделать это, мы должны отредактировать файл openssl.cnf и сказать ему, чтобы мы аутентифицировали нашу машину Linux как клиента, а не пользователя.

Для этого выполните следующие действия:

  1. sudo gedit /etc/ssl/openssl.cnf
  2. Прокрутите вниз примерно на полпути, и вы увидите раздел с названием [usr_cert]. В этом разделе нам нужно где где nsCertTypeопределено как «Для обычного использования клиента это типично» , и оно должно быть, nsCertType = client, emailи оно будет закомментировано. Раскомментируйте эту строку и удалите сообщение, чтобы оно отображалось nsCertType = client. Теперь сохраните файл.

Теперь у вас должно быть все, что вам нужно правильно настроить, чтобы машина Linux работала в среде домена Windows и проходила аутентификацию с использованием 802.1x.

Теперь осталось только перезапустить вашу сетевую службу, чтобы Linux использовал wpa_supplicant.confфайл, который теперь привязан к вашему eth0интерфейсу, и прошел аутентификацию. Так что просто беги sudo service networking restart. Если вы не получите IP-адрес после восстановления интерфейса, вы можете вручную запросить IP-адрес с вашего DHCP-сервера, набрав sudo dhclient.


beatcracker
источник
Я только что попробовал это, и я попробовал это, когда я сначала нашел ту статью сам. Я попробую еще раз, хотя слово в слово, на всякий случай.
Sirex
Нет, не могу заставить это работать. Я бы подумал, что запрос на подпись Advenced будет иметь тип «рабочая станция», но у меня были только «пользователь» и «веб-сервер».
Sirex
Хорошо, возможно, мы могли бы пойти другим путем. Есть способ, как хакерский, экспортировать сертификаты, помеченные как неэкспортируемые: github.com/iSECPartners/jailbreak или blog.gentilkiwi.com/mimikatz ( stackoverflow.com/questions/3914882/… ). Не могли бы вы попытаться получить сертификат из Windows p2v'd и использовать его для аутентификации?
битрейкер
Приложение для джейлбрейка позволило мне получить закрытый ключ. Это не работает для меня в режиме TLS. В режиме PEAP требуется только сертификат CA - который я могу получить с сервера CA / certsrv / url, но эта работа также не работает. Возможно, мне не нравятся мои «анонимная идентификация», тип имени пользователя и пароль, я предполагаю, что это «username» или «username@domain.com», но ни один из них не работает для меня. Я вставлю логи сообщений.
Sirex
1
Плохие новости всем! Похоже, что это ошибка в Fedora 21: проводное соединение с 802.1x PEAP / MSCHAPv2 не работает .
битрейкер