doc - goshaQ/iu-practice-as GitHub Wiki
##Создание и настройка HotSpot на оборудовании MikroTik Сервис HotSpot доступный на оборудовании MikroTik используется для ограничения сетевого трафика неавторизованным в системе пользователям, принудительного перенаправления на страницу авторизации при попытке подключения к web-ресурсу, контроля доступа к сетевым ресурсам согласно групповой политике предопределенной для конкретного пользователя и сбора различной статистики о каждом из пользователей системы.
Пункт HotSpot в меню RouterOS (/ip hotspot
) содержит в себе несколько подпунктов, просмотреть которые можно нажав на клавишу Tab. Ниже перечислено краткое описание каждого из подпунктов:
-
/ip hotspot active
: список авторизованных на данный момент пользователей. Список носит информативный характер, в нем ничего нельзя изменить. -
/ip hotspot cookie
: список cookie-файлов, отправленных клиентам, авторизованным с помощью метода "cookie". Cookie-файлы нельзя изменять, однако их можно удалять. -
/ip hotspot host
: список компьютеров, подключенных к системе. Список носит информативный характер, в нем ничего нельзя изменить. -
/ip hotspot ip-binding
: подпункт позволяет настраивать статичные One-to-One NAT преобразования, разрешать доступ к сетевым-ресурсам без авторизации для конкретных пользователей, а также запрещать конкретные хосты и подсети. -
/ip hotspot service-port
: иногда One-to-One NAT преобразования проходят некорректно из-за несовместимости некоторых протоколов. Для сохранения целостности этих протоколов необходимо использовать helper modules. -
/ip hotspot profile
: список доступных профилей HotSpot. Профили можно создавать/редактировать/удалять. Список и описание всех параметров для редактирования здесь. -
/ip hotspot user
: содержит в себе список локальных пользователей, хранимых на оборудовании MikroTik, и их локальные профили. Пользователей и их профили можно создавать/редактировать/удалять. Список и описание всех параметров для редактирования пользователей здесь., для редактирования профилей здесь. -
/ip hotspot walled-garder
: список web-ресурсов, доступ к которым разрешен не зависимо от того, авторизован пользователь в системе или нет. Web-ресурсы можно добавлять/удалять. Список и описание всех параметров для редактирования здесь.
В дальнейшем подразумевается, что работа происходит в директории /ip hotspot>
Самый простой способ создать HotSpot выполнить setup
и запустить мастер конфигурации.
[admin@MikroTik] /ip hotspot> setup
# Выберите интерфейс, на котором будет запущен HotSpot (В качестве интерфейса может выступать
# switch, bridge, wlan (AP либо Virtual AP), а также отдельно взятый порт)
hotspot interface: __INTERFACE__
# Укажите сеть, в которой будет работать HotSpot.
local address of network: __ADDRESS__
masquerade network: __YES/NO__
# Назначьте пул адресов, который будет выдаваться для устройств, подключенных к HotSpot.
address pool of network: __ADDRESSPOOL__
# Укажите путь к SSL-сертификату (необходимо для перехвата https-трафика
# неавторизованных пользователей для дальнейшего перенаправления на страницу авторизации)
select certificate: __CERNAME__
# Выберете SMTP-сервер (если не нужен, оставьте значение по умолчанию)
ip address of smtp server: __SMTPIP__
# Настройте DNS
dns servers: __DNSSERV__
# Введите имя DNS (необязательно)
dns name: __DNSNAME__
# Создайте локального пользователя HotSpot (после того, как будет настроен AAA-
# сервер необходимо будет удалить этого пользователя)
name of local hotspot user: __USRNAME__
password for the user: __USRPASS__
[admin@MikroTik] /ip hotspot>
После того, как HotSpot создан, необходимо настроить автоматически созданный для него profile
# перейдите в подпункт меню profile
[admin@MikroTik] /ip hotspot> profile
# узнайте имя только что созданного profile, учитывая, что параметр hotspot-address должен
# равняться назначенному ip-адресу HotSpot.
[admin@MikroTik] /ip hotspot profile> print
# параметр login-by отвечает за метод аутентификации.
# http-chap - CHAP challenge-response метод с использованием hash-алгоритма MD5 для защиты передачи пароля
# mac-cookie - сохраняет данные для авторизации, опираясь на mac-адрес пользователя
# https - организует обмен данных между клиентом и серверов по зашифрованному SSL-туннелю
[admin@MikroTik] /ip hotspot profile> set __PROFNAME__ login-by=http-chap,mac-cookie,https
# следующей командой укажите использование RADIUS для аутентификации и учета
[admin@MikroTik] /ip hotspot profile> set __PROFNAME__ use-radius=yes radius-accounting=yes nas-port-type=__PORTTYPE__
[admin@MikroTik] /ip hotspot profile>
Если в дальнейшем планируется использовать авторизацию через Active Directory, обязательно заменить ...http-chap...
на ...http-pap...
!
######################################################################################################################################################
##Настройка AAA-сервера FreeRADIUS и его подключение к оборудованию MikroTik RADIUS - сетевой протокол, предназначенный для обеспечения централизованной аутентификации, авторизации и учёта пользователей, подключающихся к различным сетевым службам.
- авторизация - процесс проверки AV пар пользователя. В ходе авторизации могут также устанавливаться определённые AV пары(для сервера freeradius), смысл авторизации заключается в проверке достаточности информации, предоставленной пользователем, для того, чтобы пользователь мог пройти аутентификацию.
- аутентификация - процесс опроса внешних источников данных radius сервером для сравнения AV пар, предоставленных пользователем, и пар, хранящихся во внешнем источнике; выбор метода аутентификации определяется AV парой Auth-Type.
- учет - процесс посылки NAS пакетов на radius-сервер, которые содержат информацию о текущем соединении(время, количество переданного трафика и так далее), на основании этой информации можно собирать различную статистику и строить отчеты.
Пакет FreeRADIUS может быть установлен выполнением следующей команды:
yum install freeradius freeradius-utils
Добавьте сразу FreeRADIUS сервер в автозапуск, добавив следующую строку в конец файла /etc/rc.local:
radiusd
После установки пакета FreeRADIUS необходимо провести настройку конфигурационных файлов. Конфигурационные файлы хранятся в директории /etc/raddb и отвечают за работу отдельных механизмов FreeRADIUS сервера.
Общие настройки сервера размещаются в файле radiusd.conf:
radiusd.conf
prefix = /usr
exec_prefix = /usr
sysconfdir = /etc
localstatedir = /var
sbindir = /usr/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
# имя FreeRADIUS сервера
name = radiusd
# расположение файлов конфигурации
confdir = ${raddbdir}
modconfdir = ${confdir}/mods-config
certdir = ${confdir}/certs
cadir = ${confdir}/certs
run_dir = ${localstatedir}/run/${name}
db_dir = ${localstatedir}/lib/radiusd
# расположение rlm_* модулей
libdir = /usr/lib64/freeradius
# расположение PID-файла для FreeRADIUS сервера
pidfile = ${run_dir}/${name}.pid
# максимальное время обработки запроса(в секундах), по истечение которого
# клиенту будет послан пакет, сигнализирующий разрыв соединения
max_request_time = 30
# время ожидания отправленного ответа на NAS(в секундах), по истечение
# которого он удаляется из cache-файла
cleanup_delay = 5
# максимальное количество соединений для данного сервера. Обычно число
# получается умножением числа NAS в сети на 256. Например, для 4 клиентов,
# значение будет 4*256=1024
max_requests = 1024
# записывать ли в журнальный файл доменное имя узла или только его IP-адрес
# например, www.freeradius.org (on) или 206.47.27.232 (off).
hostname_lookups = no
# секция, отвечающая за журналирование
log {
# назначение журнальных сообщений
destination = files
# расположение журнального файла
file = ${logdir}/radius.log
# заносить ли в файл журналирования данные о полном имени пользователя
stripped_names = no
# заносить ли в файл журналирования информацию о запросах на аутентификацию
auth = no
# заносить ли в лог данные о переданных паролях(неправильных и правильных
# соответственно)
auth_badpass = no
auth_goodpass = no
# сообщение, которое должно вернуться, если превзойден лимит одновременных
# пользователей для одного аккаунта
msg_denied = "You are already logged in - access denied"
}
# программа для выполнения параллельных проверок
checkrad = ${sbindir}/checkrad
# секция, отвечающая за безопасность
security {
# максимальное число AV пар в пакете. Если число пар больше, то
# пакет не обрабатывается. Если указать данный параметр равным
# нулю, то будут обрабатываться любые пакеты.
max_attributes = 200
# пакет отказа доступа может быть отправлен с некоторой задержкой(в
# секундах). Такое поведение предотвращает применение DoS атаки.
# Если же указать значение, равное нулю, то отказ будет
# посылаться без задержки.
reject_delay = 1
# посылать ответ на запрос NAS о статусе сервера.
status_server = yes
}
# файл, отвечающий за конфигурацию клиентов FreeRADIUS сервера
$INCLUDE clients.conf
# секция, отвечающая за конфигурацию пула потоков FreeRADIUS сервера
thread pool {
# начальное количество серверов для запуска
start_servers = 5
# максимальное итоговое количество запущенных серверов
max_servers = 32
# нижняя и верхняя граница для запасных серверов, ожидающих запрос
# если их меньше нижней границы - создаются новые сервера
# если их больше верхней границы - отключаются простаивающие сервера
min_spare_servers = 3
max_spare_servers = 10
}
# секция, отвечающая за доступные модули
modules {
$INCLUDE mods-enabled/
}
# секция, отвечающая за модуль политик
policy {
$INCLUDE policy.d/
}
# файл содержащий виртуальные серверы для запуска при старте FreeRADIUS
$INCLUDE sites-enabled/
Конфигурация клиентов производится в файле clients.conf:
clients.conf
# в данном файле описываются клиенты (NAS устройства). Вначале идёт определение клиента:
# ip-адрес, затем идёт список AV пар для данного клиента, заключённый в фигурные скобки. Также
# можно определять клиентов для некоторой подсети, указывая вместо ip-адреса диапазон ip-адресов.
client __CLIENTIP__ {
# Пароль для идентификации клиента и обмена с ним данными. Данным
# ключом также осуществляется проверка неизменности передаваемых
# пакетов(подпись).
secret = __RADSCRT__
# Поле типа NAS, может принимать следующие значения:
# cisco
# computone
# livingston
# max40xx
# multitech
# netserver
# pathras
# patton
# portslave
# tc
# usrhiper
# other
nastype = __NASTYPE__
}
client __SUBNETIP/MASK__ {
...
}
Для завершения настройки и приведения изменений в силу необходимо перезапустить FreeRADIUS сервер
# завершите процесс FreeRADIUS, если он был запущен
ps -ax | grep radiusd
kill __PID__
# запустите FreeRADIUS
radiusd
После того, как конфигурационные файлы FreeRADIUS сервера настроены следует провести попытку авторизации на HotSpot с использованием данных пользователя, хранимых на сервере FreeRADIUS, с целью убедиться, что все настроено правильно.
Users основной файл,где хранятся данные о пользователях. Он расположен в директории /etc/raddb. Описание идёт так: вначале идёт без отступа имя пользователя, затем, отступая на табуляцию, идут AV пары(первой парой идёт пароль). Создайте пользователя HotSpot на серевре FreeRADIUS:
users
test Cleartext-Password := "test"
Теперь подключитесь к оборудованию MikroTik и добавьте новый RADIUS сервер. Для этого выполните:
# перейдите в директорию RADIUS
[admin@MikroTik] /radius
# добавьте новый RADIUS сервер.
# параметр service отвечает за сервис, для авторизации в котором будет использоваться RADIUS сервер
# параметр address должен равняться ip-адресу FreeRADIUS сервера
# параметр secret должен равняться соответствующему клиенту секретному слову в clients.conf
[admin@MikroTik] /radius> add service=hotspot address=__RADADDR__ secret=__RADSCRT__ disabled=no
Поскольку локальные пользователи HotSpot не нужны больше, удалите их из соображений безопасности:
# перейдите в директорию RADIUS
[admin@MikroTik] /radius hotspot user
# выведите список всех текущих локальных пользователей HotSpot
[admin@MikroTik] /radius hotspot user> print
# удалите по одному каждого пользователя из выведенного списка выше
[admin@MikroTik] /radius hotspot user> remove __USRNAME__
Теперь авторизуйтесь на HotSpot. Для этого откройте web-браузер и попытайтесь подключиться к любому web-ресурсу. Вместо ожидаемой страницы вы должны попасть на страницу авторизации HotSpot, где введя данные пользователя, хранимые на сервере FreeRADIUS, получите доступ в интернет и будете перенаправлены на ожидаемую страницу.
######################################################################################################################################################
Помните о firewall
По умолчанию в дистрибутиве CentOS включен firewall, который может блокировать входящий интернет трафик. Убедитесь, что UDP порты 1812, 1813 и 9996 открыты для внешних источников. Выполнив следующую команду, проверьте цепь INPUT:
iptables -L
Если запрос на необходимые UDP порты не обрабатывается как исключение, добавьте следующие правила в firewall:
# __REJRUL__ - номер последнего правила в цепи INPUT
# порт, который прослушивает FreeRADIUS для получения запроса на авторизацию
iptables -I INPUT __REJRUL__ -p udp -m udp --dport 1812 -j ACCEPT
# порт, который прослушивает FreeRADIUS для получения данных учета
iptables -I INPUT (__REJRUL__ + 1) -p udp -m udp --dport 1813 -j ACCEPT
# порт, который прослушивает NetFlow коллектор
iptables -I INPUT (__REJRUL__ + 2) -p udp -m udp --dport 9996 -j ACCEPT
######################################################################################################################################################
##Использование PostgreSQL как хранилище пользователей HotSpot FreeRADIUS может подключаться к SQL базе данных для того, чтобы получать информацию о пользователях. Хранить большое число пользователей HotSpot удобнее в SQL базе данных, ведь файл users не предназначен для такой цели, поэтому необходимо настроить FreeRADIUS для работы с SQL базой данных.
Предположим, что PostgreSQL еще не установлен на удаленной машине, где развернут FreeRADIUS сервер. Сначала необходимо будет установить, а затем настроить PostgreSQ с целью сделать его доступным для использования FreeRADIUS.
Установите пакет PostgreSQL выполнением следующей команды:
yum install postgresql95 postgresql95-server
Откройте файл pg_hba.conf, расположенный в каталоге /var/lib/pgsql/9.5/data, найдите и отредактируйте следующую строку:
hostall all 127.0.0.1/32 ̶p̶e̶e̶r md5
Необходимо создать пользователя __PGUSRNAME__
и базу данных __DBNAME__
в PostgreSQL:
# переключитесь на пользователя PostgreSQL по умолчанию
su - postgres
# создайте пользователя __PGUSRNAME__ без прав суперпользователя
createuser radius --no-superuser --no-createdb --no-createrole -P
# создайте базу данных __DBNAME__, в ней будут хранится данные пользователей HotSpot, данные учета и т.д.
createdb __DBNAME__ --owner=__PGUSRNAME__
exit
Теперь необходимо установить sql модуль, отвечающий за подключение к PostgreSQL:
yum install freeradius-postgresql
Экспортируйте в базу данных __DBNAME__
схему, содержащуюся в установленном sql модуле:
cd /etc/raddb/mods-config/sql/main/postgresql
psql -U __PGUSRNAME__ __DBNAME__ < schema.sql
Настроим конфигурационный файл sql модуля, находящийся в директории /etc/raddb/mods-available:
sql {
# подмодуль для выполнения sql запросов
driver = "rlm_sql_postgresql"
# диалект SQL, который планируется использовать
dialect = "postgresql"
# информация для подключения к PostgreSQL
server = "localhost"
port = 5432
login = "__PGUSRNAME__"
password = "__PGUSRPASS__"
# база данных предназначенная для FreeRADIUS
radius_db = "__DBNAME__"
# таблицы, содержащие журнальные записи, сгенерированные после того,
# как пользователь вошел и вышел на HotSpot
acct_table1 = "radacct"
acct_table2 = "radacct"
# таблица, содержащая данные, полученные после аутентификации
postauth_table = "radpostauth"
# таблицы, содержащие данные для проверки AV-пар при аутентификации
authcheck_table = "radcheck"
groupcheck_table = "radgroupcheck"
# таблицы, содержащие данные для ответа после прохождения пользователем
# аутентификации
authreply_table = "radreply"
groupreply_table = "radgroupreply"
# таблица, содержащая информацию о принадлежности пользователя к группе
usergroup_table = "radusergroup"
# стоит ли удалять просроченные сессии, если checkrad заметил
# повторную авторизацию
delete_stale_sessions = yes
# настройка пула соединений
pool {
# количество соединение при старте
start = 5
# минимальное количество соединений, которое следует держать открытыми
min = 4
# максимальное количество соединений
max = ${thread[pool].max_servers}
# количество запасных соединений, которые могут случайно закрыться
spare = 3
# количество использований соединения, перед тем, как оно закроется
#(0 - бесконечность)
uses = 0
# время существования соединения в секундах (0 - бесконечность)
lifetime = 0
# время в секундах простаивания соединения свободным, после
# которого оно закроется
idle_timeout = 60
}
# стоит ли хранить данные о клиентах FreeRADIUS в базе данных.
# Рекомендуется использовать только если таких клиентов большое количество.
# После того, как атрибуту read_clients присвоено значение yes, следует
# удалить всех клиентов из файла clients.conf и добавить их по одному в базу
# данных следующим sql запросом:
# INSERT INTO nas VALUES (NULL , '__CLIENTIP__', '__SHORTNAME__', '__NASTYPE__', NULL,
# '__RADSCRT__', NULL , NULL , '__DESCRIPTION__');
read_clients = __YES/NO__
# таблица, содержащая информацию о клиентах FreeRADIUS
client_table = "nas"
# чтение специфичных sql запросов для указанного диалекта
$INCLUDE ${modconfdir}/${.:name}/main/${dialect}/queries.conf
}
Убедитесь, что sql модуль подключен:
# выведите список всех подключенных модулей
ls /etc/raddb/mods-enabled
# если в выведенном списке не встречается упоминание sql модуля, добавьте
# его вручную, создав символьную ссылку в директории /etc/raddb/mods-enabled
ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled
Для завершения настройки и приведения изменений в силу необходимо перезапустить FreeRADIUS сервер.
Модуль sql подключен, теперь следует провести попытку авторизации на HotSpot с использованием данных пользователя, хранимых в базе данных PostgreSQL, с целью убедиться, что все настроено правильно.
Добавьте пользователя HotSpot в базу данных PostgreSQL
# запустите терминальную программу psql, исполняющую sql запросы
psql -U __PGUSRNAME__
# добавьте запись о пользователе
=>INSERT INTO radcheck VALUES (NULL, 'dbtest', 'Cleartext-Password', ':=', 'dbtest');
=>\q
Авторизуйтесь на HotSpot с использованием данных пользователя, хранимых в базе данных PostgreSQL.
######################################################################################################################################################
##Учет сетевого трафика посредством NetFlow Если говорить о сетевом трафике, данные учета, агрегируемые FeeRADIUS, не достаточно информативны, поэтому в системе они отдельно агрегируются с оборудования MikrtoTik по протоколу NetFlow. Ниже приведен список атрибутов, представляющих собой интерес, значение которых можно получить таким образом:
- UNIX_SECS - временная отметка, указывающая на момент передачи данных
- DPKTS - количество пакетов, переданных/полученных за промежуток
- DOCTETS - количество байтов, переданных/полученных за промежуток
- SRCADDR - IP-адрес источника
- DSTADDR - IP-адрес назначения
- SRCPORT - исходящий порт
- DSTPORT - порт назначения
- PROT - протокол передачи данных
NetFlow имеет два основных компонента:
- Cенсор: MikroTik оборудование. Собирает статистику по проходящему через него трафику.
- Коллектор: утилита flow-capture. Собирает получаемые от сенсора данные и сохраняет их в файл.
Настройка сенсора:
Включите опцию Traffic-Flow на оборудовании MikroTik:
[admin@MikroTik] /ip traffic-flow
# атрибут cache-entries отвечает за количество потоков, которые могут находиться
# в памяти устройства одновременно
[admin@MikroTik] /ip traffic-flow> set enabled=yes cache-entries=4M
Укажите IP-адрес и порт хоста, который будет принимать данные отправляемые Traffic-Flow:
[admin@MikroTik] /ip traffic-flow> target
[admin@MikroTik] /ip traffic-flow target> add address=__IPADDR__:9996 version=5
На этом все, теперь оборудование MikroTik будет собирать данные о трафике и отправлять их коллектору.
Настройка коллектора:
Скачайте и распакуйте в домашнюю директорию CentOS набор утилит flow-tools:
wget storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/flow-tools/flow-tools-0.68.5.1.tar.bz2
tar xfj flow-tools*
Перейдите в директорию с распакованными исходниками и выполните установку:
./configure --with-postgresql=/usr/pgsql-9.5/bin/pg_config
make
make install
Создайте директорию, где будут хранится временные файлы с агрегированными данными:
mkdir /var/flows
Запустите коллектор flow-capture из набора утилит flow-tools
# флаг -w указывает на директорию, куда коллектор будет сохранять полученные данные в виде файла.
# __DSTIP__ и __SRCIP__ указывают на ip-адрес получателя и ip-адрес отправителя соответственно
# (можно указать значение 0, что эквивалентно диапазону 0.0.0.0/32)
/usr/local/flow-tools/bin/flow-capture -w /var/flow/ -N 0 __DSTIP__/__SRCIP__/9996
Для того, чтобы добавить коллектор flow-capture в автозапуск, необходимо отредактировать файл /etc/rc.local, добавив в конец файла строку, которая запускает коллектор, и сделать его исполняемым следующей командой:
chmod +x /etc/rc.d/rc.local
На этом все, теперь коллектор flow-capture будет получать данные о трафике от оборудования MikroTik и сохранять их с периодичностью в 15 минут в новый файл в директории /var/flow.
Хранить данные, получаемые по протоколу NetFlow удобнее в базе данных, поскольку так упрощается работа с ними: построение выборок, создание отчетов и так далее. Следуйте инструкциям ниже, чтобы настроить экспорт данных о сетевом трафике, которые коллектор сохранил в файл, в базу данных.
Создайте таблицу netdata
в __DBNAME__
, в которой будут хранится данные учета о сетевом трафике:
psql -U __PGUSRNAME__
=>CREATE TABLE netdata (
-> unix_secs BIGINT NOT NULL,
-> dpkts BIGINT,
-> doctets BIGINT,
-> srcaddr INET NOT NULL,
-> dstaddr INET NOT NULL,
-> srcport INTEGER,
-> dstport INTEGER,
-> prot SMALLINT
->);
=>\q
Для экспорта данных, хранимых в файле, в базу данных создайте bash-скрипт exportToPostgreSQL.sh:
exportToPostgreSQL.sh
#!/bin/bash
#укажите директории, где находятся временные flow-файлы и flow-tools
flowdir='/var/flow'
tooldir='/usr/local/flow-tools/bin'
#укажите данные для подключения к PostgreSQL
usrname='__PGUSRNAME__'
pass='__PGUSRPASS__'
host='127.0.0.1'
port='5432'
dbname='__DBNAME__'
table='netdata'
#сформируйте параметры для sql запрос
file=$(ls $flowdir/ | grep 'ft-*' | head -1)
maskFields='UNIX_SECS,DPKTS,DOCTETS,SRCADDR,DSTADDR,SRCPORT,DSTPORT,PROT'
#если переменная $file не пуста - экспортируем данные в базу данных и удаляем ненужный файл
if [ ! -z $file ]
then
$tooldir/flow-export -f5 -m$maskFields -u"$usrname:$pass:$host:$port:$dbname:$table" < $flowdir/$file
rm $flowdir/$file
fi
Сделайте созданный bash-скрипт исполняемым:
chmod +x exportToPostgreSQL.sh
Добавьте bash-cкрипт в список задач cron, чтобы он выполнялся с периодичностью в 10 минут, вставив следующую строку в конец файла /etc/crontab:
*/10 * * * * root __PATHTOSCRIPT__/exportToPostgreSQL.sh
Запустите службу cron и добавьте ее в автозапуск:
/sbin/service crond start
chkconfig crond on
######################################################################################################################################################
##Использование Actieve Directory как хранилище пользователей HotSpot Конфигурирование FreeRADIUS сервера для использования Active Directory как хранилище пользователей HotSpot состоит из двух шагов:
- конфигурирование Samba сервера и подключение к домену Active Directory
- конфигурирование FreeRADIUS сервера для использования модуля
ntlm_auth
для аутентификации пользователей
Конфигурирование Samba:
Первым делом необходимо установить пакеты Samba и Winbind:
yum install samba samba-winbind samba-winbind-modules
Конфигурация Samba и Winbind производится в файле smb.conf, который расположен в директории /etc/samba:
smb.conf
[global]
# поддомен, выделенный для AD
workgroup = __ADSUBDOM__
# данные для журналирования
log file = /var/log/samba/log.%m
max log size = 50
# параметр, указывающий на метод аутентификации
security = ADS
# механизм для хранения информации о пользователях
passdb backend = smbpasswd
# url по которому доступен AD
realm = __ADURL__
# использовать ли шифрование при передачи паролей между сервером и клиентом
encrypt passwords = yes
# запретите samba становится контроллером AD
domain master = no
local master = no
preferred master = no
domain logons = no
# отключите поддержку принтеров
load printers = no
show add printer wizard = no
printcap name = /dev/null
# разрешите winbind использовать enum для пользователей и групп
winbind enum users = yes
winbind enum groups = yes
# можно ли winbind управлять пользователями без доменной части в имени пользователя
winbind use default domain = yes
# диапазон выдачи внутренних id
idmap uid = 600 - 20000
idmap gid = 600 - 20000
Запустите службу winbind:
winbindd start
Добавьте службу winbind в автозапуск, добавив строку выше в конец файла /etc/rc.local .
Отредактируйте /etc/resolv.conf, определив Active Directory как DNS сервер:
resolv.conf
...
search edu.innopolis.ru
domain edu.innopolis.ru
nameserver __ADIPADDR__
Подключите Samba сервер к домену Active Directory:
net ads join -U Administrator
Настройте доступ пользователю, который запускает FreeRADIUS сервер:
chgrp radiusd /var/cache/samba/winbindd_privileged
Конфигурирование FreeRADIUS:
FreeRADIUS включает в себя файл, называемый ntlm_auth в директории /etc/raddb/mods-available. Это файл содержит в себе exec секцию, называемую ntlm_auth. Отредактируйте ее, указав путь к утилите ntlm_auth, входящей в состав Samba сервера:
ntlm_auth
exec ntlm_auth {
wait = yes
program = "/usr/bin/ntlm_auth --request-nt-key --domain=__ADURL__ --username=%{mschap:User-Name} --password=%{User-Password}"
}
Отредактируйте файлы default и inner-tunnel, расположенныe в каталоге /etc/raddb/sites-available, чтобы добавить новый способ аутентификации через AD:
default/inner-tunnel
...
# секция, отвечающая за выбор метода аутентификации
authorize {
...
#
pap
# если метод аутентификации не определен, назначьте аутентификацию используя AD
if(!control:Auth-Type) {
update control {
Auth-Type = "ntlm_auth"
}
}
}
# секция, отвечающая за аутентификацию
authenticate {
...
Auth-Type MS-CHAP {
mschap
}
# вызовите модуль ntlm_auth, если был назначен тип аутентификации ntlm_auth
Auth-Type NTLM_AUTH {
ntlm_auth
}
...
}
...
Для завершения настройки и приведения изменений в силу необходимо перезапустить FreeRADIUS сервер.
Модуль, отвечающий за аутентификацию используя Active Directory, подключен, теперь следует провести попытку авторизации на HotSpot с использованием данных пользователя, хранимых в Active Directory, с целью убедиться, что все настроено правильно.
######################################################################################################################################################
##Создание и настройка групп пользователей HotSpot Разграничение групп пользователей по уровням доступа в интернет реализуется за счет поддержки HotSpot функции user profile. Принцип работы заключается в том, что после аутентификации FreeRADIUS сервер сообщает HotSpot, к какой группе принадлежит пользователь, и HotSpot применяет необходимые ограничения, описанные для соответствующей группы в user profile, на пользователя. Таким образом, сначала необходимо создать и настроить группы пользователей на оборудовании MikroTik, затем настроить FreeRADIUS так, чтобы после аутентификации он сообщал о принадлежности к группе.
Создайте в firewall оборудования MikroTik цепи, отвечающие за фильтрацию входящего/исходящего трафика, для каждой группы пользователей:
[admin@MikroTik] /ip firewall filter
# укажите переход с цепи forward на цепь hotspot, которая будет содержать правила для
# фильтрации трафика для каждого пользователя в соответствии с его группой пользователя
[admin@MikroTik] /ip firewall filter> add chain=forward action=jump jump-target=hotspot
# ниже перечислены правила, необходимые для инициализации цепей, после настройки которых
# необходимо удалить эти правила
[admin@MikroTik] /ip firewall filter> add chain=guest-input
[admin@MikroTik] /ip firewall filter> add chain=guest-output
[admin@MikroTik] /ip firewall filter> add chain=student-input
[admin@MikroTik] /ip firewall filter> add chain=student-output
[admin@MikroTik] /ip firewall filter> add chain=staff-input
[admin@MikroTik] /ip firewall filter> add chain=staff-output
[admin@MikroTik] /ip firewall filter>
Создайте в user profile группы пользователей HotSpot:
[admin@MikroTik] /ip hotspot user profile
# idle-timeout - интервал, в течении которого пользователь может оставаться неактивным.
# По истечении пользователя выбрасывает из системы
# keepalive-timeout - частота опроса пользователя для проверки, активен он или нет.
# mac-cookie-timeout - интервал, в течении которго mac-cookie действительны
# shared-users - количество одновременных устройств, авторизированных в системе под одним пользователем
# incoming-filter - фильтр на входящий трафик
# outgoing-filter - фильтр на исходящий трафик
# rate-limit - ограничение скорости на upload/download
# при создании HotSpot создается группа admin, которая имеет тип default, куда попадает любой
# пользователь, у которого не определена группа. Измените ее и сделайте группой с низшим уровнем доступа
[admin@MikroTik] /ip hotspot user profile> set admin name=guest idle-timeout=__INTERVAL__ shared-users=1 keepalive-timeout=__INTERVAL__ mac-cookie-timeout=__INTERVAL__ incoming-filter=guest-input outgoing-filter=guest-output rate-limit=10M/10M
[admin@MikroTik] /ip hotspot user profile> add name=student idle-timeout=__INTERVAL__ shared-users=3 keepalive-timeout=__INTERVAL__ mac-cookie-timeout=__INTERVAL__ incoming-filter=student-input outgoing-filter=student-output
[admin@MikroTik] /ip hotspot user profile> add name=staff idle-timeout=__INTERVAL__ shared-users=3 keepalive-timeout=__INTERVAL__ mac-cookie-timeout=__INTERVAL__ incoming-filter=staff-input outgoing-filter=staff-output
# профиль для администратора системы
[admin@MikroTik] /ip hotspot user profile> add name=admin idle-timeout=__INTERVAL__ shared-users=3 keepalive-timeout=__INTERVAL__ mac-cookie-timeout=__INTERVAL__
Принадлежности к группе пользователей должна быть предопределена. В системе, при авторизации, используя SMS, VK или TG, пользователь автоматически попадает в группу guest, что подтверждает запись в базе данных в таблице radusergroup. Однако, если используется авторизация через Active Directory, принадлежность к группе пользователей HotSpot проверяется членством в соответствующей группе AD, то есть сначала необходимо создать группу AD student
и staff
и добавить туда пользователей в соответствии с необходимым уровнем доступа.
Укажите ответ, который должен отправить FreeRADIUS при успешной авторизации через SMS, VK или TG на HotSpot:
psql -U __PGUSRNAME__
# поскольку в базе данных хранятся данные пользователей, принадлежащих к группе guest,
# достаточно указать ответ при успешной авторизации только для этой группы
=>INSERT INTO radgroupreply VALUES (1, 'guest', 'Mikrotik-Group', ':=', 'guest');
\q
Создайте и подключите два новых модуля FreeRADIUS ответственных за проверку принадлежности пользователя к группе Active Directory при авторизации:
cp /etc/raddb/mods-available/ntlm_auth /home
mv /home/ntlm_auth /etc/raddb/mods-available/ntlm_auth.student
ln -s /etc/raddb/mods-available/ntlm_auth.student /etc/raddb/mods-enabled
cp /etc/raddb/mods-available/ntlm_auth /home
mv /home/ntlm_auth /etc/raddb/mods-available/ntlm_auth.staff
ln -s /etc/raddb/mods-available/ntlm_auth.staff /etc/raddb/mods-enabled
Отредактируйте их следующим образом:
ntlm_auth.student
exec ntlm_auth.student {
wait = yes
program = "/usr/bin/ntlm_auth --request-nt-key --domain=EDU.INNOPOLIS.RU --username=%{mschap:User-Name} --password=%{User-Password} --require-membership-of=__ADSUBDOM__\\student"
}
ntlm_auth.staff
exec ntlm_auth.student {
wait = yes
program = "/usr/bin/ntlm_auth --request-nt-key --domain=EDU.INNOPOLIS.RU --username=%{mschap:User-Name} --password=%{User-Password} --require-membership-of=__ADSUBDOM__\\staff"
}
Добавьте два новых способа авторизации и укажите ответ, который должен отправить FreeRADIUS при успешной авторизации через Active Directory на HotSpot, отредактировав файлы default и inner-tunnel, расположенныe в каталоге /etc/raddb/sites-available
default/inner-tunnel
authorize {
...
#
pap
# учтите, что лучше всего располагать проверку на принадлежность к группе в порядку возрастания
# уровня доступа, так, если пользователь состоит одновременно в группах staff и student, он
# получит максимальный уровень доступа для этих двух групп
ntlm_auth.staff {
reject = 1
}
if (ok) {
update control {
Auth-Type = "ntlm_auth"
}
update reply {
Mikrotik-Group := "student"
}
}
ntlm_auth.student {
reject = 1
}
if (ok) {
update control {
Auth-Type = "ntlm_auth"
}
update reply {
Mikrotik-Group := "staff"
}
}
}
Для завершения настройки и приведения изменений в силу необходимо перезапустить FreeRADIUS сервер.