RADIUS “invalid client IP”: come risolvere l’errore con Duo Authentication Proxy (guida completa)

Se durante l’integrazione del Duo Authentication Proxy con un servizio RADIUS ti imbatti nell’errore “A RADIUS message was received from an invalid RADIUS client IP”, questa guida ti accompagna da zero alla risoluzione, spiegando cause tecniche, verifiche pratiche e configurazioni d’esempio pronte da copiare.

Indice

Problema

Il Duo Authentication Proxy rifiuta richieste RADIUS provenienti da un indirizzo IP che non riconosce. Nel file di log compare un messaggio simile a:

WARN  [radius_server] A RADIUS message was received from an invalid RADIUS client IP: 203.0.113.25

Questo accade quando l’IP sorgente del pacchetto UDP (porta 1812/1645) non è tra quelli autorizzati in authproxy.cfg, oppure quando NAT, ACL o errori di sintassi impediscono al proxy di associare correttamente l’IP al relativo shared secret.

Soluzione sintetica

PassoAzioneScopo
Verificare l’IP del clientAssicurarsi che l’IP dell’apparato o applicazione che funge da client RADIUS sia incluso nei parametri radiusip1/radiusip2 (o successivi) del file authproxy.cfg.Autorizzare la sorgente delle richieste.
Controllare la connettività di reteEseguire un ping o un traceroute dal client verso il server Duo Proxy.Escludere problemi di routing o ACL/NAT.
Aprire le porte firewallConsentire il traffico UDP sulle porte 1812 (o 1645 se configurata) tra client e proxy in entrambe le direzioni.Garantire il transito dei pacchetti RADIUS.
Verificare lo shared secretIl valore configurato sul client deve coincidere con quello in radiussecret<n> per lo stesso radiusip<n> in authproxy.cfg.Autenticazione reciproca delle parti.
Analizzare i log del proxyControllare i file nella cartella log dell’installazione; abilitare la modalità diagnostica (debug=true o log_level=debug) se necessario.Individuare dettagli su rifiuti o errori di parsing.
Convalidare la sintassi di authproxy.cfgCercare spazi, tabulazioni o caratteri non supportati; ogni sezione deve essere chiusa correttamente.Evitare che errori di formattazione rendano inservibile l’intero file.
Aggiornare Duo Authentication ProxyInstallare l’ultima versione disponibile.Correggere bug noti e ottenere patch di sicurezza.
Testare con una configurazione “nota funzionante”Temporaneamente indirizzare un altro client già operativo sullo stesso proxy, o clonare la configurazione del client problematico in un ambiente di prova.Isolare se il problema è lato client o lato proxy.

Che cosa succede tecnicamente

RADIUS usa UDP (porta 1812 per l’autenticazione, 1813 per l’accounting; 1645/1646 nei sistemi legacy). Il Duo Authentication Proxy verifica l’indirizzo IP sorgente del datagramma: se non corrisponde a nessuno dei radiusipn dichiarati nella configurazione, scarta il pacchetto e logga l’errore di “invalid RADIUS client IP”. Con NAT, il proxy vede l’IP tradotto (public o IP del NAT device), non quello originario del client. Inoltre, ogni radiusipn è associato a uno radiussecretn: se l’IP è autorizzato ma il secret non combacia, otterrai errori di autenticazione, non di “invalid IP”.

Percorso guidato dettagliato

Verifica degli IP autorizzati

Apri authproxy.cfg e individua la sezione del server RADIUS che stai usando, ad esempio [radiusserverauto], [radiusserverpap] o [radiusserverchap]. Aggiungi l’IP sorgente del client RADIUS utilizzando le coppie radiusipn / radiussecretn. Esempio:

[radiusserverauto]
ikey=DIXXXXXXXXXXXXXXXXXX
skey=XXXXXXXXXXXXXXXXXXXX
api_host=api-xxxxx.duosecurity.com

; Autorizzazione client RADIUS
radiusip1=10.10.20.15
radiussecret1=SuperSegreto-ClientA

radiusip2=198.51.100.47
radiussecret2=SuperSegreto-ClientB

; Porta opzionale (default 1812)
port=1812

; Opzione consigliata in test
failmode=safe 

Nota: se il client è dietro NAT, devi inserire l’IP dopo la traduzione (quello visto dal proxy). In ambienti con bilanciatori (LB/ADC) o firewall perimetrali, può essere l’IP del VIP o dell’interfaccia di egress del firewall.

Connettività di base e routing

  • Ping dal client verso il proxy: ping <IP_Proxy>.
  • Traceroute o tracert per verificare la strada di rete e scovare hop bloccanti.
  • Netcat (se disponibile): nc -u -vz <IP_Proxy> 1812 per provare un handshake UDP.

Se il percorso cambia tra ambienti (es. WAN/MPLS vs. Internet via NAT), assicurati che l’IP che arriva al proxy sia quello dichiarato in radiusipn.

Firewall e ACL

Apri le porte necessarie in entrambe le direzioni (request e reply):

  • UDP 1812 (autenticazione RADIUS)
  • UDP 1645 (solo se stai usando la porta legacy)
  • Opzionale: UDP 1813/1646 per l’accounting, se previsto

Esempi:

  • Windows Defender Firewall: crea una regola in entrata/uscita per UDP 1812/1813 sul server che ospita il proxy.
  • Linux UFW: sudo ufw allow 1812/udp, sudo ufw allow 1813/udp.
  • iptables: sudo iptables -A INPUT -p udp --dport 1812 -j ACCEPT.

Shared secret coerente e sicuro

Ogni radiusipn deve avere un radiussecretn corrispondente e identico al valore configurato sul client RADIUS. Best practice:

  • Usa un secret diverso per ogni client (segmentazione e tracciabilità).
  • Lunghezza >= 22 caratteri, con maiuscole, minuscole, cifre e simboli.
  • Evita caratteri che potrebbero essere interpretati in modo speciale dal client (es. backslash non escape-ato).
  • Documenta la rotazione dei secret e conserva un inventario IP↔secret in un vault.

Attenzione: se l’IP è corretto ma il secret non coincide, il log non parlerà di “invalid IP” bensì di autenticazione fallita; dunque non confondere i due casi.

Log e modalità diagnostica

Percorsi tipici:

  • Windows: C:\Program Files\Duo Security Authentication Proxy\log\
  • Linux: /opt/duoauthproxy/log/

Abilita la diagnostica:

[main]
; una delle due opzioni, a seconda della versione
debug=true
; oppure
log_level=debug

Riavvia il servizio e riproduci il problema. Cerca voci come:

INFO  [radius_server] Received Access-Request from 203.0.113.25:54321
WARN  [radius_server] A RADIUS message was received from an invalid RADIUS client IP: 203.0.113.25

Questa sequenza indica che il pacchetto è arrivato, ma l’IP non coincide con nessuno dei radiusipn configurati.

Convalida della sintassi di authproxy.cfg

  • Ogni riga chiave=valore non deve contenere caratteri non stampabili o tabulazioni miste a spazi in posizioni ambigue.
  • Evita BOM/encoding non UTF‑8 (capita copiando da editor WYSIWYG).
  • Commenti con ; o # a inizio riga; non inserire commenti alla fine di una riga di configurazione.
  • Controlla che le sezioni siano ben definite: [radiusserverauto], [adclient], [radiusclient], ecc.

Aggiornamento del Proxy

Mantieni il Duo Authentication Proxy aggiornato per beneficiare di fix e miglioramenti nella gestione dei client RADIUS e del logging. Esegui sempre un backup di authproxy.cfg e dei certificati (se presenti) prima dell’aggiornamento.

Test con una configurazione “nota funzionante”

Se sospetti problemi lato client, reindirizza temporaneamente verso il proxy un altro apparato che sta già funzionando su un proxy gemello (o clona il client problematico in laboratorio). Se il secondo client funziona, il proxy è probabilmente a posto e l’anomalia è lato client o rete.

Diagnostica pratica: comandi e strumenti

Verifica rapida con radtest (Linux/Unix)

radtest utente_prova PasswordProva 10.10.20.50:1812 SuperSegreto-ClientA 1

Interpreta l’esito sul server: se vedi “invalid RADIUS client IP” il problema è l’IP sorgente; se vedi “Access-Reject” con dettagli di autenticazione, allora IP e secret sono coerenti ma la validazione fallisce più avanti.

Strumento GUI: NTRadPing (Windows)

Utile per inviare Access-Request mirati e osservare le risposte in maniera visiva. Imposta l’IP del proxy, la porta, lo shared secret e un utente di prova.

Catture di rete

  • tcpdump: sudo tcpdump -ni any udp port 1812 -vv
  • Wireshark: applica il filtro udp.port == 1812 e guarda il campo Source per confermare l’IP visto dal proxy.

NAT, VIP e topologie particolari

  • Client dietro NAT: il proxy vede l’IP tradotto. Inserisci in radiusipn l’IP pubblico o quello dell’interfaccia di egress del firewall, non l’IP privato del client.
  • Load Balancer/ADC: se in SNAT, l’IP sorgente diventa quello del LB; usa quell’IP nei radiusipn. Se in modalità source preservation, verifica che gli ACL consentano la risposta diretta al client.
  • Cluster/HA: con più proxy, allinea la configurazione su tutti i nodi o centralizza tramite un sistema di gestione.
  • VRF/VLAN separate: controlla la tabella di routing del server proxy; la risposta deve uscire dall’interfaccia corretta.
  • IPv6: se attivo, verifica che il client non stia inviando da IPv6 quando hai autorizzato solo IPv4 (o viceversa).

Checklist operativa

  • Hai inserito l’IP che il proxy vede (post-NAT) in radiusipn?
  • Lo shared secret del client coincide con radiussecretn corrispondente?
  • Le porte UDP 1812/1645 sono aperte in entrambe le direzioni tra client e proxy?
  • Hai abilitato debug e consultato i log per confermare l’IP sorgente effettivo?
  • La sintassi di authproxy.cfg è pulita (niente caratteri strani, sezioni corrette)?
  • Hai riavviato il servizio dopo ogni modifica?
  • La versione del Proxy è aggiornata?

Esempi di configurazione

Proxy con due client autorizzati

[main]
log_level=debug

[radiusserverauto]

ikey=DIXXXXXXXXXXXXXXXXXX skey=XXXXXXXXXXXXXXXXXXXX api_host=api-xxxxx.duosecurity.com port=1812 failmode=secure ; Firewall esterno con NAT: il proxy vedrà 203.0.113.10 radiusip1=203.0.113.10 radiussecret1=Secret-Client-FW ; Applicazione interna che parla direttamente al proxy radiusip2=10.10.20.15 radiussecret2=Secret-Client-App ; Backend di autenticazione (Active Directory) client=ad_client

[ad_client]

host=10.10.10.11 serviceaccountusername=svc_duo serviceaccountpassword=* search_dn=DC=example,DC=local

Proxy dietro Load Balancer con SNAT

[radiusserverpap]
ikey=DIXXXXXXXXXXXXXXXXXX
skey=XXXXXXXXXXXXXXXXXXXX
api_host=api-xxxxx.duosecurity.com
port=1812

; Il LB SNATta verso 198.51.100.20: usa questo IP
radiusip1=198.51.100.20
radiussecret1=Secret-From-LB

failmode=safe
client=radius_client

[radius_client]

host=10.10.30.12 secret=Secret-To-Upstream

Domande frequenti

Posso elencare più di due client?

Sì. Continua la numerazione (radiusip3, radiussecret3, ecc.). Ogni coppia IP/secret identifica un client autorizzato.

È possibile usare nomi DNS invece di IP?

Per i client autorizzati è consigliato l’IP fisso, perché il controllo avviene sull’IP sorgente del pacchetto. Un record DNS non risolve la variabilità introdotta da NAT o bilanciatori.

Ho cambiato authproxy.cfg ma non cambia nulla. Perché?

Le modifiche richiedono il riavvio del servizio Duo Authentication Proxy. Usa i comandi di gestione indicati più sotto.

Qual è la differenza tra “invalid RADIUS client IP” e “Access-Reject”?

“Invalid IP” significa che l’IP sorgente non è in lista; “Access-Reject” indica che l’IP è autorizzato ma l’autenticazione (secret errato o credenziali) non è riuscita.

Gestione del servizio

  • Windows: net stop DuoAuthProxy e poi net start DuoAuthProxy; oppure tramite Servizi (services.msc).
  • Linux:
    • sudo /opt/duoauthproxy/bin/authproxyctl restart
    • oppure sudo systemctl restart duoauthproxy (se presente unit systemd)

Strategie di prevenzione

  • Segmentazione dei secret: un secret per client.
  • Monitoraggio: alert su pattern di log “invalid RADIUS client IP”.
  • Inventario: mappa IP↔sistemi↔secret con owner e scadenze.
  • Hardening: limita perimetrali/ACL ai soli IP autorizzati, anche se il proxy rifiuta i non autorizzati.
  • Change control: testare sempre le modifiche (routing/NAT) in staging prima della produzione.

Riepilogo operativo

  1. Metti in authproxy.cfg l’IP che il proxy vede (radiusipn) e associa il suo radiussecretn.
  2. Verifica connettività (ping/traceroute) e apri UDP 1812/1645 bidirezionale.
  3. Allinea lo shared secret sul client.
  4. Abilita debug e analizza i log per confermare l’IP sorgente.
  5. Convalida la sintassi del file e riavvia il servizio.
  6. In caso di dubbi, prova con radtest/NTRadPing o un client noto funzionante.

Suggerimenti supplementari

  • NAT e indirizzi pubblici/privati – Se il client si trova dietro NAT, il proxy vedrà l’IP tradotto; inserire quest’ultimo in radiusipn o configurare una regola NAT statica.
  • Restart del servizio – Ogni modifica a authproxy.cfg richiede il riavvio del servizio Duo Authentication Proxy.
  • Strumenti di diagnostica – Utilizzare radtest (Linux) o NTRadPing (Windows) per inviare richieste di test ed esaminare le risposte RADIUS.
  • Segmentazione delle chiavi segrete – Impostare uno shared secret diverso per ciascun client per una maggiore tracciabilità e sicurezza.

Conclusioni

Il messaggio “A RADIUS message was received from an invalid RADIUS client IP” è quasi sempre una questione di allineamento tra ciò che arriva al proxy (IP sorgente reale, spesso dopo NAT) e ciò che è stato definito in authproxy.cfg. Applicando sistematicamente i controlli elencati—autorizzazione IP, connettività, firewall, secret, log e sintassi—si elimina nella quasi totalità dei casi l’errore e si porta a termine con successo l’integrazione del Duo Authentication Proxy nel proprio ambiente RADIUS.


Metadati

Indice