Installation und Konfiguration eines Raspberry Pi

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:

  1. auf dem lokalen PC die aktuelle Software herunterladen und speichern
  2. das ZIP File entpacken
  3. das ausgepackte Image auf die SD Karte schreiben

Um den RPi zu konfigurioeren sind dann die nachfolgenden Schritt noch notwendig:

  1. IP Adresse ermitteln
  2. Verbindung zum RPi via ssh aufbauen
  3. allgemeine Konfigurationen
  4. neuen User – ohne Passwort – anlegen
  5. aktuellen Pakete und Repository aktualisieren
  6. SSH-Daemon rekonfigurieren
  7. alten User komplett entfernen

Im Detail sehen die Schritte dann so aus:

  1. 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.

  1. das ZIP File entpacken

Mit Hilfe von Zip kann man die Datei entpacken:

1
unzip 2014-06-20-whezzy-raspian.zip
  1. 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
  1. 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.

  1. 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.

  1. 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
  1. 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
  1. 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
  1. 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.

 

  1. alten User komplett entfernen
1
2
3
4
# replace pi by rhartwig in
sudo vi /etc/sudoers
 
sudo deluser --remove-all-files pi

Kommentar verfassen