
FreeRADIUS 3 para autenticación OTP, la autenticación se realiza correctamente, sin embargo, FreeRADIUS no puede analizar la respuesta.
Al enviar el comando de prueba y monitorear la salida de depuración ( radiusd -X
), hay un error como se muestra a continuación, donde la salida no se analiza a pesar de que la respuesta del programa externo parece ser satisfactoria:
# below, totp.py generates a TOTP for johnboy, to aid testing
# using pyotp package to make testing easier...
radtest -t mschap johnboy $(./totp.py) localhost 0 testing123
.
.
.
(4) eap: No EAP-Message, not doing EAP
(4) [eap] = noop
(4) [expiration] = noop
(4) [logintime] = noop
(4) multiotp: Executing: /usr/local/bin/multiotp.php '%{User-Name}' '%{User-Password}' -request-nt-key -src=%{Packet-Src-IP-Address} -chap-challenge=%{CHAP-Challenge} -chap-password=%{CHAP-Password} -ms-chap-challenge=%{MS-CHAP-Challenge} -ms-chap-response=%{MS-CHAP-Response} -ms-chap2-response=%{MS-CHAP2-Response}:
(4) multiotp: EXPAND %{User-Name}
(4) multiotp: --> johnboy
(4) multiotp: EXPAND %{User-Password}
(4) multiotp: -->
(4) multiotp: EXPAND -src=%{Packet-Src-IP-Address}
(4) multiotp: --> -src=127.0.0.1
(4) multiotp: EXPAND -chap-challenge=%{CHAP-Challenge}
(4) multiotp: --> -chap-challenge=
(4) multiotp: EXPAND -chap-password=%{CHAP-Password}
(4) multiotp: --> -chap-password=
(4) multiotp: EXPAND -ms-chap-challenge=%{MS-CHAP-Challenge}
(4) multiotp: --> -ms-chap-challenge=0xf54c102e95a800d8
(4) multiotp: EXPAND -ms-chap-response=%{MS-CHAP-Response}
(4) multiotp: --> -ms-chap-response=0x0001000000000000000000000000000000000000000000000000e3004419ce4b084c0b073836fd40f3828fcc7c4223b0dcc5
(4) multiotp: EXPAND -ms-chap2-response=%{MS-CHAP2-Response}
(4) multiotp: --> -ms-chap2-response=
(4) multiotp: ERROR: Failed parsing output from: /usr/local/bin/multiotp.php '%{User-Name}' '%{User-Password}' -request-nt-key -src=%{Packet-Src-IP-Address} -chap-challenge=%{CHAP-Challenge} -chap-password=%{CHAP-Password} -ms-chap-challenge=%{MS-CHAP-Challenge} -ms-chap-response=%{MS-CHAP-Response} -ms-chap2-response=%{MS-CHAP2-Response}: Expecting opera
tor
(4) multiotp: ERROR: Program returned code (0) and output 'Filter-Id += "<user_group>",NT_KEY: A7C014D1209A4078F1003810BDB08BE6 '
(4) [multiotp] = fail
(4) } # authorize = fail
(4) Using Post-Auth-Type Reject
(4) # Executing group from file /etc/raddb/sites-enabled/default
(4) Post-Auth-Type REJECT {
.
.
.
Respuesta1
Desde elLista de correo de FreeRADIUS, la respuesta de MultiOTP 'Filter-Id += "<user_group>",NT_KEY: A7C014D1209A4078F1003810BDB08BE6 '
no es válida para FreeRADIUS 3, pero es posible que haya funcionado con FreeRADIUS 2.
Solucioné este problema usando un script contenedor para analizar la salida de [MultiOTP[(https://github.com/multiOTP/multiotp), devolviendo solo la parte 'Filter-Id += "Erica-Users' para el paso 'exec' de la sección 'autenticar' y devolviendo solo la parte 'NT_KEY: A7C014D1209A4078F1003810BDB08BE6' para el paso 'mschap' del paso 'autorizar' dentro del Proceso de autenticación FreeRADIUS.
Vale la pena señalar la documentación para FreeRADIUS 3 con MultiOTP en elLéame MultiOTP.md, y repetido en elWiki FreeRADIUS, no lo son al momento de escribir este artículo y no sugiere nombres de archivos que realmente se usan con FreeRADIUS 3.
Los pasos de configuración para MultiOTP son precisos.
GratisRADIUS 3Tiene excelente documentación en línea.aquí, y un educado y serviciallista de correo.
Para cualquiera que esté lidiando con el mismo problema, aquí hay algunos fragmentos de código para una configuración de FreeRADIUS 3. No he mostrado el archivo de configuración del servidor virtual, que puede ser más específico de un entorno concreto.
/usr/local/bin/multiotp_wrapper_mschap.sh:
#!/bin/bash
# Extract Filter-Id
user_name=$1
user_password=$2
packet_src_ip_address=$3
ms_chap_challange=$4
ms_chap_response=$5
/usr/local/bin/multiotp.php ${user_name} ${user_password} -request-nt-key -src=${packet_src_ip_address} -ms-chap-challenge=${ms_chap_challange} -ms-chap-response=${ms_chap_response} | sed -e 's/.*,//'
/usr/local/bin/multiotp_wrapper_exec.sh
#!/bin/bash
# Extract NT_KEY
user_name=$1
user_password=$2
packet_src_ip_address=$3
ms_chap_challange=$4
ms_chap_response=$5
/usr/local/bin/multiotp.php ${user_name} ${user_password} -request-nt-key -src=${packet_src_ip_address} -ms-chap-challenge=${ms_chap_challange} -ms-chap-response=${ms_chap_response} | sed -e 's/,NT_KEY.*$//'
/etc/raddb/mods-enabled/multiotp:
exec multiotp {
wait = yes
input_pairs = request
output_pairs = reply
program = "/usr/local/bin/multiotp_wrapper_exec.sh '%{User-Name}' '%{User-Password}' %{Packet-Src-IP-Address} %{MS-CHAP-Challenge} %{MS-CHAP-Response}"
shell_escape = yes
}
/etc/raddb/mods-enabled/multiotpmschap:
mschap multiotpmschap {
# ntlm_auth = "/usr/local/bin/multiotp.php '%{User-Name}' '%{User-Password}' -request-nt-key -src=%{Packet-Src-IP-Address} -chap-challenge=%{CHAP-Challenge} -chap-password=%{CHAP-Password} -ms-chap-challenge=%{MS-CHAP-Challenge} -ms-chap-response=%{MS-CHAP-Response} -ms-chap2-response=%{MS-CHAP2-Response}"
ntlm_auth = "/usr/local/bin/multiotp_wrapper_mschap.sh '%{User-Name}' '%{User-Password}' %{Packet-Src-IP-Address} %{MS-CHAP-Challenge} %{MS-CHAP-Response}"
pool {
start = ${thread[pool].start_servers}
min = ${thread[pool].min_spare_servers}
max = ${thread[pool].max_servers}
spare = ${thread[pool].max_spare_servers}
uses = 0
retry_delay = 30
lifetime = 86400
cleanup_interval = 300
idle_timeout = 600
}
}
Respuesta2
En caso de que otros reciban el "ERROR: Error de análisis de salida", verifique la opción "mostrar registro" en multiotp.ini; si está habilitada, también puede causar el problema.