FreeRADIUS: Benutzerdefinierter SQL-Zähler funktioniert nur teilweise

2477
Maxxer

Ich möchte meiner FreeRADIUS-Installation einen benutzerdefinierten SQL-Prüfzähler hinzufügen. Im Grunde ist es das Gleiche wie die Max-Daily-Session, aber auf den aktuellen beschränkt Called-Station-Id.

Ich habe dies zu sql / mysql / counter.conf hinzugefügt:

sqlcounter dailycounterlocation { counter-name = Daily-Session-Location-Time check-name = Max-Daily-Session-Location reply-name = Session-Timeout sqlmod-inst = sql  key = User-Name reset = daily query = "SELECT SUM(acctsessiontime - \  GREATEST((%b - UNIX_TIMESTAMP(acctstarttime)), 0)) \ FROM radacct WHERE username = '$' AND \ (UNIX_TIMESTAMP(acctstarttime) + acctsessiontime > '%b') \ AND calledstationid = '%' " } 

dann in sites-enabled / default:

[...] authorize { dailycounterlocation { reject = 1 } if(reject){ update reply { Reply-Message := "You have reached your daily time limit from this location" } reject } } 

Und zuletzt in einer benutzerdefinierten Wörterbuchdatei:

ATTRIBUTE Max-Daily-Session-Location 107 integer 

Dies funktioniert, wenn der Benutzer eine frühere Sitzung in dieser Rücksetzperiode (heute) hat. Wenn es sich jedoch um die erste Sitzung des Tages handelt, wird das Session-TimeoutAttribut nicht zurückgegeben, sodass das Limit nicht festgelegt wird.

Wenn ich die Factory Max-Daily-Sessionzum Benutzer hinzufüge, sehe ich während der ersten Verbindung des Tages nach den SQL-Abfragen der Gruppe Folgendes in Debug:

rlm_counter: Current Time: 1425241760 [2015-03-01 21:29:20], Next reset 1425250800 [2015-03-02 00:00:00] rlm_counter: reset_db: Closing database rlm_counter: reset_db: Opened new database rlm_counter: add_defaults: Start rlm_counter: DEFAULT1 set to 1425250800 rlm_counter: DEFAULT2 set to 1425078000 rlm_counter: add_defaults: End  rlm_counter: reset_db ended rlm_counter: Entering module authorize code rlm_counter: Searching the database for key 'ALG02MAX' rlm_counter: Could not find the requested key in the database. rlm_counter: Check item = 200, Count = 0  rlm_counter: res is greater than zero rlm_counter: (Check item - counter) is greater than zero rlm_counter: Authorized user ALG02MAX, check_item=200, counter=0 rlm_counter: Sent Reply-Item for user ALG02MAX, Type=Session-Timeout, value=200 ++[daily] = ok 

Auf diese Weise wird der Standardwert 200 für Session-Timeout(der in der radgroupcheckTabelle steht) zurückgegeben. Warum passiert das nicht für meinen Schalter? Was vermisse ich? Vielen Dank

0

1 Antwort auf die Frage

0
Maxxer

Zur Behebung dieses Problems können Sie einen Zähler in der Modul-Konfiguration hinzufügen und ihn aus dem authorizeAbschnitt der Site-Konfigurationsdatei aufrufen .

In modules/counteradd:

 counter dailylocation { filename = $/db.daily key = User-Name count-attribute = Acct-Session-Time reset = daily counter-name = Max-Daily-Session-Location-Time check-name = Max-Daily-Session-Location reply-name = Session-Timeout allowed-servicetype = Framed-User cache-size = 5000 }  

und dann in sites-enabled/default, in dem authorizeAbschnitt, direkt nach dem dailyHinzufügen

dailylocation 

Dadurch kann der Zähler geprüft werden!