Escolar Documentos
Profissional Documentos
Cultura Documentos
0
Procedimentos para a instalao do Freeradius 1.1.7 com suporte a
EAP-TLS e PEAP-TTLS MSCHAPv2 No Debian Etch 4.0 Kernel 2.6.19.
cd /usr/local/src
wget ftp://ftp.freeradius.org/pub/radius/freeradius-1.1.7.tar.gz
tar -zxvf freeradius-1.1.7.tar.gz
cd freeradius-1.1.7
cd /usr/local/src/freeradius-1.1.7
cp rules ../
mcedit rules
./rules
make
make install
# There are many EAP types, but the server has support
# for only a limited subset. If the server receives
# a request for an EAP type it does not support, then
# it normally rejects the request. By setting this
# configuration to "yes", you can tell the server to
# instead keep processing the request. Another module
# MUST then be configured to proxy the request to
# another RADIUS server which supports that EAP type.
#
# If another module is NOT configured to handle the
# request, then the request will still end up being
# rejected.
ignore_unknown_eap_types = no
# Supported EAP-types
#
# We do NOT recommend using EAP-MD5 authentication
# for wireless connections. It is insecure, and does
# not provide for dynamic WEP keys.
#
md5 {
}
# Cisco LEAP
#
# We do not recommend using LEAP in new deployments.
See:
# http://www.securiteam.com/tools/5TP012ACKE.html
#
# Cisco LEAP uses the MS-CHAP algorithm (but not
# the MS-CHAP attributes) to perform it's authentication.
#
# As a result, LEAP *requires* access to the plain-text
# User-Password, or the NT-Password attributes.
# 'System' authentication is impossible with LEAP.
#
leap {
}
## EAP-TLS
#
# To generate ctest certificates, run the script
#
# ../scripts/certs.sh
#
# The documents on http://www.freeradius.org/doc
# are old, but may be helpful.
#
# See also:
#
#
http://www.dslreports.com/forum/remark,9286052~mode=flat
#
tls {
private_key_password = whatever
private_key_file = ${raddbdir}/certs/cert-srv.pem
#
# For DH cipher suites to work, you have to
# run OpenSSL to create the DH file first:
#
# openssl dhparam -out certs/dh 1024
#
dh_file = ${raddbdir}/certs/dh
random_file = ${raddbdir}/certs/random
#
# This can never exceed the size of a RADIUS
# packet (4096 bytes), and is preferably half
# that, to accomodate other attributes in
# RADIUS packet. On most APs the MAX packet
# length is configured between 1500 - 1600
# In these cases, fragment size should be
# 1024 or less.
#
# fragment_size = 1024
#
# If check_cert_issuer is set, the value will
# be checked against the DN of the issuer in
# the client certificate. If the values do not
# match, the cerficate verification will fail,
# rejecting the user.
#
# check_cert_issuer =
"/C=GB/ST=Berkshire/L=Newbury/O=My Company Ltd"
#
# If check_cert_cn is set, the value will
# be xlat'ed and checked against the CN
# in the client certificate. If the values
# do not match, the certificate verification
# will fail rejecting the user.
#
# This check is done only if the previous
# "check_cert_issuer" is not set, or if
# the check succeeds.
#
# check_cert_cn = %{User-Name}
#
# Set this option to specify the allowed
# TLS cipher suites. The format is listed
# in "man 1 ciphers".
cipher_list = "DEFAULT"
}
###############################################
###
#
# !!!!! WARNINGS for Windows compatibility !!!!!
#
###############################################
###
#
# If you see the server send an Access-Challenge,
# and the client never sends another Access-Request,
# then
#
# STOP!
#
# The server certificate has to have special OID's
# in it, or else the Microsoft clients will silently
# fail. See the "scripts/xpextensions" file for
# details, and the following page:
#
# http://support.microsoft.com/kb/814394/en-us
#
# For additional Windows XP SP2 issues, see:
#
# http://support.microsoft.com/kb/885453/en-us
#
# Note that we do not necessarily agree with their
# explanation... but the fix does appear to work.
#
###############################################
###
#
# The tunneled EAP session needs a default EAP type
# which is separate from the one for the non-tunneled
# EAP module. Inside of the TLS/PEAP tunnel, we
# recommend using EAP-MS-CHAPv2.
#
# The PEAP module needs the TLS module to be installed
# and configured, in order to use the TLS tunnel
# inside of the EAP packet. You will still need to
# configure the TLS module, even if you do not want
# to deploy EAP-TLS in your network. Users will not
# be able to request EAP-TLS, as it requires them to
# have a client certificate. EAP-PEAP does not
# require a client certificate.
#
peap {
# The tunneled EAP session needs a default
# EAP type which is separate from the one for
# the non-tunneled EAP module. Inside of the
# PEAP tunnel, we recommend using MS-CHAPv2,
# as that is the default type supported by
# Windows clients.
default_eap_type = mschapv2
#
# This takes no configuration.
#
# Note that it is the EAP MS-CHAPv2 sub-module, not
# the main 'mschap' module.
#
# Note also that in order for this sub-module to work,
# the main 'mschap' module MUST ALSO be configured.
#
# This module is the *Microsoft* implementation of MS-
CHAPv2
# in EAP. There is another (incompatible) implementation
# of MS-CHAPv2 in EAP by Cisco, which FreeRADIUS does
not
# currently support.
#
mschapv2 {
}
}
1 - radiusd.conf
prefix = /usr/local/src
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = ${prefix}/var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
# variveis definidas na instalao, essas opes
# foram disponibilizadas para que voc no precise
# recompilar para mudar os arquivos de lugar
# voc pode usar essas variveis quando definir o
# valor de algum parmetro ao longo desse arquivo.
log_file = ${logdir}/radius.log
# arquivo de log principal, nesse arquivo ficaro
# todas as mensagem de erro, tentativas de
# conexo, etc...
libdir = ${exec_prefix}/lib
# pasta de bibliotecas, se elas
# se encontrarem em varias pastas,
# separe as localizaes
# por : , tipo: libdir = /usr/lib:/usr/local/lib
pidfile = ${run_dir}/radiusd.pid
# arquivo onde ser armazenado o id
# do processo principal do freeradius
user = nobody
group = nobody
# definio do usurio e grupo dos processos filhos do radiusd
# se voc no especificar, o usurio que deu partida
# ser usado (root), se
# voc usar o arquivo /etc/shadow para autenticao,
# defina o grupo como shadow, vale lembrar
# que o usurio que executa o radiusd deve ter permisso
# de escrita no diretrio de log
max_request_time = 30
# define o tempo que o processo filho segura o pedido,
# caso o tempo limite seja atingido, o servidor retorna
# acesso negado. Por exemplo: se voc define 2 segundos
# e usa um banco de dados mysql sobrecarregado que demora
# 5 segundos para concluir uma pesquisa, seu servidor nunca
# vai dar acesso a ningum!
delete_blocked_requests = no
# se no parmetro max_request_time voc
# definiu o valor 30 segundos, e o cliente
# perdeu a pacincia e enviou outra solicitao sem
# ter concludo a primeira,
# o freeradius no ficara fazendo trabalho
# repetitivo simultaneamente. Se voc definir
# esse parmetro como yes, ao chegar a segunda
# requisio do mesmo cliente com a mesma
# "pergunta", ele desistir da primeira para
# atender a nova solicitao.
cleanup_delay = 5
# esse valor funciona da seguinte maneira:
# se o NAS ou RAS enviou uma pergunta e
# a resposta foi perdida na rede, o NAS tornar
# fazer a pergunta, todo o processo de autenticao
# ser realizado novamente. Para evitar isso o freeradius
# manter a resposta no cache pelo tempo definido aqui
# (em segundos), assim, se o pacote resposta for perdido
# e a pergunta for repetida, a resposta ser imediata,
# usando assim o mnimo de processamento.
max_requests = 1024
# define o nmero mximo de
# requisies que o freeradius pode atender
# simultaneamente, somando todas as requisies
# atendidas pelos processos filhos, assim,
# se voc tem 4 processo filhos, cada um
# poder atender 256 perguntas simultaneamente
# ATENO: as respostas cacheadas pela opo
# cleanup_delay so contabilizadas. Se voc colocou
# cleanup_delay com um valor alto, seu radius
# ficar exposto a um DOS
bind_address = *
# isso far o freeradius escutar em
# um endereo especifico, * inclui todos
# os endereos ip do host, voc pode
# usar um FQDN, mas antes tenha certeza
# de que a resoluo de dns estar disponvel
# no momento em que o servidor radius inicia
port = 0
# porta de escuta. Equipamentos antigos tem a porta
# 1645 como padro de autenticao e 1646 como
# contabilidade. A RFC 2138 mudou essa porta para
# 1812 autenticao e 1813 contabilidade. Equipamentos
# novos provavelmente ter essa porta como padro.
# 0 (zero) far com que a porta seja pesquisada
# em /etc/services, esse parmetro pode ser
# sobreposto pela opo -p do comando radiusd
#listen {
# ipaddr = *
# endereo ip ou FQDN, mesmos critrios
# usados em bind_address
# port = 0
# porta de escuta, mesmos critrios
# usados em port
hostname_lookups = no
# define se o nome DNS dos clientes
# ser pesquisado a partir do ip. Se definir como yes,
# toda vez que uma requisio chegar de
# um endereo ip, o freeradius ir consultar
# o dns para usar o nome no log de atividades.
# o valor no a melhor opo, no sobrecarrega
# o servidor DNS
allow_core_dumps = no
# ative essa opo para depurar erros no
# servidor, caso contrario deixe como est
regular_expressions = yes
extended_expressions = yes
# ativa ou desativa expresses regulares
# nos parmetros dos pacotes, desativar
# uma boa idia embora o padro seja
# yes
log_stripped_names = no
# registra nos logs os dados completos do
# campo User-Name do pacote de autenticao,
# se definido como yes, do jeito que chegar,
# ser usado.
log_auth = no
# deseja logar atividades de autenticao?
# se voc tem milhares de clientes logando
# simultaneamente, significa
# que seu log vai crescer muito com essa
# opo ativa. Eu sempre coloco yes pois
# fica fcil e rpido descobrir por que
# certo cliente (leigo) no consegue autenticar
log_auth_badpass = no
# Logar senhas quando a autenticao falhar?
# embora seja til para dar suporte - usurio
# digitando senha incorretamente (branco, maisculas, etc...),
# a privacidade do usurio fica reduzida e uma brecha de segurana,
# todas as senhas sero registradas no log
log_auth_goodpass = no
# idntica a opo acima, porm se
# aplica para autenticaes bem sucedidas.
usercollide = no
lower_user = no
lower_pass = no
# essas duas opes so muito importantes:
# se o usurio deixar o CapsLock ligado,
# significa que no conseguir se autenticar
# e isso significa uma insatisfao ou uma
# chamada desnecessria no suporte.
# Temos 3 opes: after, before e no
# suponhamos que eu informe meu login: PatrickBrandao
# "after" far com que a autenticao
# seja primeiro testada com o valor
# informado, se falhar, aplica um lowercase
# nos valores e tenta novamente. Sendo a primeira
# tentativa com "PatrickBrandao" e a segunda com "patrickbrandao"
# "before" far com que um lowercase seja
# aplicado antes de pesquisar a base de
# dados, que receber "patrickbrandao"
# "no" desativa esse efeito passando para
# a base de dados o mesmo valor recebido: "PatrickBrandao"
nospace_user = no
nospace_pass = no
# as duas opes acima
# servem para retirar espaos de nome
# de usurio e senha. Os seus clientes
# podem, sem perceber, colocar
# um espao no final ou no comeo
# das credenciais, o que gera uma
# chamada desnecessria no suporte tcnico
# trs valores podero ser escolhidos:
# after, before e no
checkrad = ${sbindir}/checkrad
# comando ao usar para checar conexes simultneas
reject_delay = 1
# define o tempo de espera antes de enviar
# uma resposta de acesso negado.
# essa opo proteje seu servidor
# contra ataques de fora bruta
# Escolha de 0 a 5, 0 (zero) far com que
# a resposta seja enviada imediatamente
status_server = no
# permite ou nega o envio de pacotes
# de status do usurio. No muito importante
# mas alguns NAS's com keep-alive podem
# precisar desse recurso para checar o
# status de uma sesso.
}
$INCLUDE ${confdir}/clients.conf
# quando falo de clientes NAS no
# estou me referindo a seus clientes de
# conexo discada, mas sim aos dispositivos
# em contato com eles que se encarregam de
# procurar o radius para validar o usurio,
# esses equipamentos podem ser RAS como
# cyclades, cisco, etc... ou mesmo servios
# em qualquer servidor que se baseia numa
# autenticao com radius
# sesso de snmp ----------------------------
snmp = no
$INCLUDE ${confdir}/snmp.conf
# ativa o suporte a monitoramento por snmp
# no freeradius
max_servers = 32
# nmero mximo de processos filhos
# atendendo solicitaes
min_spare_servers = 3
max_spare_servers = 10
# regula o nmero de processos para manter
# um bom desempenho
max_requests_per_server = 0
# nmero mximo de solicitaes feitas
# a um processo filho antes de ser destrudo
# 0 (zero) para infinito, mas no recomendvel
# pois um processo filho pode consumir recursos
# que nunca ir liberar, 250 um bom valor.
}
pap {
encryption_scheme = crypt
}
# define o tipo de
# criptografia usada na autenticao PAP
# valores disponveis:
# clear: sem criptografia, texto plano
# crypt: criptografia do unix
# md5: criptografia MD5
# sha1: criptografia SHA1
# padro: crypt
chap {
authtype = CHAP
}
# adiciona suporte a autenticaes
# usando CHAP
pam {
pam_auth = radiusd
}
# suporte PAM dos sistemas unix, configura
# o pamd em /etc/pam.d/ para usar esse tipo
# de autenticao
cache_reload = 600
# tempo em segundos para recarregar
# o cache de logins do sistema
radwtmp = ${logdir}/radwtmp
}
start_tls = no
# coloque yes se deseja usar tls para criptografar
# os dados nas conexes com o LDAP e
# configure e descomente os valores abaixo
# tls_cacertfile = /path/to/cacert.pem
# tls_cacertdir = /path/to/ca/dir/
# tls_certfile = /path/to/radius.crt
# tls_keyfile = /path/to/radius.key
# tls_randfile = /path/to/rnd
# tls_require_cert = "demand"
dictionary_mapping = ${raddbdir}/ldap.attrmap
# define o arquivo de mapas de atributos
# do seu diretorio
ldap_connections_number = 5
# password_header = "{clear}"
# password_attribute = userPassword
# groupname_attribute = cn
# groupmembership_filter = "(|(&(objectClass=GroupOfNames)
(member=%{Ldap-UserDn})) (&(objectClass=GroupOfUniqueNames)
(uniquemember=%{Ldap-UserDn})))"
# groupmembership_attribute = radiusGroupName
timeout = 4
timelimit = 3
net_timeout = 1
# compare_check_items = yes
# do_xlat = yes
# access_attr_used_for_allow = yes
}
# ----------------------------------------
checkval {
item-name = Calling-Station-Id
check-name = Calling-Station-Id
data-type = string
#notfound-reject = no
}
preprocess {
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
with_ascend_hack = no
ascend_channels_per_line = 23
with_ntdomain_hack = no
with_specialix_jetstream_hack = no
with_cisco_vsa_hack = no
}
files {
usersfile = ${confdir}/users
acctusersfile = ${confdir}/acct_users
compat = no
}
detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
}
# detail auth_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
# detailperm = 0600
#}
# detail reply_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
# detailperm = 0600
#}
# detail pre_proxy_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/pre-proxy-detail-%Y%m
%d
# detailperm = 0600
#}
# detail post_proxy_log {
# detailfile = ${radacctdir}/%{Client-IP-Address}/post-proxy-detail-%Y
%m%d
# detailperm = 0600
#}
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address,
NAS-Port"
}
ippool main_pool {
range-start = 192.168.1.1
range-stop = 192.168.3.254
netmask = 255.255.255.0
cache-size = 800
session-db = ${raddbdir}/db.ippool
ip-index = ${raddbdir}/db.ipindex
override = no
maximum-timeout = 0
}
authorize {
preprocess
# auth_log
# attr_filter
chap
mschap
# digest
# IPASS
# suffix
# ntdomain
# eap
# files
sql
# etc_smbpasswd
# ldap
# daily
# checkval
}
# Sesso authentication
# responsvel por conferir o tipo de autenticao usado
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
# digest
# pam
# unix
# Auth-Type LDAP {
# ldap
# }
# eap
}
#
# 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 sesso
# quando se faz o controle de sesso para
# evitar conexes simultneas (impede o
# nome de usurio 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
}
# fim radiusd.conf
2 - clients.conf
client 127.0.0.1 {
secret = raioceleste
# segredo do servidor. Somente
# os NAS's que conhecem esse
# segredo podero fazer pedidos
# de autenticao. OBRIGATRIO
shortname = localhost
# nome do cliente. Normalmente
# voc pode colocar uma parte do FQDN
# esse nome usado no arquivo de log
# e referencias de contabilidade
# OBRIGATRIO
nastype = other
# define o tipo de NAS cliente.
# Muito importante pois um
# NAS especifico pode ter campos
# definidos nos arquivos de dicionrios
# de parmetros. OPCIONAL. Padro: other
}
client 192.168.10.0/24 {
secret = raioceleste10
shortname = intranet-10
}
server = "localhost"
# diz ao freeradius em qual
# host est o servidor mysql
login = "root"
# define o nome de usurio registrado no mysql
password = "senhadologinaqui"
# senha do usurio definido no parmetro "login"
radius_db = "radius"
# nome do banco de dados que contem
# as tabelas
/usr/local/src/freeradius-1.1.7/doc/examples/
/usr/local/src/freeradius-1.1.7/doc/examples/mysql.sql
Isso far com que os usurios sejam procurados na tabela radcheck, banco de
dados radius no MySQL.
Isso far com que os dados das conexes sejam armazenadas na tabela
radacct.
Ainda no est pronto o controle de sesso, voc ter que editar o sql.conf e
descomentar as linhas que definem as variveis:
simul_count_query
simul_verify_query
Vamos criar um usurio chamado "joao", que ter direito a apenas uma
conexo. Conecte-se ao MySQL no banco radius:
Criar usurio:
Pronto. Joo agora no pode passar seu login pra ningum, seno ficar sem
acesso! Para conexes ISDN 128k, crie um grupo de dupla permisso, pois
seno o segundo canal no conseguir conectar-se. Veja como aparece no log,
uma tentativa de conexo simultnea aps o usurio j estar conectado de
outro lugar:
Auth: Login OK: [joao/senhasecreta] (from client pr4k port 326 cli 31555xxxx)
Auth: Multiple logins (max 1) : [joao/senhasecreta] (from client pr4k port 315
cli 31552xxxx)
A desvantagem que Joo ter que solicitar suporte tcnico para ter o
problema resolvido!
Quando voc cria o banco de dados MySQL do radius a partir da DDL fornecida
nos fontes do mdulo, as seguintes tabelas so criadas:
UserName | GroupName
----------------------------------
joao | Diretoria
patrick | Admin
anamaria | Dialup
kairan | Dialup
milene | Dialup
marcos | Velox
----------------------------------
Acima, o relatrio diz que o usurio autenticou com sucesso nas duas
tentativas. O campo date timestamp: ano, ms, dia, hora, minuto e
segundo.
1 - radtest
Sintaxe:
onde:
USURIO, SENHA - o bvio, login do usurio e senha;
SERVIDOR - endereo ip ou FQDN do servidor radius;
PORTAAUTH - porta no SERVIDOR onde o servio radius atende
solicitaes de autenticao;
PORTANAS - porta do NAS, pode ser uma porta eletrnica (nmero do
modem) ou virtual, apenas para controle. Para testes, coloque qualquer
valor numrico.
SEGREDORADIUS - quando voc faz uma solicitao de autenticao, seu
endereo ip tem que estar cadastrado no arquivo clients.conf do servidor
num par de IP/SEGREDO. O ip ser descoberto pelo SERVIDOR atravs do
parmetro NAS-IP-Address, o segredo voc tem que informar aqui.
Aps uma solicitao, o radtest informa quais parmetros est enviando para o
servidor, seguido do retorno.
Exemplo:
Como voc pode ver acima, o servidor retornou uma resposta de acesso aceito
"Access-Accept" e um parmetro que eu configurei em radreply para o usurio
joao ("Reply-Message").
Administrao de usurios
No agradvel ter uma grande quantidade de clientes e ter que administrar
"no dedo", um software de administrao fundamental. Voc tem trs
opes:
Apache
PHP
Perl - mdulo Date::Manip
recommends
suggests
dep: apache2-mpm-prefork
modelo tradicional para o Apache HTTPD
or httpd
modelo tradicional para o Apache HTTPD virtual package provided
by [show 24 providing packages] aolserver4, aolserver4-core,
apache2-mpm-event, apache2-mpm-itk, apache2-mpm-prefork,
apache2-mpm-worker, boa, bozohttpd, caudium, cherokee, dhttpd,
ebhttpd, fnord, lighttpd, mathopd, micro-httpd, mini-httpd,
mzscheme, nginx, roxen4, thttpd, tntnet, webfs, yaws
dep: php5
linguagem de script incorporvel em HTML, lado servidor
(metapacote)
or libapache2-mod-php5
linguagem de script incorporvel em HTML, lado servidor
(metapacote)
or php5-cgi
linguagem de script incorporvel em HTML, lado servidor
(metapacote)
sug: libdate-manip-perl
a perl library for manipulating dates
sug: php5-ldap
LDAP module for php5
sug: php5-mysql
MySQL module for php5
or php5-pgsql
PostgreSQL module for php5
# cd /usr/local/dialup_admin/sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius -e badusers.sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius < mtotacct.sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius < totacct.sql
# mysql -pSENHA -u USUARIO -h SERVIDOR radius < userinfo.sql
http://192.168.10.1/dialup_admin