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.007 ]

Por: Thomaz Belgine em 05/10/2007


Compilando o Kernel



Depois de instalar o FreeBSD, compilar o kernel.

Via sysinstall:

# sysinstall
Configure
Distributions
[x] src
[x] sys

# cd /sys/i386/conf/
# cp GENERIC nome_da_maquina
# ee nome_da_maquina


Incluir no final do arquivo:

options         IPFIREWALL              #firewall
options         IPFIREWALL_VERBOSE      #enable logging to syslogd(8)
options         IPFIREWALL_VERBOSE_LIMIT=100    #limit verbosity
options         IPFIREWALL_DEFAULT_TO_ACCEPT    #allow everything by default
options         IPFIREWALL_FORWARD      #packet destination changes
options         IPFILTER
options         IPFILTER_LOG
options         IPDIVERT                #divert sockets
options         IPSTEALTH               #support for stealth forwarding
options         DUMMYNET
options         HZ=1000
options         ALTQ
options         ALTQ_CBQ        # Class Bases Queueing
options         ALTQ_RED        # Random Early Drop
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler
options         ALTQ_CDNR       # Traffic conditioner
options         ALTQ_PRIQ       # Priority Queueing
options         NETGRAPH
options         NETGRAPH_PPPOE
options         NETGRAPH_SOCKET
options         NETGRAPH_IFACE
options         BRIDGE

# config SEUKERNEL
# cd ../compile/SEUKERNEL
# make depend
# make
# make install
# reboot


    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

Teste a vulnerabilidade de seu PC

Postfix autenticando com o SASL no Conectiva 8

Apache2 + PHP + PostgreSQL + phpPgAdmin

Provedor de Internet com BrazilFW - BFW

Servidor web com CentOS + Apache

  
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