{"id":518,"date":"2019-06-21T15:58:02","date_gmt":"2019-06-21T21:58:02","guid":{"rendered":"https:\/\/ugit.siua.ac.cr\/?p=518"},"modified":"2019-09-25T13:19:32","modified_gmt":"2019-09-25T19:19:32","slug":"proxy-radius-con-freeradius-3","status":"publish","type":"post","link":"https:\/\/sada.services\/?p=518","title":{"rendered":"FREERADIUS: Proxy-Radius"},"content":{"rendered":"\n<p>Cuando necesitamos hacer consultas a otro servidor radius para autenticar usuarios que no estan en nuestra  base de datos local se puede usar al servidor radius local como un proxy para enviar las consultas al servidor correspondiente, en esta gu\u00eda vamos a configurar un servidor radius local para que haga de proxy solamente para los usuarios con formato <strong>\u00abusername@conare.ac.cr\u00bb<\/strong> y que los usuarios con formato <strong>\u00abusername@siua.ac.cr\u00bb<\/strong> y con el formato <strong>\u00abusername\u00bb<\/strong> se validen de manera local.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Partimos de que se tiene el servidor radius configurado y funcionando seg\u00fan la gu\u00eda<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-embed-wordpress aligncenter wp-block-embed is-type-wp-embed is-provider-unidad-de-gestion-e-innovacion-tecnologica\"><div class=\"wp-block-embed__wrapper\">\n\/?p=500\n<\/div><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Para configurar el servidor radius como proxy solamente debemos editar el archivo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/freeradius\/3.0\/proxy.conf<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Para hacer una configuraci\u00f3n de proxy solamente necesitamos saber cual va ser el <strong>\u00abdelimitador\u00bb<\/strong> y cual va ser el <strong>\u00abrealm\u00bb<\/strong>, los realm est\u00e1n definidos en <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/freeradius\/3.0\/mods-available\/realm<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#  'username@realm'\n#\nrealm suffix {\n        format = suffix\n        delimiter = \"@\"\n\n        # The next 3 configuration items are valid ONLY\n        # for a trust-router.  For all other realms,\n        # they are ignored.\n#       trust_router = \"localhost\"\n#       rp_realm = \"painless-security.com\"\n#       default_community = \"apc.moonshot.ja.net\"\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>En el extracto de c\u00f3digo anterior podemos ver la definici\u00f3n realm que nos interesa que tiene el formato <strong>username@realm<\/strong>, siendo en este caso el \u00ab<strong>@<\/strong>\u00bb nuestro delimitador y adem\u00e1s es de formato <strong>\u00absufijo\u00bb<\/strong> lo que quiere decir que el <strong>\u00abusername\u00bb<\/strong> siempre ser\u00e1 lo que se encuentre antes del delimitador y el <strong>\u00abrealm\u00bb <\/strong>lo que esta despu\u00e9s, pero podemos definir cualquier realm para ser usado en el radius. Se pueden definir multiples realm y ser\u00e1n buscados en el orden en que aparecen en la secci\u00f3n authorize y preacct del archivo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/freeradius\/3.0\/sites-enabled\/default<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img fetchpriority=\"high\" decoding=\"async\" width=\"643\" height=\"424\" src=\"\/wp-content\/uploads\/2019\/06\/Selecci\u00f3n_464.png\" alt=\"\" class=\"wp-image-521\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2019\/06\/Selecci\u00f3n_464.png 643w, https:\/\/sada.services\/wp-content\/uploads\/2019\/06\/Selecci\u00f3n_464-300x198.png 300w, https:\/\/sada.services\/wp-content\/uploads\/2019\/06\/Selecci\u00f3n_464-120x80.png 120w\" sizes=\"(max-width: 643px) 100vw, 643px\" \/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>En nuestro caso solo vamos a usar el <strong>realm suffix<\/strong>, pero si necesitamos otro solo lo listamos en este archivo en el orden que queremos que se comparen. <\/li><li>Teniendo claro lo anterior editamos el archivo <\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/freeradius\/3.0\/proxy.conf<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Vamos al final del archivo y agremos el servidor al que haremos proxy y los realm<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>############################################################################\n######################### RADIUS-PROXY DE CONARE ###########################\n############################################################################\n\nhome_server conare {\n         type = auth\n         ipaddr = 163.178.80.35\n         port = 1812\n         secret = siua_conare\n}\n\n#home_server_pool pool_dns {\n#        type = fail-over\n#        home_server = conare\n#}\n\n#########################################################################\n\nrealm siua.ac.cr {\n        authhost = LOCAL\n}\n\nrealm conare.ac.cr {\n        #auth_pool = pool_dns\n        authhost = conare\n        secret = siua_conare\n        nostrip\n}\n\nrealm itcr.ac.cr {\n        #auth_pool = pool_dns\n        authhost = conare\n        secret = siua_conare\n        nostrip\n}\n\nrealm estudiantes.tec.cr {\n        #auth_pool = pool_dns\n        authhost = conare\n        secret = siua_conare\n        nostrip\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Hemos agregado un <strong>home_server<\/strong> llamado <strong>conare<\/strong>, el cual usaremos para authenticar tipo <strong>auth <\/strong>con la ip <strong>163.178.80.35<\/strong> en el puerto <strong>1812<\/strong> y con el password precompartido <strong>$SECRET$<\/strong><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Tambi\u00e9n  agregamos el realm <strong>siua.ac.cr<\/strong> y le indicamos que este realm hace una autenticaci\u00f3n con el servidor <strong>LOCAL<\/strong><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Luego agregamos los realm que nos interesa autenticar con el PROXY-SERVER para que haga una autenticaci\u00f3n con el <strong>home_server conare<\/strong>, adem\u00e1s agregamos la l\u00ednea <strong>nostrip<\/strong> esto es para que el <strong>username<\/strong> y el <strong>realm<\/strong> no sean separados y la consulta se pase al servidor proxy tal como llego a nuestro servidor, en el caso de el realm <strong>siua.ac.cr<\/strong> no usamos la linea <strong>nostrip<\/strong> esto porque la autenticacion en este caso es local y le pasaremos la consulta a la base de datos con el <strong>username<\/strong> solamente sin la parte del realm. <\/li><li>Por ejemplo:<ul><li>El usuario <strong>user1@siua.ac.cr<\/strong> es autenticado localmente pues tiene el<strong> realm = siua.ac.cr<\/strong> y como este realm no tiene la l\u00ednea <strong>nostrip<\/strong> el username ser\u00e1 separado en <strong>Stripped-User-Name = user1<\/strong> y el <strong>realm = siua.ac.cr<\/strong>, la consulta se hace a la base de datos local con el <strong>Stripped-User-Name = user1.<\/strong><\/li><li>El usuario <strong>user2@conare.ac.cr<\/strong> es autenticado contra el servidor <strong>conare <\/strong>pues tiene el <strong>realm = conare.ac.cr<\/strong> y como este realm si tiene la linea <strong>nostrip<\/strong> el <strong>User-Name = user2@conare.ac.cr<\/strong> no se separa y la consulta se pasa al servidor <strong>conare<\/strong> con el <strong>User-Name = user2@conare.ac.cr<\/strong>.<\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>NOTA: <\/strong>Cuando el <strong>User-Name = user1@siua.ac.cr<\/strong> es separado en <strong>Stripped-User-Name = user1<\/strong> y el <strong>realm = siua.ac.cr,<\/strong> la consulta a la base de datos establece el atributo <strong>\u00abSQL-User-Name\u00bb = Stripped-User-Name<\/strong> si y solo si se descomentan y comentan las l\u00edneas que se muestra a continuaci\u00f3n en el archivo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/freeradius\/3.0\/mods-config\/sql\/main\/mysql\/queries.conf<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Con este cambio se usar\u00e1 el <strong>Stripped-User-Name<\/strong> si es que lo hay y si no hay un <strong>Stripped-User-Name<\/strong> se usar\u00e1 el <strong>User-Name<\/strong>. <\/li><li>Si no se hace este cambio el atributo <strong>\u00abSQL-User-Name\u00bb<\/strong> se establece como el <strong>User-Name<\/strong>, que es <strong>user1@siua.ac.cr<\/strong>, y como este usuario no existe en la base de datos el acceso es denegado, pues el usuario en la base de datos local es <strong>user1<\/strong> y no <strong>user1@siua.ac.cr<\/strong>.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" width=\"668\" height=\"300\" src=\"\/wp-content\/uploads\/2019\/06\/Selecci\u00f3n_462-1.png\" alt=\"\" class=\"wp-image-524\" srcset=\"https:\/\/sada.services\/wp-content\/uploads\/2019\/06\/Selecci\u00f3n_462-1.png 668w, https:\/\/sada.services\/wp-content\/uploads\/2019\/06\/Selecci\u00f3n_462-1-300x135.png 300w\" sizes=\"(max-width: 668px) 100vw, 668px\" \/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">OTROS DATOS<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>En el proceso de autenticaci\u00f3n del radius lo primero que se ejecuta es la secci\u00f3n <strong>authorize<\/strong> del archivo:<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/etc\/freeradius\/3.0\/sites-enabled\/default<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Este es el <strong>preproceso<\/strong><\/li><li>Aqu\u00ed compara los realm que se definieron en nuestro caso \u00absuffix\u00bb con el demimitador @<\/li><li>Luego env\u00eda la consulta a la base de datos o el proxy seg\u00fan corresponda<\/li><li>Despu\u00e9s de que se recibe la respuesta <\/li><li><strong>Si la repuesta es de un proxy (Accept o Deny)<\/strong><ul><li>Received Access-Reject o Received Access-Accept<ul><li>Executing section <strong>post-proxy<\/strong> from file \/etc\/freeradius\/3.0\/sites-enabled\/default<\/li><\/ul><\/li><\/ul><\/li><li>Despu\u00e9s si la respuesta es Accept<ul><li>Found Auth-Type = AcceptAuth-Type = Accept, accepting the user# Executing section <strong>post-auth<\/strong> from file \/etc\/freeradius\/3.0\/sites-enabled\/default<\/li><li><strong>SE GUARDA UN  REGISTRO EN LA TABLA radpostauth<\/strong><\/li><\/ul><\/li><li>Si la respuesta es Deny<ul><li>Using Post-Auth-Type Reject# Executing group from file \/etc\/freeradius\/3.0\/sites-enabled\/default<\/li><li>Post-Auth-Type REJECT { <strong>SE GUARDA UN  REGISTRO EN LA TABLA radpostauth<\/strong><\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Si la respuesta es LOCAL <\/strong><ul><li>Found Auth-Type = PAP<\/li><\/ul><ul><li>Executing group from file \/etc\/freeradius\/3.0\/sites-enabled\/default<\/li><li>Auth-Type PAP {<ul><li>pap: Login attempt with password<\/li><li>pap: Comparing with \u00abknown good\u00bb Cleartext-Password<\/li><li>pap: User authenticated successfully<\/li><li>[pap] = ok<\/li><li>} # Auth-Type PAP = ok<\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>O si falla<ul><li>Found Auth-Type = PAP<\/li><\/ul><ul><li> Executing group from file \/etc\/freeradius\/3.0\/sites-enabled\/default<\/li><li>Auth-Type PAP {<ul><li>pap: Login attempt with password<\/li><li>pap: Comparing with \u00abknown good\u00bb Cleartext-Password<\/li><li>pap: ERROR: Cleartext password \u00abuser\u00bb does not match \u00abknown good\u00bb password<\/li><li>pap: Passwords don&#8217;t match<\/li><li>[pap] = reject<\/li><li>} # Auth-Type PAP = reject<\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Despu\u00e9s si la respuesta es Accept<ul><li><strong>Found Auth-Type = Accept<\/strong><\/li><li> Auth-Type = Accept, accepting the user<\/li><li> Executing section post-auth from file \/etc\/freeradius\/3.0\/sites-enabled\/default<ul><li>post-auth {<\/li><li>update {<ul><li> No attributes updated<\/li><li> } # update = noop<\/li><\/ul><\/li><\/ul><\/li><li><strong>SE GUARDA UN  REGISTRO EN LA TABLA radpostauth<\/strong><\/li><\/ul><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Agregando atributos POST-AUTENTICACION<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Si hacemos autenticaci\u00f3n de los usuarios en nuestra base de datos MYSQL podemos asignarle los atributos que deseamos, pero si la autenticacion se hace por medio del proxy debemos recibir estos tributos del radius al que se env\u00eda la consulta o asignarlos nosotros mismo en la secci\u00f3n post-auth del archivo<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/freeradius\/3.0\/sites-enabled\/default<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>        update {\n                &amp;reply: += &amp;session-state:\n        }\n#############################################################################################\n#############################################################################################\n#############################################################################################\n        if (&amp;Realm == \"conare.ac.cr\"){\n                update reply {\n                        Tunnel-Type := VLAN\n                        Tunnel-Medium-Type := IEEE-802\n                        Tunnel-Private-Group-Id := \"190\"\n                }\n        }\n\n        if (&amp;Realm == \"itcr.ac.cr\"){\n                update reply {\n                        Tunnel-Type := VLAN\n                        Tunnel-Medium-Type := IEEE-802\n                        Tunnel-Private-Group-Id := \"130\"\n                }\n        }\n\n        if (&amp;Realm == \"estudiantes.tec.cr\"){\n                update reply {\n                        Tunnel-Type := VLAN\n                        Tunnel-Medium-Type := IEEE-802\n                        Tunnel-Private-Group-Id := \"130\"\n                }\n        }\n\n        if (&amp;Realm == \"una.cr\"){\n                update reply {\n                        Tunnel-Type := VLAN\n                        Tunnel-Medium-Type := IEEE-802\n                        Tunnel-Private-Group-Id := \"168\"\n                }\n        }\n\n#############################################################################################\n#############################################################################################\n#############################################################################################<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>Aqu\u00ed por ejemplo hemos agregado un <strong>\u00abif\u00bb<\/strong> en la secci\u00f3n <strong>post-auth<\/strong>, para asignarle la <strong>vlan 190<\/strong> a los usuarios con el <strong>realm == conare.ac.cr<\/strong> que tienen una autenticaci\u00f3n exitosa, la <strong>130<\/strong> a los usuarios TEC y la 168 a usuario UNA.<\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>FREERADIUS: Proxy-Radius<\/p>\n","protected":false},"author":2,"featured_media":2017,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,4,15],"tags":[32,29,33,30],"class_list":["post-518","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-freeradius","category-mysql","category-wifi","tag-post-auth","tag-proxy","tag-proxy-radius","tag-realm"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"_links":{"self":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=518"}],"version-history":[{"count":37,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/518\/revisions"}],"predecessor-version":[{"id":2032,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/posts\/518\/revisions\/2032"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=\/wp\/v2\/media\/2017"}],"wp:attachment":[{"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sada.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}