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

Por: Thomaz Belgine em 05/10/2007


Atualizar o ports



Atualizar o ports antes de começar a instalar os pacotes:

# portsnap fetch extract

Instalando o PPPoE

Edite o arquivo:

# ee /etc/ppp/ppp.conf

Apague tudo e cole as configs abaixo:

########PPP.CONF########
#########BEGIN##########
default:
set log Chat Command Phase  #Ativa o cliente logado.
enable pap                  #Ativa a autenticação pap (password authentication protocol)
enable chap                 #Ativa a conta chap (challenge handshake authentication protocol)
enable echo                 #Envio de echos LCP (Verifica se o link está ativo)
set echoperiod 5            #Tempo de envio para cada echo (Depois de 5 falhas o tun é desconectado)
allow mode direct           #Ativa o ppp bridging
enable proxy                #Ativa o ppp proxyarping
disable ipv6cp              #Como não usamos IPV6, não queremos os seus erros
set mru 1492                #Coloque o MRU abaixo de 1500
set mtu 1492                #Coloque o MRU abaixo de 1500
set ifaddr 192.168.1.1 192.168.1.2-192.168.1.100 # Gateway e range de ips
set speed sync              #
set timeout 0               #
enable lqr                  #
accept dns                  #Aceita DNS
set radius /etc/radius.conf #Ativa o Radius e especifica onde está o arquivo de conexão
##########END###########
########PPP.CONF########

Edite o arquivo /etc/radius.conf (crie este arquivo).

######RADIUS.CONF######
#########BEGIN#########
####tipo###server######senha##
     auth  localhost    senharadius
     acct  localhost    senharadius

######RADIUS.CONF######
##########END##########

Edite o /etc/rc.conf:

########RC.CONF########
#########BEGIN#########
defaultrouter="200.200.200.1"

gateway_enable="YES"
hostname="pppoe.dominio.com.br"

ifconfig_rl0="UP"

ifconfig_bge0="inet 200.200.200.200 netmask 255.255.255.0" #IP WAN

sendmail_enable="NONE"
keymap="us.iso"
linux_enable="YES"
sshd_enable="YES"
usbd_enable="YES"

#MYSQL
mysql_enable="YES"

#FREERADIUS
radiusd_enable="YES"

## SERVIDOR PPPOE
pppoed_enable="YES"
pppoed_flags="-d -P /var/run/pppoed.pid -a "server" -l "default" "
pppoed_interface="rl0"

#IPFW
firewall_enable="YES"
firewall_script="/etc/ipfw.rules"

#NAT
natd_enable="YES"
natd_flags="-config /etc/natd.conf"

##########END##########
########RC.CONF########

Edite o arquivo /etc/natd.conf:

#######NATD.CONF#######
#########BEGIN#########
use_sockets yes
alias_address IP_EXT
punch_fw 500:100
##########END##########
#######NATD.CONF#######

Edite o firewall em /etc/ipfw.rules:

#######IPFW.RULES######
#########BEGIN#########

/sbin/ipfw -f flush
/sbin/ipfw add divert natd via bge0
/sbin/ipfw add pass all from any to any

###########END#########
#######IPFW.RULES######

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

Você conhece o RouterOS Mikrotik?

Aprendendo e utilizando IRC

Sistemas Operacionais Online

Criando um gateway de internet com o Debian

A Desinformação em Época da Tecnologia de Informação

  
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