The FreeBSD FAQ - The Power to Help
The FreeBSD FAQ - The Power to Help
This site is Powered by PAR Teleon

S E Ç Õ E S
B U S C A
+
D E S T A Q U E
CONTATO
PÁGINA ANTIGA
TELEON INTERNET
E N Q U E T E
Se apos a conclusao, a traducao da documentacao oficial do FreeBSD, fosse impressa em livro, voce:

Usaria apenas a documentacao na internet como referencia.Faria o download de toda a documentacao na internet e imprimiria eu mesmo.
Compraria o livro, para te-lo em maos, mas usaria a referencia na internet com maior frequencia do que o livro.Compraria o livro, e seria minha unica referencia.
Compraria varias copias do livro e daria de presente a varias pessoas que deveriam ser devidamente catequisadas.







Jean M. Melo © - 2001
Todos os direitos reservados






H O W   T O 


Índice


17/12/01 17:40 - Montando um servidor PPPoE com autenticacao por radius + controle de volume de usuarios


Jean Milanez Melo


Esta solucao pode ser usada em provedores q pretendem montar um servico de banda larga e tambem em empresas em geral. Antes de comecar gostaria de esclarecer q todas as configuracoes aqui descritas foram feitas em um PII 550MHZ, 256RAM, 6GB de hard disk no sistema operacional FreeBSD versao 4.3, portanto recomendo primeiro a instalacao do sistema para que a solucao seja feita. Nesse tutorial faremos a solucao em 4 etapas: montagem do servidor PPPoE, Montagem do radius, montagem do controle de volume de usuarios e limitacao de banda por IP. 1) Montando o servidor PPPoE (PPP over Ethernet). ------------------------------------------------- Edite seu kernel e coloque as seguintes opcoes nele: options NETGRAPH options NETGRAPH_PPPOE options NETGRAPH_SOCKET options NETGRAPH_IFACE options IPFIREWALL options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE options IPFIREWALL_FORWARD options IPDIVERT options BRIDGE options DUMMYNET Depois de colocada as opcoes recompile seu kernel: # cd /sys/i386/conf/ # config SEUKERNEL # cd ../../compile/SEUKERNEL # make depend # make # make install agora crie o arquivo do servidor pppoe em /etc/ppp/ppp.conf com as seguintes linhas: ----------------------recorta /etc/ppp/ppp.conf------------ pppoe-in: allow users enable chap enable pap allow mode direct set mru 1492 set mtu 1500 set speed sync enable lqr set ifaddr 192.168.1.1 192.168.2.1-192.168.3.255 # No lugar de 192.168.1.1 coloque o IP da sua placa de rede q vai ser a # servidora pppoe. No lugar de 192.168.2.1-192.168.3.255 coloque os IPs # que vc quer q seja atribuido aos seus usuarios quando conectarem. accept dns # Coloque essa linha abaixo para que futuramente ela possa ler suas # informacoes do radius /etc/radius.conf load server set radius /etc/radius.conf Salve o arquivo /etc/ppp/ppp.conf Agora crie/edite o arquivo /etc/radius.conf e coloque as seguintes linhas: #/etc/radius.conf # A simple entry using all the defaults: auth 192.168.1.1 teste acct 192.168.1.1 teste # # substitua o IP 192.168.1.1 por seu IP da placa q vai autenticar Agora adicione as seguintes linhas no seu /etc/rc.conf para que o pppoe seja inicializado no boot: gateway_enable="YES" pppoed_enable="YES" pppoed_provider="pppoe-in" pppoed_flags="-P /var/run/pppoed.pid" pppoed_interface="rl1" #substituia rl1 por sua interface de rede firewall_enable="YES" firewall_script="/etc/ipfw.rules" firewall_quiet="NO" # Adicione tambem essas regras abaixo se vc quiser fazer NAT em sua rede natd_program="/sbin/natd" natd_enable="YES" natd_interface="rl1" #substitua rl1 por sua interface de rede natd_flags="-l -f /etc/natd.conf" Salve o arquivo. No /etc/natd.conf coloque as seguintes linhas para ter acesso a ftp e dcc. dynamic yes same_ports yes use_sockets yes Salve o arquivo. Agora crie as seguintes regras no /etc/ipfw.rules /sbin/ipfw -f flush /sbin/ipfw add divert natd all from any to any via rl0 /sbin/ipfw add pass all from any to any Pronto o PPPoE ja esta pronto, pode inicia-lo agora com o comando: # /usr/libexec/pppoed -P /var/run/pppoed.pid -p pppoe-in rl0 ou se preferir reinicie sua maquina. Para clientes Windows se conectarem via PPPoE recomendo o uso do RASPPPoE que se encontra em anexo. 2) Montagem do radius ---------------------- O Radius fara a autenticacao dos seus usuarios, aqui usaremos o radiusd-cistron versao 1.6.4 que pode ser pego em ftp://ftp.freeradius.org/pub/radius/ . Copie o radiusd-cistron-1.6.4.tar.gz para /usr/ports/distfiles e depois digite: # cd /usr/ports/net/radiusd-cistron # make install Com isso o radius foi instalado, e tb foi colocado automaticamente um shell script em /usr/local/etc/rc.d para que ele seja iniciado no boot do sistema. Agora vamos configurar o radius. Os arquivos de configuracao dele sao instalados por default em /usr/local/etc/raadb . Edite o arquivo clientes e coloque o seu IP da placa de rede e a "key" por ex: # Client Name Key #---------------- ---------- #portmaster1.isp.com testing123 #portmaster2.isp.com testing123 #proxyradius.isp2.com TheirKey 192.168.1.1 teste Agora edite o arquivo naslist e coloque seu IP o nome da maquina e o tipo. Os tipos validos sao: "livingston", "cisco", "multitech", "computone", "max40xx", "portslave", "tc", "pathras", "usrhiper", "other". Por ex: # NAS Name Short Name Type #---------------- ---------- ---- 192.168.1.1 falcao other Agora edite o arquivo mais importante que eh o users , eh nele que ficam todos os seus usuarios q serao autenticados no radius. Coloque nele as seguintes linhas: # essa primeira linha deve ser padrao, ela deve ser colocada no arquivo DEFAULT Framed-Protocol = PPP Simultaneous-Use = 1, Fall-Through = Yes # substitua "LOGIN" pelo login do seu usuario, "SENHA" pela senha do seu # usuario e "IP" pelo IP fixo que seu usuario sempre recebera qdo # conectar. O "IP" tem q ser dado pois ele eh fundamental para que mais # pra frente seja limitado o volume de trafego por usuario. LOGIN Framed-Protocol = PPP, Password = SENHA Framed-IP-Address = IP, Service-Type = Framed-User, Framed-MTU = 1492, Framed-Protocol = PPP, Framed-Compression = Van-Jacobson-TCP-IP # abaixo um exemplo de como ficaria: joao Framed-Protocol = PPP, Password = abcd1234 Framed-IP-Address = 192.168.3.3, Service-Type = Framed-User, Framed-MTU = 1492, Framed-Protocol = PPP, Framed-Compression = Van-Jacobson-TCP-IP Pronto, seu radius esta configurado. Rode-o com executando: # radiusd -y Eh importante salientar que o radius possui diversas outras configuracoes, como: autenticao por grupo, liberacao que mais de um usuario logue com o mesmo login, entre outras coisas. Para isso aconselho que seja lida a documentacao, ja que aqui estamos configurando somente o necessario para a nossa solucao. 3) Montagem do controle de volume de usuarios. (IPA - IP Accounting Software) --------------------------------------------------------------------------- Primeiramente vou explicar oq eh controle de volume de usuarios. Essa parte pode ser uma das mais uteis para empresas e para servicos de banda larga, isso porque atraves do IPA ( IP Accounting Software ) que eh o programa q utilizaremos aqui e tb esta em anexo, nos podemos controlar o trafego dos usuarios por IP ( por isso eh tao importante setar o IP do usuario no radius). Por ex, vamos supor que vc gostaria q o usuario joao que sempre conecta com o IP 192.168.3.3 (setado no radius) so pudesse trafegar 15MB por dia, e que se ele ultrapasse esse limite ele seria bloqueado, sendo desbloqueado automaticamente no outro dia e ainda seria direcionado para uma pagina falando q ele ultrapassou o seu limite diario. Com o IPA isso q foi descrito acima eh possivel, eh oq veremos abaixo. Primeiro pegue o ipa em http://www.simon.org.ua/ipa e descompacte-o e instale-o: # tar zxfv ipa-1.1.3.tar.gz # cd ipa-1.1.3 # make # make install # cd /usr/local/etc/rc.d; mv ipa.sh.sample ipa.sh O arquivo de configuracao do ipa fica em /usr/local/etc/ipa.conf eh nele que sao colocadas todas as configuracoes. Usaremos no arquivo de configuracao o exemplo citado acima, mas vc pode muda-lo de acorda com suas necessidades. Edite e coloque no /usr/local/etc/ipa.conf as seguintes linhas: global { update_db_time = 1m } rule 192.168.3.3 { ipfw = 214 215 startup { exec = /sbin/ipfw add 214 allow all from 192.168.3.3 to any exec = /sbin/ipfw add 215 allow all from any to 192.168.3.3 } limit 15m { byte_limit = 15m info = 15 Mbytes por dia zero_time = +d reach { exec = /sbin/ipfw add 210 fwd 192.168.1.1,80 tcp from 192.168.3.3 to any 80 exec = /sbin/ipfw add 211 deny tcp from any to 192.168.3.3 } expire { expire_time = +d exec = /sbin/ipfw del 210 exec = /sbin/ipfw del 211 } } } Salve o arquivo. Vou agora explicar parte por parte da configuracao para que caso vc queira mudar/adicionar mais coisas, fique facil: global { update_db_time = 1m } # Essa linha como o proprio nome diz, ela eh global, sera lida # por todas as regras. O update_db_time significa de quanto em quanto # tempo sera feito o update do volume de dados trafegados pelo(s) IP(s). ------------------------ rule 192.168.3.3 { # "rule" no caso seria o nome da regras, ai fica a criterito de cada um # dar o nome que quiser a regras, mas em nosso caso eh melhor dar o nome # da regra o numero IP para que nao fique confuso. ---------------------- ipfw = 214 215 startup { exec = /sbin/ipfw add 214 allow all from 192.168.3.3 to any exec = /sbin/ipfw add 215 allow all from any to 192.168.3.3 } # Essas regras sao iniciadas na inicializacao do ipa, elas sao muito # importantes pois eh atraves delas eh q se faz a contagem do numero de # bytes utilizado pelo IP. ------------------------ limit 15m { # Caso queira mudar o limite vc pode alterar para Nk, Nm, Ng onde "N" eh o # numero de limite "k" kbytes, "m" mgbytes e "g", gigabytes. byte_limit = 15m # Caso queira mudar o limite vc pode alterar para Nk, Nm, Ng onde "N" eh o # numero de limite "k" kbytes, "m" mgbytes e "g", gigabytes. info = 15 Mbytes por dia # Somente uma informacao para controle. vc pode alterar com o seu limite # desejado. zero_time = +d # zero_time, significa qdo sera zerada a contagem de bytes, +d significa # que sera zerada no proximo dia, vc pode usar Ns, Nm, Nh, +d, +m onde # "N" eh o tempo, "s" segundos, "m" megabytes e "h" hora, +d dia e +m mes. reach { # Caso atinja o limite executar os comandos abaixo: exec = /sbin/ipfw add 210 fwd 192.168.1.1,80 tcp from 192.168.3.3 to any 80 # Essa linha de execucao do ipfw eh importante pois eh ela que redireciona # o usuario para a pagina do servidor falando q ele ultrapassou o seu # limite. Troque o IP 192.168.1.1 para o IP do seu servidor e o IP # 192.168.3.3 para o IP do seu cliente. Com isso qdo chegar ao limite dele # ele ao tentar acessar uma pagina caira diretamente na pagina do # servidor. exec = /sbin/ipfw add 211 deny tcp from any to 192.168.3.3 # Essa linha bloqueia qqer pacote tcp vindo de qqer lugar para o seu # cliente de IP 192.168.3.3 ------------------------ expire { # expiracao expire_time = +d # tempo de expiracao, esse sera quanto tempo o usuario ficara bloqueado, # por ex: como acima esta "+d" significa que ele sera desbloqueado, para # que possa acessar novamente somente no outro dia. Pode ser usado tb Ns, # Nm, Nh onde "N" eh o tempo, "s" segundos, "m" minutos e "h" hora. exec = /sbin/ipfw del 210 exec = /sbin/ipfw del 211 # Depois um dia bloqueado, eh liberado novamente o acesso do usuario eh # deletando-se a regras 210 e 211 do ipfw Agora seu ipa esta pronto para ser usado. Eh importante ressaltar que no arquivo ipa.conf vc pode acrescentar quantos IPs quiser basta criar uma nova "rule" para cada IP. Por ex vamos supor que quero criar regras para 3 IPs 192.168.2.1, 192.168.2.2 e 192.168.2.3 ai neste caso ficaria assim: global { update_db_time = 1m } rule 192.168.2.1 { ipfw = 214 215 startup { exec = /sbin/ipfw add 214 allow all from 192.168.2.1 to any exec = /sbin/ipfw add 215 allow all from any to 192.168.2.1 } limit 100k { byte_limit = 100k info = 100 Kbytes por dia zero_time = +d reach { exec = /sbin/ipfw add 210 fwd 192.168.1.1,80 tcp from 192.168.2.1 to any 80 exec = /sbin/ipfw add 211 deny tcp from any to 192.168.2.1 } expire { expire_time = +d exec = /sbin/ipfw del 210 exec = /sbin/ipfw del 211 } } } rule 192.168.2.2 { ipfw = 224 225 startup { exec = /sbin/ipfw add 224 allow all from 192.168.2.2 to any exec = /sbin/ipfw add 225 allow all from any to 192.168.2.2 } limit 10m { byte_limit = 10m info = 10m Mbytes por dia zero_time = +d reach { exec = /sbin/ipfw add 220 fwd 192.168.1.1,80 tcp from 192.168.2.2 to any 80 exec = /sbin/ipfw add 221 deny tcp from any to 192.168.2.2 } expire { expire_time = 1h exec = /sbin/ipfw del 220 exec = /sbin/ipfw del 221 } } } rule 192.168.2.3 { ipfw = 234 235 startup { exec = /sbin/ipfw add 234 allow all from 192.168.2.3 to any exec = /sbin/ipfw add 235 allow all from any to 192.168.2.3 } limit 1g { byte_limit = 1g info = 1 Gbytes por dia zero_time = 1h reach { exec = /sbin/ipfw add 230 fwd 192.168.1.1,80 tcp from 192.168.2.3 to aany 80 exec = /sbin/ipfw add 231 deny tcp from any to 192.168.2.3 } expire { expire_time = 10s exec = /sbin/ipfw del 230 exec = /sbin/ipfw del 231 } } } Caso vc queria informacoes sobre como esta um determinado IP, pode-se usar o ipastat que mostra estatisticas de cada IP, a sintaxe de uso eh: # ipastat -r regras -l limite Ex: # ipastat -r 192.168.2.1 -l 100k +-------------+-----------+-------+--------------------+ | Rule | Rule.Info | Limit | Limit.Info | +-------------+-----------+-------+--------------------+ | 192.168.2.1 | | 100k | 100 Kbytes por dia | +-------------+-----------+-------+--------------------+ +-------+------------+--------+------------+ | Cntr | Byte_limit | Cntr | Byte_limit | | Bytes | Bytes | Mbytes | Mbytes | +-------+------------+--------+------------+ | 0 | 102400 | 0 | 0 | +-------+------------+--------+------------+ +--------+---------------------+ | Status | Date | +--------+---------------------+ | Start | 2001.07.11/18:36:59 | | Zero | 2001.07.12/00:00:00 | +--------+---------------------+ Para outras regras do ipastat digite: # ipastat --h Para maiores detalhes sobre o ipa recomendo as manpages dele # man ipa # man ipa.conf Ha tambem otimos exemplos de configuracao do IPA em: /usr/local/share/ipa/examples 4) Limitacao de banda por IP ------------------------------ Essa parte do howto eh opcional, so faca se vc quiser limitar banda por IP ou classe de seus usuarios. Vamos pegar ainda o exemplo citado na secao 3 onde o usuario joao que tem o IP 192.168.3.3, onde vc quer limitar seu IP a 128k. Para isso use a seguinte sintaxe com o ipfw: # ipfw add 1 pipe 10 tcp from any to 192.168.3.3 # ipfw pipe 10 config bw 128Kbit/s Agora caso queira limitar sua classe inteira: # ipfw add 2 pipe 11 tcp from any to 192.168.3.0/24 # ipfw pipe 11 config bw 128Kbit/s Agora caso queira limitar a entrada e saida de trafego ou seja o download/upload da rede faca o seguinte: # ipfw add 4 pipe 13 tcp from 192.168.3.0/24 to any out # ipfw add 5 pipe 14 tcp from any to 192.168.3.0/24 in # ipfw pipe 13 config bw 128Kbit/s # ipfw pipe 14 config bw 128Kbit/s Substitua os valores acima ou o IP de acordo com sua necessidade. Agora para que isso seja iniciado no boot coloque no arquivo /etc/ipfw.rules ( que foi criado na secao 1) as seguintes regras: /sbin/ipfw add 1 pipe 10 tcp from any to 192.168.3.3 /sbin/ipfw pipe 10 config bw 128Kbit/s Nota: ou uma das regras acima citada nos exemplos que melhor lhe satisfazer. salve o arquivo e pronto, qdo sua maquina for rebootada as configuracoes ja serao setadas automaticamente. Finalmente chegamos ao final, agora seu servidor esta pronto para ser colocado para uso, reinicie e boa sorte, qualquer duvida me mande um email. Jean Milanez Melo

Jean Milanez Melo




Entrar em contato Enviar este artigo a um amigo Preparar para impressão Índice Topo da página


 

PrincipalBusca AvançadaEnqueteContatoTeleon Internet  
Enquetes antigas | FAQ | FreeBSD Desktop | Informacoes | Links | How To