Vejamos o que acontece quando o servidor recebe uma requisição de contabilidade.
A seção "preacct" é utilizada para processar pacotes Accounting-Request. Se essa seção retorna noop, ok ou updated, o pacote é processado. Caso contrário, o servidor para o processamento e não responde com um Accounting-Response.
A seção de contabilidade
Essa é a seção responsável por processar pacotes Accounting-Request. Se o atributo do tipo Acct-Type é configurado na lista de controle, então somente uma subseção nomeada é processada. Caso contrário, toda a seção de contabilidade é processada, e a seção acct-type é ignorada.
O servidor checa se a requisição deve ser encaminhada (proxied), logo que a seção de contabilidade é processada. Essa sequência permite ao servidor logar os pacotes de contabilidade localmente e encaminhá-los ao mesmo tempo.
Encaminhando autenticações
Essa seção descreve o que acontece quando o servidor recebe uma requisição de acesso e vai encaminhá-la.
Durante o encaminhamento, a seção "authorize" é executada do mesmo modo que o processo de autenticação normal.
A seção "pre-proxy" é usada para processar uma requisição antes de ser encaminhada. Essa seção é utilizada por todos os tipos de requisições, incluindo Access-Request, Accounting-Request, CoA-Request e Disconnect-Request.
Se diferentes políticas são necessárias para diferentes tipos de pacotes, a seção "home_server_pool" pode utilizada para definir servidores virtuais. O servidor virtual pode conter seções "pre-proxy" e "post-proxy", que são executadas somente quando enviando requisições para os servidores home que pertencam ao pool.
Uma vez que servidores home são tipificados e são atados ao tipo de requisição que será enviada, essa configuração permite diferentes políticas para cada tipo de requisição.
A seção "post-proxy" é utilizada para processar uma resposta para um servidor home. O mesmo modo que a sessão "pre-proxy", também é utilizada por todas as requisições, incluindo Access-Request, Accounting-Request, CoA-Request e Disconnect-Request.
A seção "post-proxy" é utilizada para filtrar respostas para servidores home em tempo de remover autorizações não apropriadas como configurações VLAN e declarações de endereço IP.
Do mesmo modo que "pre-proxy", a seção "home_server_pool" pode ser utilizada para definir um servidor virtual se diferentes políticas são necessárias para diferentes tipos de pacotes. O servidor virtual pode conter seções "pre-proxy" e "post-proxy" que são executadas quando a requisição for enviada ao pool.
O home server pode não responder para uma requisição que foi encaminhada com a opção "response_window time" (veja o arquivo "proxy.com" (?) ou ".conf"). Quando "response_window" expira, o servidor que encaminhou a requisição executa a subseção "post-proxy-type fail" que deve existir em na seção "post-proxy".
Isso permite incluir uma política para um servidor que não pode responder. Uma vez que "post-proxy" foi finalizada, qualquer atributo existente na resposta são descartados, e os atributos pre-proxy são copiados para a lista de respostas. Esse comportamento permite ao servidor home definir uma resposta padrão enviada de volta ao NAS.
Encaminhando Contabilidade
Durante o encaminhamento da contabilidade, a seção "preacct" é executada do mesmo modo que uma requisição normal. O mesmo vale para uma seção de accounting, pre-proxy e post-proxy.
Alteração da Autorização Change of Authorization (CoA)
A seção "send-coa" é responsável por enviar mensagens CoA. Essas mensagens são enviadas ao NAS, que desconecta o usuário da rede. Essas mensagens podem ser utilizadas para adicionar regras e filtros a uma sessão de usuário. Por exemplo, limitar a largura de banda.
A sessão "recv-coa" é utilizada para processar CoA-Request ou Disconnect-Request vindos de um NAS. Essa sessão pode fazer com que o pacote seja encaminhado, executando as sessões pre-proxy e post-proxy como anteriormente citadas.
A sessão "recv-coa" recebe e processa mensagens CoA. Módulos dessa seção podem exibir mensagens se, por exemplo, um usuário for desconectado.
Arquivo radiusd.conf mínimo
A configuração padrão contém centenas de linhas de definições e comentários.
Uma configuração mínima é o modo mais simples de começar a usar seu servidor. Uma configuração muito simples, pode fazer o seguinte:
- Ouvir uma porta UDP em um IP;
- Aceitar pacotes de clientes conhecidos;
- Não usar nenhum módulo em plug-in;
- Configurar a autenticação e aceitar requisições desses clientes.
Um "radius.conf" mínimo para fazer isso seria assim:
listen {
type = auth
ipaddr = *
port = 0
}
client localhost { # allow packets from 127.0.0.1
ipaddr = 127.0.0.1
secret = testing123
}
modules { # We don't use any modules
}
authorize { # return Access-Accept for PAP and CHAP
update control {
Auth-Type := Accept
}
}
Um arquivo mínimo como "small.conf" pode ser útil para depuração (debug) e pode ser utilizado como:
# radiusd -X -n small
O arquivo Users
O módulo files autoriza cada usuário através do arquivo "users". Cada entrada no arquivo consiste de um item a ser checado e uma resposta predefinida. O item a ser checado e a resposta a ser enviada é são definidos na forma de um atributo do tipo atributo = valor.
Múltiplos itens podem ser colocados em cada linha. Se houver mais de um item por linha devem ser separados por vírgulas. O arquivo começa com uma linha de checagem de item: um nome de usuário (username) seguido por uma lista de checagem de intens (que pode ser vazia). O item de checagem é limitado a uma linha.
Quando a linha de resposta começa com uma tabulação (Tab) seguido de uma lista de itens de resposta (que pode ser uma lista vazia). Os itens de resposta podem ser especificados em várias linhas, desde que as linhas terminem com uma vírgula, exceto a última.
Os itens de checagem são uma lista de atributos que o servidor usa para comparar com os atributos da requisição de acesso. Se o nome de usuário e os demais itens combinam o servidor adiciona esses atributos a resposta.
Esse processo é repetido para todas as entradas de usuário do arquivo users. Se um item da requisição não combina, o módulo files retorna uma resposta not found informando que não encontrou um registro para o usuário. Um exemplo de entrada para o arquivo users pode ser visto a seguir:
bob Cleartext-Password:="hello"
Reply-Message:="Hello,%{User-Name}"
Operadores
FreeRADIUS aceita diversos operadores de comparação:
- atributo = valor :: Esse operador é usado para configurar atributos no servidor. Ele configura o valor de um atributo somente se não houver outro idem no mesmo atributo.
- atributo := valor :: Esse operador sempre combina um item de checagem. Nos itens de comparação, ele substitui qualquer atributo para o mesmo nome. Se o nome do atributo não aparece na requisição, ele é adicionado. Como um item de resposta, ele funciona do mesmo modo para os itens de resposta.
- atributo == valor :: Como um item de checagem, ele combina somente se o nome do atributo estiver presente na requisição e tiver um dado valor. Não é permitido em itens de respostas.
- atributo += valor :: Sempre combina como um item de checagem e adiciona o atributo com o valor para a lista de configuração de itens. Como resposta é adicionada aos itens de resposta.
- atributo != valor :: Como item de checagem, combina somente se o dado atributo estiver na requisição e NÃO tiver determinado valor. Não é permitido em respostas.
- atributo > valor :: Como item de checagem, combina somente se a requisição contém um atributo com o valor maior que valor. Não é permitido em respostas.
- atributo >= valor :: Como item de checagem, combina somente se a requisição contém um atributo com o valor maior que valor. Não é permitido em respostas.
- atributo < valor :: Como item de checagem, combina somente se a requisição contém um atributo com o valor menor que valor. Não é permitido em respostas.
- atributo >= valor :: Como item de checagem, combina somente se a requisição contém um atributo com o valor menor ou igual a valor. Não é permitido em respostas.
- atributo =~ valor ::- Como item de checagem, combina somente se a requisição contém um atributo que combina com uma expressão regular. Esse atributo somente pode ser aplicado a atributos do tipo cadeia de caracteres (string). Não é permitido em respostas.
- atributo =~ valor :: Como item de checagem, combina somente se a requisição NÃO contém um atributo que combina com uma expressão regular. Esse atributo somente pode ser aplicado a atributos do tipo cadeia de caracteres (string). Não é permitido em respostas.
- atributo =* valor :: Como item de checagem, combina somente se a requisição contém um atributo nomeado independente de seu valor. Não é permitido em respostas.
- atributo !* valor :: Como item de checagem, combina somente se a requisição NÃO contém um atributo nomeado independente de seu valor. Não é permitido em respostas.
O modo correto de checar seu arquivo de usuários é rodar seu servidor em modo de depuração (opção -X) e usar o programa radclient para enviar e testar entradas para os vários clientes. Um erro simples pode permitir ou negar acesso a um ou vários usuários.