Назад | Перейти на главную страницу

Настройка RADIUS + LDAP для WPA2 в Ubuntu

Я настраиваю беспроводную сеть на ~ 150 пользователей. Короче говоря, я ищу руководство по настройке сервера RADIUS для аутентификации WPA2 по LDAP. На Ubuntu.

И плохие новости:

ОБНОВЛЕНИЕ 2009-08-18:

Хотя я нашел несколько полезных ресурсов, есть одно серьезное препятствие:

Ignoring EAP-Type/tls because we do not have OpenSSL support.
Ignoring EAP-Type/ttls because we do not have OpenSSL support.
Ignoring EAP-Type/peap because we do not have OpenSSL support.

В основном версия FreeRADIUS для Ubuntu не поддерживает SSL (ошибка 183840), что делает бесполезными все безопасные типы EAP. Облом.

Но полезная документация для всех, кого интересует:

ОБНОВЛЕНИЕ 2009-08-19:

Вчера вечером я собрал свой собственный пакет FreeRADIUS - действительно хороший рецепт есть в http://www.linuxinsight.com/building-debian-freeradius-package-with-eap-tls-ttls-peap-support.html (См. Комментарии к сообщению для получения обновленных инструкций).

Я получил сертификат от http://CACert.org (если возможно, вам следует получить "настоящий" сертификат)

Затем я выполнил инструкции на http://vuksan.com/linux/dot1x/802-1x-LDAP.html. Это ссылки на http://tldp.org/HOWTO/html_single/8021X-HOWTO/, который стоит прочитать, если вы хотите узнать, как работает безопасность WiFi.

ОБНОВЛЕНИЕ 2009-08-27:

Следуя приведенному выше руководству, мне удалось заставить FreeRADIUS общаться с LDAP:

Я создал тестового пользователя в LDAP с паролем mr2Yx36M - это дает запись LDAP примерно:

uid: testuser
sambaLMPassword: CF3D6F8A92967E0FE72C57EF50F76A05
sambaNTPassword: DA44187ECA97B7C14A22F29F52BEBD90
userPassword: {SSHA}Z0SwaKO5tuGxgxtceRDjiDGFy6bRL6ja

Когда используешь radtest, Я могу нормально подключиться:

> radtest testuser "mr2Yx36N" sbhr.dk 0 radius-private-password
Sending Access-Request of id 215 to 130.225.235.6 port 1812
    User-Name = "msiebuhr"
    User-Password = "mr2Yx36N"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 0
rad_recv: Access-Accept packet from host 130.225.235.6 port 1812, id=215, length=20
> 

Но когда я пробую через AP, он не слетает - хотя подтверждает, что определяет пароли NT и LM:

...
rlm_ldap: sambaNTPassword -> NT-Password == 0x4441343431383745434139374237433134413232463239463532424542443930
rlm_ldap: sambaLMPassword -> LM-Password == 0x4346334436463841393239363745304645373243353745463530463736413035
[ldap] looking for reply items in directory...
WARNING: No "known good" password was found in LDAP.  Are you sure that the user is configured correctly?
[ldap] user testuser authorized to use remote access
rlm_ldap: ldap_release_conn: Release Id: 0
++[ldap] returns ok
++[expiration] returns noop
++[logintime] returns noop
[pap] Normalizing NT-Password from hex encoding
[pap] Normalizing LM-Password from hex encoding
...

Понятно, что пароли NT и LM отличаются от приведенных выше, но сообщение [ldap] user testuser authorized to use remote access - и пользователь позже отклоняется ...

Я постараюсь здесь ответить на вопрос о LDAP.

Вот краткий ответ: убедитесь, что ldap модуль удален из authenticate раздел и убедитесь, что mschap модуль присутствует как в authorize и authenticate раздел. И просто проигнорируйте «Неизвестный хороший пароль».

А теперь (очень) длинный ответ.

Как работает модуль ldap?

Когда вы активируете ldap модуль в authorize раздел, вот что он делает, когда пакет RADIUS получен FreeRADIUS:

  1. он пытается подключиться к серверу LDAP (в качестве гостевого пользователя или с использованием данного идентификатора, если он настроен в ldap.conf)
  2. он ищет запись DN пользователя, используя фильтр под базовым DN (настроенным в ldap.conf).
  3. он выбирает все атрибуты LDAP, которые он может получить среди тех, которые настроены в ldap.attrmap, и преобразует их в атрибуты RADIUS.
  4. он добавляет эти атрибуты в список элементов проверки пакета RADIUS.

Когда вы активируете ldap модуль в authenticate раздел, вот что делает FreeRADIUS:

  1. он пытается привязаться к серверу LDAP как пользователь.
  2. если он может привязать, то это успешная аутентификация, и Radius-Accept пакет будет отправлен обратно клиенту, иначе это сбой, приводящий к Radius-Reject пакет.

Итак, как я могу настроить FreeRADIUS, чтобы PEAP / MS-CHAP-v2 работал с LDAP?

Важным моментом здесь является то, что привязка как пользователь будет работать только в том случае, если сервер FreeRADIUS может получить пароль пользователя в открытом виде из полученного пакета RADIUS. Это только в том случае, когда используются методы аутентификации PAP или TTLS / PAP (и, возможно, также EAP / GTC). Только метод TTLS / PAP действительно безопасен, и по умолчанию он недоступен в Windows. Если вы хотите, чтобы ваши пользователи подключались к TTLS / PAP, вам необходимо, чтобы они установили программное обеспечение TTLS, которое редко бывает возможным. В большинстве случаев при развертывании WiFi с WPA Enterprise securiy PEAP / MS-CHAP-v2 является единственным разумным вариантом.

Итак, суть в следующем: если вы не используете PAP или TTLS / PAP, вы можете безопасно удалить ldap модуль из authenticate раздел, и на самом деле вам следует: привязка как пользователь не будет работать.

Если ваш тест работает, когда вы используете radtest, это, вероятно, означает, что ldap модуль активируется в authenticate раздел: он попытается выполнить привязку как пользователь, и, поскольку radtest использует аутентификацию PAP, это будет успешно. Но это не удастся, если вы попытаетесь подключиться через точку доступа, поскольку вы используете PEAP / MS-CHAP-v2.

Что вам следует сделать, так это удалить ldap модуль из authenticate раздел и убедитесь, что вы активировали mschap модуль как в authorize и authenticate раздел. Что произойдет, так это то, что mschap модуль позаботится об аутентификации с помощью NT-Password атрибут, который извлекается с сервера LDAP во время authorize фаза.

Вот что твое sites-enabled/default файл должен выглядеть (без всех комментариев):

    ...
    authorize {
        preprocess
        suffix
        eap {
            ok = return
        }
        expiration
        logintime
    }
    authenticate {
        eap
    }
    ...

А вот что твое sites-enabled/inner-tunnel файл должен выглядеть так:

    ...
    authorize {
        mschap
        suffix
        update control {
               Proxy-To-Realm := LOCAL
        }
        eap {
            ok = return
        }
        ldap
        expiration
        logintime
    }
    authenticate {
        Auth-Type MS-CHAP {
            mschap
        }
        eap
    }
    ...

Как насчет предупреждения "Нет известного надежного пароля"?

Что ж, можете смело игнорировать это. Это просто потому, что ldap модуль не смог найти UserPassword атрибут, когда он получил данные о пользователе с сервера LDAP во время authorize фаза. В вашем случае у вас есть NT-Password атрибут, и это прекрасно для PEAP/MS-CHAP-v2 аутентификация.

Я предполагаю, что предупреждение существует, потому что когда ldap модуль был разработан, PEAP/MS-CHAP-v2 еще не существовало, поэтому единственное, что казалось разумным в то время, - это получить атрибут UserPassword с сервера LDAP, чтобы использовать PAP, CHAP, EAP / MD5 или другие методы аутентификации.

Я постараюсь ответить здесь на вопрос OpenSSL: краткий ответ - используйте FreeRADIUS 2.1.8 или выше, который включает OpenSSL. Он доступен в бэкпортах Ubuntu Lucid и Debian Lenny (и, вероятно, в конечном итоге также появится в бэкпортах Ubuntu Karmic).

Вот длинный ответ:

К сожалению, лицензия OpenSSL была (в некоторой степени) несовместима с лицензией FreeRADIUS. Поэтому люди Ubuntu решили предоставить двоичный файл FreeRADIUS. не связан с OpenSSL. Если вам нужен EAP / TLS, PEAP или TTLS, вы было получить исходники и скомпилировать их с --with-openssl вариант (как объясняет рецепт, который вы использовали).

Но недавно проблема с лицензированием исправлена. FreeRADIUS версии 2.1.8 или выше можно компилировать и распространять с OpenSSL. Плохая новость заключается в том, что самый последний стабильный дистрибутив Ubuntu (Karmic Koala) включает только FreeRADIUS 2.1.0 без OpenSSL (то же самое касается Debian, поскольку Lenny содержит только FreeRADIUS 2.0.4). Я проверил Karmic-backports, но похоже, что FreeRADIUS 2.1.8 или выше еще не был загружен туда (но он может быть добавлен в ближайшее время, посмотри здесь). Так что пока вы должны либо переключиться на Ubuntu Lucid (который включает FreeRADIUS 2.1.8), либо придерживаться компиляции. Для пользователей Debian дела обстоят немного ярче: бэкпорты Lenny включают FreeRADIUS 2.1.8. Поэтому, если вам нужно что-то очень стабильное, простое в установке и обслуживании, я предлагаю вам развернуть сервер с Debian Lenny и установить пакет FreeRADIUS с обратным переносом (он также дает вам возможность бесплатно писать модули python без необходимости перекомпилировать с помощью все экспериментальные модули).

Я получил сертификат от http://CACert.org (если возможно, вам следует получить "настоящий" сертификат)

Есть одна проблема с «настоящими» сертификатами (в отличие от самоподписанных сертификатов).

Я использовал один, подписанный Thawte. Он работает нормально, и пользователи видят красивый «действительный» сертификат с названием вроде www.my-web-site.com. Когда пользователь принимает сертификат, его компьютер действительно понимает, что все сертификатам, выпущенным одним и тем же центром сертификации, следует доверять (Я тестировал это с Windows Vista и MacOSX Snow Leopard)! Итак, в моем случае, если у хакера есть сертификат, скажем, на www.some-other-web-site.com, также подписанный Thawte, то он может легко запустить атаку Man-in-the-middle без каких-либо предупреждений, отображаемых на компьютере пользователя!

Решение этой проблемы лежит в глубине конфигурации сети компьютера пользователя, чтобы специально указать, что доверять следует только «www.my-web-site.com». Это займет всего минуту, но большинство пользователей не будут знать, где это настроить, если вы не дадите им четкую процедуру и убедитесь, что все пользователи ей следуют. Я до сих пор использую «действительные» сертификаты, но, честно говоря, разочаровывает то, что и Windows, и MacOSX разделяют эту «ошибку»: доверие к центру сертификации вместо конкретного сертификата. Ой ...

Согласно отчету об ошибке, простая перестройка FreeRADIUS должна решить проблему с поддержкой OpenSSH. Это нужно сделать только один раз.

Я не уверен, какое отношение имеет простота администрирования к настройке. Часто, чем сложнее и детальнее настройка, тем проще ее администрировать, потому что настройка охватывала все основы. Вы имеете в виду, что конфигурацию нужно легко удалить и на других серверах? Сколько беспроводных локальных сетей вы настраиваете?

После настройки администрирование должно быть ограничено добавлением, удалением и изменением пользователем LDAP. Это должно быть достаточно просто, чтобы либо создать сценарий с помощью ldapmodify (и др.), Либо найти достойный графический интерфейс LDAP и документировать процессы со снимками экрана.

Я столкнулся с той же проблемой. Мне пришлось загрузить исходники RADIUS и скомпилировать их самостоятельно.

Вы можете использовать FreeRADIUS2 (с OpenSSL) + EAP-TLS + WPA2-enterprises. Вот wery подробное КАК. Windows XP SP3 имеет встроенную поддержку, а также Windows 7, Android 2.3, iPhone, Symbian. Но я не знаю о совместимости с SLDAP в такой схеме.