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. 


 

Volver arriba