# Rootserver-Kochbuch

| Dieses Buch steht im Regal EDV. | Zielgruppen: Studium und Beruf | Lehrbuch |

# Zusammenfassung des Projekts

„Rootserver-Kochbuch“ ist nach Einschätzung seiner Autoren zu 0 % fertig
* Zielgruppe: Wissbegierige bis ausgebildete Administratoren eines Linux Servers
* Lernziele: Installation, Konfiguration und Betrieb eines Rootservers
* Buchpatenschaft/Ansprechperson: Peter Littmann
* Sind Co-Autoren gegenwärtig erwünscht?
Dieses Buch wird durch intensive Zusammenarbeit sicher schnell besser. Der Hauptautor freut sich über jeden, der mitmacht. Kaputtmachen kannst du nicht viel – also sei mutig. Wenn etwas nicht passt, rührt sich der Hauptautor bestimmt. Danke.
* Projektumfang und Abgrenzung zu anderen Wikibooks: Dieses Buch richtet sich an Personen, die bereits erfahrene Linux Benutzer sind und ausreichende Kenntnisse in Administration und Netzwerk haben.
* Aufbau des Buches: Das Buch orientiert sich für den Anfang an dem Buch Rootserver unter Debian GNU Linux "Jessie": Do it yourself! Rootserver

# Über dieses Buch
## Autor

Na icke natürlich.

## Haftung / Gewähr

Es gilt der bei Freier Software übliche Slogan: Jeder bekommt das, was er bezahlt! Das hier ist freiwillig und kostenlos, folglich erfolgt keine Haftung, keine Gewähr für garnichts!!! Ick bin Berliner, also sind Schreibfehler vorprogrammiert und da es sich um ein Wiki handelt, dürft ihr sie entweder gerne verbessern oder behalten.
Wie in Lehrbüchern üblich, werden Gebrauchsnamen, Markennamen, Handelsnamen, Warenbezeichnungen usw. ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei Verwendung ist Benutzer selber verpflichtet, zu prüfen, ob er sie verwenden darf.

# Vorwort

Dieses Buch behandelt in der Grundstufe die Beschreibung eines sogenannten LAMP-Servers(Linux, Apache, MySQL und PHP). Ssh und Ftp werden als wichtige Werkzeuge ebenfalls in der Grundstufe beschrieben.
Im weiteren Verlauf werden dann weitere Dienste wie ein Forum(phpBB), Wiki(MediaWiki) und ein Mailserver(Postfix, Dovecot mit SpamAssassin) etc. eingerichtet.

# Vorüberlegungen

Vor der Umsetzung steht wie immer erstmal die Planung:
* Was will ich und was brauche ich dafür:
** Ich will ein Forum betreiben und dafür phpBB einsetzen. PhpBB benötigt einen Webserver wie Apache und PHP, dieses darf bei der aktuellen Version 3.2 aber höchstens in der Version 7.2 eingesetzt werden, neuere Versionen werden momentan noch nicht unterstützt. Demzufolge kann ich nur z.B. Debian 9 einsetzen, die Version 10 würde PHP 7.3 mitbringen.
** Ich will aus Sicherheitsgründen mindestens einen Server mit Software-RAID Level 1(Spiegel) einsetzen.
** Aus kostengründen betreibe ich meinen Server bei Kimsifi(OVH).

# SSH-Zugang und IP-Adresse

Unmittelbar nach der Fertigstellung der Installation wird euch der Serveranbieter, beimir Kimsufi eine eMail mit der Server-IP und dem Initial-Passwort zukommen lassen, gut aufheben.
Zum Thema Sicherheit: Am sichersten wäre euer Server natürlich aufgehoben, wenn ihr ihn vom Netzwerk trennt, in den Keller stellt und den Schlüssel wegwerft. Nur, geht halt nicht. Als erste und wichtigste Aktion nach der Installation wird also erstmal ein neues Passwort gesetzt und ggf der ssh-Port verschoben.
Ich verwende hier unter Linux ein Terminal. alternativ liesse sich natürlich auch PuTTY verwenden.
1. Neues Terminal öffnen und Verbindung vom heimischen Rechner aufbauen und das Passwort ändern(auch als Rückfallebene):
* Ein Terminal öffnen
* ssh root@SERVER-IP
* Euer Server meldet sich mit der Login-Abfrage
* PASSWORT Der Einfachheit halber mittels Kopieren und Einfügen
* passwd Neues, möglichst sicheres Passwort setzen.
* Mittels lastb könnt ihr euch jetzt erstmal anzeigen lassen, wer euch seit der Installation schon alles ohne Einladung besuchen wollte.
2. Neues Terminal öffnen und Verbindung vom heimischen Rechner aufbauen(als Arbeits-Terminal):
* Ein Terminal öffnen
* ssh root@SERVER-IP
* Mittels des neu vergebenen Passworts anmelden.
* Mittels whereis nano prüfen, ob Nano installiert ist.
* Das hebe ich mir ggf. für später auf: nano /etc/ssh/sshd_config, nach #Port 22 suchen und z.B. in Port 2322 ändern
3. Da der Zugang als root potentiell gefährlich ist, einen neuen Standardbenutzer anlegen und ihm sudo-Rechte erteilen.
* Normalerweise würde man hier useradd verwenden, Debian bietet hier aber das komfortablere adduser.
* adduser duda
* apt-get install sudo
* Bei Debian ist hier die Gruppe sudo bereits freigeschaltet, sonst wäre z.B. die Gruppe wheel freizuschalten
* usermod -aG sudo duda
4. Nun kann /etc/ssh/sshd_config erneut editiert und der Dienst neu gestartet werden
* nano /etc/ssh/sshd_config, nach PermitRoootLogin yes suchen und auf no setzen
* service sshd restart

## Real Time Monitoring (RTM) prüfen

Da mir meine Management-Oberfläche bei Kimsufi eine Echtzeitüberwachung anbietet, habe ich überpüft ob sie auch funktioniert und festgestellt, dass sie nicht ordentlich läuft. Die Komponenten habe ich neu installiert und die Dienste neu gestartet, erfolglos. Nun habe ich ein Ticket beim Support aufgemacht. OVH Doku zu RTM Auch nach einer Neuinstallation von Debian 9 und Freigabe der Ports 9100 und 6100:6200/udp, sind laut Monitoring IP OVH erfoderlich, läuft beamium scheinbar nicht richtig. Ich habe eine Meldung aufgemacht.

## Locales überprüfen / anpassen

dpkg-reconfigure locales Ich wähle, da es sich um einen Server handelt, en_US.UTF-8 UTF-8.

## Uhrzeit und Datum

Logdateien, Zertifikate und einige Dienste sind von einer genauen Zeit abhängig.
In der Grundinstallation ist ntpdate' installiert, dieses einmal ausführen.

### localtime setzen

Der Debian-Weg ist: dpkg-reconfigure tzdata

### hwclock

hwclock --systohc hwclock --show

### Zeiteinstellung prüfen

timedatectl status

### Später kann ntp installiert werden

* ntp installieren: apt-get install ntp
* ntp konfigurieren: nano /etc/ntp.conf ptbtime1.ptb.de bis ptbtime3 eintragen.
* ntp neustarten: service ntp restart
* ntp prüfen: systemctl status ntp

## Paketquellen ggf. anpassen

nano /etc/apt/sources.list:
Anschliessend die Quellen neu einlesen und das System ggf. aktualisieren apt-get update apt-get upgrade apt-get dist-upgrade

## Softwarefirewall installieren (Paketfilter)

Eingesetzt wird hier ufw. apt-get install ufw

### Später: Einstellungen zurücksetzen

ufw logging medium

### SSH Port und Port für System Real Time Monitoring freigeben

ufw allow ssh ufw allow 9100

### ufw aktivieren

ufw enable

### Aktive Regeln abfragen

ufw status

### Logcheck

tail -f /var/log/ufw.log
Die Ausgabe sieht zum Beispiel dann so aus:
Um zu klären, wo dieser Kontaktversuch nun herkommt kann man entweder whois befragen oder Infosniper nutzen. apt-get install whois
Als grafische Shell installiere ich den Midnight Commander: apt-get install mc

# Lynis

Für die Installation von Lynis installiere ich git: apt-get install git
mkdir test cd test git clone https://github.com/CISOfy/lynis cd lynis mkdir /usr/local/lynis, mit mc habe ich dann die Dateien in da neue Verzeichnis kopiert. cd /usr/local/lynis; ./lynis audit system
Als Ergebnis der Überprüfung mit lynis installiere ich: apt-get install libpam-cracklib
Extrakt von lynnis-report.dat: /etc/login.defs könnte zum Beispiel verbessert werden:
Siehe bezüglich motd
Ergebnis von lynis.log fand ich nicht erwähnenswert.

## Das Systemm aktualisieren
### Cron / crontab

Debian verwendet immernoch Vixie Crron.

### needrestart

apt-get install needrestart
nano /etc/needrestart/needrestart.conf
Folgende Einträge wurden geändert und aktiviert:
* $nrconf{verbosity} = 2;
* $nrconf{restart} = 'a';

### apticron - Updatebenachrichtigung

apt-get install apticron

#### Beispielmail - apticron
### cron-apt

apt-get install cron-apt
Die Konfig folgendermassen anpassen: nano /etc/cron-apt/action.d/3-download
Die Änderung von dist-upgrade auf upgrade bewirkt, dsss apt keine, möglicherweise doch noch benötigte Pakete, entfernt, um andere Pakete installieren zu können. Auf einem Server ist eher eine konservative herangehesweise angesagt.

#### Programmpaket nur herunterladen - keine automatische Installation

Der Parameter -d legt fest, dass die Programmpakete nur heruntergeladen, keinesfalls ohne vorherige Kontrolle duch den Systemerwalter installiert werden.

#### config

Die Konfigurationsdatei ist nach der Installation leer und muss sinnvole Werte erhalten: nano /etc/cron-apt/config MAILON="output" Mit der Angabe 'output wird erreicht, dass man bei jeder Ausgabe von cron-apt eine eMail erhält, dies kann später gelockert werden.

#### Nur Sicherheitsupates automatisch installieren

Erstellen der folgenden Datei mit nachfolgendem Eintrag: nano /etc/cron-apt/action.d/4-security upgrade -y -o APT::Get::Show-Upgraded=true
Erstellen der folgenden Datei mit nachfolgendem Eintrag: nano /etc/cron-apt/config.d/4-security OPTIONS="-q -o Dir::Etc::SourceList=/etc/apt(sources.list.d/security_only.list -o Dir::Etc::SourceParts=\"/dev/null\""
Erstellen der folgenden Datei mit den beiden nachfolgenden Einträgen: nano /etc/apt/sources.list.d/security_only.list deb http://security.debian.org/debian-security stretch/updates main contrib non-free deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free

#### Testlauf

cron-apt -s startet dann einen Testlauf im Terminal.

#### Tägliche Ausführung

Bei der Installation wurde bereits eine crontab in /etc/cron.d abgelegt, die täglich um 04:00 Uhr für die Durchführung sorgt.

#### Den Server neu starten

Ein entsprechender Entrag mit nano /etc/crontab sorgt für einen wöchentlichen Neutart des Servers Montags um 03:00 Uhr. Hierbei muss darauf geachtet werden, dass keine anderen Operationen gleichzeitig ablaufen.

#### Empfehlung

Bei der Bedeutung der Sicherheit für den ordnungsgemäßen Betrieb und möglichen Gefährdung des Servers ist es von hoher Wichtigkeit Sicherheitsupdates so zeitnah wie möglich einzuspielen.

## Sicherheitsrelevante Software installieren
### fail2ban Installation

apt-get install fail2ban Da die .conf-Dateien bei jedem Programm-Update überschrieben werden würden, sind diese nicht direkt zu ändern, sondern deren lokale Kopie. cd /etc/fail2ban cp jail.conf jail.local
Mittels nano jail.local die Konfiguration anpassen und mit dem Parameter enable die gewünschten Filter einschalten.

#### Emailbenachrichtigung

In der Sektion ACTIONS folgendes ändern:

#### Dienst neu starten und Status prüfen

service fail2ban restart service fail2ban status

## Quellen

* Grundlagen:
** Linux-Praxisbuch
** Linux-Distributionen: Ubuntu-Anwenderhandbuch, Knoppix-Handbuch
** Wikijunior Computer und Internet
** Vi-Befehlsreferenz, Learning the vi editor
** Datensicherung
** Regal:EDV, Abschnitt Sicherheit
* Datenbank:
** Einführung in SQL
* Angebotene Dienste:
** Mail Transfer Agent: Postfix
** Wiki: MediaWiki

### Unterstützung durch den Serveranbieter

* OVH
** Dokumentation: Deutsch andere Sprache oben rechts auswählen Französisch
** Forum: Englisch Französisch
** Github: https://github.com/ovh

## Literaturverzeichnis

* Rootserver unter Debian GNU Linux "Jessie": Do it yourself! Rootserver
Dieses Lehrwerk ist erst vor kurzem angelegt worden. – Nützliche Hinweise findest du im Wikibooks-Lehrbuch. – Bei Problemen kannst du unter diesem Link um Hilfe bitten. – Diskussionen zu diesem Buch führst du auf dieser Seite. – (Datum im Format Jahr_Monat_Tag: 20191026))
Details zu diesem Baustein erfährst du unter diesem Link.