In diesem ersten Beitrag zum RPi beschreibe ich die schrittweise Installation eines Raspberry Pi – ohne angeschlossen Monitor und ohne Tastatur (headless) sowie ein paar erste Konfigurationen.
Im zweiten Beitrag RPi als Router wird beschrieben, wie man diesen RPi zu einem Router mit DNS und DHCP Service konfiguriert. Der dritte Beitrag widmet sich dem Thema des Hardenings des RPi.
Ausgangssituation:
- der Raspberry Pi (RPi) ist im selben Netzwerk erreichbar wie der lokale Rechner (PC)
- im lokalen Netz befindet sich ein DHCP Server, hier mit der Adresse 192.172.10.1
- der lokale PC hat die Möglichkeit, die SD Karte zu beschreiben
- auf dem lokalen PC ist Programm zum Öffnen einer SSH Verbindung installiert (bei Windows z.B. PuTTY)
- die SD Karte des RPi ist mindestens 4 GB groß
Dann erfolgt die Installation in den folgenden Schritten:
- auf dem lokalen PC die aktuelle Software herunterladen und speichern
- das ZIP File entpacken
- das ausgepackte Image auf die SD Karte schreiben
Um den RPi zu konfigurioeren sind dann die nachfolgenden Schritt noch notwendig:
- IP Adresse ermitteln
- Verbindung zum RPi via ssh aufbauen
- allgemeine Konfigurationen
- neuen User – ohne Passwort – anlegen
- aktuellen Pakete und Repository aktualisieren
- SSH-Daemon rekonfigurieren
- alten User komplett entfernen
Im Detail sehen die Schritte dann so aus:
- auf dem lokalen PC die aktuelle Software herunterladen und speichern
Unter http://www.raspberrypi.org/downloads kann man die verschiedenen OS herunterladen. Ich benutze hier „Raspian“, das auf Debian Whezzy basiert. Über den Link Debian Whezzy – Download kann man dieses direkt herunterladen.
- das ZIP File entpacken
Mit Hilfe von Zip kann man die Datei entpacken:
1 | unzip 2014-06-20-whezzy-raspian.zip |
- das ausgepackte Image auf die SD Karte schreiben
1 2 | sudo dd bs=4M if=./2013-02-09-wheezy-raspbian.img of=/dev/mmcblk0 sync;sync;sync |
- IP Adresse ermitteln
Um im nächsten Schritt auf den RPi zugreifen zu können, benötigt man nur noch die IP Adresse, die der DHCP Server im Netzwerk diesem nach dem Start vergeben hat. Dies geht entweder über den DHCP – Server selbst oder über das „arp“ Kommando. Letzteres zeigt alle MAC Adressen im Netzwerk an.
Wenn man vor dem Aktivieren des RPi die Liste mit Hilfe des Kommandos
1 | arp -a |
gezogen hat, braucht man nur die aktuelle Liste nur mit der alten zu vergleichen, um zu sehen, welche IP hinzugekommen ist.
- Verbindung zum RPi via ssh aufbauen
Mithilfe der IP und PuTTY kann man nun eine Verbindung über das SSH – Protokoll aufbauen. Im ersten Schritt kann man sich an dem User „pi“ mit dem Default Passwort „raspberry“ anmelden. Auf Konfiguration PuTTY ist eine Anleitung, sich mit Hilfe von PuTTY einen SSH Key zu generieren (ssh-rds, 4096 bits) und diesen dann nach im Schritt 7 – noch vor dem Schritt 8. dem Anlegen eines neuen Users in dessen HOME – verzeichnis abzulegen:
1 | vi ~rhartwig/.ssh/authorized_keys |
Ab Schritt 8. sollte dann immer mit dem neuer „rhartwig“ die Verbindung aufgebaut werden.
- allgemeine Konfigurationen
Zuerst werden alle Einstellungen gesichert:
1 2 | sudo mkdir /root/factory sudo cp -r /etc /root/factory |
Dann wird dem RPi eine feste IP (hier: 192.172.10.5) zugeordnet, damit die Konfiguration einfacher ist.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ### Start /etc/network/interface ### auto lo iface lo inet loopback # iface eth0 inet dhcp auto eth0 iface eth0 inet static mtu 1500 dns_search scons.de fritz.box dns-nameserver localhost 192.172.10.5 192.172.10.1 address 192.172.10.5 netmask 255.255.255.0 gateway 192.172.10.1 ### Ende /etc/network/interface ### |
und
1 2 3 4 5 | ### Start /etc/hosts ### 127.0.0.1 localhost.scons.de localhost 192.172.10.5 ns.scons.de ns 192.172.10.1 fritz.box ### Ende /etc/hosts ### |
Hiernach noch ein paar Kernel-Parameter setzen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | ### Start /etc/sysctl.conf ### # Enable Spoof protection (reverse-path filter) net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 # Enable TCP/IP SYN cookies net.ipv4.tcp_syncookies=1 # Ignore ICMP broadcasts net.ipv4.icmp_echo_ignore_broadcasts = 1 # Ignore bogus ICMP errors net.ipv4.icmp_ignore_bogus_error_responses = 1 # Do not accept ICMP redirects (prevent MITM attacks) net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.eth1.accept_redirects = 0 # Do not send ICMP redirects (really important for our single NIC gateway) net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 # Do not accept IP source route packets net.ipv4.conf.all.accept_source_route = 0 # Log Martian Packets net.ipv4.conf.all.log_martians = 1 # router function (important1!!) net.ipv4.ip_forward = 1 # Avoid Out Of Memory vm.min_free_kbytes=8192 ### Ende /etc/sysctl.conf ### |
Nach dem Aufruf des Kommandos
1 | sudo raspi-config |
sind folgende Optionen des Menüs auszuwählen:
- InternationalisationOptions:
- Change Locale: hier die Spracheinstellungen auf de_DE.UTF-8 UTF-8 setzen und
- Timezone: auf Europe/Berlin setzen
- AdvancedOptions:
- memory_split: Setzen den von der Grafikarte genutzten Speicher auf ein Minimum (=16k)
- hostname: den Hostnamen auf „ns“ setzen
- Expand Filesystem: zuletzt sollte man dann komplette SD Karte ausnutzen
1 2 | sudo hostname ns.scons.de sudo reboot |
- neuen User – ohne Passwort – anlegen
Zuerst den User anlegen mit
1 | sudo useradd -m -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio rhartwig |
und dann den Public Key ablegen unter
1 2 3 4 5 6 | sudo mkdir ~rhartwig/.ssh sudo vi ~rhartwig/.ssh/authorized_keys cd ~rhartwig chown -R rhartwig:rhartwig .ssh chmod 700 .ssh chmod 600 .ssh/authorized_keys |
- aktuellen Pakete und Repository aktualisieren
Zuerst die neuesten Pakete und zertifikate laden mit
1 2 3 4 5 | sudo apt-get install ca-certificates tcpdump htop ethtool sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update sudo apt-get install git-core sudo rpi-update sudo reboot |
und dann
1 2 | sudo apt-get update sudo apt-get upgrade |
- SSH-Daemon rekonfigurieren
Zuerst wird die aktuelle Konfiguration des Daemon überschrieben und danach dieser neu gestartet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | ### Start /etc/ssh/sshd_config ### Port 22 Protocol 2 ListenAddress 192.172.10.5 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key UsePrivilegeSeparation yes KeyRegenerationInterval 3600 ServerKeyBits 4096 SyslogFacility AUTH LogLevel VERBOSE LoginGraceTime 120 PermitRootLogin no PermitEmptyPasswords no PermitUserEnvironment no StrictModes yes RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys IgnoreRhosts yes RhostsRSAAuthentication no HostbasedAuthentication no IgnoreUserKnownHosts yes ChallengeResponseAuthentication no PasswordAuthentication no X11Forwarding no AllowTcpForwarding no X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes AllowUsers *@192.168.*.* rhartwig DenyUsers root admin pi Banner /etc/issue.net AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server UsePAM yes ### Ende /etc/ssh/sshd_config ### |
1 | sudo service ssh restart |
Wenn der Verbindungsaufbau erfolgreich funktioniert hat, dann wird der alte User auch nicht mehr benötigt.
- alten User komplett entfernen
1 2 3 4 | # replace pi by rhartwig in sudo vi /etc/sudoers sudo deluser --remove-all-files pi |