Запретить клиентам 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-адреса.

Другие вопросы по тегам