staging.inyokaproject.org

Mac Adresse XX-XX-XX-XX Zeichenänderung XX:XX:XX:XX

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

borekdukales

Anmeldungsdatum:
18. Februar 2017

Beiträge: Zähle...

Hallo, das nächste Script steht an und so langsam machts spass, allerdings hab ich wieder ein Anliegen.

Ausgabe meiner Log-Datei:

Tue Mar 14 23:45:10 2017
        Packet-Type = Access-Request
        User-Name = "nagios"
        NAS-IP-Address = 192.168.10.1
        Called-Station-Id = "64-70-02-XX-XX-XX:alix-wlan"
        NAS-Port-Type = Wireless-802.11
        NAS-Port = 1
        Calling-Station-Id = "00-13-EF-XX-XX-XX"
        Connect-Info = "CONNECT 54Mbps 802.11g"
        Acct-Session-Id = "386D43AE-00000028"
        X-Ascend-Home-Agent-UDP-Port = 1027076
        X-Ascend-Multilink-ID = 1027074
        X-Ascend-Num-In-Multilink = 1027073
        Framed-MTU = 1400
        EAP-Message = 0x024d00060d00
        State = 0xb2106cd1b35d619b49c30783785f0b8f
        Message-Authenticator = 0xcf0dfeb5b12c43f84aa96cfd53e27c43

Dieser Eintrag wiederholt sich je nachdem wie oft sich ein Client aufm Wlan anmeldet. Deshalb bin ich dabei ein Script zu schreiben, womit die Mac-Adresse des Clients, wie man sieht Calling-Station-Id = "00-13-EF-XX-XX-XX", in eine Datei geschrieben wird.

Das ganze hab ich wie folgt aufgebaut.

#!/bin/bash/
grep Calling-Station-Id datei.txt | awk '{print $NF}' | cut -c 2-18 | sort | uniq

nach dem Durchlauf gibts diese Ausgabe:

00-13-EF-XX-XX-XX

jetzt kommt der Knackpunkt...ich wollte die Striche ( - ) gegen Doppelpunkte ( : ) ändern. Irgendwo bei meinem Radius-Server steht nen Befehl dabei ... allerdings funktioniert das nicht so recht.

Radius-Server Befehl:

rewrite_calling_station_id {
        if (Calling-Station-Id =~ /([0-9a-f]{2})[-:]?([0-9a-f]{2})[-:.]?([0-9a-f]{2})[-:]?([0-9a-f]{2})[-:.]?([0-9a-f]{2})[-:]?([0-9a-f]{2})/i) {
                update request {
                        Calling-Station-Id := "%{tolower:%{1}-%{2}-%{3}-%{4}-%{5}-%{6}}"
                }
        }
        else {
                noop
        }
}

Ich versuch das schon ne ganze Weile in der Datei einzubauen, klingt auch recht logisch, was der Befehl machen soll...aber irgendwie funzt das net so richtig. Gibt es die Möglichkeit das irgendwie anders zu Lösen?

liebe Grüße

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

borekdukales schrieb:

[…] 00-13-EF-XX-XX-XX

jetzt kommt der Knackpunkt...ich wollte die Striche ( - ) gegen Doppelpunkte ( : ) ändern.

  • Wenn es nur darum geht, kann man den Befehl tr (translate) verwenden:

1
2
3
4
klaus@gnome25:~$ echo "64-70-02-XX-XX-XX" | tr - :
64:70:02:XX:XX:XX
klaus@gnome25:~$ echo "64-70-02-AB-CD-EF" | tr ABCDEF- abcdef:
64:70:02:ab:cd:ef

Irgendwo bei meinem Radius-Server steht nen Befehl dabei ... allerdings funktioniert das nicht so recht.

Radius-Server Befehl: […]

  • Dein Radius-Server ignoriert Majuskeln und übersetzt die Minuskel in Hex-Zahlen in Minuskel (?) und verwendet Bindestriche für die Ausgabe. Du willst aber Majuskel in Minuskel umwandeln und Doppelpunkte für die Ausgabe verwenden.

  • Ist die Datei Deines Radius-Servers ein Shell-Skript?

borekdukales

(Themenstarter)

Anmeldungsdatum:
18. Februar 2017

Beiträge: 11

Geiler Befehl, danke ☺ bin leider noch ein Newcomer, wenns um Linux und Befehle geht.

Diese Ausgabe vom Radius ist eine Log-Datei

Das ganze Konstrukt siehe Anhang.

Mein Problem liegt darin, das der Radius-Server die Anfrage vom Wlan zwar verarbeitet, allerdings winkt er fröhlich jede Mac-Adresse durch ☺

Deshalb bin ich auf die Idee gekommen, die Log-Datei mit dem Befehl auszulesen:

 
#!/bin/bash/
grep Calling-Station-Id auth-detail-* | awk '{print $NF}' | cut -c 2-18 | sort | uniq | tr - :

danach wollt ich die ausgelesenen Daten in einen Ordner auf dem Wlan-AP (Voyage) legen. Dieser soll die Daten mit einer anderen Datei, indem vordefinierte Mac-Adressen liegen, vergleichen und ggf wenns zu einem Konflikt (z.B. Mac-Adresse nicht aufgeführt) kommt, diese via Iptables sperren. Das ganze würd ich im 5-10 Minutentakt mit einem Cronjob abfragen.

So war mein Gedanke ☺

Anhang

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

borekdukales schrieb:

[…] Diese Ausgabe vom Radius ist eine Log-Datei

  • Ich meinte die Datei, aus der das Skript (?) mit dem Anfang "rewrite_calling_station_id {" stammt. Ist das eine Shell-Datei?

[…] der Radius-Server die Anfrage vom Wlan zwar verarbeitet, allerdings winkt er fröhlich jede Mac-Adresse durch

  • Das heißt, Dein Radius-Server erfüllt seine Aufgabe gar nicht? In der Regel sollte ein Radius-Server authentifizieren und unbefugte Zugriffe ggf. protokollieren, auf jeden Fall aber abweisen.

Deshalb bin ich auf die Idee gekommen, die Log-Datei mit dem Befehl auszulesen:

 
#!/bin/bash/
grep Calling-Station-Id auth-detail-* | awk '{print $NF}' | cut -c 2-18 | sort | uniq | tr - :
  • Solange Du per awk nur die Anzahl der Felder im Record ausgibst, wird das keinen Sinn ergeben.

  • Die Anwendungsbereiche von grep, awk, cut und tr überschneiden sich teilweise. Überlege, was Du wirklich willst, informiere Dich über die einzelnen Werkzeuge und beschränke Dich auf ein Werkzeug. Dasgleiche gilt für sort und uniq, die ans Ende der Kette gehören. Die manpages zu den einzuelnen Programmen sind immer lesenswert.

[…] mit […] vordefinierte Mac-Adressen […] vergleichen und ggf. wenns zu einem Konflikt (z.B. Mac-Adresse nicht aufgeführt) kommt, diese via Iptables sperren.

  • Du willst also ein MAC-Filter implementieren?

Bedenke:

  • Ein Calling-Station-Id ist keine MAC-Adresse, sondern umgekehrt kann man eine MAC-Adresse (aber auch anderes) als Calling-Station-Id verwenden.

  • MAC-Filter sind als Sicherheitskomponente überaus fragwürdig.

  • Wenn Dich nur die Log-Einträge von Radius stören, konfiguriere das Log-Verhalten von Radius.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

borekdukales schrieb:

#!/bin/bash/
grep Calling-Station-Id auth-detail-* | awk '{print $NF}' | cut -c 2-18 | sort | uniq | tr - :

Das meiste kann man mit awk machen und die Anzahl der Kommandos deutlich reduzieren:

1
awk '/Calling-Station-Id/ {s=substr($NF, 2, 17); gsub(/-/, ":", s); print s}' auth-detail-* | sort -u

borekdukales

(Themenstarter)

Anmeldungsdatum:
18. Februar 2017

Beiträge: 11

@ kB

Das ist ein Auszug aus einer Configurations-Datei "canonicalization"

ich hab das Ganze auf der offiziellen Seite von Freeradius gefunden https://wiki.freeradius.org/guide/mac-auth

soweit hab ich das auch abgearbeitet...allerdings kommt jeder rein, wer das Zertifikat hat, deshalb wollte ich unbefugte Mac-Adressen verbieten.

@ rklm Danke für das Kommando...da kann man echt noch einiges von Lernen.

borekdukales

(Themenstarter)

Anmeldungsdatum:
18. Februar 2017

Beiträge: 11

Vielen Dank schonmal für die Antworten. Ich erstelle ein Thema zwecks Radius in einer anderen Forum-Sektion ☺

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

borekdukales schrieb:

#!/bin/bash/
grep Calling-Station-Id datei.txt | awk '{print $NF}' | cut -c 2-18 | sort | uniq

Wenn Du da sowieso schon mit awk wirbelst, kannst Du ja gleich alles damit machen. das ist einfacher:

1
awk -F\" '/Calling-Station-Id/ {gsub("-",":"); print $2}'  canonicalization.txt

Vom Ansatz habe ich es etwas anders gemacht als Robert:

  1. die gesuchte Zeile wähle ich mit einem Regulären Ausdruck (genau so wie es grep macht),

  2. als Trenner nehme ich ganz frech das Gänsefüßchen, dann ist das 2. Wort bereits die nackte MAC-Adresse

  3. und nebenbei ersetze ich gleich noch alle "-" durch ":" , dann ist das auch erledigt.

Zum Verständnis empfehle ich - wie immer eigentlich - die awk-Einführung und für genauere Details man awk .

LG,

track

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

track schrieb:

Vom Ansatz habe ich es etwas anders gemacht als Robert:

Das ist natürlich im aktuellen Fall besser. Ich wollte lediglich den gegebenen Code so exakt wie möglich auf awk umsetzen. Und dann ist da ja noch der sort -u.

Antworten |