====== 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.
INCLUDE /etc/radiusclient/dictionary.microsoft
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 [[egw/egw_docroot/wiki/docs/freeRadius_AD_tutorial.pdf|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.  ----