Запретить клиентам FreeRADIUS доступ к сервису из разных локальных сетей с одним и тем же пользователем и паролем
Я имею FreeRADIUS
установлен на моем сервере, а также имеет две локальные сети (или может быть больше), управляемые этим сервером. Скажем, LAN A:192.168.1.0
и LAN B: 192.168.2.0
, я использую FreeRADIUS
в комбинации с postgres
база данных. В моем radcheck
В таблицу я вставил следующую строку:
userbane='myuser', attribute='Password', op=':=', value='mypass'
,
Теперь я хочу позволить клиентам, которые будут запрашивать услуги у моего FreeRADIUS, иметь возможность аутентифицировать себя с этим именем пользователя и паролем, только если они являются частью локальной сети B.
Вопрос: Кто-нибудь может подсказать мне, как это сделать?
Я пытался положить в radcheck
еще один ряд: username='myuser', attribute='NAS-IP-Address', op=':=', value='192.168.2.1'
, но безуспешно.
Любая помощь будет оценена.
2 ответа
Я раньше не использовал базу данных, но при использовании файла users правило выглядело бы примерно так:
myuser Cleartext-Password := "mypass", NAS-IP-Address == "192.168.2.1"
Исходя из этого, я думаю, что вам нужно две записи в radcheck
Таблица:
usernane='myuser', attribute='Password', op=':=', value='mypass'
username='myuser', attribute='NAS-IP-Address', op='==', value='192.168.2.1'
Используя базу данных SQL, я решил это следующим образом:
1) Добавление специальной строки (site_id)
ALTER TABLE radcheck ADD site_id VARCHAR(30) NOT NULL default '0.0.0.0' AFTER value;
2) Изменение /etc/freeradius/sql/mysql/dialup.conf следующим образом
authorize_check_query = "SELECT id, username, attribute, value, op, site_id, valid_from, valid_until \
FROM ${authcheck_table} \
WHERE username = '%{SQL-User-Name}' AND site_id='%{NAS-Identifier}' \
ORDER BY id"
В моем случае я использовал NAS-Id, но заменив%{NAS-Identifier} на%{NAS-IP-Address} и, опционально, site_id на site_ip, можно добиться IP-адреса.