You are on page 1of 31

Freeradius - servidor radius eficiente e completo [Artigo]

Page 1 of 31

Freeradius - servidor radius eficiente e completo


Autor: Patrick Brandao <contato at patrick.eti.br> Data: 19/01/2005 Introduo Por Patrick Brando http://www.patrick.eti.br contato at patrick.eti.br

Aviso
Este artigo pode ser distribudo, publicado, impresso e copiado de todas as formas e meios possveis, desde que se mantenha o nome, a pgina web e o e-mail do autor no cabealho, em local visvel, abaixo do ttulo e com a letra maior ou igual a usada no texto. Meu primeiro contato com o servio radius foi com uma soluo comercial chamada Steel-Belted Radius (http://www.funk.com/radius/), na poca ele atendia minhas necessidades. O nico problema era que eu no podia compartilhar a base de dados com outras aplicaes e isso estava ficando chato: a senha do e-mail era uma, a senha de acesso outra, no dava pra criar formulrios de mudana de senha on-line e fazer uma migrao de base de dados e mantendo o software era invivel. Quando decidi migrar para uma soluo livre, comecei analisar tecnicamente os produtos do mercado, gostei de dois: freeradius e openradius, porm o freeradius ganhou favoritismo, por que? Voc vai saber nesse artigo! As configuraes de hardware no so muito relevantes, um servidor radius no pesado nem exigente. Seu velho 486 daria pro gasto! SOFTWARES USADOS NO ARTIGO Linux: Slackware 10.0 (instalao Full) Freeradius 1.0.1 MySQL 3.xx ou 4.xx Esse artigo uma abordagem completa do servio radius, tire um tempo para ler e preste ateno! Bons lucros com o conhecimento (aceito gratificaes$$!!!).

Instalao e comandos

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 2 of 31

Quando eu escrevia este artigo, o link usado para download da verso atualizada do Freeradius era: ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.1.tar.gz Caso este link esteja quebrado hoje, tente procurar no site www.freeradius.org a verso atual para download ou entre no endereo ftp://ftp.freeradius.org/pub e procure pelo pacote diretamente. # cd /usr/local/src # wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.0.1.tar.gz # tar -xvzf freeradius-1.0.1.tar.gz # cd freeradius-1.0.1/ # ./configure # make # make install Como voc pode ver, na instalao no h segredos, se voc se deparar com algum problema na hora de compilar, consulte o comando: # ./configure --help para ver opes que possam burlar os erros. Por exemplo, se ele reclamar a ausncia do modulo kerberos, voc pode usar a opo --withoutkrb5 no ./configure para resolver, digo isso pois uma vez encarei esse problema na distribuio Fedora. O simples ./configure far com que todos os mdulos do freeradius que se comunicam com outras tecnologias como MySQL, LDAP, etc sejam instalados, alguns podero pedir bibliotecas, mas no Slackware 10 isso no acontece. Ao usar simplesmente ./configure antes de compilar, ele ir programar o freeradius para ser instalado em /usr/local nas subpastas de sistema, tipo: /urs/local/etc -> arquivos de configurao; /usr/local/sbin -> comandos do administrador; /usr/local/share -> arquivos de dicionrio de radius e outros arquivos compartilhados; /usr/local/var -> arquivos de pid e logs; e assim por diante. Ento, se nesse artigo eu falar da localizao de algum comando ou arquivo de configurao, farei considerando que seu ./configure no alterou o "--prefix" padro (/urs/local). Os seguintes comandos sero adicionados ao seu Linux: /usr/local/bin/radclient /usr/local/bin/radeapclient /usr/local/bin/radlast /usr/local/bin/radrelay /usr/local/bin/radtest /usr/local/bin/radwho /usr/local/bin/radzap /usr/local/bin/rlm_ippool_tool /usr/local/bin/smbencrypt

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 3 of 31

Para o administrador: /usr/local/sbin/check-radiusd-config /usr/local/sbin/checkrad /usr/local/sbin/radiusd /usr/local/sbin/radwatch /usr/local/sbin/rc.radiusd Vejamos mais detalhes de como configur-lo no prximo captulo.

Arquivos de configurao detalhados Configurar o freeradius fcil. Vou descrever cada detalhe do radiusd.conf (/usr/loca/etc/raddb/radiusd.conf), que necessrio para voc entender melhor e no perder tempo procurando ajuda em fruns! A descrio precede os parmetros, no comentei todos para no fugir do assunto.

1 - radiusd.conf
Arquivo de configurao principal responsvel pelo daemon do radius e fazer incluses dos demais arquivos de configurao.

# inicio radiusd.conf prefix = /usr/local/src exec_prefix = ${prefix} sysconfdir = ${prefix}/etc localstatedir = ${prefix}/var sbindir = ${exec_prefix}/sbin logdir = ${localstatedir}/log/radius raddbdir = ${sysconfdir}/raddb radacctdir = ${logdir}/radacct confdir = ${raddbdir} run_dir = ${localstatedir}/run/radiusd # variveis definidas na instalao, essas opes # foram disponibilizadas para que voc no precise # recompilar para mudar os arquivos de lugar # voc pode usar essas variveis quando definir o # valor de algum parmetro ao longo desse arquivo. log_file = ${logdir}/radius.log # arquivo de log principal, nesse arquivo ficaro # todas as mensagem de erro, tentativas de # conexo, etc... libdir = ${exec_prefix}/lib # pasta de bibliotecas, se elas

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 4 of 31

# se encontrarem em varias pastas, # separe as localizaes # por : , tipo: libdir = /usr/lib:/usr/local/lib pidfile = ${run_dir}/radiusd.pid # arquivo onde ser armazenado o id # do processo principal do freeradius user = nobody group = nobody # definio do usurio e grupo dos processos filhos do radiusd # se voc no especificar, o usurio que deu partida # ser usado (root), se # voc usar o arquivo /etc/shadow para autenticao, # defina o grupo como shadow, vale lembrar # que o usurio que executa o radiusd deve ter permisso # de escrita no diretrio de log max_request_time = 30 # define o tempo que o processo filho segura o pedido, # caso o tempo limite seja atingido, o servidor retorna # acesso negado. Por exemplo: se voc define 2 segundos # e usa um banco de dados mysql sobrecarregado que demora # 5 segundos para concluir uma pesquisa, seu servidor nunca # vai dar acesso a ningum! delete_blocked_requests = no # se no parmetro max_request_time voc # definiu o valor 30 segundos, e o cliente # perdeu a pacincia e enviou outra solicitao sem # ter concludo a primeira, # o freeradius no ficara fazendo trabalho # repetitivo simultaneamente. Se voc definir # esse parmetro como yes, ao chegar a segunda # requisio do mesmo cliente com a mesma # "pergunta", ele desistir da primeira para # atender a nova solicitao. cleanup_delay = 5 # esse valor funciona da seguinte maneira: # se o NAS ou RAS enviou uma pergunta e # a resposta foi perdida na rede, o NAS tornar # fazer a pergunta, todo o processo de autenticao # ser realizado novamente. Para evitar isso o freeradius # manter a resposta no cache pelo tempo definido aqui # (em segundos), assim, se o pacote resposta for perdido # e a pergunta for repetida, a resposta ser imediata, # usando assim o mnimo de processamento. max_requests = 1024 # define o nmero mximo de # requisies que o freeradius pode atender # simultaneamente, somando todas as requisies # atendidas pelos processos filhos, assim,

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 5 of 31

# se voc tem 4 processo filhos, cada um # poder atender 256 perguntas simultaneamente # ATENO: as respostas cacheadas pela opo # cleanup_delay so contabilizadas. Se voc colocou # cleanup_delay com um valor alto, seu radius # ficar exposto a um DOS bind_address = * # isso far o freeradius escutar em # um endereo especifico, * inclui todos # os endereos ip do host, voc pode # usar um FQDN, mas antes tenha certeza # de que a resoluo de dns estar disponvel # no momento em que o servidor radius inicia port = 0 # porta de escuta. Equipamentos antigos tem a porta # 1645 como padro de autenticao e 1646 como # contabilidade. A RFC 2138 mudou essa porta para # 1812 autenticao e 1813 contabilidade. Equipamentos # novos provavelmente ter essa porta como padro. # 0 (zero) far com que a porta seja pesquisada # em /etc/services, esse parmetro pode ser # sobreposto pela opo -p do comando radiusd #listen { # ipaddr = * # endereo ip ou FQDN, mesmos critrios # usados em bind_address # port = 0 # porta de escuta, mesmos critrios # usados em port # Type of packets to listen for. # Allowed values are: # auth listen for authentication packets # acct listen for accounting packets # # type = auth # tipo de escuta: # auth -> autenticao # acct -> contabilidade #} # Se voc quiser que o freeradius escute # a porta de autenticao em um ip, e # a porta de contabilidade em outro, ou # em postas distantes no mesmo ip, o # modelo acima de listagem ser til # Esse recurso apareceu a partir da verso # 1.0 e resolve o problema se voc # tem equipamentos novos e antigos # servidos pelo mesmo radius hostname_lookups = no

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 6 of 31

# define se o nome DNS dos clientes # ser pesquisado a partir do ip. Se definir como yes, # toda vez que uma requisio chegar de # um endereo ip, o freeradius ir consultar # o dns para usar o nome no log de atividades. # o valor no a melhor opo, no sobrecarrega # o servidor DNS allow_core_dumps = no # ative essa opo para depurar erros no # servidor, caso contrario deixe como est regular_expressions = yes extended_expressions = yes # ativa ou desativa expresses regulares # nos parmetros dos pacotes, desativar # uma boa idia embora o padro seja # yes log_stripped_names = no # registra nos logs os dados completos do # campo User-Name do pacote de autenticao, # se definido como yes, do jeito que chegar, # ser usado. log_auth = no # deseja logar atividades de autenticao? # se voc tem milhares de clientes logando # simultaneamente, significa # que seu log vai crescer muito com essa # opo ativa. Eu sempre coloco yes pois # fica fcil e rpido descobrir por que # certo cliente (leigo) no consegue autenticar log_auth_badpass = no # Logar senhas quando a autenticao falhar? # embora seja til para dar suporte - usurio # digitando senha incorretamente (branco, maisculas, etc...), # a privacidade do usurio fica reduzida e uma brecha de segurana, # todas as senhas sero registradas no log log_auth_goodpass = no # idntica a opo acima, porm se # aplica para autenticaes bem sucedidas. usercollide = no lower_user = no lower_pass = no # essas duas opes so muito importantes: # se o usurio deixar o CapsLock ligado, # significa que no conseguir se autenticar # e isso significa uma insatisfao ou uma # chamada desnecessria no suporte.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 7 of 31

# Temos 3 opes: after, before e no # suponhamos que eu informe meu login: PatrickBrandao # "after" far com que a autenticao # seja primeiro testada com o valor # informado, se falhar, aplica um lowercase # nos valores e tenta novamente. Sendo a primeira # tentativa com "PatrickBrandao" e a segunda com "patrickbrandao" # "before" far com que um lowercase seja # aplicado antes de pesquisar a base de # dados, que receber "patrickbrandao" # "no" desativa esse efeito passando para # a base de dados o mesmo valor recebido: "PatrickBrandao" nospace_user = no nospace_pass = no # as duas opes acima # servem para retirar espaos de nome # de usurio e senha. Os seus clientes # podem, sem perceber, colocar # um espao no final ou no comeo # das credenciais, o que gera uma # chamada desnecessria no suporte tcnico # trs valores podero ser escolhidos: # after, before e no checkrad = ${sbindir}/checkrad # comando ao usar para checar conexes simultneas # sesso de segurana ---------------------------security { max_attributes = 200 # define o nmero mximo de atributos # num pacote enviado para o servidor. # um nmero muito baixo faria o servidor # negar pacotes, nmero muito alto deixar # o servidor vulnervel. O atacante pode emitir # um pedido com um nmero exagerado # de parmetros e esgotar os recursos de memria reject_delay = 1 # define o tempo de espera antes de enviar # uma resposta de acesso negado. # essa opo proteje seu servidor # contra ataques de fora bruta # Escolha de 0 a 5, 0 (zero) far com que # a resposta seja enviada imediatamente status_server = no # permite ou nega o envio de pacotes # de status do usurio. No muito importante # mas alguns NAS's com keep-alive podem # precisar desse recurso para checar o # status de uma sesso.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 8 of 31

} # sesso de proxy -----------------------------proxy_requests = yes $INCLUDE ${confdir}/proxy.conf # configurao de clientes NAS --------------$INCLUDE ${confdir}/clients.conf # quando falo de clientes NAS no # estou me referindo a seus clientes de # conexo discada, mas sim aos dispositivos # em contato com eles que se encarregam de # procurar o radius para validar o usurio, # esses equipamentos podem ser RAS como # cyclades, cisco, etc... ou mesmo servios # em qualquer servidor que se baseia numa # autenticao com radius # sesso de snmp ---------------------------snmp = no $INCLUDE ${confdir}/snmp.conf # ativa o suporte a monitoramento por snmp # no freeradius # configurao de processos filhos -----------------------thread pool { start_servers = 5 # nmero de processos filhos a serem criados quando # o servio for iniciado max_servers = 32 # nmero mximo de processos filhos # atendendo solicitaes min_spare_servers = 3 max_spare_servers = 10 # regula o nmero de processos para manter # um bom desempenho max_requests_per_server = 0 # nmero mximo de solicitaes feitas # a um processo filho antes de ser destrudo # 0 (zero) para infinito, mas no recomendvel # pois um processo filho pode consumir recursos # que nunca ir liberar, 250 um bom valor. } # sesso de definio de mdulos -----------------------

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 9 of 31

modules { # formato: # name [ instance ] { # config_item = value # ... # } # name -> se refere ao nome do # modulo rlm_?????, muitos mdulos # so fornecidos com o freeradius, esse # recurso permite que voc crie seus prprios # mdulos. pap { encryption_scheme = crypt } # define o tipo de # criptografia usada na autenticao PAP # valores disponveis: # clear: sem criptografia, texto plano # crypt: criptografia do unix # md5: criptografia MD5 # sha1: criptografia SHA1 # padro: crypt chap { authtype = CHAP } # adiciona suporte a autenticaes # usando CHAP pam { pam_auth = radiusd } # suporte PAM dos sistemas unix, configura # o pamd em /etc/pam.d/ para usar esse tipo # de autenticao # autenticao baseada nas credenciais do sistema # /etc/passwd e /etc/shadow unix { cache = no # criar caches de dados de login? # habilitar essa opo pode melhorar # o desempenho se voc tem muitos # usurios de sistema cache_reload = 600 # tempo em segundos para recarregar # o cache de logins do sistema

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 10 of 31

# define a localizao dos seus # arquivos de autenticao de sistema # encontra-se comentado, usando o # valor padro # # passwd = /etc/passwd # shadow = /etc/shadow # group = /etc/group radwtmp = ${logdir}/radwtmp } # Extensible Authentication Protocol $INCLUDE ${confdir}/eap.conf # Micro$oft CHAP authentication # esses mdulos suportam MS-CHAP e MS-CHAPv2 mschap { authtype = MS-CHAP # protocolo M$ usado #use_mppe = no #require_encryption = yes #require_strong = yes #with_ntdomain_hack = no #ntlm_auth = "/path/to/ntlm_auth --request-nt-key --username=%{Stripped-User-Name:-% {User-Name:-None}} --challenge=%{mschap:Challenge:-00} --nt-response=%{mschap:NTResponse:-00}" } # Lightweight Directory Access Protocol (LDAP) # permite usa autenticao LDAP (Auth-Type := LDAP) ldap { server = "ldap.your.domain" # identity = "cn=admin,o=My Org,c=UA" # password = senhadnaqui basedn = "o=My Org,c=UA" filter = "(uid=%{Stripped-User-Name:-%{User-Name}})" # base_filter = "(objectclass=radiusprofile)" start_tls = no # coloque yes se deseja usar tls para criptografar # os dados nas conexes com o LDAP e # configure e descomente os valores abaixo # tls_cacertfile = /path/to/cacert.pem # tls_cacertdir = /path/to/ca/dir/ # tls_certfile = /path/to/radius.crt # tls_keyfile = /path/to/radius.key # tls_randfile = /path/to/rnd # tls_require_cert = "demand" # default_profile = "cn=radprofile,ou=dialup,o=My Org,c=UA" # profile_attribute = "radiusProfileDn" access_attr = "dialupAccess"

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 11 of 31

dictionary_mapping = ${raddbdir}/ldap.attrmap # define o arquivo de mapas de atributos # do seu diretorio ldap_connections_number = 5 # password_header = "{clear}" # password_attribute = userPassword # groupname_attribute = cn # groupmembership_filter = "(|(&(objectClass=GroupOfNames) (member=%{LdapUserDn})) (&(objectClass=GroupOfUniqueNames) (uniquemember=%{Ldap-UserDn})))" # groupmembership_attribute = radiusGroupName timeout = 4 timelimit = 3 net_timeout = 1 # compare_check_items = yes # do_xlat = yes # access_attr_used_for_allow = yes } # ---------------------------------------# modulo Realm, para proxy # 'realm/username' realm IPASS { format = prefix delimiter = "/" ignore_default = no ignore_null = no } # 'username@realm' realm suffix { format = suffix delimiter = "@" ignore_default = no ignore_null = no } # 'username%realm' realm realmpercent { format = suffix delimiter = "%" ignore_default = no ignore_null = no } # 'domain\user' realm ntdomain { format = prefix delimiter = "\\" ignore_default = no ignore_null = no } checkval { item-name = Calling-Station-Id check-name = Calling-Station-Id

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 12 of 31

data-type = string #notfound-reject = no } # reescrita de pacotes. Usado para autorizao e contabilidade #attr_rewrite sanecallerid { # attribute = Called-Station-Id # may be "packet", "reply", "proxy", "proxy_reply" or "config" # searchin = packet # searchfor = "[+ ]" # replacewith = "" # ignore_case = no # new_attribute = no # max_matches = 10 # ## If set to yes then the replace string will be appended to the original string # append = no #} preprocess { huntgroups = ${confdir}/huntgroups hints = ${confdir}/hints with_ascend_hack = no ascend_channels_per_line = 23 with_ntdomain_hack = no with_specialix_jetstream_hack = no with_cisco_vsa_hack = no } files { usersfile = ${confdir}/users acctusersfile = ${confdir}/acct_users compat = no } detail { detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d detailperm = 0600 } # detail auth_log { # detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d # detailperm = 0600 #} # detail reply_log { # detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d # detailperm = 0600 #} # detail pre_proxy_log { # detailfile = ${radacctdir}/%{Client-IP-Address}/pre-proxy-detail-%Y%m%d # detailperm = 0600 #} # detail post_proxy_log { # detailfile = ${radacctdir}/%{Client-IP-Address}/post-proxy-detail-%Y%m%d # detailperm = 0600

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 13 of 31

#} acct_unique { key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port" } # Para Postgresql, use: ${confdir}/postgresql.conf # Para MS-SQL, use: ${confdir}/mssql.conf # For Oracle, use: ${confdir}/oraclesql.conf # $INCLUDE ${confdir}/sql.conf # incluso de arquivo de configurao contendo # mdulos de autenticao, sesso e contabilidade # controlados em banco de dados SQL # mdulos responsveis por controlar usurios conectados # para evitar conexo simultnea quanto esta # usada radutmp { filename = ${logdir}/radutmp username = %{User-Name} case_sensitive = yes check_with_nas = yes perm = 0600 callerid = "yes" } radutmp sradutmp { filename = ${logdir}/sradutmp perm = 0644 callerid = "no" } attr_filter { attrsfile = ${confdir}/attrs } counter daily { filename = ${raddbdir}/db.daily key = User-Name count-attribute = Acct-Session-Time reset = daily counter-name = Daily-Session-Time check-name = Max-Daily-Session allowed-servicetype = Framed-User cache-size = 5000 } always fail { rcode = fail } always reject { rcode = reject } always ok { rcode = ok simulcount = 0 mpp = no

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 14 of 31

} expr { } digest { } exec { wait = yes input_pairs = request } exec echo { wait = yes program = "/bin/echo %{User-Name}" input_pairs = request output_pairs = reply #packet_type = Access-Accept } ippool main_pool { range-start = 192.168.1.1 range-stop = 192.168.3.254 netmask = 255.255.255.0 cache-size = 800 session-db = ${raddbdir}/db.ippool ip-index = ${raddbdir}/db.ipindex override = no maximum-timeout = 0 } } # controle de acesso, sesso e contabilidade ----------# sesso instantiate - inicia mdulos, se no for usar, no inicie. instantiate { exec expr # daily } # sesso authorization - controla os mdulos # responsveis por autorizar o acesso das # requisies authorize { preprocess # auth_log # attr_filter chap mschap # digest # IPASS # suffix # ntdomain

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 15 of 31

# # # # # # }

eap files sql etc_smbpasswd ldap daily checkval

# Sesso authentication # responsvel por conferir o tipo de autenticao usado authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } # digest # pam # unix # Auth-Type LDAP { # ldap # } # eap } # Sesso Pre-accounting. Decide qual tipo de contabilidade usar preacct { # preprocess # acct_unique # home server as authentication requests. # IPASS # suffix # ntdomain # # Read the 'acct_users' file # files } # Sessao Accounting. Registra dados de contabilidade accounting { # detail # daily # unix # radutmp # sradutmp # main_pool

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 16 of 31

# }

sql pgsql-voip

# Controle de sesso # quando se faz o controle de sesso para # evitar conexes simultneas (impede o # nome de usurio de se conectar varias vezes de # locais diferentes ao mesmo tempo com o mesmo login) session { # radutmp # sql } post-auth { # main_pool # reply_log # sql # Post-Auth-Type REJECT { # insert-module-name-here # } } pre-proxy { # attr_rewrite # pre_proxy_log } post-proxy { # post_proxy_log # attr_rewrite # attr_filter eap } # fim radiusd.conf

2 - clients.conf
Responsvel pela lista de clientes NAS que desfrutam do servio radius. # inicio clients.conf client 127.0.0.1 { secret = raioceleste # segredo do servidor. Somente # os NAS's que conhecem esse # segredo podero fazer pedidos # de autenticao. OBRIGATRIO

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 17 of 31

shortname = localhost # nome do cliente. Normalmente # voc pode colocar uma parte do FQDN # esse nome usado no arquivo de log # e referencias de contabilidade # OBRIGATRIO nastype = other # define o tipo de NAS cliente. # Muito importante pois um # NAS especifico pode ter campos # definidos nos arquivos de dicionrios # de parmetros. OPCIONAL. Padro: other } # o exemplo acima trata um cliente # em especifico, mas voc pode # abrir uma rede inteira no freeradius client 192.168.10.0/24 { secret = raioceleste10 shortname = intranet-10 } # Importante: se seu NAS no estiver cadastrado # aqui, possivelmente voc vai ver no arquivo # de log: # Thu Aug 12 17:06:16 2004 : Error: Ignoring request from unknown client 192.168.10.24:41747 # # sempre que adicionar um novo cliente, voc ter que reiniciar o freeradius # fim clients.conf Autenticando na base de dados MySQL e evitando conexes simultneas Usar freeradius e base de dados MySQL uma das melhores opes disponveis. A flexibilidade e suporte do MySQL garante muita segurana aos seus dados e muita rapidez. Certifique-se de que no arquivo radiusd.conf, a seguinte linha est declarada: $INCLUDE ${confdir}/sql.conf Primeiro passo e editar o arquivo /usr/local/etc/raddb/sql.conf e alterar as seguintes linhas: sql { driver = "rlm_sql_mysql" # informa ao freeradius qual modulo de banco # de dados usar, neste caso, mysql server = "localhost" # diz ao freeradius em qual # host est o servidor mysql

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 18 of 31

login = "root" # define o nome de usurio registrado no mysql password = "senhadologinaqui" # senha do usurio definido no parmetro "login" radius_db = "radius" # nome do banco de dados que contem # as tabelas # abaixo deste texto (arquivo truncado aqui) se encontram definies de SQL para # pesquisa de dados, no altere, ao menos # que tenha um propsito # ...... # .... } Segundo, criar o banco de dados e as tabelas. Os criadores do freeradius j deixaram a DDL pronta para voc, basta ir at a pasta onde esto os fontes, na subpasta: src/modules/rlm_sql/drivers/rlm_sql_mysql Se voc descompactou em /usr/local/src, o caminho completo : /usr/local/src/freeradius-1.0.1/src /modules/rlm_sql/drivers/rlm_sql_mysql Dentro desta pasta existe um arquivo chamado db_mysql.sql contendo todos os comandos para criar as tabelas. Crie o banco de dados com o comando: # mysqladmin -psenharoot create radius E crie as tabelas com o comando: # mysql -psenharoot radius < db_mysql.sql Agora edite o radiusd.conf, vamos configur-lo para autenticar os dados no MySQL. Procure no final do arquivo pela sesso "authorize" e adicione "sql", ficando assim: authorise { sql } Isso far com que os usurios sejam procurados na tabela radcheck, banco de dados radius no MySQL. Prximo passo registrar a contabilidade dos acessos, muito til para provedores que tem planos limitados de horas. V at a sesso "accounting" e adicione "sql", ficando assim: accounting { sql }

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 19 of 31

Isso far com que os dados das conexes sejam armazenadas na tabela radacct. Um recurso interessante o controle de conexo simultnea. Isso impede que um usurio passe suas credencias (login/senha) para amigos e todos usem ao mesmo tempo, dando "preju". Na sesso "session" adicione "sql", ficando assim: session { sql } Ainda no est pronto o controle de sesso, voc ter que editar o sql.conf e descomentar as linhas que definem as variveis: simul_count_query simul_verify_query Vamos criar um usurio chamado "joao", que ter direito a apenas uma conexo. Conecte-se ao MySQL no banco radius: # mysql -psenharoot radius Criar usurio: mysql> INSERT INTO radcheck (username, attribute, op, value) mysql> VALUES ('joao', 'Password', '==', 'senhasecreta'); Criar grupo com direito a uma conexo chamado 'sessaounica': mysql> INSERT INTO radgroupcheck (groupname, attribute, mysql> op, value) VALUES ('sessaounica', 'Simultaneous-Use', mysql> ':=', 1); Inserir joao nesse grupo: mysql> INSERT INTO usergroup (username, groupname) VALUES ('joao', 'sessaounica'); Pronto. Joo agora no pode passar seu login pra ningum, seno ficar sem acesso! Para conexes ISDN 128k, crie um grupo de dupla permisso, pois seno o segundo canal no conseguir conectar-se. Veja como aparece no log, uma tentativa de conexo simultnea aps o usurio j estar conectado de outro lugar: Auth: Login OK: [joao/senhasecreta] (from client pr4k port 326 cli 31555xxxx) Auth: Multiple logins (max 1) : [joao/senhasecreta] (from client pr4k port 315 cli 31552xxxx) Acontece, de vez em quando, do usurio ficar "agarrado" no radius. Ele desconectado do RAS ou NAS, porm o radius no da baixa na sesso, os motivos podem ser, principalmente, perda do pacote no caminho at o radius, problema muito comum para provedores que lidam com ADSL de outras operadoras. A prxima vez que o usurio tenta logar, o acesso negado - o servidor radius pensa que sesso simultnea. Para resolver esse problema, sempre que um usurio (joao por exemplo) ficar "agarrado", voc libera ele com a SQL: mysql> DELETE FROM radacct WHERE username = 'joao' AND acctsessiontime = 0

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 20 of 31

ORDER BY radacctid DESC LIMIT 1; A desvantagem que Joo ter que solicitar suporte tcnico para ter o problema resolvido!

Checagem e retorno de atributos em banco de dados NOTA: As SQL's exibidas neste captulo foram digitadas no prompt do MySQL de um servidor de testes para voc ter uma noo dos conceitos na prtica. Quando voc cria o banco de dados MySQL do radius a partir da DDL fornecida nos fontes do mdulo, as seguintes tabelas so criadas: radacct - contm informaes de contabilidade dos usurios, descrita no captulo "Extrato de horas"; radcheck - contm a lista de atributos que sero usados para autenticar um usurio especfico. O atributo mais necessrio para que o usurio tenha acesso seguro "Password", exemplo: mysql> SELECT UserName, Attribute, op, Value FROM radcheck WHERE UserName = 'joao';
UserName | Attribute | op | Value ----------------------------------------------------------joao | Password | == | senhasecreta joao | NASIPAddress | == | 192.168.0.1 -----------------------------------------------------------

Quando Joo tentar se autenticar, ser checado os dois parmetros, Password e NASIPAddress, s ser retornado um Access-Accept se a senha estiver certa e a pergunta vier do NAS 192.168.0.1. Muitos parmetros podem ser adicionados para limitar a fonte de acesso, at mesmo restringir um usurio dial-up a um nico nmero de telefone (parmetro CallingStationID)! radreply - contm uma lista de atributos devolvidos ao usurio. Estes atributos s sero enviados numa resposta diferente de Access-Reject, parmetros de resposta influenciam na conexo do usurio, voc poder interagir com o NAS (ou RAS), desde que ele tenha flexibilidade para os valores retornados (adquira o manual do seu RAS, muito interessante saber o que pode ser feito nele pelas respostas do radius). mysql> SELECT UserName, Attribute, op, Value FROM radreply WHERE UserName = 'joao';
UserName | Attribute | op | Value ---------------------------------------------------------joao | Reply-Message | == | Bem Vindo Sr. Diretor! joao | Framed-IP-Address | == | 10.0.0.121 joao | Framed-IP-Netmask | == | 255.255.255.0 ----------------------------------------------------------

Com os registros acima, Joo receber uma mensagem de boas vindas e o endereo ip 10.0.0.121/24.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 21 of 31

usergroup - Bom, seria muito desagradvel administrar centenas de usurios inserindo atributos em um por um. Voc pode criar grupos de checagem e inserir os usurios neles. A tabela usergroup serve exatamente para isso: voc adiciona grupos de checagem e retorno nas tabelas radgroupcheck e radgroupreply respectivamente, e, ao criar um relacionamento entre o grupo e a usurio nessa tabela, os parmetros do grupo so usados nas operaes com o usurio. mysql> SELECT UserName, GroupName FROM usergroup;
UserName | GroupName ---------------------------------joao | Diretoria patrick | Admin anamaria | Dialup kairan | Dialup milene | Dialup marcos | Velox ----------------------------------

radgroupcheck - contm informaes dos grupos referenciados em usergroup para checagem de parmetros: mysql> SELECT GroupName, Attribute, op, Value FROM radgroupcheck ORDER BY GroupName;
GroupName | Attribute | op | Value --------------------------------------------------Admin | NAS-IP-Address | == | 192.168.0.1 Dialup | NASPortType | == | Async Diretoria | NAS-IP-Address | == | 192.168.0.1 Velox | NASPortType | == | Virtual ---------------------------------------------------

Acima, podemos ver que: Quem do grupo Admin e Diretoria s pode se autenticar se a conexo for intermediada pelo NAS 192.168.0.1. Quem do grupo Dialup s pode autenticar se o tipo da porta (NASPortType) for assncrona. E assim vai! radgroupcheck - contm informaes dos grupos referenciados em usergroup para retorno de parmetros: mysql> SELECT GroupName, Attribute, op, Value FROM radgroupreply ORDER BY GroupName;
GroupName | Attribute | op | Value ------------------------------------------------------------------Admin | Reply-Message | == | Bem vindo Manda-chuva! Dialup | Reply-Message | == | Um site de cada vez por favor. Diretoria | Reply-Message | == | Acesso bloqueado as 19:00 Velox | Reply-Message | == | proibido compartilhar conexo com terceiros --------------------------------------------------------------------

radpostauth - salva informaes de respostas enviadas para os usurios. Com ele voc pode tirar um relatrio das tentativas de acesso, por exemplo: mysql> SELECT user, pass, reply, date FROM radpostauth WHERE user = 'joao';

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 22 of 31

user | pas | reply | date ------------------------------------------------------joao | senhasecreta | Access-Accept | 20041228125413 joao | senhasecreta | Access-Accept | 20041229182318 -------------------------------------------------------

Acima, o relatrio diz que o usurio autenticou com sucesso nas duas tentativas. O campo date timestamp: ano, ms, dia, hora, minuto e segundo. Agora que voc j sabe como manipular o retorno e a autorizao dos usurios, leia o manual do seu NAS e veja quais parmetros ele aceita e crie seus prprios grupos de acesso. Boa sorte!

Autenticando na base de dados PostgreSQL, Oracle e outros Talvez voc tenha imaginado ao ver o ttulo que integrar com outros bancos de dados seno MySQL seria um mistrio, na verdade, o sql.conf tem uma nica linha que define o banco de dados a ser usado. Edite sql.conf e voc ver as seguintes linhas: # Database type # Current supported are: rlm_sql_mysql, rlm_sql_postgresql, # rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds driver = "rlm_sql_mysql" Nas linhas acima, o driver usado para conectar ao banco de dados o mysql, para que esse driver esteja disponvel, as bibliotecas de incluses tem que estar presentes no sistema (exemplo: mysql.h). Mudando o driver de banco de dados, defina os valores apropriados s variveis: server login password radius_db As demais podem permanecer inalteradas. Se voc mudar a estrutura de algumas SQL's do sql.conf para algum propsito particular, recomendo que faa testes manuais no banco de dados para se certificar que esto funcionando. Digo isso porque uma vez alterei algumas e meu servidor radius estava se comportando de forma estranha, no log no aparecia nada, quando passei um pente fino, era uma SQL mal escrita.

Negando temporariamente o acesso de clientes inadimplentes usando SQL Normalmente e inevitavelmente, se voc trabalha em um provedor, algum dia um usurio deixar de pagar e voc ter que suspender o acesso dele.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 23 of 31

muito interessante manter os dados do cliente no banco de dados, pois ele pode retornar a ativa um dia. Assim, quando ele ligar dizendo: - Por favor, quero quitar minha dvida e ter meu acesso restabelecido. Voc no ter o problema de ter que colocar senha em branco ou uma senha fcil e ped-lo para mudar na pgina. A maioria dos clientes desconfia que os provedores tm acesso senha deles. Minha experincia diz tambm que a maioria dos usurios que retornam a usar o servio de um provedor, vo optar por usar o mesmo login e senha que usavam antes de serem suspensos, principalmente o e-mail. Por isso, manter os dados dele no db vai possibilitar essa vantagem. Como voc j viu, se estiver usando uma base de dados, uma SQL ser emitida para extrair dados de login do db, o que vamos fazer manipular essa SQL e alterar a estrutura do banco para suport-la. 1 - Altere a estrutura da tabela radacct no seu db radius adicionando uma coluna chamada "enable", essa coluna poder suportar dois valores: Y ou N. O padro ser Y, quanto o usurio for desabilitado, o valor deve mudar para N. Acrescente a nova coluna com o seguinte comando no CLI no MySQL: mysql> ALTER TABLE radacct ADD enable enum('Y','N') NOT NULL DEFAULT 'Y'; 2 - Altere a SQL para chegar o status do usurio no campo "enable". No arquivo /usr/local/etc/raddb/sql.conf, procure pela linha: authorize_check_query = "SELECT id, UserName, Attribute, Value,op FROM ${authreply_table} WHERE Username = '%{SQL-User-Name}' ORDER BY id" E acrescente a clusula WHERE a seguinte comparao: AND enable = 'Y' Ficando assim: authorize_check_query = "SELECT id, UserName, Attribute, Value,op FROM ${authreply_table} WHERE Username = '%{SQL-User-Name}' AND enable = 'Y' ORDER BY id" Com isso, somente usurios habilitados podero ser selecionados! Se o usurio joao no pagar direitinho, voc desativa ele com a SQL: mysql> UPDATE radcheck SET enable = 'N' WHERE username = 'joao'; Se ele pagar, voc ativa com a SQL: mysql> UPDATE radcheck SET enable = 'Y' WHERE username = 'joao';

Autenticando na base de dados de usurios do sistema

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 24 of 31

Se voc no precisa de um servidor para grandes implementaes, nem usar um servidor de banco de dados, autenticar usurios no sistema pode ser muito til, o freeradius pode consultar os arquivos /etc/passwd e /etc/shadow para validar uma requisio. A configurao muito simples, no arquivo /usr/local/etc/raddb/radiusd.conf, edite as sees "instantiate", "authorize" e "authenticate" de forma que fiquem assim: instantiate { } authorize { chap mschap files } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } unix } As palavras "unix" e "files" so as responsveis pelo tipo de autenticao baseada nos arquivos de sistema. Usando desta maneira, o mtodo usado para inserir usurios no radius o mesmo para adicionar um usurio ao sistema: usando os comandos "useradd" ou a ferramenta de administrao usada na sua distribuio Linux. Assim, qualquer usurio que puder se autenticar no sistema tambm poder se autenticar no radius, mas caso isso no for seguro, voc pode editar no radiusd.conf, as opes do mdulo "unix" e apontar para novos arquivos passwd e shadow.

Testando o servidor radius antes de coloc-lo em produo Voc instalou, sabe como funciona, escolheu a melhor forma de autenticar, est rodando, mas como saber se ele est funcionando devidamente? Eu costumo usa duas ferramentas para me certificar se um servidor radius presta:

1 - radtest
O comando radtest acompanha o pacote do freeradius e instalado com os demais aplicativos. Embora sirva apenas para testar autenticao e retorno de parmetros, uma ferramenta muito til em um Linux. Sintaxe:

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 25 of 31

radtest USURIO SENHA SERVIDOR:PORTAAUTH PORTANAS SEGREDORADIUS onde: USURIO, SENHA - o bvio, login do usurio e senha; SERVIDOR - endereo ip ou FQDN do servidor radius; PORTAAUTH - porta no SERVIDOR onde o servio radius atende solicitaes de autenticao; PORTANAS - porta do NAS, pode ser uma porta eletrnica (nmero do modem) ou virtual, apenas para controle. Para testes, coloque qualquer valor numrico. SEGREDORADIUS - quando voc faz uma solicitao de autenticao, seu endereo ip tem que estar cadastrado no arquivo clients.conf do servidor num par de IP/SEGREDO. O ip ser descoberto pelo SERVIDOR atravs do parmetro NAS-IP-Address, o segredo voc tem que informar aqui. Aps uma solicitao, o radtest informa quais parmetros est enviando para o servidor, seguido do retorno. Exemplo: # radtest joao senhasecreta 127.0.0.1:1645 0 reioceleste Sending Access-Request of id 176 to 127.0.0.1:1645 User-Name = "joao" User-Password = "senhasecreta" NAS-IP-Address = localhost NAS-Port = 0 rad_recv: Access-Accept packet from host 127.0.0.1:1645, id=176, length=58 Reply-Message = "Bem vindo chefe!" Como voc pode ver acima, o servidor retornou uma resposta de acesso aceito "Access-Accept" e um parmetro que eu configurei em radreply para o usurio joao ("Reply-Message").

2 - NTRadPing
Ferramenta muito boa, para Windows (triste!), mas serve para testar todos os tipos de pacotes radius: Autenticao, Autorizao, Contabilidade e Status. Como ele tem uma interface grfica, no preciso ficar ensinando, a tela bem obvia, d uma olhada abaixo, o mesmo teste feito no radtest com o NTRadPing:

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 26 of 31

Voc pode baix-lo gratuitamente do site: http://www.mastersoft-group.com/download/ ou direto: http://www.mastersoft-group.com/download/step2.asp?frm_prod=9

Criando grficos de monitoramento com MRTG Bom, para essa implementao voc precisa ter o MRTG instalado no seu Linux, no tem segredo, v na ordem: instale zlib instale libjpeg instale gd instale mrtg Por padro, os programas do mrtg so instalados em /usr/local/mrtg-2/bin. Criar grficos com dados do banco de dados do radius muito importante. Voc pode ter o controle de quantas sesses so abertas em horrios diferentes, ter o controle do nmero de registros no banco de dados, etc. Por exemplo: Implementando um simples grfico de mrtg para monitorar o nmero de conexes abertas, pude saber que tenho muitas linhas telefnicas sobrando, podendo bolar uma estratgia para compensar os gastos. importante tambm monitorar a quantidade de banda que consumida pelos clientes dial-up, entre outros valores que podem decidir a expanso do negcio. Considerando que voc vai armazenar os grficos na pasta /www/graficos que est publicada no seu Apache. Grfico de sesses abertas: Crie o arquivo /www/graficos/sessoes.conf com o contedo:

# incio EnableIPv6: no Workdir: /www/graficos/ Options[_]: growright,bits Title[sessoes] : Radius - Sesses abertas

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 27 of 31

MaxBytes[index] : 10000 AbsMax[index] : 20000 Options[index]: growright,noinfo,gauge Target[index]: `/etc/mrtg/radius-sessoes.sh` PageTop[index]: Radius ShortLegend[index]: Sesses YLegend[index]: Sesses/hora Legend1[index]: Total de sesses WithPeak[index]: ymwd XSize[index]: 350 YSize[index]: 150 # fim Como voc pode ver, o comando /etc/mrtg/radius-sessoes.sh invocado. Esse script tem que retornar um valor para o MRTG no seguinte formato: #-------------nmero<quebra de linha> nmero<quebra de linha> #-------------Exemplo: # ./etc/mrtg/radius-sessoes.sh 30 0 Nesse caso, o nmero 30 o nmero de sesses que esto abertas. No script /etc/mrtg/radiussessoes.sh, coloque o seguinte contedo: # inicio #!/bin/sh servidormysql=localhost usuario=root senha=mysql2005 banco=radius tabelaacct=radacct sessoes=`mysql -N -p$senha -h $servidormysql -u $login $banco -e "SELECT count(*) FROM $tabelaacct WHERE AcctStopTime = 0;"` echo $sessoes echo 0 # fim Salve e torne executvel: # chmod +x /etc/mrtg/radius-sessoes.sh O comando para gerar o grfico ser: # /usr/local/bin/mrtg-2/bin/mrtg /www/graficos/sessoes.conf

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 28 of 31

As 3 primeiras vezes que voc o executar, erros sero gerados, mas no se preocupe, certifique-se de que novos arquivos foram gerados em /www/graficos/, o arquivo sessoes.html nessa pasta mostra os grficos que comearam a ser exibidos uns 15 minutos depois. Coloque o comando para gerar os grficos de 5 em 5 minutos pelo crontab: */5 * * * * /usr/local/bin/mrtg-2/bin/mrtg /www/graficos/sessoes.conf Agora s monitorar!

Extrato de horas Agora um assunto que muito interessante: Extrato de horas. Em muitas empresas, provedores, etc importante relatar o uso do servio (conexo a internet) de forma legvel e acessvel. Os provedores de acesso, por exemplo, tem planos de acesso limitados a certa quantia de horas e quando o usurio abusa, uma multa cobrada sobre o excedente. Quando uma quantia cobrada do usurio, como cliente, ele tem o direito de saber pelo que est pagando, ento hora de dar contas. O freeradius, junto com os mdulos de SQL, salva os dados de sesso na tabela radacct (contabilidade), cada registro nesta tabela composto pelas seguintes colunas: RadAcctId -> nmero nico de identificao do registro; AcctSessionId -> caracteres de identificao da sesso; AcctUniqueId -> nmero nico da sesso; UserName -> nome de usurio; Realm -> Realm usado; NASIPAddress -> RAS (ou NAS) que participou da autenticao e contabilidade; NASPortId -> porta do NAS usada; NASPortType -> tipo da porta (Async{56kbps}, ISDN {64 ou 128kb}, Virtual {adsl e outros}); AcctStartTime -> data hora do incio da sesso, hora em que a conexo foi estabelecida; AcctStopTime -> data hora do fim da sesso, hora em que a conexo foi encerrada; AcctSessionTime -> tempo da sesso em segundos (diferena entre AcctStopTime e AcctStartTime); AcctAuthentic -> Protocolo de autenticao usado (ex.: RADIUS); ConnectInfo_start -> informaes da conexo quando ela se iniciou, informando o protocolo eletrnico, a velocidade de upload, velocidade de download, etc... (ex.: V90 31200 52000 LAPM/V42Bis); ConnectInfo_stop -> informaes da conexo quando ela terminou. Vide ConnectInfo_start AcctInputOctets -> quantidade de dados recebidos; AcctOutputOctets -> quantidade de dados enviados; Os dois campos acima so, sem dvida, a melhor maneira de controlar o volume de dados de um cliente; CalledStationId -> Em caso de RAS (cyclades, cisco, etc...) com diversos nmeros, informa o nmero que o cliente discou; CallingStationId -> Nmero do telefone do cliente. Eu amo esse campo! Com ele, voc acha o cliente em qualquer lugar! Tem como voc saber de onde o cliente anda conectando,

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 29 of 31

se ele ficar usando em casa e no trabalho, etc; AcctTerminateCause -> Informa o motivo da desconexo. Os valores mais comuns so: Host-Request = o usurio (ou algum software no PC dele) requisitou a desconexo. Lost-Carrier = sinal de linha perdido ou muita interferncia na transmisso. Ocorre muito quando h varias extenses na mesma linha telefnica ou a presena de umidade, gato, etc. Veja mais detalhes sobre motivos de desconexo em /usr/local/share/freeradius/dictionary. ServiceType = tipo de servio. FramedProtocol = protocolo usado (ex.: PPP). FramedIPAddress = endereo ip concedido ao cliente durante a sesso. Se a polcia federal der uma batida a, voc vai poder informar pelo endereo ip, de qual telefone partiu a conexo do hacker! AcctStartDelay = tempo demorado para registrar o incio da sesso. AcctStopDelay = tempo demorado para registrar o fim da sesso. Quanto o usurio se conecta ao dispositivo de rede (NAS) e inicia uma sesso, um registro em radacct criado, mas nem todas as informaes esto disponveis nele. O campo AcctStopTime 0 (valor zero), entre outros. Assim, voc pode descobrir quais usurios esto conectados no momento com a SQL: mysql> SELECT username, date_format(AcctStartTime, '%d/%m/%Y %T') AS AcctStartTime, NASPortType FROM radacct WHERE AcctStopTime = 0 ORDER BY AcctStartTime; Exemplo do resultado:
UserName | AcctStartTime | NASPortType +--------------------+--------------------------paulinho | 30/12/2004 07:30:06 | Virtual francisco | 30/12/2004 09:28:18 | Async +--------------------+---------------------------

Na tabela, vejo que um usurio de velox (paulinho) e outro de conexo discada (francisco) esto conectados. Assim que a desconexo registrada pelo NAS ou RAS, transmitido para porta de contabilidade do freeradius um pedido de encerramento da sesso, os dados restantes so preenchidos (data e hora, tempo total da sesso, velocidade na hora da desconexo, motivo, etc). Bom, agora que voc j sabe o caminho das pedras, hora de desenvolver um software que te d isso de forma acessvel e que voc possa integrar com outros sistemas, como o de cobrana, por exemplo. Boa sorte no desenvolvimento!

Administrao de usurios No agradvel ter uma grande quantidade de clientes e ter que administrar "no dedo", um software de administrao fundamental. Voc tem trs opes:

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 30 of 31

1 - desenvolver um, escolhendo a tecnologia, se baseando nas suas necessidades e nos relacionamentos do seu banco de dados de clientes, cobrana, etc. No existe nenhum segredo para se fazer isso, basta ter conhecimento em alguma linguagem de programao com API do banco de dados usado (exemplo: PHP e MySQL). Assim voc pode oferecer para seus clientes, formulrios de mudana de senha, extrato de horas de acesso, helpdesk, etc. Eu mesmo j desenvolvi um software do tipo, que instalo para meus clientes. 2 - usar o software "dial-up admin", GNU, distribudo junto com o freeradius. O dial-up admin um software completo para administrao de um servidor radius baseado em banco de dados. Ele possui total controle das tabelas do radius, para alterar atributos, administrar usurios, grupos e uma interface bsica de administrao de clientes (nome, telefone, endereo). Ser necessrio ter instalado no seu servidor: Apache PHP Perl - mdulo Date::Manip Na pasta de fontes do freeradius, existe uma pasta chamada dialup_admin, coloque-a em /usr/local e se assegure de que somente o usurio que executa o Apache (nobody normalmente) tenha permisses nessa pasta. Voc no ir publicar a pasta /usr/local/dialup_admin no seu Apache, mas sim uma subpasta chamada htdocs (/usr/local/dialup_admin/htdocs), que dever ser protegida por senha. Insira no seu httpd.conf: Alias /dialup_admin "/usr/local/dialup_admin/htdocs" <Directory "/usr/local/dialup_admin/htdocs" AuthName "Area Restrita - Administrao" AuthType Basic AuthUserFile /usr/local/dialup_admin/.htpasswd require valid-user </Directory> Crie agora o arquivo de senhas: # htpasswd -c /usr/local/dialup_admin/.htpasswd -m administrador senha V at a pasta /usr/local/dialup_admin/sql, voc deve executar todas estes arquivos de SQL no seu banco de dados de radius (banco "radius"): # cd /usr/local/dialup_admin/sql # mysql -pSENHA -u USUARIO -h SERVIDOR radius -e badusers.sql # mysql -pSENHA -u USUARIO -h SERVIDOR radius < mtotacct.sql # mysql -pSENHA -u USUARIO -h SERVIDOR radius < totacct.sql # mysql -pSENHA -u USUARIO -h SERVIDOR radius < userinfo.sql Onde: SENHA, USURIO e SERVIDOR devem ser substitudos pelos valores corretos no seu servidor MySQL.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

Freeradius - servidor radius eficiente e completo [Artigo]

Page 31 of 31

Com as tabelas criadas e o Apache configurado, edite o arquivo /usr/local/dialup_admin/conf/admin.conf e altere os valores das variveis de acordo com sua instalao (mysql, arquivos de configurao do freeradius, etc). Agora reinicie seu Apache, voc ir acessar pelo endereo: http://192.168.10.1/dialup_admin Onde 192.168.10.1 deve ser substitudo pelo ip ou nome FQDN do servidor. Com esses passos voc deve conseguir usar o software com sucesso!

Ajuda Espero que tenham gostado da qualidade do artigo. A verso atualizada e corrigida dia-a-dia estar disponvel no endereo: http://www.patrick.eti.br/ Como o prpria licena do freeradius diz, no dou quaisquer garantia quanto ao software freeradius nem nenhum dos software citados nesse artigo, use por sua prpria conta e risco. Primeiramente, se tiver dvidas, coloque-as nesse artigo, no vivaolinux.com.br, por favor, no me mande e-mails sem antes ler bem o artigo e se certificar de que voc fez um mnimo de esforo para faz-lo funcional! Muito grato, Patrick Brando

http://www.vivaolinux.com.br/artigo/Freeradius-servidor-radius-eficiente-e-completo Voltar para o site

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1842

12/11/2012

You might also like