|
S E Ç Õ E S |
|
|
B U S C A |
|
|
|
D E S T A Q U E |
|
|
 |
|
|
 |
|
|
 |
|
E N Q U E T E |
|



|
- 2001
Todos os direitos reservados
|
|
|
H O W T O
|

|
|
|
|
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
|
|