Raspberry Pi - Apache Server - Sicherheit

AffeMitWaffe

New Member
Hallo Forum :)

ich habe mich hier angemeldet, da ich neu auf dem Server Gebiet bin und hoffe hier ein paar Antworten auf meine Fragen zu finden.

Ich habe einen Raspberry Pi 3B mit Raspbian als OS.
Mein Vorhaben ist es, diesen als Apache Server zu verwenden.
Darüber soll dann ein Mysql Server laufen und PHP als Schnittstelle zur Datenbank.

Vorerst will ich diesen zu Test und Entwicklungszwecken nutzen, später eventuell im "Produktiven" Betrieb.
Warum ich mir nicht direkt einen Managed Server miete?
Der sogenannte Produktive Betrieb wird sehr übersichtlich bleiben und ein Managed Server wäre daher eher überdimensioniert, wie ich finde.
Außerdem möchte ich mich in diesem Bereich etwas einlernen und hoffe so auf einen netten, "spaßigen" Lerneffekt :)

Aber erst mal genug zum Beweggrund.

Da ich den Server auch nur für mich und meine Zwecke laufen lassen will, möchte ich natürlich ungebetene Gäste von meinem Server fern halten, weswegen die Sicherheit natürlich eine sehr große Rolle spielt.

Im Moment läuft der Server noch in meinem Lokalen Netzwerk bis alles korrekt konfiguriert ist.
Was ich bis jetzt schon erledigt habe:
- Root Anmeldung mit User/Key über SSH abgeschaltet.
- Neuen User mit root Rechten (kopiert vom User "Pi") erstellt.
- User "Pi" gelöscht.
- SSH Port 22 auf einen 5 Stelligen Port geändert.

Was ich gerne noch hätte/ vorhabe:
- Anmeldung über SSH mit Pw verbieten und auf Key umstellen
- Server im DMZ anbinden
- Von der Außenwelt erreichbar machen (nur für bestimmte Geräte).

Am besten wäre es, wenn nur bestimmte Geräte die Möglichkeit haben, sich am Server anzumelden / mit dem Server zu kommunizieren. (Im späteren Gebrauch nur aufrufen von PHP Seiten auf dem WebServer).

Wie erreiche ich das am besten?
Ist das, was ich vorhabe, überhaupt sicher genug?
Hättet ihr sonst noch Tipps oder Vorschläge?

Ich freue mich auf Antworten :)
 
Wenn da nur SSH und HTTP(S) von extern erreichbar sind, dürfte die PHP-Anwendung die größte Angriffsfläche bieten. SSH ist sehr übersichtlich. Das mit dem Port ist eigentlich Voodoo und hält nur die Logs klein. Sicherheit erhöht das eher nicht. Da ist Key-Auth schon deutlich besser geeignet.

Den MySQL auf jeden Fall nur auf localhost binden. Der sollte dann auch im Portscan nicht zu sehen sein.

Mach mal einen Port-Scan auf deinen Pi und schau, ob da noch Sachen auf Ports laufen, die du nicht auf dem Schirm hast.
 
Was ich bis jetzt schon erledigt habe:
- Root Anmeldung mit User/Key über SSH abgeschaltet.
- Neuen User mit root Rechten (kopiert vom User "Pi") erstellt.
- User "Pi" gelöscht.
- SSH Port 22 auf einen 5 Stelligen Port geändert.

Was ich gerne noch hätte/ vorhabe:
- Anmeldung über SSH mit Pw verbieten und auf Key umstellen
- Server im DMZ anbinden
- Von der Außenwelt erreichbar machen (nur für bestimmte Geräte).

Alles o.g. ist vergleichsweise unnötig, wenn Du den Raspi eben NICHT in die DMZ stellst und damit alle Ports verfügbar machst. Es reicht doch, wenn Du ausschließlich die "Nutz"Ports wie 80 für den Webserver nach außen per Portweiterleitung im Router weiterleitest. Es gibt z.B. keinen guten Grund, den SSH Port nach außen durchzuleiten, wenn Du den Raspi von zu Hause verwaltest, wovon ich jetzt mal ausgehen würde.

"Von der Außenwelt erreichbar" machst Du den Server, indem Du im Router einen DynDNS Service (z.B. DynDNS.org oder No-IP.com ) konfigurierst. Dann kommst Du darüber immer auf die (regelmäßig wechselnde) heimische IP.
 
Das stimmt, ich werde den Raspi nur von Zuhause verwalten.
Das einzige was aus dem Internet erreichbar sein soll sind dann bestimmte Seiten auf dem WebServer.
Den Mysql Port brauche ich dann ja auch nicht aufmachen, da der Webspace ja sowieso zugriff auf den Mysql server hat, richtig?

Den Teil mit dem DMZ hab ich jetzt nicht verstanden.
Also lieber nicht ins DMZ dafür im Router Portweiterleitung einrichten, sodass über einen bestimmten Eingangsport von außen, auf die richtige Ip und Port weitergeleitet wird und man somit auf dem Webspace zugreifen kann?
 
Was die DMZ angeht - ob Du hast haben willst oder nicht hängt davon ab, was dein Router darunter versteht...
 
Also eher kein DMZ.
Ich möchte über die externe IP, später feste Adresse über noip, eine portweiterleitung an den apache server einrichten.

Dieser muss doch nur an den Port gehen, den ich für den Webserver eingestellt habe, oder?
Also standardmäßig "80".
Den ändere ich dann auf einen anderen Port.
 
Ich würde auch den Port von SSH auf dem Raspberry Pi auf irgendeinen anderen legen, damit die SD-Karte länger hält.
 
Ich würde auch den Port von SSH auf dem Raspberry Pi auf irgendeinen anderen legen, damit die SD-Karte länger hält.

Solange der SSH-Port nicht nach außen durchgereicht wird, könnte man es auch beim Standard belassen. Angriffe kommen dann ja nicht rein.
 
Den Port des Webservers vom Standardport 80 wegzulegen ist nicht zu empfehlen. Sonst müssen die Leute, die Deine Website aufrufen wollen, den Port immer explizit angeben: http://meintollerserver.no-ip.com:12345 Und den 80er Port "zu verstecken" macht ja wohl auch NULL Sinn, schließlich willst Du ja, dass Besucher Deine Website sehen, oder nicht?
 
Noch was, beim Raspberry Pi würde ich nicht unbedingt den fetten Apache 2 Webserver, der alles kann, verwenden. Wenn noch eine Datenbank dazu kommt, wirst du Probleme mit dem RAM bekommen.

Da dein Serverchen sicherlich headless laufen wird, also ohne Grafik, solltest du rapsberry-config einmal aufrufen und den Memory-Split so einstellen, dass die GPU nur 16 MB RAM zugewiesen bekommt. Dort kannst du auch einstellen, dass der Raspberry Pi nicht den Desktop lädt. Das kostet auch RAM.

Alternativ kannst du z.B. nginx einsetzen. Scriptsprachen (php, python, perl, usw.) dann mit uwsgi einbinden. Dazu gibt es auch genügend Anleitungen im Netz.
 
Hallo Forum :)
- Neuen User mit root Rechten (kopiert vom User "Pi") erstellt.
- User "Pi" gelöscht.
Auch das war wahrscheinlich nicht nötig, wenn ich Dich richtig verstanen habe.

Auf dem Raspi gibt es - wir reden hier ganz gewiss von Raspbian als System - bereits einen root-Benutzer.
Zuerst gibst Du diesem root-Benutzer ein Kennwort:
sudo passwd

Und schon kannst Du Dich als root einloggen. Wenn das klappt, kannst Du dem Benutzer pi die ganzen sudo-Vollmachten entziehen. Damit wird er zwar nicht gelöscht, wäre aber relativ machtlos.



Das stimmt, ich werde den Raspi nur von Zuhause verwalten.
Das einzige was aus dem Internet erreichbar sein soll sind dann bestimmte Seiten auf dem WebServer.
Soweit hast Du meine Zustimmung. Praktisch solltest Du aber vor jeder Urlaubsreise, die Du antrittst, auch den ssh-Port von außen erreichbar machen, auf einem Port oberhalb von 20000.

Den Mysql Port brauche ich dann ja auch nicht aufmachen, da der Webspace ja sowieso zugriff auf den Mysql server hat, richtig?
Korrekt. Ich gehe sogar noch weiter. Alle Benutzer, die Du in MySQL anlegst, sollten nur von localhost aus Zugriff darauf haben. Denn sogar phpmyadmin loggt sich nur lokal in die Datenbank ein, auch wenn Du das Teil von der Ferne bedienst.


Noch was, beim Raspberry Pi würde ich nicht unbedingt den fetten Apache 2 Webserver, der alles kann, verwenden. Wenn noch eine Datenbank dazu kommt, wirst du Probleme mit dem RAM bekommen.
Ach das klappt schon, solange nicht allzuviel Traffic abzuarbeiten ist. Ich praktiziere das sogar schon mit dem Vorgängermodell, welches noch schwächer auf der Brust war.
Trotzdem ist der Tipp mit dem Memory-Split nicht verkehrt, insbesondere wenn der Raspi headless und ohne Grafik gestartet wird.



Ich würde auch den Port von SSH auf dem Raspberry Pi auf irgendeinen anderen legen, damit die SD-Karte länger hält.
Zum Thema Haltbarkeit der SD-Karte im Raspberry Pi habe ich mal eine Frage an Euch.

Wie kann ich dem System abgewöhnen, solche Sachen zu protokollieren, die ich mir ganz gewiss nicht vollständig durchlesen möchte:
Code:
Nov  2 20:38:01 meinraspi4 CRON[20928]: (pi) CMD (lynx -dump http://localhost/cronaufruf.php >/dev/null 2>&1 )
Nov  2 20:39:01 meinraspi4 CRON[20953]: (pi) CMD (lynx -dump http://localhost/cronaufruf.php >/dev/null 2>&1 )
Nov  2 20:40:01 meinraspi4 CRON[21017]: (pi) CMD (lynx -dump http://localhost/cronaufruf.php >/dev/null 2>&1 )
Nov  2 20:41:01 meinraspi4 CRON[21052]: (pi) CMD (lynx -dump http://localhost/cronaufruf.php >/dev/null 2>&1 )
Nov  2 20:42:01 meinraspi4 CRON[21070]: (pi) CMD (lynx -dump http://localhost/cronaufruf.php >/dev/null 2>&1 )
Nov  2 20:43:01 meinraspi4 CRON[21090]: (pi) CMD (lynx -dump http://localhost/cronaufruf.php >/dev/null 2>&1 )
Quelle: /var/log/syslog



Pfiffikus,
der damit gerne die SD-Karte schonen würde
 
Soweit hast Du meine Zustimmung. Praktisch solltest Du aber vor jeder Urlaubsreise, die Du antrittst, auch den ssh-Port von außen erreichbar machen, auf einem Port oberhalb von 20000.

Die bessere Empfehlung an dieser Stelle wäre aber doch wohl, im (hoffentlich vernünftigen) Router eine VPN Verbindung hierfür anzulegen. Woher hast Du eigentlich die 20000? Das ist doch wohl völlig willkürlich? Der einzige Bereich, der nicht verwendet werden sollte, ist der System Port Bereich bis 1024. Alles andere ist in Ordnung ( https://de.wikipedia.org/wiki/Port_(Protokoll) ) und prinzipiell möglich. Es kann natürlich trotzdem sein, dass manche Ports durch lokale Dienste bereits belegt sind.
 
Die bessere Empfehlung an dieser Stelle wäre aber doch wohl, im (hoffentlich vernünftigen) Router eine VPN Verbindung hierfür anzulegen.
Stimmt.

Woher hast Du eigentlich die 20000? Das ist doch wohl völlig willkürlich?
Korrekt.

Der einzige Bereich, der nicht verwendet werden sollte, ist der System Port Bereich bis 1024.
Das ist mir bekannt.
Doch ich ziehe es vor, nicht mit der 1025 zu beginnen, wenn ich einen Zugang ein wenig verstecken möchte. Das wäre dann doch zu schnell zu erraten. Unter 20000 läuft da bei mir garnix. Doch Du hast Recht, das ist eine persönliche Vorliebe von mir.
(Dass ein Verstecken nur minimales Sicherheitsplus bietet, ist mir selber klar.)



Pfiffikus,
der wegen der Frage zu den Logdateien wohl ein eigenes Thema aufmachen muss
 
Dass ein Verstecken nur minimales Sicherheitsplus bietet, ist mir selber klar.

Das Verlegen des Ports bietet keinerlei Sicherheitsgewinn, es hält lediglich die Logs etwas sauberer.
Ist aber auch logisch...wenn man bedenkt, daß einem maximal 65535 Ports zur Verfügung stehen und wenn man in die Überlegung einbezieht, wie schnell diese maximal 65535 Anfragen abgearbeitet sind, um einen möglichen Angriffspunkt zu finden. So ein Portscan dauert nur einige Sekunden.

Übrigens immer sehr hilfreich, wenn man einen möglichst freien Port bzw. Portrange sucht: Liste der standardisierten Ports
 
Also wenn schon den Port verstecken, dann bitte richtig: https://www.digitalocean.com/commun...hide-your-ssh-daemon-from-attackers-on-ubuntu

Und irgendwie scheint mein Hint auf Port 443 nicht von der Diskussion aufgenommen worden zu sein: Der Webserver sollte auf jeden Fall TLS konfiguriert haben und per HTTPS ansprechbar sein. Und wenn da nur Sachen für den persönlichen Gebrauch liegen, dann auch gleich den Redirect von HTTP auf HTTPS einsparen und den Port 80 ganz zu lassen.
 
Wenn es öffentlich zugängliche (nicht sensible) Daten sind, die keinen Login erfordern und auch keine privaten Daten abgreifbar sind, braucht man auch nicht verschlüsseln.

Hostet man ein Forum wie das SSF, sollte man alleine zum Schutz der Nutzer SSL verwenden. Oh, ich sehe SSF unterstützt nun SSL. Sehr gut.

Der Vorteil wenn alle verschlüsseln, dass es für die Geheimdienste schwieriger wird Daten abzugreifen um diese zu entschlüsseln. Die haben dann das Problem, dass die sich entscheiden müssen, was sie entschlüsseln.
 
Für einen Server, der in einem Rechenzentrum an einer dicken Leitung hängt, ist das eine gute Empfehlung. Dankesehr.

Ob man bei einem Raspi hinter einem Router einen solchen Aufwand betreibt, mag dann jeder für sich entscheiden.

Und irgendwie scheint mein Hint auf Port 443 nicht von der Diskussion aufgenommen worden zu sein: Der Webserver sollte auf jeden Fall TLS konfiguriert haben und per HTTPS ansprechbar sein. Und wenn da nur Sachen für den persönlichen Gebrauch liegen, dann auch gleich den Redirect von HTTP auf HTTPS einsparen und den Port 80 ganz zu lassen.
Sehe ich es richtig, dass man dafür ein kostenpflichtiges Zertifikat braucht?


Pfiffikus,
der bisher aus diesen Gründen davon Abstand genommen hat
 
Back
Top