В статье на доступном языке описаны протоколы RADIUS и TACACS+. И уж точно после ее прочтения никогда не перепутаешь аутентификацию с авторизацией.
Для начала необходимо определиться, что это за протоколы, для чего они нужны (кто не знает). Все, кто знает, о чем пойдет речь, могут смело пропустить несколько следующих абзацев.
Данные протоколы используются для обмена информацией между Network Access Server'ом (NAS) и AAA (Authentication, Authorization, Accounting) сервером. Далее NAS я часто буду назвать клиентом, поскольку NAS является клиентом по отношению к AAA-серверу (3А-серверу). Собственно, в общем случае у 3А-сервера несколько клиентов. Пользователем по тексту я буду называть нечто, запрашивающее доступ к некому ресурсу у клиента. Не понятно?
Поясню на рисунке:
Для начала необходимо определиться с понятиями, я их постараюсь объяснить попонятнее (как когда-то объяснили мне), без всяких там "формул" и т.д, а на обыкновенном человеческом языке.
Аутентификация (Authentication) - процесс проверки имени пользователя и пароля. Жизненный пример: приходит в охраняемое здание некий Вася и показывает охране свой паспорт - вот он я, вот паспорт, вот фотография на паспорте. Все сходится?
Авторизация (Authorization) - процесс проверки пользователя на предмет возможности использования какого-либо ресурса. Ну то есть: ты конечно Вася и паспорт с фотографией у тебя в порядке, да вот только вот в этот кабинет тебе вход разрешен, а вот в этот - нет.
Эккаунтинг (Accounting) - процесс учета используемого сервиса: вошел наш Вася в какую-то комнату - сделал заметку в книге учета (вошел Вася в такое-то время), вышел - опять оставил пометку (Вася вышел в такое-то время).
Итак вернемся к рисунку: на этом рисунке Вася является пользователем, охрана - NAS (клиентом к 3A-серверу), а сам 3А-сервер - это некое хранилище информации о всех пользователях (кто есть кто и сколько чего кому разрешено). На практике обычно это выглядит так:
Для начала необходимо определиться с понятиями, я их постараюсь объяснить попонятнее (как когда-то объяснили мне), без всяких там "формул" и т.д, а на обыкновенном человеческом языке.
Аутентификация (Authentication) - процесс проверки имени пользователя и пароля. Жизненный пример: приходит в охраняемое здание некий Вася и показывает охране свой паспорт - вот он я, вот паспорт, вот фотография на паспорте. Все сходится?
Авторизация (Authorization) - процесс проверки пользователя на предмет возможности использования какого-либо ресурса. Ну то есть: ты конечно Вася и паспорт с фотографией у тебя в порядке, да вот только вот в этот кабинет тебе вход разрешен, а вот в этот - нет.
Эккаунтинг (Accounting) - процесс учета используемого сервиса: вошел наш Вася в какую-то комнату - сделал заметку в книге учета (вошел Вася в такое-то время), вышел - опять оставил пометку (Вася вышел в такое-то время).
Итак вернемся к рисунку: на этом рисунке Вася является пользователем, охрана - NAS (клиентом к 3A-серверу), а сам 3А-сервер - это некое хранилище информации о всех пользователях (кто есть кто и сколько чего кому разрешено). На практике обычно это выглядит так:
- Пользователь Mokromax дозванивается до своего провайдера услуг (как правило, NAS'ы фирмы CISCO или Lucent) и вводит свой пароль.
- В этот момент NAS формирует и посылает запрос аутентификации к 3A-серверу, далее ожидает ответа.
- 3А-сервер получает запрос, лезет в какое-либо хранилище данных (хранилищем может быть все, что угодно - Oracle, MS SQL, MySQL, просто таблица или другое хранилище) и проверяет имя пользователя и пароль.
- 3A-сервер формирует и посылается ответ NAS'у.
- NAS принимает ответ и пропускает пользователя (устанавливает с ним связь) или нет (разрывает соединение).
- Пользователь Mokromax хочет попользоваться услугой доступа к Интернету.
- В этот момент NAS формирует и посылает запрос авторизации к 3A-серверу, далее ожидает ответа.
- 3А-сервер получает запрос, опять лезет в какое-либо хранилище данных и проверяет возможность пользователя пользоваться данным ресурсом, а также устанавливает количество сервиса, которое доступно пользователю (Mokromax может пользоваться Интернетом еще 33 минуты).
- 3A-сервер формирует и посылается ответ NAS'у.
- NAS подключает пользователя к ресурсу (к Интеренту) и запускает таймер (через 33 минуты пользователь будет принудительно отключен).
- В момент начала пользования ресурсом 3A-сервер информируется NAS'ом об этом.
- 3A-сервер подтверждает прием данной учетной информации.
- В момент окончания пользования ресурсом 3A-сервер также информируется NAS'ом об этом. При этом NAS указывает количество потребленного сервиса.
- 3А-сервер предпринимает какие-либо действия связанные с учетом потребленного сервиса (Mokromax пользовался Интернетом 16 минут, остаток: 33-16=17 минут).
- 3A-сервер подтверждает прием данной учетной информации.
Пункты 11-15 являются процессом эккаунтинга.
Пункты 2-5 как раз и являются процессом аутентификации. Давайте предположим, что пользователь прошел аутентификацию успешно.
Пункты 7-10 являются процессом авторизации.
Прежде всего, эти протоколы предоставляют возможность шифрования (пароля в случае с RADIUS'ом или всего пакета в случае с TACACS+), надежной передачи информации (квитирование), а так же оптимизированы для передачи именно 3A-информации.
RADIUS (Remote Authentication Dial In User Service)
Полное описание данного протокола находиться в RFC-2138 и RFC-2139 которые можно найти здесь(http://www.ietf.org). Это протокол (в отличие от TACACS+) был разработан независимой группой разработчиков (на данный момент протокол не модифицируется) и поэтому получил широкое распространение у сторонних разработчиков. Как правило, все производители программных и аппаратных клиентов поддерживают данный протокол. Кратко о протоколе можно сказать следующее: использует в своей основе протокол UDP (а поэтому относительно быстр), процесс авторизации происходит в контексте процесса аутентификации (т.е. авторизация как таковая отсутствует), реализация RADIUS-сервера ориентирована на однопроцессное обслуживание клиентов (хотя возможно и многопроцессное - вопрос до сих пор открытый), поддерживает довольно ограниченное число типов аутентификации (Clear text и CHAP), имеет среднюю степень защищености.
Примечание.
На данный момент, Radius модулем АСР LANBilling поддерживаются протоколы: PAP, CHAP, MSCHAP, MSCHAPv2, EAP/TLS, EAP-MD5, PEAP/MSCHAPv2.
TACACS+
Данный протокол является разработкой фирмы Cisco Systems и его реализация периодически модифицируется. Данный протокол является новым витком развития более ранних версий протоколов TACACS и XTACACS: хоть в официальных выпусках и говорится, что всего-то повышена безопасность протокола, но реально весь протокол технически был переписан заново (осталась разве только идеология), поэтому не путайте между собой эти протоколы (в повседневной жизни и в описаниях очень часто оконечный "+" опускают, откуда и появляется неразбериха; более старый протокол TACACS практически никто сейчас не использует, поэтому если вы видите ссылку на протокол TACACS скорее всего кто-то проигнорировал "+" и речь идет о TACACS+). Протокол основан на использовании протокола TCP, поэтому потенциально медленнее RADIUS'а (все-таки установление TCP соединения довольно накладная операция), но за то позволяет вести мультипроцессную обработку запросов (в каждый момент времени могут обслуживаться несколько пользователей). Степень защищености - высокая (зашифровано все тело пакета).
А теперь хотелось бы поподробнее сравнить возможности обоих протоколов.
Для начала таблица:
RADIUS | TACACS+ | |
Базовый протокол | UDP | TCP |
Поддерживаемые сервисы | Authentication Accounting |
Authentication Authorization Accounting |
Безопасность | Шифруется пароль | Шифруется все тело пакета |
Поддерживаемые типы аутентификации | Clear text (ASCII, PAP) CHAP |
Clear text (ASCII, PAP) CHAP ARAP |
Возможность перенаправления запроса | Есть | Нет |
Базовый протокол
RADIUS базируется на протоколе UDP (пакетная передача данных, без гарантии передачи пакета). Отсюда сразу вытекает тот факт, что RADIUS-клиент на любой запрос должен дожидаться ответа от сервера в течении некоторого времени (timeout'а) и при в случае отсутствии оного перепослать пакет еще раз. Собственно TACACS+ клиент тоже должен дожидаться всегда ответа от сервера, да вот только гарантией передачи пакета он не озабочен. Зато у TACACS+ имеет место другой момент: для обработки какого-либо запроса TACACS+ сервер и клиент должны установить TCP-соединение (даже если весь процесс будет состоять из посылки и приема 2-ух небольших пакетов!), а с точки зрения времени это довольно накладный процесс (кстати именно поэтому TACACS+ по определению относительно медленен). На основе приведенного примера, можно сразу сказать, что RADIUS будет более эффективен в сетях, где процент потерянных пакетов менее 5-10 %; в других сетях лучше использовать TACACS+.
Поддерживаемые сервисы
Протокол RADIUS не поддерживает авторизацию. То есть RADIUS есть смысл использовать только там, где заранее известно какой сервис предоставляет конкретный RADIUS-клиент. У TACACS+ заложена поддержка авторизации, да вот только количество авторизуемых сервисов тоже довольно ограничено в текущей версии (правда есть возможность расширения): "slip", "ppp", "arap", "shell", "tty-daemon", "connection", "system" и "firewall". То есть вот как получается: для доступа к какому-либо сервису RADIUS обрабатывает один запрос (аутентификацию - запрос, ответ), а TACACS+ - два (аутентификацию и авторизацию), но при этом при использовании TACACS+ есть возможность получить доступ к другому сервису.
Здесь первым делом надо отметить, что в данной концепции ПОДРАЗУМЕВАЕТСЯ, что 3А-сервис доверяет клиенту, иначе все выкладки не имеют смысла. Следовательно, при написании любого 3A-сервера (будь то TACACS+ или RADIUS) нужно учитывать и проверять каждый приходящий запрос на состоятельность (то есть каждый 3А сервер должен иметь в своем распоряжении таблицу IP-адресов известных клиентов). И в TACACS+, и в RADIUS протоколе есть такое понятие как разделяемый секрет (shared secret): это последовательность символов (обычно печатных) произвольной длины, которая используются и клиентом и сервером для шифрования пакетов или паролей. Следовательно, в данную таблицу добавляются еще разделяемые секреты для каждого состоятельного клиента.
Протокол TACACS+ не допускает наличия брэндмауэра между клиентом и сервером в принципе. Дело все в том, что найти соответствующий разделяемый секрет для обработки пришедшего запроса можно только по IP-адресу клиента, а при работе через брэндмауер запрос будет приходить всегда с IP брэндмэура. RADIUS - другое дело. Там IP адрес клиента содержится еще и в самом пакете, поэтому какой адрес использовать 3А серверу (реальный или внутрипакетный) для поиска разделяемого секрета решать вам, но возможность работы через брэндмауэр есть.
Теперь насчет шифрования: в RADIUS'е шифруется только Clear Text пароли, весь остальной пакет остается "открытым" (с точки зрения безопасности даже имя пользователя является очень важным параметром). В TACACS+ открытым является только заголовок пакета (не несущий никакой ценной информации), а все тело зашифровано. Но у TACACS+, как мне кажется, так же есть одна небольшая "дырочка". Состоит она в следующем: TACACS+ поддерживает авторизацию, называемую в документации outbound (т.е. внешняя), то есть само решение аутентифицировать пользователя или нет, принимает клиент. При этом TACACS+ сервер должен прислать клиенту пароль (в том числе есть возможность запроса у сервера Clear Text пароля), а клиент будет сравнивать этот пароль с введенным пользователем. Вот и получается , что если выполняются следующие условия:
- TACACS+ сервер поддерживает эту опцию
- TACACS+ сервер не проверяет исходящие адрес приходящих запросов (а даже если и проверяет, IP адреса могут быть поддельными)
- Серьезный хакер (в оригинале кулхацкер) пронюхал разделяемый секрет (что возможно, поскольку он лежит в открытом виде и на сервере и на клиенте)
- Тот же серьезный хакер пронюхал некоторое кол-во имен пользователей (что в принципе не сложно)
То, этот самый недобросовестный взломщик может элементарно узнать пароли из TACACS+ сервера. Как с этим бороться пусть каждый решает сам (я советую просто не поддерживать данный тип авторизации, поскольку такая возможность по определению является небезопасной - отдавать пароли из базы "наружу"!).
Поддерживаемые типы аутентификации
В этом смысле TACACS+ поддерживает на один тип больше RADIUS'а. Ну с Clear Text аутентификацией все ясно - пароль он и есть пароль, а CHAP и ARAP? Кто не понимает идеи этих типов аутентификации объясню: идея в том, что бы Clear Text пароль ни в каком виде никогда не передавался бы через сеть. А именно: при аутентификации пользователя клиент посылает пользовательской машине некий Challenge (произвольная случайная последовательность символов), пользователь вводит пароль и с этим Challengе'ем пользовательская машина производит некие шифрующий действия используя введенный пароль (как правило это обыкновенное шифрование по алгоритму MD5 - RFC-1321). Получается Response. Этот Response отправляется назад клиенту, а клиент все в совокупности (Challenge и Response) отправляет на аутентификацию 3A-серверу. Тот (так же имея на своей стороне пользовательский пароль) производит те же самые действия с Challeng'ем и сравнивает свой Response с полученным от клиента: сходиться - пользователь аутентифицирован, нет - извиняйте. Таким образом, Clear Text пароль знают только сам пользователь и 3А-сервер и пароль открытым текстом не "ходит" через сеть и не может быть взломан.
Возможность перенаправления запроса
В TACACS+ такая возможность просто отсутствует. RADIUS-протокол же имеет такую возможность: RADIUS-сервер должен уметь перенаправлять запрос к другому RADIUS-серверу. Если вдуматься возможность очень полезная: предположим, что мы продаем Интернет или услуги телефонной связи через Интернет (VoIP) и наша единая система имеет представителей в регионах. Купил Петя у нас карточку в городе Саратове и поехал с ней в город Тулу (где так же есть наши представители). Хочет он в Туле воспользоваться нашим сервисом и набирает номер, а потом свое имя и пароль (если это доступ к Интернет) или просто несколько цифр кода (если это VoIP). Местный Тулький RADIUS-сервер смотрит на введенные значения и понимает: - "пользователь-то наш, да вот только я о нем ничего не знаю, спрошу как я у того кто знает" - и перенаправляет запрос к Саратовскому RADIUS-серверу. Тот аутентифицирует нашего Петю, ну и далее обратный путь пакета и поведение Тульского сервера понятно. Таким образом RADIUS позволяет проектировать гибкую распределенную систему.
Поддерживаемые типы аутентификации
В этом смысле TACACS+ поддерживает на один тип больше RADIUS'а. Ну с Clear Text аутентификацией все ясно - пароль он и есть пароль, а CHAP и ARAP? Кто не понимает идеи этих типов аутентификации объясню: идея в том, что бы Clear Text пароль ни в каком виде никогда не передавался бы через сеть. А именно: при аутентификации пользователя клиент посылает пользовательской машине некий Challenge (произвольная случайная последовательность символов), пользователь вводит пароль и с этим Challengе'ем пользовательская машина производит некие шифрующий действия используя введенный пароль (как правило это обыкновенное шифрование по алгоритму MD5 - RFC-1321). Получается Response. Этот Response отправляется назад клиенту, а клиент все в совокупности (Challenge и Response) отправляет на аутентификацию 3A-серверу. Тот (так же имея на своей стороне пользовательский пароль) производит те же самые действия с Challeng'ем и сравнивает свой Response с полученным от клиента: сходиться - пользователь аутентифицирован, нет - извиняйте. Таким образом, Clear Text пароль знают только сам пользователь и 3А-сервер и пароль открытым текстом не "ходит" через сеть и не может быть взломан.
Возможность перенаправления запроса
В TACACS+ такая возможность просто отсутствует. RADIUS-протокол же имеет такую возможность: RADIUS-сервер должен уметь перенаправлять запрос к другому RADIUS-серверу. Если вдуматься возможность очень полезная: предположим, что мы продаем Интернет или услуги телефонной связи через Интернет (VoIP) и наша единая система имеет представителей в регионах. Купил Петя у нас карточку в городе Саратове и поехал с ней в город Тулу (где так же есть наши представители). Хочет он в Туле воспользоваться нашим сервисом и набирает номер, а потом свое имя и пароль (если это доступ к Интернет) или просто несколько цифр кода (если это VoIP). Местный Тулький RADIUS-сервер смотрит на введенные значения и понимает: - "пользователь-то наш, да вот только я о нем ничего не знаю, спрошу как я у того кто знает" - и перенаправляет запрос к Саратовскому RADIUS-серверу. Тот аутентифицирует нашего Петю, ну и далее обратный путь пакета и поведение Тульского сервера понятно. Таким образом RADIUS позволяет проектировать гибкую распределенную систему.
(с) Сетевые решения
Максим Мокроусов
Владислав Пинженин
Максим Мокроусов
Владислав Пинженин
я скажу огромное спасибо!
ОтветитьУдалитьСпасибо-о за простое изложение.
ОтветитьУдалить