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

Ограничить клиентов FreeRADIUS доступом к сервису из разных локальных сетей с одним и тем же пользователем и паролем

у меня есть FreeRADIUS установлен на моем сервере, а также имеет две локальные сети (или может быть больше), управляемые этим сервером. Скажем, LAN A:192.168.1.0и LAN B: 192.168.2.0. я использую FreeRADIUS в комбинации с postgres база данных. В моем radcheck table Я вставил следующую строку:

userbane='myuser', attribute='Password', op=':=', value='mypass'.

Теперь я хочу позволить клиентам, которые будут запрашивать услуги у моего FreeRADIUS, иметь возможность аутентифицироваться с этим именем пользователя и паролем, только если они являются частью LAN B.

Вопрос: Кто-нибудь может подсказать мне, как это сделать?

Я попытался вставить radcheck на одну строку больше: username='myuser', attribute='NAS-IP-Address', op=':=', value='192.168.2.1', но безуспешно.

Любая помощь будет оценена.

Я раньше не использовал серверную часть базы данных, но использую пользователи file правило будет выглядеть примерно так:

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-адресом.