freifunk:ssh

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
freifunk:ssh [06.06.2019 12:25. ] – [Anzahl Lokaler WLAN-Clients] djangofreifunk:ssh [04.06.2020 16:00. ] – [SSH-Clientconfig] django
Zeile 1: Zeile 1:
 ====== Administration eines Freifunk-Knotens via SSH ====== ====== Administration eines Freifunk-Knotens via SSH ======
-Zur Administration unseres bzw. unserer Freifunk-Knoten verwenden wir die **SSH**(([[https://de.wikipedia.org/wiki/Secure_Shell|Secure SHell]])), da uns hier der volle Zugriff auf den Router gestattet, Konfigurationen im laufenden Betrieb vorzunehmen, Parameter abzufragen oder auch zusätzlich Programm zu starten. Viele hilfreiche Informationen rund um die SSH sind hier in Djangos WIKI im Kapitel [[https://dokuwiki.nausch.org/doku.php/centos:ssh_c7|Secure Shell]] zu finden. +{{:freifunk:ffmuc_logo.png?nolink&150 |Bild: Freifunk München Logo}} Zur Administration unseres bzw. unserer Freifunk-Knoten verwenden wir die **SSH**(([[https://de.wikipedia.org/wiki/Secure_Shell|Secure SHell]])), da uns hier der volle Zugriff auf den Router gestattet, Konfigurationen im laufenden Betrieb vorzunehmen, Parameter abzufragen oder auch zusätzlich Programm zu starten. Viele hilfreiche Informationen rund um die SSH sind hier in Djangos WIKI im Kapitel [[https://dokuwiki.nausch.org/doku.php/centos:ssh_c7|Secure Shell]] zu finden.
- +
-<WRAP center round tip 50%> \\ +
-Da aktuell das WIKI bei ffmuc.net nicht zur Verfügung steht, findet sich hier eine Ansammlung gängiger Abfragen bzw. Konfigurationsschritte. </WRAP>+
  
 ===== Vorbereitungen ===== ===== Vorbereitungen =====
Zeile 44: Zeile 41:
  
 Host ff_pliening_gbw_od Host ff_pliening_gbw_od
-     Hostname [2001:608:a01:106:822a:a8ff:feea:fae3]+     Hostname 2001:608:a01:106:822a:a8ff:feea:fae3
      Port 22      Port 22
      User root      User root
Zeile 56: Zeile 53:
      Protocol 2      Protocol 2
      IdentityFile ~/.ssh/id_rsa4096_ff      IdentityFile ~/.ssh/id_rsa4096_ff
-     ProxyCommand  ssh -q -W %h:%p jumphost+     ProxyJump jumphost
 </file> </file>
  
Zeile 311: Zeile 308:
  link: port:5 link:down  link: port:5 link:down
  link: port:6 link:down</code>  link: port:6 link:down</code>
- 
- 
- 
- 
- 
  
  
Zeile 375: Zeile 367:
 Nach kurzer Zeit wird dann der Router auf der Karte an der neuen gewünschten Stelle angezeigt. Nach kurzer Zeit wird dann der Router auf der Karte an der neuen gewünschten Stelle angezeigt.
 {{ :freifunk:ff_005.png?nolink&600 |Bild: FReifunkkarte mit Anzeige der gewählten Nodes}} {{ :freifunk:ff_005.png?nolink&600 |Bild: FReifunkkarte mit Anzeige der gewählten Nodes}}
 +
 +==== Knoten von der Knotenkarte entfernen ====
 +Will man seinen Knoten, sei es weil man diesen anderweitig weiterverwenden oder weg-/weitergeben möchte, von der **[[https://map.ffmuc.net|Knotenkarte]]** löschen, gibt es leider aktuell keinen direkten Löschbutton auf der Knotenkarte. Würde man den Router einfach nur so abstecken, würde für bis zu sieben Tage auf der Karte ein roter Kreis erscheinen, was hinlänglich als Störung oder defekter Router mit Problemen gleichgesetzt wird. 
 +
 +Daher empfiehlt es sich in einer solchen Situation den Node manuell von der Karte zu nehmen.
 +   uci set gluon-node-info.@location[0].share_location=0
 +   uci commit gluon-node-info
 +
 +Nach ein paar Minuten verschwindet der Router auf der Karte und wir können diesen nun abstecken und abbauen.
  
  
Zeile 383: Zeile 384:
    cat ~/.ssh/id_rsa_piraten.pub | ssh ff_pliening_gbw_ug 'cat >> /etc/dropbear/authorized_keys'    cat ~/.ssh/id_rsa_piraten.pub | ssh ff_pliening_gbw_ug 'cat >> /etc/dropbear/authorized_keys'
  
-==== Reboot des Knoten in den Konfigurationsmodus ==== +==== Passwort-Login für Nutzer root deaktivieren ==== 
-Möchte man seinen WLAN-Router erneut in den Konfigurationsmodus versetzen, um dann mit dem Browser seiner Wahl auf die GUI via http://192.168.1.1 zuzugreifen, verwendet man folgenden Aufruf+<WRAP center round important 80%> 
-   uci set "gluon-setup-mode.@setup_mode[0].enabled=1" +Dass bei der **SSH** eine Schlüsselbasierter Login einem Passwort gesichertem Zugriff vorzuziehen ist, gilt nicht nur für **[[centos:ssh_c7|Server]]** sondern sollte grundsätzlich unserem Grundverständnis an Sicherheit entsprechen. SSH-Zugang für den User **root** mit Passwort ist hinlänglich als **__nogo__** allgemeingültig er- und anerkannt. 
-   uci commit+</WRAP> 
 + 
 +Bei der Ersteinrichtung unseres Knotens über die **[[gui#remotezugriff|WEG GUI]]** wird bei aktueller Firmware auch deshalb gar keine Möglichkeit zur Vergabe eines Passwortes für den Nutzer root angeboten, sondern ausschließlich die Möglichkeit gegeben ein SSH-Schlüssel (public-key) zu hinterlegen. 
 + 
 +Will man nun ganz sicher gehen, oder ist als verantwortlicher (LINUX-)Admin von Haus aus ein klein wenig paranoid, kann man den Zugang nur mit Passwort und den Zugang für den Nutzer Root mit Passwort bei SSH-Daemon **[[https://matt.ucc.asn.au/dropbear/dropbear.html|dropbear]]** auch komplett deaktivieren. Hierzu setzen wir die beiden betreffenden Zeilen in der zugehörigen Konfigurationsdatei des SSH-Daemon auf **//off//**
 +   vim /etc/config/dropbear 
 +<file bash /etc/config/dropbear>config dropbear 
 +# Django : 2019-06-14 
 +# default: option PasswordAuth 'on' 
 +#          option RootPasswordAuth 'on' 
 + option PasswordAuth 'off' 
 + option RootPasswordAuth 'off' 
 + option Port         '22' 
 +# option BannerFile   '/etc/banner' 
 +</file> 
 +Anschließend starten wir den Router einmal neu, damit dieser die Konfigurationsänderung aktiviert.
    reboot    reboot
 +
 +Versuchen wir uns nun ohne passenden SSH-Key am Node anzumelden, erfolgt keine Passwort-Abfrage mehr und wir werden freundlich mit einem ''Permission denied (publickey).'' darauf hingewiesen, dass es //ohne Hände keine Kekse// mehr gibt, kurzum ohne SSH-Schlüssel ist kein Zugang mehr möglich, auch nicht mittels Passwort!
 +
 +   ssh root@2001:608:a01:102:da0d:17ff:feff:569e
 +
 +  Permission denied (publickey).
 +
 +<WRAP center round tip 75%>
 +Bei einem Update des Routers mit einer neuen Firmware werden diese Einstellungen überschrieben - wir müssen diese **Konfigurationsänderung** dann **__erneut__** vornehmen!
 +</WRAP>
 +
  
 ==== Kanal-Belegung ==== ==== Kanal-Belegung ====
Zeile 477: Zeile 504:
 === Einrichtung === === Einrichtung ===
 In folgendem Konfigurationsbeispiel wollen wir dein privates WLAN mit der  In folgendem Konfigurationsbeispiel wollen wir dein privates WLAN mit der 
-  * **SSID=**//privacy-is-not-acrime!// und dem zugehörigen  +  * **SSID=**//''privacy-is-not-acrime!''// und dem zugehörigen  
-  * **Privaten Schlüssel=**//N3v3r-7ru57-the-g0vernment!// einrichten.+  * **Privaten Schlüssel=**//''N3v3r-7ru57-the-g0vernment!''// einrichten.
  
    uci set wireless.wan_radio0=wifi-iface    uci set wireless.wan_radio0=wifi-iface
Zeile 496: Zeile 523:
    uci commit    uci commit
    wifi    wifi
 +
 +
 +
 +
 +==== WLAN Zeitgesteuert ein- und ausschalten ====
 +In Gemeinschaftsunterkünften wie z.B. Jugendherbergen, Asylhilfeeinrichtungen oder auch im familiären Haushalt, kann es erforderlich sein bzw. werden, den Zugang zum Internet zeitlich zu reglementieren. Bevor man nun einzelne Freifunk-Router per 230V-Zeitschaltuhr hart vom Stromnetz trennt, werden wir die Sache etwas eleganter lösen. Dazu legen wir uns ein kleines **ash**-Shellscript an, dass wir dann bei Bedarf entweder händisch oder cronjob-gesteuert aufrufen.
 +   vim /root/stop_wlan.sh
 +
 +<file bash /root/stop_wlan.sh>#!/bin/ash
 +# Script zum (De-)Aktivieren der unterschiedlichen Client-WLANs
 +
 +# $1 : erste uebergebene Variable :
 +#                                   2 = 2.4 GHz Freifunk-Client-Netz
 +#                                   5 = 5   GHz Freifunk-Client-Netz
 +#                                   p = 2.4 GHz Freifunk-Client-Netz
 +#
 +# $2 : zweite uebergebene Variable:
 +#                                   off = WLAN ausschalten
 +#                                   on  = WLAN einschalten
 +
 +# WLAN(s) ausschalten
 +if [ $2 = "off" ] ; then
 +   if [ $1 = "2" ] ; then
 +      uci set wireless.client_radio0.disabled=1 
 +   elif [ $1 = "5" ] ; then
 +      uci set wireless.client_radio1.disabled=1
 +   else 
 +      uci set wireless.wan_radio0.disabled=1
 +   fi
 +fi
 +
 +# WLAN(s) einschalten
 +if [ $2 = "on" ] ; then
 +   if [ $1 = "2" ] ; then
 +      uci set wireless.client_radio0.disabled=0
 +   elif [ $1 = "5" ] ; then
 +      uci set wireless.client_radio1.disabled=0
 +   else
 +      uci set wireless.wan_radio0.disabled=0
 +   fi
 +fi
 +
 +# Konfigurationsaenderung(en) persistieren
 +uci commit wireless
 +wifi
 +</file>
 +
 +Das Script statten wir zum Aufruf mit den entsprechenden **x**-Rechten aus.
 +   chmod +x /root/stop_wlan.sh
 +
 +Wollen wir nun ein WLAN geben wir zwei Parameter an:
 +  * **erster Parameter**
 +    * ''2'' : 2.4 GHz Client WLAN
 +    * ''5'' : 5 GHz Client WLAN
 +    * ''p'' : [[gui#privates_wlan|privates verschlüsseltes WLAN]]
 +  * **zweiter Parameter**
 +    * ''off'' : WLAN ausschalten
 +    * ''on'' : WLAN einschalten
 +
 +So deaktivert z.B. folgender Aufruf das 5 GHz Client-WLAN: ''/root/stop_wlan.sh 5 off'' und folgender Aufruf würde es wieder aktivieren: ''/root/stop_wlan.sh 5 on''. Da wir das natürlich nicht jedesmal per Hand ausführen wollen, legen wir uns entsprechende cronjobs an. Dazu hinterlegen wir in der usercrontab des Nutzers **root** entsprechend unsere zeitlichen Vorstellungen.
 +   crontab -e
 +
 +<code># 2.5 GHz Client WLAN um 22:30 Uhr ausschalten
 +30 22 * * * /root/stop_wlan.sh 2 off > /dev/null 2>&1
 + 
 +# 5 GHz Client WLAN um 22:30 Uhr ausschalten
 +30 22 * * * /root/stop_wlan.sh 5 off > /dev/null 2>&1
 + 
 +# privates verschluesseltes WLAN um 00:00 Uhr ausschalten
 +* 0 * * *   /root/stop_wlan.sh p off > /dev/null 2>&1
 + 
 +# um 6:45 Uhr alle WLANs wieder aktivieren
 +45 6 * * *  /root/stop_wlan.sh 2 on > /dev/null 2>&1
 +45 6 * * *  /root/stop_wlan.sh 5 on > /dev/null 2>&1
 +45 6 * * *  /root/stop_wlan.sh p on > /dev/null 2>&1</code>
 +
 +In dem gezeigtem Beispiel würden um 22:30 Uhr jeweils die Freifunk Client-Netze und das private verschlüsselte WLAN um 00:00 Uhr ausgeschaltet, sowie alle drei frühmorgens um 6:45 Uhr alle drei WLANs wieder eingeschaltet.
 +
 +
 +==== Zugangs zum Clientnetz begrenzen - Clients MAC-basiert aussperren ====
 +Bis weilen kann es erforderlich werden einzelne Clients auf Basis ihrer MAC-Adresse auszusperren. Die kann verschiedene Gründe haben, sei es nur zum Schutz des Client selbst oder den Schutz anderer Nutzer vor Störungen. 
 +
 +<WRAP center round alert 90%>
 +**WICHTIG**: \\
 +Eine derartige Beeinflussung/Beschränkung muss wohl überlegt und wohl durchdacht und begründet sein, denn die widerspricht eindeutig den **[[https://ffmuc.net/nutzungsbedingungen/|Freifunk Nutzungsbedingungen]]**: \\
 +  - **Freier Transit** : \\ EigentümerInnen bestätigen, freien Transit über ihre freie Netzwerkinfrastruktur anzubieten. EigentümerInnen bestätigen, die Daten, die seine freie Netzwerkinfrastruktur passieren, weder störend zu beeinträchtigen noch zu verändern.
 +</WRAP>
 +
 +Im folgenden Beispiel werden die Clients mit den MAC-Adressen **00:11:22:33:44:55** und **00:11:DE:AD:BE:EF** beim 2,4 GHz WLAN ausgesperrt.
 +   uci set wireless.client_radio0.macfilter=deny
 +   uci set wireless.client_radio0.maclist='00:11:22:33:44:55 00:11:DE:AD:BE:EF'
 +   uci commit
 +   /etc/init.d/network restart
 +
 +Hat man neben dem 2,4 GHz einen Router der ein 5 GHz WLAN ausstrahl, muss man auch noch ''radio1'' berücksichtigen.
 +   uci set wireless.client_radio1.macfilter=deny
 +   uci set wireless.client_radio1.maclist='00:11:22:33:44:55 00:11:DE:AD:BE:EF'
 +   uci commit
 +   /etc/init.d/network restart
 +
 +Mehrere MAC-Adressen werden hierbei einfach, wie in diesem Konfigurationsbeispiel zu sehen, durch ein Leerzeichen getrennt.
 +
 +Zum Entsperren einer hinterlegten MAC-Adresse löscht man diese einfach aus dem Parameter ''maclist'', also in obigen Beispielen würde man zum Entsperren des Clients **00:11:DE:AD:BE:EF** diese löschen und nur noch die **00:11:22:33:44:55** als zu sperrende MAC-Adresse angeben:
 +   uci set wireless.client_radio0.maclist='00:11:22:33:44:55'
 +   uci set wireless.client_radio1.maclist='00:11:22:33:44:55'
 +   uci commit
 +   /etc/init.d/network restart
 +
 +Will man die definierten Optionen wieder gänzlich löschen, lässt man die Parameter-Angaben leer.
 +   uci set wireless.client_radio0.macfilter=''
 +   uci set wireless.client_radio0.macfilter=''
 +   uci set wireless.client_radio0.maclist=''
 +   uci set wireless.client_radio1.maclist=''
 +   uci commit
 +   /etc/init.d/network restart
 +
 ==== manuelle Segmentauswahl ==== ==== manuelle Segmentauswahl ====
-Auf Grund des großen Wachstums der Nodeanzahl im Freifunknetz München, wurde im Mitte 2019 das Gesamtnetz von ursprünglich drei Segmenten auf 12((Stand Anfang Juni 2019)) erweitert. Basierend auf hinterlegte GeoDaten und auch umliegender WLAN-Accesspoints erfolgt die Segmentauswahl vollautomatisch und kann bei weiterem Anwachsen von Freifunkknoten weiter aufgeteilt werden. +Auf Grund des großen Wachstums der Nodeanzahl im Freifunknetz München, wurde im Mitte 2019 das Gesamtnetz von ursprünglich drei Segmenten auf 12((Stand Anfang Juni 2019)) erweitert. Basierend auf hinterlegte GeoDaten und auch umliegender WLAN-Access-Points erfolgt die Segmentauswahl vollautomatisch und kann bei weiterem Anwachsen von Freifunkknoten weiter aufgeteilt werden. 
  
 Aktuell((Stand Anfang Juni 2019)) gibt es folgende Segmente: Aktuell((Stand Anfang Juni 2019)) gibt es folgende Segmente:
Zeile 513: Zeile 656:
 | muenchen.freifunk.net/gauting   | ffmuc_gauting   | 10.80.208.0/21   | 2001:608:a01:10a::/64   | | muenchen.freifunk.net/gauting   | ffmuc_gauting   | 10.80.208.0/21   | 2001:608:a01:10a::/64   |
 | muenchen.freifunk.net/freising  | ffmuc_freising  | 10.80.216.0/21   | 2001:608:a01:10b::/64   | | muenchen.freifunk.net/freising  | ffmuc_freising  | 10.80.216.0/21   | 2001:608:a01:10b::/64   |
 +
 +Will man in Erfahrung bringen welche Segmente aktuell zur Verfügung gestellt werden, kann man diese mit Hilfe des Folgenden Aufrufs abfragen.
 +   ls /lib/gluon/domains | cut -f1 -d "."
 +
 +  ffmuc_freising
 +  ffmuc_gauting
 +  ffmuc_muc_cty
 +  ffmuc_muc_nord
 +  ffmuc_muc_ost
 +  ffmuc_muc_sued
 +  ffmuc_muc_west
 +  ffmuc_uml_nord
 +  ffmuc_uml_ost
 +  ffmuc_uml_sued
 +  ffmuc_uml_west
 +  ffmuc_welt
  
 Den aktuellen Segmentdefinition kann man mit folgendem Befehl abfragen: Den aktuellen Segmentdefinition kann man mit folgendem Befehl abfragen:
Zeile 518: Zeile 677:
  
   gluon.core.domain='ffmuc_uml_ost'   gluon.core.domain='ffmuc_uml_ost'
 +
 Der Knoten befindet sich also demnach im Segment **ffmuc_uml_ost**. Will man diesen Knoten nun z.B. in das Segment //**ffmuc_muc_ost**// versetzen, schreibt man in die betreffende Konfigurationsoption den neuen Segmentnamen. Der Knoten befindet sich also demnach im Segment **ffmuc_uml_ost**. Will man diesen Knoten nun z.B. in das Segment //**ffmuc_muc_ost**// versetzen, schreibt man in die betreffende Konfigurationsoption den neuen Segmentnamen.
    uci set gluon.core.domain='ffmuc_uml_ost'    uci set gluon.core.domain='ffmuc_uml_ost'
Zeile 525: Zeile 685:
  
 ==== Passthrough-Port des TP-Link CPE ==== ==== Passthrough-Port des TP-Link CPE ====
-Ein TP-Link CPE210 bietet neben seinem Uplink-Ethernet-Port noch einen weiteren sog. Passthrough-Port //LAN1// zur Verfügung. Über diesen Ethernet-Port kann ein weiteres Gerät versorgt werden, in der Art dass salopp gesagt, der Ethernet PoE-Port durchgeschliffen wird.+Ein TP-Link CPE210 bietet neben seinem Uplink-Ethernet-Port noch einen weiteren sog. Passthrough-Port //LAN1// zur Verfügung. Über diesen Ethernet-Port kann ein weiteres Gerät versorgt werden.  
 + 
 +<WRAP center round important 60%> 
 +Es wird jedoch **nicht** der WAN-Port durchgeschliffen“ sondern das Freifunk Client-Netz! 
 +</WRAP> 
 Die aktuellen Einstellungen können wir hierzu folgender Maßen abfragen: Die aktuellen Einstellungen können wir hierzu folgender Maßen abfragen:
    uci show system.poe_passthrough    uci show system.poe_passthrough
Zeile 543: Zeile 708:
    uci set system.poe_passthrough.value='0'    uci set system.poe_passthrough.value='0'
    uci commit system    uci commit system
 +
 +==== Reboot des Knoten in den Konfigurationsmodus ====
 +Möchte man seinen WLAN-Router erneut in den Konfigurationsmodus versetzen, um dann mit dem Browser seiner Wahl auf die GUI via http://192.168.1.1 zuzugreifen, verwendet man folgenden Aufruf.
 +   uci set "gluon-setup-mode.@setup_mode[0].enabled=1"
 +   uci commit
 +   reboot
  
 ==== Routerkonfiguration komplett löschen / zurücksetzen ==== ==== Routerkonfiguration komplett löschen / zurücksetzen ====
Zeile 701: Zeile 872:
 Killed by signal 1. Killed by signal 1.
 packet_write_wait: Connection to UNKNOWN port 65535: Broken pipe</code>  packet_write_wait: Connection to UNKNOWN port 65535: Broken pipe</code> 
 +
 +===== links =====
 +//**[[start|zurück zur Freifunk-Startseite hier im WIKI]]**//