server:lamp-server_konfigurieren

Ubuntu

Um einen Entwicklungsserver einzurichten habe ich bei Hetzner den kleinsten Cloud-Server angemietet und wie folgt eingerichtet.

Ubuntu 18.04 Minimalimage installieren

Bash als Default-Shell

dpkg-reconfigure dash

Select→No

Disable AppArmor

AppArmor hat bei mir immer nur Probleme verursacht und kann meiner Meinung nach weg.

service apparmor stop && update-rc.d -f apparmor remove && apt remove apparmor apparmor-utils

Disable MDADM LXD LXCFS Policikit Open-iscsi Accountsservice

Hier noch ein paar Dienste die bei meiner Meinung nach bei einem Cloud-Server nichts zu suchen haben und deaktiviert werden können.

service mdadm stop && update-rc.d -f mdadm remove && apt remove mdadm -y --purge
service lxd stop && update-rc.d -f lxd remove && apt remove lxd -y --purge
service lxcfs stop && update-rc.d -f lxcfs remove && apt remove lxcfs -y --purge
apt remove policykit-1 open-iscsi accountsservice -y --purge 

Remove LVM

Da der LVM nicht benutzt wird kann dieser deinstalliert werden.

apt remove lvm2 -y --purge

Remove atd

at ist eine Art cron-Ersatz. Habe ich bisher nie gebraucht.

apt remove at -y --purge

Remove Snap

apt remove snapd -y --purge

Apache und PHP PPA aktivieren

apt install software-properties-common
add-apt-repository ppa:ondrej/apache2
add-apt-repository ppa:ondrej/php

MariaDB 10.3 PPA aktivieren und installieren

apt install software-properties-common
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.3/ubuntu bionic main'
apt install mariadb-client mariadb-server

Update und Autoremove

apt update
apt autoremove

Pakete installieren

apt install mc htop p7zip-full zip apache2 php7.2 libapache2-mod-php php-mysql letsencrypt ufw fail2ban mosh

Apache konfigurieren

a2enmod rewrite
systemctl restart apache2
cd /var/www/html
mkdir gp-admin
cd gp-admin
wget https://github.com/vrana/adminer/releases/download/v4.5.0/adminer-4.5.0-mysql-de.php

Letsencrypt für eine Subdomain einrichten

a2enmod ssl
service apache2 restart
service apache2 stop
letsencrypt certonly -a standalone -d subdomain.domain.de

In der VHost-Config-Datei vom Webserver dann das Zertifikat hinterlegen:

/etc/apache2/sites-available/default-ssl.conf
SSLEngine on
SSLCertificateFile    /etc/letsencrypt/live/subdomain.domain.de/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/subdomain.domain.de/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/subdomain.domain.de/fullchain.pem
service apache2 restart
letsencrypt renew

Uncomplicated Firewall konfigurieren

Auf dem Server möchte ich nur SSH und den Webserver von außen erreichbar haben.

ufw allow ssh
ufw allow http
ufw allow https
ufw enable
ufw status

MariaDB von externer IP Zugriff erlauben und mit UFW absichern

Falls man einen Cloud-Server nur als Datenbankserver aufsetzen möchte, kann man den Zugriff von einer externen IP einrichten.

Bei Ubuntu 18.04 liegt die Konfigurationsdatei für MariaDB unter /etc/mysql/my.cnf
Dort einfach folgende Zeile auskommentieren:

/etc/mysql/my.cnf
bind-adress = 127.0.0.1
/etc/mysql/my.cnf
#bind-adress = 127.0.0.1

Danach MariaDB neu starten damit die Konfiguration aktiv wird.

service mariadb restart

Man könnte auch direkt eine IP angeben damit MariaDB nur an diese IP gebunden ist. Dies lösen wir aber durch die Firewall.
Warum? Um auf die DB von einer dynamischen IP zuzugreifen nutze ich ein Shellskript welches die Firewall um die dementsprechenden Regeln erweitert.

mysql -u root -p
USE mysql;
SELECT User,Host FROM user;
CREATE user 'db-benutzername'@'%';
CREATE DATABASE 'datenbankname' COLLATE 'utf8_general_ci';
GRANT ALL PRIVILEGES ON datenbankname.* TO 'db-benutzername'@'192.168.100.%' IDENTIFIED BY 'mein-neues-passwort' WITH GRANT OPTION;
FLUSH PRIVILEGES;
SELECT User,Host FROM mysql.user;

Das %-Zeichen dient hier als Platzhalter für den jeweiligen Adressbereich. Also kann jede IP von 192.168.100.1-192.168.100.255 darauf zugreifen.
Der Benutzer kann hier von jeder beliebigen IP auf den MariaDB-Server zugreifen. Möchte man das verhindern und diesen nur an eine IP binden muss man beim anlegen des Benutzers noch die IP festlegen.

Um einem Benutzer alle Rechte zu entziehen sollte man folgendes ausführen

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'db-benutzername';

Zugriff zulassen:

ufw allow from 192.168.100.123 proto tcp to any port 3306

Zugriff entziehen

ufw delete allow from 192.168.100.123 proto tcp to any port 3306
apt-get install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades

Interaktiver Dialogder die Datei: /etc/apt/apt.conf.d/20auto-upgrades mit folgendem Inhalt erstellt:

/etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

In: /etc/apt/apt.conf.d/50unattended-upgrades weitere Anpassungen tätigen.
Quelle:
https://help.ubuntu.com/community/AutomaticSecurityUpdates

Auf jedem Server kann das Systemd-Journal viel Platz verbrauchen. Gerade bei Cloud-Servern ist dieser aber recht knapp bemessen. Weshalb man die Logs wie folgt verkleinern kann:

Mit folgendem Befehl können wir uns die Größe des Journal-Logs ansehen:

$ journalctl --disk-usage
Archived and active journals take up 1.9 GB in the file system.

Um das Journal jetzt auf die letzten 10 Tage zu beschränken führt man folgendes aus:

$ journalctl --vacuum-time=10d
....
....
Vacuuming done, freed 1.8G of archived journals from /var/log/journal/9d5dd813d72447108fe84a2f91af4384.

Nach dem aufräumen/löschen der Logs die älter als 10 Tage sind belegt das Journal nur noch 48 MB :-)

$ journalctl --disk-usage
Archived and active journals take up 48.0M in the file system.
  • server/lamp-server_konfigurieren.txt
  • Zuletzt geändert: vor 4 Jahren
  • von Thomas Große