Блог Синявского
  • Разделы
  • Метки
  • Все статьи

Изменение запроса авторизации через политику

1

На предприятии XXX возникла проблема с авторизацией через freeradius GSM модемов. Проблема заключалась в том, что 500 модемов были настроены с именем пользователя modem и паролем secret и еще 500 модемов без имени пользователя и без пароля. Необходимо каждому выдать статический IP. От оператора приходит в запросе атрибут - Calling-Station-Id. Решение задачи написать политики позволяющие использовать в качестве аттрибута User-Name - Calling-Station-Id. В случае, когда указан пароль, в качестве имени пользователя будет использован Calling-Station-Id. А в случае когда нет имени пользователя и пароля, будет происходить запрос к нестандартной таблице callingstationid в базе данных, в которой перечислены имя и пароль для определенных Calling-Station-Id.

Создадим таблицу callingstationid, для хранения связок User-Name, Password для определенных Calling-Station-Id.

# mysql -hhostname -uradius -psecret
> use radius;
> CREATE TABLE callingstationid (
      id int(11) NOT NULL auto_increment,
      username varchar(64) NOT NULL default '',
      password varchar(64) NOT NULL default '',
      callingstationid varchar(64) NOT NULL default '',
      PRIMARY KEY  (id)
  );
> exit

Переходим в каталог с freeRadius: # cd /usr/local/etc/raddb/

Создаем политику в файле policy.conf в блоке policy определяем новые политики modem_with_callingstationid_without_username и modem_with_callingstationid_with_username

#!lineos='inline' hl_lines='1 3 10'

# ee policy.conf

policy {
    ...
    modem_with_callingstationid_with_username{
        if((Calling-Station-Id) && User-Name=="modem" && (Password=="secret" || (CHAP-Password))){
            update request {
                 Password := "modem_secret"
                 User-Name := "%{Calling-Station-Id}"
            }
        }
    }

    modem_with_callingstationid_without_username{
        if((Calling-Station-Id) && !User-Name && !User-Password){
            update request {
                Password := "%{sql: SELECT password FROM callingstationid WHERE callingstationid = '%{Calling-Station-Id}'}"
                User-Name := "%{sql: SELECT username FROM callingstationid WHERE callingstationid = '%{Calling-Station-Id}'}"
            }
        }
    }
}

Меняем файл текущей конфигурации /sites-enabled/default для запуска политик, для этого добавляем в блок authorize назваение наших политик в начало блока.

# ee /sites-enabled/default

authorize {
    ...

    modem_with_callingstationid_with_username

    modem_with_callingstationid_without_username

    sql
    ...
}

Сохраняем файлы и проверяем конфигурацию radiusd -C

Перезагружаем freeRadius service radiusd restart



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

24.01.2013

Обновление

05.05.2022

Категории

radius

Тэги

  • freeradius 3
  • policy 2
  • request 3

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor