Statische IP im Netzwerk verhindern

Ich habe ein Problem. Und dieses Problem hatte und hat so mancher Admin auch in seinem Netzwerk. User, die meinen eine Zugriffs-Policy mit einer statischen IP-Adresse zu umgehen, weil man ja mehr möchte.

Mein Problem an dieser Sache ist zum Einen, die Problematik mit doppelten IP-Adressen im Netzwerk und die Sicherheit der Firewall. Da ich Firewall-Regeln habe, die bestimmten IP-Adresse den Internetzugang zeitlich beschränken, ist eine von User selbst-vergebene IP nicht wünschenswert. Was also tun?

Im ersten Schritt sollte man den User bitten, von der statischen IP-Adresse wieder auf DHCP zu wechseln. Leider fruchtet dies nicht immer und der User ist uneinsichtig. Leider haben machen User auch so hohe Rechte die Netzwerk-Einstellungen selber einzurichten.

Wenn also der erste Schritt nichts bringt und es immer noch arp-Meldungen hagelt, dann könnte der pf mit der Freigabe für das surfen helfen. Wie das?

Der Zugang zum Internet ist für alle Netzwerk-Teilnehmer elementar und grenzt schon fast an ein Menschenrecht. Warum nicht unseren uneinsichtigen User überzeugen, freiwillig auf DHCP wechseln. Mit dnsmasq kann man recht einfach eine Zugriffs-ACL für den pf erstellen, denn es gibt die Möglichkeit bei jedem Event im DHCP ein Skript zu starten. Diese Option kann man in der dnsmasq.conf mit folgender Zeile zu testen aktivieren:

dhcp-script=/<pfad>/<zum>/<Skript>/<Skript-name>

Mit folgenden Test-Skript kann man sich in /var/log ein Test-File schrieben lassen und beobachten, wie es funktioniert_

#!/bin/sh

LOG=“/var/log/clients.log“
DATE=`date +“%Y-%m-%d %H:%M:%S“`

echo „$DATE $2 $3 $4 ($1)“ >> $LOG

Folgende Parameter können die Skript mitgegeben werden:

  • $1: Aktion (add, old, del)
  • $2: MAC-Adresse
  • $3: Vergebene IP-Adresse
  • $4: Hostname

Da auf der Firewall  meistens das gesamte Subnetz für das surfen freigegeben wird haben wir hier Möglichkeiten, dies besser einzuschränken. Warum nicht nur die IP-Adressen eintragen, die auch wirklich online sind. Dafür gibt es ja Tabellen im pf.

Wie kann man nun die Sicherheit erhöhen? Jedes Mal, wenn der DHCP-Server etwas macht, passt er den Zugriff auf den pf an.

Meldet sich eine Maschine (Aktion = add) an, wird die IP in der Tabelle für das surfen eingetragen. Meldet sich die Maschine wieder ab (Aktion = del), wird sie ausgetragen.

Was ist dafür zu tun?

  1. Die Regeln des pf für das Surfen müssen so umgeschrieben werden, dass Server eigene Regeln haben und immer durch dürfen. Diese haben ja eigentlich eine statische IP.
  2. Für die Clients gibt es eine Regel mit einer Tabelle <surfen>.
    table <surfen> { }

    pass log inet proto tcp from <surfen> to any port { 80, 443 }
  3.  Der dnsmasq bekommt folgende Option und die Lease-Zeit für DHCP sollte verringert werden. Ich habe 2 Stunden definiert. Das heißt, dass nach 2 Stunden die IP-Adressen noch einmal angefragt wird. Existiert ein Eintrag mit der MAC-Adresse, dann wird die IP-Adresse weiter verwendet. Wird der Rechner runter gefahren, dann wird die IP wieder freigegeben.
    dhcp-script=/<pfad>/<zum>/<Skript>/<Skript-name>
  4. Nun wird noch das folgende Skript erstellt.

    #!/bin/shlogfile=“/var/log/clients-leases.log“
    datum=`date +“%Y-%m-%d %H:%M:%S“`
    cleanupfile=“/tmp/cleanupfile.txt“

    echo „$datum $2 $3 $4 ($1)“ >> $logfile

    if [ $1 == „add“ ]; then

    # IP-Adresse einfügen
    echo „pfctl -a web -t surfen -T add $3“ >> $logfile
    pfctl -a web -t surfen -T add $3

    elif [ $1 == „old“ ]; then

    # IP-Adresse ist bereits vorhanden und wird weiter genutzt.
    echo „IP gefunden: `pfctl -a web -t surfen -T show | grep $3`“ >> $logfile

    elif [ $1 == „del“ ]; then

    # IP-Adresse wieder löschen
    echo „pfctl -a web -t surfen -T delete $3“ >> $logfile
    pfctl -a web -t surfen -T delete $3

    elif [ $1 == „update“ ]; then

    # <surfen> neu schreiben
    echo „update Table surfen“ >> $logfile
    more /var/db/dnsmasq.leases | awk ‚ { print $3 }‘ >> $cleanupfile
    for ip in `more $cleanupfile`; do
    pfctl -a web -t surfen -T add $ip
    done
    rm $cleanupfile
    fi

    Zunächst werden temporäre Dateien wie .log-Datei und update-Datei definiert.
    Im ersten Teil wird die IP-Adresse der Tabelle <surfen> hinzu gefügt. Im zweiten Teil wurde festgestellt, dass die IP immer noch gültig ist und deshalb die Lease-Zeit verlängert wird. Im dritten Teil wird die IP-Adresse aus der Tabelle <surfen> wieder entfernt.
    Der letzte Teil dient dazu, die Tabelle <surfen> aud den lease-db des dnsmasq neu zu schreiben. Warum könnte dies wichtig sein? Falls Regeln in einen Anker neu geladen werden, dann kann man die Werte der Tabelle mit dem Aufruf
    ./dhcp-pf.sh update
    neu schreiben. 😉

Wenn man nun den dnsmasq und den pf neustartet, ist schluss mit statischer IP und Surfen, weil dies IP-Adressen nicht in die Tabelle <surfen> gelangen.

Viel Spass damit.

Bobby

 

Robert Friemer

Robert Friemer, mittlerweile 49, arbeitet mit Windows seit Version 3.11, mit Linux seit Version 2.0 und mit FreeBSD seit Version 3.8. Er hat schon so einige Irrungen und Wirrungen in der IT mit erlebt und ist seit einigen Jahren (fast) Windows-los. Dank Pinguin und vor allem dank Beastie.

More Posts - Website