FreeBSD + FreeRadius + MySQL

Neste artigo aprenderemos a criar um servidor PPPoE em FreeBSD com autenticação no FreeRadius consultando um banco de dados em MySQL. Será uma conexão com usuário e senha como a maioria dos provedores ADSL provêem, liberando um IP inválido para cada estação.

[ Hits: 59.033 ]

Por: Thomaz Belgine em 05/10/2007


Instalando o FreeRadius



# cd /usr/ports/net/freeradius
# make config


Selecione as opções abaixo:

Options for freeradius 1.1.6
[X] KERBEROS      With Kerberos support                        
[X] HEIMDAL       With Heimdal Kerberos support                
[ ] LDAP          With LDAP database support                    
[X] MYSQL         With MySQL database support                
[ ] PGSQL         With PostgreSQL database support          
[ ] FIREBIRD      With Firebird database support (EXPERIMENTAL)
[ ] SNMP          With SNMP support                            
[ ] EDIR          With Novell eDirectory support          
[ ] NOPERL        Do not require perl (use only if necessary)  
[ ] EXPERIMENTAL  Build experimental modules

# make install clean

Pronto, agora vamos configurar o FreeRadius:

Entre na pasta:

# cd /usr/local/etc/raddb/

Editando o arquivo clients.conf:

# ee clients.conf

#####CLIENTS.CONF######
#########BEGIN#########
client 127.0.0.1 {
        secret          = senharadius
        shortname       = localhost
        nastype         = other
##########END##########
#####CLIENTS.CONF######

Como usaremos o Freeradius + MySQL, não precisamos configurar o arquivo users. Colocaremos essas informações no próprio banco de dados.

Editanto o arquivo sql.conf.

Somente edite o começo do arquivo com as configurações do seu servidor:

# ee sql.conf

sql {
        # Tipo do banco de dados
        driver = "rlm_sql_mysql"

        # Informações da conexão
        server = "IP_SERVER"
        login = "USER"
        password = "SENHA_BD"

        # Nome do banco de dados
        radius_db = "radius"

Editando o arquivo radiusd.conf

Procure pela linha "authorize"

Segue abaixo as novas opções para sql:

authorize {

   preprocess

#    auth_log

#    attr_filter

   chap

   mschap

#    digest

#    IPASS

#    suffix

#    ntdomain

#    eap

#    files

   sql

#    etc_smbpasswd

#    ldap

#    daily

#    checkval

}

# Sessão authentication

# responsável por conferir o tipo de autenticação usado

authenticate {

   Auth-Type PAP {

       pap

   }

   Auth-Type CHAP {

       chap

   }

   Auth-Type MS-CHAP {

       mschap

   }

#    digest

   pam

#    unix

#    Auth-Type LDAP {

#        ldap

#    }
#    eap

}



#  Sessão 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

   sql

#    pgsql-voip

}
# Controle de sessão quando se faz o controle de sessão para evitar conexões simultâneas (impede o nome de usuário 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

}

Página anterior     Próxima página

Páginas do artigo
   1. Compilando o Kernel
   2. Atualizar o ports
   3. Instalando o MySQL
   4. Instalando o FreeRadius
   5. Testando as configurações
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Configurando roteador com USB 3G

Oi 3g Huawei E220 HSDPA USB Modem + gnome-ppp (wvdial.conf)

Instalando o Asterisk no CentOS 5.3

Apache 2.2 - Introdução ao módulo mod_rewrite

Compartilhando acesso à internet com iptables

  
Comentários
[1] Comentário enviado por rodrigo.pacheco em 05/10/2007 - 13:18h

asf

[2] Comentário enviado por manfilho em 08/10/2007 - 01:16h

Me desculpe caro colega... valeu pela intenção e dedicar o seu tempo para escrever esse "artigo"... mas.. entendi o seguinte:
Artigo copiar e colar, sem muitas explicações e detalhes de informações
Você acha que eu vou fazer o que você está "mandando" sem que você me convença o porquê? em um servidor?
Tudo na vida tem uma explicação, para você mostrar que realmente conhece do assunto simplesmente não me mande copiar e colar, escrever tal linha, sem explicar o que cada coisa dessas faz
No VOL tem muito tipo de Artigo desse tipo
Não curto :)

[3] Comentário enviado por tholoko em 08/10/2007 - 07:45h

Me desculpe amigo... pelo meu "artigo"... mas tenho certeza que nenhum USER vai tentar instalar um Servidor PPPoE sem antes ter noções de alguns fatores...

Muitas vezes eh melhor ensinar alguem assim USER a pescar,,, do que lhe entregar o peixe!!! Não acha???

Se quiser posso te fazer um tutorial bem explicadinho... soh pra vc!!! Afinal... eh muito mais facil.... ler algo explicadinho do que correr atras, olhar os man e descobrir o que cada função faz... Se outro pode ler pra mim e escrever resumido... pq perder meu tempo neh??? muito boa!

Boa sorte nas pesquisas por artigos resumidos... abraços!

[4] Comentário enviado por adrianoturbo em 08/10/2007 - 14:51h

Esse artigo é ação do começo ao fim ,que pena que não está elucidado.para o bom entendedor meia palavra basta!

[5] Comentário enviado por manfilho em 08/10/2007 - 17:45h

Olá caro amigo tholoko,
Você não me entendeu bem, eu não estou pedindo um tutorial diferenciado para mim, peço para a comunidade.
Com mais explicações, riqueza de informação, uma coisa que o usuário leia, entenda o que você está recomendando o que faça.
Você está entrando em contradição quando diz:

"Muitas vezes eh melhor ensinar alguem assim USER a pescar,,, do que lhe entregar o peixe!!! Não acha???"

Eu acho que você está entregando o peixe sem ensinar como pescar, caro colega... simplesmente, digite isso, subistitua tal arquivo, reinicie, copie, cole, edite e pronto! estará pronto!
É difícil fazer? sei que não é.
Mas se mesmo assim você não entender, peço que faça um SÓ PARA MIM, que eu publico na comunidade dando todo mérito a você.
Um abraço.

[6] Comentário enviado por tholoko em 09/10/2007 - 10:48h

FalaPharoeste... Entendi onde vc quer chegar... mas entenda... nesse artigo tentei explicar o funcionamento do PPPoE... onde comento e muito bem todas as config do artigo ppp.conf... Podemos utilizar um arquivo texto ppp.secret ao inves de criar um FreeRadius se autenticando em MySQL, assim ficaria bem mais curto o artigo, mas apenas mostrei que isso eh variavel e foi o melhor metodo para o meu problema.

Sei como que foi dificil para eu chegar e montar esse Servidor e não quero entregar de mão beijada a todos... apenas ensinei a voar... mas depende dos users criar asas...

No meu server,,, criei absurdos... controle de banda com IPFw,,, bloueio de cliente com meu sistema em PHP... relatorios... etc... mas isso é segredo de estado!!! akaukauakuaka

ABraços...

[7] Comentário enviado por wpereiratecno em 03/11/2009 - 09:39h

Olá, Thomaz.

Se me permite, gostaria de acrescentar algo sobre a questão freeradius + mysql:

Antes de dizer que algo funciona ou não, nessa ou naquela distribuição, é importante considerar, além da distribuição GNU/Linux ou BSD-like usada, as versões dos programas também.

No meu cenário eu tenho:
- Debian GNU/Linux lenny x86_64 kernel 2.6.26-2-amd64 (isso tudo significa Debian 64 bits)
- Freeradius 2.0.4
- MySQL 5.0.51a


Algumas considerações:


1. Eu não criei os tipos de autenticação para a tabela radgroupcheck e mesmo assim funcionou (aliás, é altamente recomendável não usar o atributo Auth-Type);
2. Na tabela radcheck o Attribute pode ser 'Crypt-Password' (que dá uma segurança maior);
3. Edite o arquivo /etc/freeradius/sites-enabled/default e, além de descomentar as linhas de sql recomendadas pelo Thalles, descomente a linha unix (isso fará com que o freeradius autentique via MySQL e não via /etc/passwd);
4. No mesmo arquivo /etc/freeradius/sites-enabled/default comente a linha radutmp, conforme abaixo:

# Session database, used for checking Simultaneous-Use. Either the radutmp
# or rlm_sql module can handle this.
# The rlm_sql module is *much* faster
session {
# radutmp

5. Na tabela radgroupreply, a coluna Prio não estava criada, então eu precisei criar com o comando ALTER TABLE radgroupreply ADD Prio VARCHAR(1); (rodei na base de dados criada o script de schema.sql e essa coluna Prio não foi criada, por isso a criei manualmente).

6. Nas propriedades de conexão da tabela radgroupreply, o Attribute Framed-Compression aceita tanto o Value Van-Jacobsen-TCP-IP quanto Van-Jacobson-TCP-IP (mas o recomendado pela IETF na RFC 1144 é o segundo).

7. Não esquecer de descomentar a linha $INCLUDE sql.conf do arquivo /etc/freeradius/radiusd.conf


Algumas recomendações:


1. Além do usuário root da base de dados MySQL, crie um usuário adicional, com privilégio USAGE e com senha diferente da do root, pois será necessário informar esses dados no arquivo /etc/freeradius/sql.conf, na sessão # Connection info; portanto, não é muito seguro deixar a senha do root nesse arquivo. Veja a seguir:

# Connection info:
server = "localhost"
login = "usuario_adicional"
password = "senha_usuario_adicional"

2. Verifique sempre se os serviços mysql e freeradius estão rodando. Se não estiverem, faça /etc/init.d/mysql start e /etc/init.d/freeradius start (você pode preferir automatizar essa tarefa com a ferramenta update-rc.d).

3. Algumas verificações que podem ser feitas para garantir que está tudo configurado corretamente:

a. ifconfig eth0 (comando para verificar o IP da interface eth0)
b. editar o arquivo /etc/hostname (para verificar se o nome do servidor está correto)
c. editar o arquivo /etc/hosts (para verificar se o IP e o hostname estão correspondendo)


HORA DE ALEGRIA:


Após toda a instalação e configuração, teste com o radtest:
Entre na pasta /etc/freeradius
Digite: radtest {username} {password} {hostname:port} 10 {radius_secret}

Se retornar a mensagem...

Sending Access-Request of id 174 to 10.0.0.1 port 1812
User-Name = "user"
User-Password = "teste"
NAS-IP-Address = 10.0.0.1
NAS-Port = 0
rad_recv: Access-Accept packet from host 10.0.0.1 port 1812, id=174, length=44
Framed-Compression = Van-Jacobson-TCP-IP
Framed-Protocol = PPP
Service-Type = Framed-User
Framed-MTU = 1500

...então é HORA DE ALEGRIA! Vamos sorrir e cantar! Funcionou! Aproveite para ir tomar um café sossegado : )

Obs.: o IP privado 10.0.0.1 foi usado para efeito didático apenas, portanto, esse IP será o do seu servidor onde está rodando o freeradius.

Agradeço o apoio inestimável dos colegas Boni, Ettore, Tati, Roberto e Sidinei; e a confiança do parceiro Rogério Herrera, por me confiar esse desafio.

Um grande abraço a todos e sucesso!

Wagner Pereira
wpereiratecnologia@gmail.com
twitter: @wpereiratecno


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts