Radius + PPP
Descripción
Radius y su implementacion Freeradius es el metodo preferido para hacer AAA. Lo usamos principalmente para una conexion PPTP con backend MySQL - MariaDB.
Prerequistos
En principio .. ppp, pptd-server, MySQL - MariaDB, freeradius-server, freeradius-MySQL - MariaDB y radiusclient
Suele acompañarse de un aplicativo web llamado dial-up admin.
Instalación básica
Los rpms funcionan bien, .. hay que ser cuidadoso porque el pptp pide cierta version de ppp y si no,
no funciona.
Configuración
1. PPP y PPTP (Vea el documento ---> PPTP)
Una vez lo tenga andando, agregue en el archivo /etc/ppp/options.pptp al final –> plugin radius.so
2. Radius Server
Arrancando sin MySQL - MariaDB aun
Instale el servidor y en los archivos de configuracion en /etc/raddb (etc/freeradius/3.0) ..tenemos que hacer varios ajustes.
2.1. Los archivos clients y naslist son obsoletos … los muevo a un directorio old
2.2. En radiusd.conf nos vamos a concentrar en usar MSCHAP entonces el resto se puede comentar pero dejelo quieto
NO olvide agregar la encripcion al modulo de mschap
use_mppe = yes
require_encryption = yes require_strong = yes
2.3. En users, para nuestro proposito (PPTP) suele funcionar comentando la primera opcion de autenticacion ( la de System)
DEFAULT Auth-Type = System
Fall-Through = 1
2.4. Configure el clients.conf para que se conecten. Aqui especifica quien le pega al servidor y con que contraseña. Puede
simplemente la contraseña
secret = passwdroot
2.5 Trate de iniciar el servicio .. y revise /var/log/radius/radius.log por si no sube o tiene warnings. (a veces toca comentar files)
2.6 Una prueba simple ( que a mi NO me funciona aqui !!!! )
- Agregue al inicio de users la linea bob Cleartext-Password := “hello”
- Arranque el servicio con #> radiusd -X
- Corra la prueba #> radtest bob hello localhost 0 passwdroot
- Y el servidor debe contestarle #> rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=166, length=20
Y ahora con MySQL - MariaDB
Esto no es obligado, pero es muy conveniente si piensa, sobre todo, hacer accounting. En algunas distribuciones el soporte viene aparte y toca instalar un paquete como freeradius-MySQL - MariaDB.
De aqui en adelante es:
- Cree la base de datos, busque el MySQL - MariaDB.sql (/usr/share/doc/freeradius-1.1.3/examples/MySQL - MariaDB.sql) para crear las tablas
- alimentelas con la informacion de inicio. El howto de los fraceses aguanta bastante para incluir los datos basicos http://www.queret.net/blog/index.php/2007/04/02/70-freeradius-MySQL - MariaDB-pptpd –
Ahora para hacer funcionar radius.
- Configure /etc/raddb/sql.conf para tener acceso a la base de datos.
# Connect info
server = “localhost”
login = “radiususr”
password = “passwdroot”
# Database table configuration
radius_db = “radius”
- Active todos los sqls en /etc/raddb/radius.conf (descomente las lineas adecuadas)
$INCLUDE ${confdir}/sql.conf
}
authorize { #1774
chap
mschap
suffix
sql
}
authenticate { #1887
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
}
accounting {
sql
}
session {
sql
}
Ahora si, al prueba bonita con radtest FUNCIONA !!! Y tambien la conexion por PPTP deberia funcionar OK
3. Radius Client
Instale .. yum install radiusclient, y en /etc/radiusclient, hay que hacer un par de cosas
3.1. Edite el archivo servers y agrege la linea de su servidor
localhost passwdroot
3.2. Edite el dictionary para incluir el dictionary.microsoft: “..
In /etc/radiusclient, there is a file called dictionary. Add the following line to the end of the file.
<HTML><blockquote>
INCLUDE /etc/radiusclient/dictionary.microsoft
</blockquote></HTML> The file, dictionary.microsoft, is not included in the radiusclient. We can modify the one from freeradius so that it can be used by pppd …” (/usr/share/freeradius/)
cp /usr/share/freeradius/dictionary.microsoft /etc/radiusclient:
cambie octets por “string Microsoft” y agreguele integer y string la extension “Microsoft”
O sea mire http://www.members.optushome.com.au/~wskwok/poptop_ads_howto_8.htm –
4. Dialup Admin
- Copie toda la aplicacion en /var/www/html/dialup_admin y configure el alias para apuntar al htdocs dentro de este directorio.
- Edite el archivo de configuracion conf/admin.conf y agregue la informacion de la base de datos
general_base_dir: /var/www/html/dialup_admin
general_radiusd_base_dir: /usr
general_domain: skinatech.com
……….
nas1_name: sk_sfirewall.%{general_domain}
nas1_model: PPTP Server SkinaTech
nas1_ip: 127.0.0.1
nas1_port_num: 100
nas1_community: public
nas1_type: other
……….
### by skina
# The selected theme. Options: default, wxp,
theme: wxp
# The languaje to be used. Options: en, es
# default: en
lang: es
- Agregue a la base de datos las tablas en sql/
- Y listo debe funcionar. Recuerde poner restricciones de acceso para que no cualquiera entre.
Otras configuraciones
1. Conexiones simultaneas
Se quere que solo se logueen una vez http://www.freeradius.org/radiusd/doc/Simultaneous-Use –
2. LDAP
Para que radius consulte un directorio LDAP, configurelo en radiusd.conf, de tal forma que encuentre el usuario tanto para autorizar como para autenticar.
3. Active Directory
Es necesario instalar samba y winbind para que se pueda usar el ntl_auth .. Mire este documento freeRadius_AD_tutorial.pdf o vaya a http://wiki.freeradius.org/FreeRADIUS_Active_Directory_Integration_HOWTO –
La linea que nos funciona OK incluyendo grupo es
ntlm_auth = “/usr/bin/ntlm_auth –request-nt-key –username=%{Stripped-User-Name:-%{User-Name:-None}} –challenge=%{mschap:Challenge:-00} –nt-response=%{mschap:NT-Response:-00} –require-membership-of=COLOMBIA\\\\Azuan”
para probar a mano
/usr/bin/ntlm_auth –request-nt-key –domain AMVCOLOMBIA –username=pruebas –require-membership-of=“AMVCOLOMBIA\\\\Azuan”
Problemas
1. No funciona ni la primera prueba con radtest
- El tipo coge por defecto la comprobacion contral el sistema ..Unix.. entonces Comente en users el sistema de autenticacion por default del sistema
2. No logro que pptpd siquiera consulte radius
- Esta seguro de haber instalado radiusclient .. pa que consulte
3. auth: No User-Password or CHAP-Password attribute in the request
- Esto ocurre usualmente cuando la transaccion de pptp no se entiende bien. El radiusclient no esta incluyendo el dictionary.microsoft. El como se hace esta en
http://www.members.optushome.com.au/~wskwok/poptop_ads_howto_8.htm –
4. NTLM_AUTH me responde NT_STATUS_NO_LOGON_SERVERS
- Revise configuracion de kerberos .. que tenga el dominio bien y el servidor kdc sea ubicable.
5. Nada .. Exec-Program output: winbind client not authorized to use winbindd_pam_auth_crap. Ensure permissions on /var/cache/samba/winbindd_privileged are set correctly. (0xc0000022)
- Ponga el directorio 755 y funciona. PERO NOOOO… Winbind no sube si no es 750 .. .. o sea toca 750 antes de subir y 755 una vez esta subido pa que radius lo use …
start() {
KIND=“Winbind”
echo -n $“Starting $KIND services: “
## by Skina
chmod 750 /var/cache/samba/winbindd_privileged
##
daemon winbindd “$WINBINDOPTIONS”
## by Skina
chmod 755 /var/cache/samba/winbindd_privileged
##
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/winbindd || RETVAL=1
return $RETVAL
}
6. Dialup_admin no me da los usuarios en linea
Varias posibilidades,
- asegurese que en admin.conf el valor general_finger_type: este vacio
- En admin.conf la ip del nas es 127.0.0.1 y no el nombre. La mejor forma de resolver esto
es mire la tabla de radacct y mire el NASIPAddress y ese debe ser el mismo.
- Le meti mano a user_finger.php3 para que la consulta funcione por la fecha
“SELECT DISTINCT UserName,AcctStartTime,FramedIPAddress,CallingStationId
FROM $config[sql_accounting_table] WHERE
AcctStopTime = '0000-00-00 00:00:00' AND NASIPAddress = '$name_data' $extra
GROUP BY UserName ORDER BY AcctStartTime;”
7. could not obtain winbind separator
-
Referencias
- Aunque en frances … esta al pelo http://www.queret.net/blog/index.php/2007/04/02/70-freeradius-MySQL - MariaDB-pptpd –
- El listado de howtos de freeradius ..pero no lo de gran utilidad http://wiki.freeradius.org/HOWTO –
- Un capitulo de un howto para inhalambrica http://www.tldp.org/HOWTO/8021X-HOWTO/freeradius.html –
- El muy simple arranque, pendejo, pero con detallitos de como probar la configuracion a mano y demas: http://deployingradius.com/documents/configuration/ –
- Desde el productor de PPTP ..muy simple ..pero ..uhmm http://poptop.sourceforge.net/dox/radius_mysql.html –
- http://www.members.optushome.com.au/~wskwok/poptop_ads_howto_1.htm –
- http://wiki.freeradius.org/PopTop –
- http://gentoo-wiki.com/HOWTO_Chillispot_with_FreeRadius_and_MySQL –
FIN
=========================================================================
=========================================================================
La configuracion de LDAP
ldap {
server = “localhost”
# identity = “cn=admin,o=My Org,c=UA”
# password = mypass
basedn = “ou=People,dc=skina,dc=com,dc=co”
filter = “(uid=%{Stripped-User-Name:-%{User-Name}})“
# base_filter = ”(objectclass=radiusprofile)“
# set this to 'yes' to use TLS encrypted connections
# to the LDAP database by using the StartTLS extended
# operation.
# The StartTLS operation is supposed to be used with normal
# ldap connections instead of using ldaps (port 689) connections
start_tls = no
# 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”
# default_profile = “cn=radprofile,ou=dialup,o=My Org,c=UA”
# profile_attribute = “radiusProfileDn”
# access_attr = “dialupAccess”
access_attr = “uidNumber”
# Mapping of RADIUS dictionary attributes to LDAP
# directory attributes.
dictionary_mapping = ${raddbdir}/ldap.attrmap
ldap_connections_number = 5 #
# NOTICE: The password_header directive is NOT case insensitive
#
# password_header = ”{clear}“
#
# The server can usually figure this out on its own, and pull
# the correct User-Password or NT-Password from the database.
#
# Note that NT-Passwords MUST be stored as a 32-digit hex
# string, and MUST start off with “0x”, such as:
#
# 0x000102030405060708090a0b0c0d0e0f
#
# Without the leading “0x”, NT-Passwords will not work.
# This goes for NT-Passwords stored in SQL, too.
#
# 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
}
Primera version JEG (27/07/2007)
Advertencia
Este documento es privado y es de uso exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal.