Installieren und Härten von Dolibarr

SSH Key erstellen und Verbindung herstellen

Vorausgesetzt ist ein vorinstallierter Server mit

Ubuntu 20.04.x LTS Focal Fossa (x86-64) bzw. Debian Server 11 bullseye (x86-64) Betriebssystem

mit vorinstalliertem openssh

Sie brauchen Root Rechte am Server

Zugriff erfolgt über einen Windows PC

Die Verbindung wird per SSH und PuTTY hergestellt Zusätzlich verwende ich Cmder

Hier kann man aber auch bei Windows im Startmenü in die Eingabezeile - cmd.exe - eingeben und bestätigen erfüllt den selben zweck

Herstellen einer SSH Verbindung

unter Windows das SSH-Paar erstellen mit Cmder ins eigene Benutzerverzeichnis wechseln

das rot geschriebene mit Ihren Daten ersetzen

cd C:\Users\Name

SSH-Key erzeugen → Pfad und Name bestätigen (Enter) oder eigenen Pfad und Namen eingeben → Passphrase eingeben (man kann es auch leer lassen dies wird jedoch nicht empfohlen)

Standard Sicherheit 2048 Bit - höhere Sicherheit 4096 Bit

ssh-keygen
ssh-keygen -t rsa -b 4096

anmelden am Server

befehle am Server über PuTTY eingeben anmelden mit SERVER.USERNAME und SERVER.PASSWORD‬‬‬‬‬‬‬‬‬‬

System update

sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt -y install software-properties-common

SSH Server installieren falls er bei der Ubuntu Installation nicht mitinstalliert wurde

sudo apt install openssh-server

SSH als Service aktivieren

sudo systemctl enable ssh
sudo systemctl start ssh

Ordner für SSH Key anlegen

das rot geschriebene mit Ihren Daten ersetzen

mkdir /home/SERVER.USERNAME/.ssh

Dem Ordner die nötigen Rechte geben

das rot geschriebene mit Ihren Daten ersetzen

chmod 700 /home/SERVER.USERNAME/.ssh
chown -R SERVER.USERNAME:SERVER.USERNAME/home/SERVER.USERNAME/.ssh

SSH-Key und authorized-keys erstellen

wechseln auf Windows

eingabe mit Cmder oder cmd.exe

SSH-Key und authorized-keys erstellen im Windows Benutzerordner .ssh erstellen

das rot geschriebene mit Ihren Daten ersetzen

cp C:\Users\Name\.ssh\id_rsa.pub C:\Users\Name\.ssh\authorized_keys

aufs Benutzerkonto wechseln

das rot geschriebene mit Ihren Daten ersetzen

cd C:\Users\Name\

SSH-Key und authorized_keys auf den Server kopieren

das rot geschriebene mit Ihren Daten ersetzen

cat ~/.ssh/id_rsa.pub | ssh SERVER.USERNAME@SERVER-IP"cat >> ~/.ssh/authorized_keys"

mit PuTTY am Server

Ordner und Zugriffsrechte vergeben

das rot geschriebene mit Ihren Daten ersetzen

chmod 700 /home/SERVER.USERNAME/.ssh
chmod 600 /home/SERVER.USERNAME/.ssh/authorized_keys

testen ob SSH Autorisiergun läuft

eval "$(ssh-agent)"

Wenn Sie ein „ Agent pid ….“ Erhalten hat alles geklappt und der SSH-Key am PC kann gelöscht werden.

Dazu wechseln Sie auf Ihren Windows PC und geben bei Cmder oder cmd.exe den Befehl zum löschen des authorized_keys ein

das rot geschriebene mit Ihren Daten ersetzen

rm C:\Users\Name\.ssh\authorized_keys

Server SSH Härten und absichern

mit PuTTY am Server

umbenennen der sshd_config in sshd_config.bak

sudo mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

mit einem Texteditor können Sie jetzt die leere sshd_config erstellen

sudo nano /etc/ssh/sshd_config

Bitte Fügen Sie dazu nachstehendes ein

Jetzt können Sie auch ein alternatives SSH Port eintragen

ein freies Port können Sie hier finden

das rot geschriebene mit Ihren Daten ersetzen

# $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Include /etc/ssh/sshd_config.d/*.conf

#Standart Port ist 22
Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

   # Ciphers and keying
#RekeyLimit default none

   # Logging
#SyslogFacility AUTH
#LogLevel INFO

   # Authentication:
LoginGraceTime 20
PermitRootLogin no
#StrictModes yes
MaxAuthTries 3
#MaxSessions 10
PubkeyAuthentication yes

   # Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2

#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

   # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
   # Change to yes if you don't trust ~/.ssh/known_hosts for
#HostbasedAuthentication
#IgnoreUserKnownHosts no
   # Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes

   # To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
PermitEmptyPasswords no

   # Change to yes to enable challenge-response passwords (beware issues with
   # some PAM modules and threads)
ChallengeResponseAuthentication no

   # Kerberos options
KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

   # GSSAPI options
GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

   # Set this to 'yes' to enable PAM authentication, account processing,
   # and session processing. If this is enabled, PAM authentication will
   # be allowed through the ChallengeResponseAuthentication and
   # PasswordAuthentication.  Depending on your PAM configuration,
   # PAM authentication via ChallengeResponseAuthentication may bypass
   # the setting of "PermitRootLogin without-password".
   # If you just want the PAM account and session checks to run without
   # PAM authentication, then enable this but set PasswordAuthentication
   # and ChallengeResponseAuthentication to 'no'.
UsePAM yes
AllowAgentForwarding no
AllowTcpForwarding no
#GatewayPorts no
X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
    # no default banner path
Banner none
    # Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp  /usr/lib/openssh/sftp-server

Texteditor verlassen - bei nano CTRL+x (STRG+x) - save mit y bestätigen

sshd_config neu laden
sudo systemctl restart ssh

verwendeten SSH-Port anzeigen

grep -i port /etc/ssh/sshd_config

Die Putty Shell nicht schließen bitte erst den nächsten Schritt am Windows PC durchführen

PuTTY einrichten

PuTTYgen starten → Conversation → Import Key und den Privaten Schlüssel - id_rsa - laden (Passphrase eingeben)

in PuTTYgen auf → Save private key - klicken und das File als - id_rsa.ppk - speichern

sollte eine Passphrase beim laden abgefragt worden sein wird diese übernommen, sonst die Frage nach der Passphrase mit JA/YES beantworten und weiter ohne Passphrase

PuTTY starten rechts auf → Conection - Data → bei Auto-login username den sudo Root User des Servers eintragen

jetzt auf → Conection → SSH → Auth → klicken und unter - Private key file for authentication - den SSH-Key eingeben - C:\Users\Name\.ssh\id_rsa.ppk

jetzt auf → Session - klicken → unter Host Name (or IP address) die IP adresse des Servers oder den Hostnamen eingeben und unter Port das gewählte SSH Port

bei Connection type: SSH auswählen

unter - Save Sessions - einen Namen eingeben und mit Save speichern

ein Doppelklick auf diesen Namen öffnet das Eingabefeld zum Server

PuTTY neustarten und mit neuem Port einloggen

Wenn Sie sich mit Ihrem neuen Port und dem SSH-Key nicht anmeldet können, haben Sie einen Fehler in den Vorhergehenden Schritten und sollten diesen jetzt beheben.

Sie haben keinen Zugriff mehr über SSH wenn es hier einen Fehler gibt.

Ist alles okay - > Putty Shell schließen

exit

und mit Ihren neu eingerichdeten SSH Zugang einloggen - anmelden mit Ihrem SERVER.PASSWORD

UFW Firewall einrichten

Firewall Status abfragen

sudo ufw status

wenn inaktiv UFW Firewall aktivieren und mit ‚y‘ bestätigen

sudo ufw enable

alle eingehenden Anfragen blocken

sudo ufw default deny incoming

alle ausgehenden Anfragen erlauben

sudo ufw default allow outgoing

IPv6 unterstützung aktivieren

cat /etc/default/ufw

Sie können mit dem Standard SSH Port weitermachen, wenn Sie es nicht geändert haben

Falls Sie diesen Befehl verwenden bitte die # vor sudo entfernen

#sudo ufw allow SSH

Falls Sie das Port geändert haben verwenden Sie bitte diesen Befehl

Falls Sie diesen Befehl verwenden bitte die # vor sudo entfernen

das rote Port mit Ihrem Port ersetzen

#sudo ufw allow PORT

zusätzliche Sicherheit gibt es, wenn man nur ausgewählte IP Adresse zulässt

die FROM.IP identifizieren mit der man am Server angemeldet ist

w

erhaltene IP Adresse übernehmen und als FROM.IP Adresse einfügen – ggf. eigene Portadresse.

So haben Sie am Server nur SSH Zugang mit der IP Ihres Clientrechners und dem SSH Port das Sie gewählt haben

Falls Sie diesen Befehl verwenden bitte die # vor sudo entfernen

das rot geschriebene mit Ihren Daten ersetzen

#sudo ufw allow proto tcp from FROM.IP to SERVER.IP port PORT

Wenn Sie diese Einstellung machen müssen Sie in Ihrem Router dafür sorgen das Ihr PC immer dieselbe FROM.IP hat.

Zu guter Letzt müssen Sie für einen reibungslosen Betrieb noch die Standart Ports für HTTP und HTTPS freigeben.

sudo ufw allow http
sudo ufw allow https

ggf Limits für das SSH Port eingeben

Näheres dazu finden Sie zum beispiel hier

Falls Sie diesen Befehl verwenden bitte die # vor sudo entfernen

#sudo ufw limit ssh

zur Kontrolle Firewall Status abfragen

sudo ufw status

UFW Firewall neustarten

sudo ufw reload

Überprüfen ob die UFW Firewall als Service einrichten ist und UFW bei jedem Neustart des Servers aktiviert wird - mit ‚q‘ verlassen

sudo systemctl status ufw.service

nicht zu empfehlen aber manchmal nötig

UFW Firewall deaktivieren - deaktiviert auch den Service

Falls Sie diesen Befehl verwenden bitte die # vor sudo entfernen

#sudo ufw disable

Starten Sie Ihren Server und Putty neu

sudo reboot now

Die Einrichtung Ihres gesicherten SSH Zuganges und der Ubuntu eigenen Firewall ist jetzt abgeschlossen.

Vorbereiten der Einrichtung Ihres Servers

Nach dem Neustart melden Sie sich mit privilegierten Benutzerrechten am Server an

sudo -s

Installieren Sie die folgenden Softwarepakete, als notwendige Grundlage für den Serverbetriebs

apt update -q4 && apt install -y curl gnupg2 git lsb-release ssl-cert ca-certificates apt-transport-https tree locate software-properties-common dirmngr screen htop net-tools zip unzip bzip2 ffmpeg ghostscript libfile-fcntllock-perl libfontconfig1 libfuse2 lsb-release socat

Nach der Installation sorgen Sie für eine saubere Umgebung und machen ein Server update, upgrade und bereinigen den Server von unnötigen Datensätzen.

apt update && apt upgrade -V && apt dist-upgrade && apt autoremove -y

Tragen Sie den zukünftigen Servernamen sowohl in die hosts-Datei, als auch in die hostname-Datei ein.

mv /etc/hosts /etc/hosts.bak
nano /etc/hosts

das rot geschriebene mit Ihren Daten ersetzen

127.0.0.1 localhost
127.0.1.1 ihre.domain.de
# The following lines are desirable for IPv6 capable hosts
::1       ihre.domain.de ip6-localhost ip6-loopback
fe00::0   ip6-localnet
ff00::0   ip6-mcastprefix
ff02::1   ip6-allnodes
ff02::2   ip6-allrouters
<externe IPv4> ihre.domain.de
<externe IPv6> ihre.domain.de

Geben Sie den korrekten Servername in der hostname-Datei an

nano /etc/hostname

Der Servername muss als FQDN, also vollqualifiziert angegeben werden

vorhandenen Eintrag löschen und mit neuem ersetzen

das rot geschriebene mit Ihren Daten ersetzen

ihre.domain.de

Die meisten Internet Provider betreiben ihren eigenen Zeitserver.

Hier eine kleine Liste der Zeitserver Adressen in Deutschland, Österreich, Schweiz

Es wird empfohlen das man 5 Zeitserver einbinden soll, hier habe ich 2 vorgegeben, Sie können die Array ändern und nach Ihren wünschen erweitern

Konfigurieren Sie den Zeitserverdienst und fügen Sie die Zeitserver hinzu.

sed -i "s/#NTP=.*/NTP=ntp1.dismail.de ntp2.dismail.de/" /etc/systemd/timesyncd.conf

Speichern und den Zeitserver für Ihren Server neu Starten

systemctl restart systemd-timesyncd

Für die Individuelle Nutzung ist es nicht praktikabel das der Server in den Energiesparmodus wechselt.

Daher sorgen Sie nun dafür, dass der Server dies nicht tut.

systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

Starten Sie abschließend den Server neu

reboot now

und melden sich dann erneut mit Ihren privilegierten Benutzerrechten am Server an

sudo -s

Installieren von NGINX

Fügen Sie dem System weitere Software-Repositorien (Softwarequellen) hinzu, um die aktuellen Releases der jeweiligen Pakete installieren zu können.

Das folgende gilt nur für Ubuntu Server (AMD64 und ARM64)

Stellen Sie sicher, dass das Paket „ubuntu-keyring“ installiert ist

apt install -y ubuntu-keyring

Fügen Sie Ihrem System den nginx-Key hinzu

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Tragen Sie anschließend die Softwarequellen für Nginx ein

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list

Um auch die aktuellen PHP-Ressourcen verwenden zu können fügen wir das entsprechende

Repository hinzu:

add-apt-repository -y ppa:ondrej/php

Das folgende gilt nur für nur Debian Server (AMD64):

Stellen Sie sicher, dass das Paket „debian-archive-keyring“ installiert ist

apt install -y debian-archive-keyring

Fügen sie Ihrem Server den nginx-Key hinzu:

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Ergänzen Sie die Softwarequellen für Nginx und PHP

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
echo "deb [arch=amd64] https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list

Um auch den PHP-Quellen vertrauen zu können ergänzen wir auch diesen Schlüssel:

wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -

Ab hier geht es wieder für beide Server-Betriebssysteme (Ubuntu und Debian) weiter:

Ergänzen Sie die Paketquellen für MariaDB und aktualisieren das System

Vorbereitung MariaDB:

cd ~
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
chmod +x mariadb_repo_setup
./mariadb_repo_setup --mariadb-server-version="mariadb-10.6"

Aktualisierung des Servers:

apt update

Um sicherzustellen, dass keine Relikte früherer Installationen den Betrieb des Webserver stören, entfernen wir diese

apt remove nginx nginx-extras nginx-common nginx-full -y --allow-change-held-packages

Zudem stellen wir sicher, dass das Pendant (Apache2) zum Nginx Webserver weder aktiv noch installiert ist.

systemctl stop apache2.service && systemctl disable apache2.service

Nun sind die Vorbereitungen zur Installation des Webservers Nginx abgeschlossen und wir können diesen mit dem nachfolgenden Befehl installieren

apt install -y nginx

und den Dienst zum automatischen Start nach einem Systemneustart einrichten

systemctl enable nginx.service

Mit Blick auf die späteren Anpassungen wird die Standardkonfiguration gesichert und eine neue Konfigurationsdatei geöffnet

mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak && touch /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf

Kopieren Sie den gesamten nachfolgenden Inhalt in die Datei

das rot geschriebene mit Ihren Daten ersetzen

user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events {
   worker_connections 1024;
   multi_accept on; use epoll;
}
http {
   server_names_hash_bucket_size 64;
   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log warn;
   # set_real_ip_from 127.0.0.1;        # eine Änderung ist nur nötig, wenn Sie nicht auf Localhost sind
   real_ip_header X-Forwarded-For;
   real_ip_recursive on;
   include /etc/nginx/mime.types;
   default_type application/octet-stream;
   sendfile on;
   send_timeout 3600;
   tcp_nopush on;
   tcp_nodelay on;
   open_file_cache max=500 inactive=10m;
   open_file_cache_errors on;
   keepalive_timeout 65;
   reset_timedout_connection on;
   server_tokens off;
   resolver 127.0.0.53 valid=30s;
   resolver_timeout 5s;
   include /etc/nginx/conf.d/*.conf;
}

Speichern Sie die Datei und schließen Sie diese, um im Anschluss den Webserver neu zu starten

service nginx restart

Legen Sie drei Ordner an und setzen die korrekten Berechtigungen

/var/log/dolibarr    ->    für die zukünftigen log Files
/mnt/dokument        ->    ist Ihr Dokument Ortner
/var/www/dolibarr    ->    ist Ihr ROOT Ordner für Dolibarr

das rot geschriebene mit Ihren Daten ersetzen

mkdir -p /var/log/dolibarr /mnt/dokument /var/www/dolibarr
chown -R www-data:www-data /mnt/dokument /var/www/dolibarr /var/log/dolibarr

Erstellen Sie die nötigen Ordner für die SSL-Zertifikate

mkdir -p /var/www/letsencrypt/.well-known/acme-challenge /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs

Markieren des „Hilfs“ SSL Zertifikats

make-ssl-cert generate-default-snakeoil -y

Starten Sie abschließend den Server neu

reboot now

und melden sich dann erneut mit privilegierten Benutzerrechten am Server an

sudo -s

PHP Installieren

Das PHP Repository wurde bereits im vorherigen Kapitel eingerichtet und aktiviert, so dass wir direkt mit der Installation beginnen können

apt update -q4 && apt install -y php7.4-fpm php7.4-common php7.4-curl php7.4-intl php7.4-mbstring php7.4-mcrypt php7.4-json php7.4-xmlrpc php7.4-soap php7.4-mysql php7.4-gd php7.4-xml php7.4-cli php7.4-zip

Setzen Sie das richtige Datumsformat, um auch ein korrektes Logging zu ermöglichen

Hier eine Aufstellung um die für Sie passende zu finden

das rot geschriebene mit Ihren Daten ersetzen

timedatectl set-timezone Europe/Berlin

jetzt können wir die php.ini anpassen

sed -i "s/file_uploads =.*/file_uploads = On/" /etc/php/7.4/fpm/php.ini
sed -i "s/allow_url_fopen =.*/allow_url_fopen = Off/" /etc/php/7.4/fpm/php.ini
sed -i "s/memory_limit =.*/memory_limit = 1024M/" /etc/php/7.4/fpm/php.ini
sed -i "s/;cgi.fix_pathinfo=.*/cgi.fix_pathinfo = 1/" /etc/php/7.4/fpm/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 100M/" /etc/php/7.4/fpm/php.ini
sed -i "s/post_max_size =.*/post_max_size = 100M/" /etc/php/7.4/fpm/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /etc/php/7.4/fpm/php.ini
sed -i "s/;date.timezone =.*/date.timezone = Europe\/\Berlin/" /etc/php/7.4/fpm/php.ini

Starten Sie nun beide Dienste, nginx und PHP, neu

service php7.4-fpm restart
service nginx restart

MariaDB Installieren

Die Installation von MariaDB erfolgt mit diesem Befehl

apt update -q4 && apt install -y mariadb-server

Härten wir nun den Datenbankserver mittels des mitgelieferten Tools „mysql_secure_installation“

Bei einer Erstinstallation besteht kein Root Passwort, so dass Sie die Abfrage mit ENTER bestätigen könne. Es wird empfohlen, ein Passwort direkt zu setzen, der entsprechende Dialog erscheint automatisch

das rot geschriebene mit Ihren Daten ersetzen

mysql_secure_installation
Enter current password for root (enter for none): <ENTER>
Switch to unix_socket authentication [Y/n] Y
Set root password? [Y/n] Y

root-Passwort 2-mal eingeben – Ihr-starkes-stück-Passwort -

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Stoppen Sie nun den Datenbankserver und sichern dann die Standardkonfiguration, um unmittelbar danach Anpassungen vornehmen zu können

service mysql stop
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
nano /etc/mysql/my.cnf

Kopieren Sie alle nachfolgenden Zeilen in die leere Datei

[client]
default-character-set = utf8mb4
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log
nice = 0
socket = /var/run/mysqld/mysqld.sock
[mysqld]
basedir = /usr
bind-address = 127.0.0.1
binlog_format = ROW
bulk_insert_buffer_size = 16M
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
concurrent_insert = 2
connect_timeout = 5
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 2
general_log_file = /var/log/mysql/mysql.log
general_log = 0
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 4000
innodb_flush_method = O_DIRECT
innodb_read_only_compressed=OFF
key_buffer_size = 128M
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
log_error = /var/log/mysql/mysql_error.log
log_slow_verbosity = query_plan
log_warnings = 2
long_query_time = 1
max_allowed_packet = 16M
max_binlog_size = 100M
max_connections = 200
max_heap_table_size = 64M
myisam_recover_options = BACKUP
myisam_sort_buffer_size = 512M
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
query_cache_limit = 2M
query_cache_size = 64M
query_cache_type = 1
query_cache_min_res_unit = 2k
read_buffer_size = 2M
read_rnd_buffer_size = 1M
skip-external-locking
skip-name-resolve
slow_query_log_file = /var/log/mysql/mariadb-slow.log
slow-query-log = 1
socket = /var/run/mysqld/mysqld.sock
sort_buffer_size = 4M
table_open_cache = 400
thread_cache_size = 128
tmp_table_size = 64M
tmpdir = /tmp
transaction_isolation = READ-COMMITTED
#unix_socket=OFF
user = mysql
wait_timeout = 600
[mysqldump]
max_allowed_packet = 16M
quick
quote-names
[isamchk]
key_buffer = 16M

Speichern und schließen Sie die Datei und starten dann den Datenbankserver neu, um die Dolibarr-Datenbank, den Dolibarr-Benutzer und sein Passwort einzurichten:

root-Passwort eingeben – Ihr-starkes-stück-Passwort -

das rot geschriebene mit Ihren Daten ersetzen

service mysql restart
mysql -uroot -p
CREATE DATABASE DatenbankName CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER DatenbankUser@localhost identified by 'DatenbankPasswort'; GRANT ALL PRIVILEGES on DatenbankName.* to DatenbankUser@localhost; FLUSH privileges; quit;

Aus Erfahrung heraus empfehle ich Ihnen, den Server einmalig neu zu starten:

reboot now

Wir richten nun verschiedene vhost, also Serverkonfigurationsdateien ein und modifizieren die Standard vhost-Datei persistent.

Sichern die Standard vhost-Datei namens default.conf und legen leere vHost-Dateien zum Konfigurieren an.

sudo -s
[ -f /etc/nginx/conf.d/default.conf ] && mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
touch /etc/nginx/conf.d/default.conf
touch /etc/nginx/conf.d/http.conf
touch /etc/nginx/conf.d/dolibarr.conf

Somit ist durch die leere „default.conf“ Datei auch bei späteren Aktualisierungen des Webservers sichergestellt, dass diese Standardkonfiguration den Dolibarr betrieb nicht beeinflusst.

Erstellen Sie die globale vhost-Datei, um die http-Standardanfragen permanent auf https umzuleiten und zudem die SSL-Zertifikatskommunikation mit Let’sEncrypt zu ermöglichen

nano /etc/nginx/conf.d/http.conf

Kopieren Sie alle nachfolgenden Zeilen in die Datei http.conf

das rot geschriebene mit Ihren Daten ersetzen

upstream php-handler {
server unix:/run/php/php7.4-fpm.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ihre.domain.de;
root /var/www;
location ^~ /.well-known/acme-challenge {
default_type text/plain;
root /var/www/letsencrypt;
}
location / {
return 301 https://$host$request_uri;
}
}

Bearbeiten Sie nun die eigentliche Dolibarr vHost-Datei „dolibarr.conf“, die sämtliche Konfigurationen für den Betrieb von Dolibarr enthält.

nano /etc/nginx/conf.d/dolibarr.conf

Kopieren Sie alle nachfolgenden Zeilen in die Datei dolibarr.conf

das rot geschriebene mit Ihren Daten ersetzen

server {
   listen 443      ssl http2;
   listen [::]:443 ssl http2;
   root /var/www/dolibarr/htdocs;
   index  index.php index.html index.htm;
   server_name ihre.domain.de;

   ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
   ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
   ssl_trusted_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
   #ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
   #ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
   #ssl_certificate /etc/letsencrypt/ecc-certs/fullchain.pem;
   #ssl_certificate_key /etc/letsencrypt/ecc-certs/privkey.pem;
   #ssl_trusted_certificate /etc/letsencrypt/ecc-certs/chain.pem;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;
   ssl_session_timeout 1d;
   ssl_session_cache shared:SSL:50m;
   ssl_session_tickets off;
   ssl_protocols TLSv1.3 TLSv1.2;
   ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384';
   ssl_ecdh_curve X448:secp521r1:secp384r1;
   ssl_prefer_server_ciphers on;
   ssl_stapling on;
   ssl_stapling_verify on;

   client_max_body_size 100M;
   client_body_timeout 3600s;
   fastcgi_buffers 64 4K;

   location ~ ^/api/(?!(index\.php))(.*)
   {
   try_files $uri /api/index.php/$2?$query_string;
   }

   location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)
   {
   return 404;
   }
   location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)
   {
   return 404;
   }

   location ~ [^/]\.php(/|$)
   {
       fastcgi_split_path_info ^(.+?\.php)(/.*)$;
       fastcgi_pass unix:/run/php/php7.4-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_param PATH_INFO $fastcgi_path_info;
       fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
       include fastcgi_params;
       fastcgi_read_timeout 3600;
       fastcgi_send_timeout 3600;
   }

   location ~ ^/api/(?!(index\.php))(.*)
   {
       try_files $uri /api/index.php/$2?$query_string;
   }

   gzip on;
   gzip_vary on;
   gzip_comp_level 4;
   gzip_min_length 256;
   gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
   gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

   location ^~ /.well-known
   {
       location = /.well-known/carddav
       {
           return 301 /remote.php/dav/;
       }
       location = /.well-known/caldav
       {
           return 301 /remote.php/dav/;
       }
       location /.well-known/acme-challenge
       {
           try_files $uri $uri/ =404;
       }
       location /.well-known/pki-validation
       {
           try_files $uri $uri/ =404;
       }
       return 301 /index.php$request_uri;
   }
}

wenn Sie Ihr Dolibarr hinter einem Proxi oder Revers-Proxi installieren müssen Sie dafür eine weiter .conf erstellen

nano /etc/nginx/conf.d/proxi.conf

Kopieren Sie nachstehendes in Ihre proxi.conf

das rot geschriebene mit Ihren Daten ersetzen

# nur verwenden, wenn Sie einen Proxi oder revers-Proxi Server nutzen

server {
   listen 80;
   location /
   {
       proxy_pass http://SERVER-IP;
       client_max_body_size 100M;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_http_version 1.1;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header Host $host;
   }
}

Speichern und schließen Sie diese Datei und erweitern dann die Server- und Systemsicherheit durch die Möglichkeit des sicheren Schlüsselaustauschs mittels eines Diffie-Hellman Schlüssels

openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Das Generieren kann – in Abhängigkeit von der Systemleistung – einige Minuten dauern. Erst wenn das Generieren abgeschlossen ist, starten Sie den Webserver erneut.

service nginx restart

Erstellen der Let’s Encrypt Zertifikate

Bitte stellen Sie sicher, dass Ihr Server sowohl über Port 80/TCP als auch über Port 443/TCP von außen erreichbar ist.

Das Erstellen und Aktualisieren von Let’s Encrypt Zertifikaten erfolgt zwingend über http und Port 80!

Wenn Sie auf einem Heimserver arbeiten erfolgt die Freigabe auf Ihren Router

Zudem muss eine Umleitung Ihrer Domain bei Ihrem Provider bestehen.

Wie das geht erfahren sie bei Ihrem Provider und in den Einstellungen Ihres Routers.

Für das Zertifikatshandling erstellen wir nun einen dedizierten Benutzer und fügen diesen der www-data Gruppe hinzu

Einfach Enter drücken ohne etwas einzutragen bis ->

Is the information correct? [Y/n] Y

adduser --disabled-login certuser

geben Sie Ihrem „Hilfsuser“ die nötigen Rechte

usermod -a -G www-data certuser

Diesem technischen Benutzer erteilen wir noch die notwendigen Berechtigungen, um bei einer Zertifikatserneuerung den notwendigen Webserverstart initiieren zu können.

touch /etc/sudoers.d/certuser

Kopieren Sie alles von „cat …“ bis „… EOF“ und fügen es in die Shell ein

cat <<EOF >/etc/sudoers.d/certuser
certuser ALL=NOPASSWD: /bin/systemctl reload nginx.service
EOF

Bestätigen Sie mit Enter um die Datei zu erstellen

Wechseln Sie in die Shell des neuen Benutzers (certuser) um die Zertifikatssoftware zu installieren und verlassen diese Shell direkt im Anschluss wieder

su - certuser
curl https://get.acme.sh | sh
exit

Passen Sie die entsprechenden Datei- und Verzeichnisberechtigungen an, um die neuen Zertifikate darin speichern zu können

chmod -R 775 /var/www/letsencrypt && chmod -R 770 /etc/letsencrypt && chown -R www-data:www-data /var/www/ /etc/letsencrypt

Setzen Sie Let’s Encrypt als Standard CA für Ihren Server

su - certuser -c ".acme.sh/acme.sh --set-default-ca --server letsencrypt"

und wechseln dann erneut in die Shell des neuen Benutzers

su - certuser

Den nachfolgenden Schritt bitte sehr sorgfältig durchlesen, anpassen und ausführen!!

Let’s Encrypt gestattet nur maximal 5 Wiederholungen pro Domain und Woche, bei jedem durchlauf sind somit 2 Vorgänge weg.

Beantragen Sie nun die SSL-Zertifikate von Let’s Encrypt und ersetzen dabei ihre.domain.de mit Ihrer Domain

das rot geschriebene mit Ihren Daten ersetzen

acme.sh --issue -d ihre.domain.de --server letsencrypt --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"
acme.sh --issue -d ihre.domain.de --server letsencrypt --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"

Verlassen Sie die Shell des neuen Benutzers

exit

Jetzt legen Sie ein Skript an, dass zukünftig die Berechtigungen überprüft und korrigiert

nano /root/permissions.sh

Kopieren Sie alle Zeilen in die Datei das rot geschriebene mit Ihren Daten ersetzen

#!/bin/bash
find /var/www/ -type f -print0 | xargs -0 chmod 0640
find /var/www/ -type d -print0 | xargs -0 chmod 0750
chmod -R 775 /var/www/letsencrypt
chmod -R 770 /etc/letsencrypt
chown -R www-data:www-data /var/www /etc/letsencrypt
chown -R www-data:www-data /mnt/dokument

exit 0

Markieren Sie das Skript als ausführbar und führen es dann direkt aus

chmod +x /root/permissions.sh
/root/permissions.sh

Entfernen Sie Ihre bisher verwendeten Self-Signed-Zertifikate aus nginx und aktivieren Sie die neuen, vollwertigen und bereits gültigen SSL Zertifikate von Let’s Encrypt.

sed -i '/ssl-cert-snakeoil/d' /etc/nginx/conf.d/dolibarr.conf
sed -i s/#\ssl/\ssl/g /etc/nginx/conf.d/dolibarr.conf

Um sowohl die SSL-Zertifikate automatisch zu erneuern, als auch den notwendigen Webserverneustart zu initiieren, wurde automatisch ein Cronjob angelegt.

crontab -l -u certuser

Starten Sie jetzt den Webserver neu

service nginx restart


Installieren von Dolibarr

Dafür gibt es mehrere Varianten.

Die Lösung die ich benutze ist vielleicht nicht die eleganteste jedoch können Sie sich sicher sein, dass Sie die aktuellste Version von Dolibarr verwendet.

Ersetzen Sie die Versionsnummer gegen die aktuelle Dollibarr Versions Nummer die Sie, unter anderem auch, hier finden können.

Wir beginnen nun die ‚eigentliche‘ Installation von Dolibarr und laden das aktuelle Dolibarr Release herunter

das rot geschriebene mit Ihren Daten ersetzen

cd /tmp && wget https://sourceforge.net/projects/dolibarr/files/Dolibarr%20ERP-CRM/15.0.1/dolibarr-15.0.1.zip

Entpacken Sie Dolibarr

unzip dolibarr-15.0.1.zip && rm /tmp/dolibarr-15.0.1.zip

verschieben Sie den Inhalt von Ihem erzeugten Dolibarr Ordner in Ihr Webverzeichnis und entfernen Sie, im selben schritt, die Versionsnummer

das rot geschriebene mit Ihren Daten ersetzen

mv dolibarr-15.0.1/* /var/www/dolibarr

setzen der Berechtigung

das rot geschriebene mit Ihren Daten ersetzen

chown -R www-data:www-data /var/www/dolibarr

Wir können nun mit der installation von Dolibarr fortfahren.

Öffnen Sie Dolibarr in Ihrem Browser

das rot geschriebene mit Ihren Daten ersetzen

ihre.domain.de
den Dokumentortner eintragen - /mnt/dokument
den DatenbankName eintragen
Datenbank erstellen nicht anklicken
DatenbankUser und DatenbankPasswort eintragen
Erstellen Sie ein Benutzerkonto… anklicken
root und root-Passwort - Ihr-starkes-stück-Passwort -eintragen
Admin-Name und Admin-Passwort eintragen

jetzt können Sie sich bei Dolibarr einloggen

Absicherung von Dolibarr

Um Dolibarr in einer sicheren (zumindest sicherer) Umgebung zu nutzen machen Sie bitte mit der Serverseitigen Einrichtung weiter

Server update und upgrade und unnötiges löschen

apt update && apt upgrade -V && apt dist-upgrade -y && apt autoremove -y

Server neustart

reboot now

und mit dem priviligierten Benutzerrechten am Server anmelden

sudo -s

Jetzt wo die Installation geklappt hat können Sie die Lese- und Schreibzeiten wieder verringern

sed -i "s/fastcgi_read_timeout.*/fastcgi_read_timeout 360;/" /etc/nginx/conf.d/dolibarr.conf
sed -i "s/fastcgi_send_timeout.*/fastcgi_send_timeout 360;/" /etc/nginx/conf.d/dolibarr.conf

Jetzt legen Sie die install.lock an um zu verhindern das eine erneute Installation erfolgt

das rot geschriebene mit Ihren Daten ersetzen

nano /mnt/dokument/install.lock
# nur ein Enter und wieder raus

Texteditor verlassen - bei nano CTRL+x (STRG+x) - save mit y bestätigen

Wie solltes es auch anders sein müssen Sie auch die php.ini anpassen

sed -i "s/session.use_strict_mode =.*/session.use_strict_mode = 1/" /etc/php/7.4/fpm/php.ini
sed -i "s/session.use_only_cookies =.*/session.use_only_cookies = 1/" /etc/php/7.4/fpm/php.ini
sed -i "s/session.cookie_httponly =.*/session.cookie_httponly = 1/" /etc/php/7.4/fpm/php.ini
sed -i "s/session.cookie_samesite =.*/session.cookie_samesite = Lax/" /etc/php/7.4/fpm/php.ini
sed -i "s/;allow_url_fopen =.*/allow_url_fopen = Off/" /etc/php/7.4/fpm/php.ini
sed -i "s/allow_url_include =.*/allow_url_include = Off/" /etc/php/7.4/fpm/php.ini

Sie können diese PHP-Funktionen deaktivieren, falls Sie keine Systembefehle in benutzerdefiniertem Code ausführen

sed -i "s/disable_functions =.*/disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,passthru,shell_exec,system,proc_open,popen/" /etc/php/7.4/fpm/php.ini

für den fall das Sie Ihre Meinung ändert und doch benutzerdefinierte Code ausführen

sed -i "s/disable_functions =.*/disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals/" /etc/php/7.4/fpm/php.ini

Starten Sie nun beide Dienste, Nginx und PHP, neu

service php7.4-fpm restart
service nginx restart

Öffnen Sie bei Dolibarr gehen Sie auf Einstellungen → Sicherheit → klick auf den Reiter Passwörter → ganz runter scrollen, hier klicken Sie bei -> Datenbankpasswort in der Konfigurationsdatei conf.php verschlüsselt speichern (empfohlene Einstellung) auf → Aktivieren

gehen Sie zurück zur Serverseite

das rot geschriebene mit Ihren Daten ersetzen

nano /var/www/dolibarr/htdocs/conf/conf.php

nachstehendes suchen und anpassen, speichern und schließen

$dolibarr_main_prod='0';   ->  ändern in ->    $dolibarr_main_prod='1';

Jetzt vergeben Sie an die /conf.php nur Leserechte

das rot geschriebene mit Ihren Daten ersetzen

chmod -R 400 /var/www/dolibarr/htdocs/conf/conf.php

Installieren von fail2ban

Als nächstes installieren wir Fail2ban um den Server gegen Brute-force-Attacken und

fehlerhafte Login versuche zu schützen:

apt update -q4 && apt install -y fail2ban

Erstellen Sie eine neue Filterdatei für "Passwort vergessen" und beschreiben sie

touch /etc/fail2ban/filter.d/passforgotten.conf

Kopieren Sie alles von „cat …“ bis „… EOF“ und fügen es in die Shell ein:

cat <<EOF >/etc/fail2ban/filter.d/passforgotten.conf
[Definition]
failregex = ^ [A-Z\s]+ <HOST>\s+--- Access to .*/passwordforgotten.php - action=buildnewpassword
ignoreregex =
EOF

Bestätigen Sie mit Enter um die Datei zu erstellen

Erstellen Sie eine neue Filterdatei für "Passwort Falscheingabe" und beschreiben sie

touch /etc/fail2ban/filter.d/passwrong.conf

Kopieren Sie alles von „cat …“ bis „… EOF“ und fügen es in die Shell ein:

cat <<EOF >/etc/fail2ban/filter.d/passwrong.conf
[Definition]
failregex = ^ [A-Z\s]+ <HOST>\s+functions_dolibarr::check_user_password_.* Authentication KO
ignoreregex =
EOF

Bestätigen Sie mit Enter um die Datei zu erstellen

Damit dieser Filter zum Einsatz kommt, wird dies Fail2ban noch bekannt gemacht:

nano /etc/fail2ban/jail.local

Hier fügen wir folgenden Inhalt ein

[passforgotten]
; rule against call of passwordforgottenpage
enabled = true
port    = http,https
filter  = passforgotten
logpath = /var/log/passforgotten.log
action  = %(action_mw)s
bantime  = 86400     ; 1 day
findtime = 3600      ; 1 hour
maxretry = 5

[passwrong]
; rule against bruteforce hacking (login + api)
enabled = true
port    = http,https
filter  = passwrong
logpath = /var/log/passwrong.log
action  = %(action_mw)s
bantime  = 86400     ; 1 day
findtime = 3600      ; 1 hour
maxretry = 5

Erstellen Sie 2 Logfiles für ihre Dolibarr-Filter

fügen Sie in jedes Log nur ein Enter ein und speichern

nano /var/log/passforgotten.log
nano /var/log/passwrong.log

Mit den zuvor dargestellten Parametern wird nach 5 fehlerhaften Anmeldeversuchen (maxretry) innerhalb der letzten 3600 (findtime, das entspricht 1h) die IP des potentiellen Angreifers für einen Zeitraum von 86400 Sekunden (bantime, enspricht 1Tag) gesperrt.

Starten Sie fail2ban neu und überprüfen den fail2ban-status

service fail2ban restart
service fail2ban status

Wenn Sie alles richtig eingegeben haben ist der Status "grün" sein

Installieren von Postfix

Aktualisieren Sie ihren Server und installieren Sie Postfix.

Sie haben damit die Möglichkeit, sich von Fail2ban, Apticron und bei SSH-Anmeldungen per Mail informieren zu lassen

apt update -q4 && apt install -y postfix mailutils

Erstellen Sie Ihre Mailkonfiguration

Wählen Sie zuerst Satellite system aus
geben dann ihre.domain.de und zuletzt
noch Ihren smtp.server ein

verschieben Sie die Original main.cf nach main.cf.bak

mv /etc/postfix/main.cf /etc/postfix/main.cf.bak

und fügen Sie nun die folgende Postfixkonfiguration ein

nano /etc/postfix/main.cf

Fügen Sie das Nachfolgende ein

das rot geschriebene mit Ihren Daten ersetzen

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2
smtpd_tls_security_level=may
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
#sollten Ihr Server nicht der localhost sein das anpassen
myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, ihre-domain.de, localhost.ihre.domain.de, localhost
relayhost = smtp.Server:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all
#Bei Problemen mit IPv6 stellen Sie die Zeile wie nachfolgend um
#inet_protocols = ipv4
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps =  hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_use_tls = yes
smtp_enforce_tls = yes

erstellen und hinterlegen Sie nun die Zugangsdaten für das Versenden von Mails

nano /etc/postfix/sasl_passwd

verwenden Sie bitte hier Ihre Email Zugangsdaten von Ihrem Mailanbieter

Tragen Sie die Daten wie folgt ein und ersetzen die roten Werte durch Ihre

smtp.server ihre@mailadresse.de:ihr.Email.Passwort

Da in dieser Datei das Passwort im Klartext steht setzen wir die Dateiberechtigungen auf 600 (nur ein User mit Server-Root-Recht kann schreiben und lesen)

chmod 600 /etc/postfix/sasl_passwd

Schreiben Sie nun die Domain in die Datei mailname

nano /etc/mailname

Ersetzen Sie den roten Wert durch Ihre Email Domain

mailadresse.de

Abschließend definieren wir noch den Bezug von Benutzern zu Mailadressen. Öffnen Sie die Datei

nano /etc/postfix/sender_canonical

und legen dort Benutzer und Mailadressen fest

das rot geschriebene mit Ihren Daten ersetzen

root ihre@mailadresse.de
< ihre@mailadresse.de > ihre@mailadresse.de
www-data ihre@mailadresse.de
default ihre@mailadresse.de

Jetzt werden die Konfiguration kompiliert und Postfix neu gestartet

postmap /etc/postfix/sasl_passwd
postmap /etc/postfix/sender_canonical
service postfix restart

Testen Sie nun den Versandt einer Mail über Ihr Postfix

das rot geschriebene mit Ihren Daten ersetzen

echo "Dies ist eine Testmail" | mailx -s "Test ob Ihre Einstellungen richtig sind" ihre@mailadresse.de

Sollte die Mail nicht ankommen, so sehen Sie bitte im Log (mail.log) nach

nano /var/log/mail.log

Passen Sie die PHP-Konfiguration an um auch PHP-Mails über postfix zu versenden

Setzen Sie den sendmail_path wie folgt:

sed -i "s/;sendmail_path =.*/sendmail_path = \/usr\/\sbin\/\sendmail -t -i/" /etc/php/7.4/fpm/php.ini

und starten dann PHP neu

service php7.4-fpm restart

Ersetzen Sie in der fail2ban-Konfiguration die nachfolgenden Parameter durch Ihre, um Benachrichtigungen bei fehlerhaften Login versuchen und Banns zu erhalten. Sichern Sie dazu die Originalkonfiguration von fail2ban und bearbeiten diese dann

das rot geschriebene mit Ihren Daten ersetzen

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak
sed -i "s/destemail =.*/destemail = ihre@mailadresse.de /" /etc/fail2ban/jail.conf
sed -i "s/sender =.*/sender = ihre@mailadresse.de /" /etc/fail2ban/jail.conf
sed -i "s/mta =.*/mta = mail/" /etc/fail2ban/jail.conf
sed -i "s/action = %(action_)s.*/action = %(action_mwl)s/" /etc/fail2ban/jail.conf

Um bei einem Serverneustart fail2ban-Mails zu unterdrücken passen Sie die folgende Datei an

nano /etc/fail2ban/action.d/mail-buffered.local

Kopieren Sie den Inhalt hinein

[Definition]
actionstart =
actionstop =

Legen Sie dann Dummy-Dateien durch das Ausführen der folgenden Befehle an

cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail-whois-lines.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail-whois.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/sendmail-buffered.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/sendmail-common.local

Starten Sie den fail2ban-Service neu

service fail2ban restart

und Sie werden ab sofort (nur noch) bei Banns, also neu blockierten IP-Adressen die durch fehlerhafte Login versuche aufgefallen sind, informiert.


Information über Server Updates und Upgrades

Apticron informiert Sie über verfügbare Systemaktualisierungen bzw. auch dann, wenn ihr System „up2date“ ist

Installieren Sie Apticron aus den Standardsoftwarequellen von Ubuntu

apt update -q4 && apt install -y apticron

Nun passen wir apticron an und ändern wenigstens die folgenden Parameter

Die .conf ist selbsterklärend und Sie können weitere Anpassungen nach Ihren Vorstellungen vornehmen

cp /usr/lib/apticron/apticron.conf /etc/apticron/apticron.conf
nano /etc/apticron/apticron.conf

Suchen Sie bitte mit strg+w (ctrl+w) alles vor dem "=" und ersetzen es mit Ihren Daten

das rot geschriebene mit Ihren Daten ersetzen

EMAIL="ihre@mailadresse.de"
SYSTEM="ihre.domain.de"
NOTIFY_HOLDS="1"
NOTIFY_NO_UPDATES="1"
CUSTOM_SUBJECT='$SYSTEM: $NUM_PACKAGES package update(s)'
CUSTOM_NO_UPDATES_SUBJECT='$SYSTEM: no updates available'
CUSTOM_FROM="ihre@mailadresse.de"

Überprüfen Sie Apticron und den soeben konfigurierten Mailversand indem sie Apticron aufrufen

apticron

Sie erhalten nun umgehend eine Mailbenachrichtigungen über Ihren aktuellen Systemzustand. Passen Sie zuletzt noch den Cronjob an, um sich regelmäßig und automatisch benachrichtigen zu lassen

cp /etc/cron.d/apticron /etc/cron.d/apticron.bak
nano /etc/cron.d/apticron

nachfolgendes bitte einfügen

das rot geschriebene mit Ihren Daten ersetzen - dabei handelt es sich um eine Zeitangabe - Minute Stunde

30 7 * * * root if test -x /usr/sbin/apticron; then /usr/sbin/apticron --cron; else true; fi

Apticron Informiert Sie jetzt jeden zu der von Ihnen eingestellten Uhrzeit per Mail über Ihren Systemaktualitätsgrad und möglich Aktualisierungs Maßnahmen.

Näheres über Cron und die möglichen intervalle können Sie hier nachlesen

Nachricht bei SSH Einwahl

wenn Sie über erfolgreichen SSH-Einwahl informiert werden möchten Passen Sie die Profildatei an

nano /etc/profile

erweitern Sie die Datei am Ende um die folgenden Zeilen

das rot geschriebene mit Ihren Daten ersetzen

if [ -n "$SSH_CLIENT" ]; then
        echo 'Login on' `hostname` `date` `who -m` | mail -s "Login on `hostname` from `echo $SSH_CLIENT |
        awk '{print $1}'`" ihre@mailadresse.de
fi

Bei jeder erfolgreichen SSH-Einwahl werden Sie ab sofort aktiv benachrichtigt.

Solange Sie selbst es wahren ist alles okay – aber wenn nicht……

service php7.4-fpm restart
service nginx restart
apt update && apt upgrade -V && apt dist-upgrade -y && apt autoremove -y
reboot now

Installation und Konfiguration von Redis

So installieren Sie den Redis um die Dolibarrperformance zu steigern, da durch Redis die Last auf der MariaDB-Dolibarrdatenbank reduziert wird

Wechseln Sie in den privilegierten Benutzermodus

sudo -s

Installieren Sie Redis

apt update -q4 && apt install -y redis-server

Passen Sie die Redis Konfiguration durch das Sichern und Anpassen der Konfiguration durch Ausführen der nachfolgenden Befehle an

cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
sed -i "s/port 6379/port 0/" /etc/redis/redis.conf
sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
sed -i "s/unixsocketperm 700/unixsocketperm 770/" /etc/redis/redis.conf
sed -i "s/# maxclients 10000/maxclients 10240/" /etc/redis/redis.conf
usermod -aG redis www-data
cp /etc/sysctl.conf /etc/sysctl.conf.bak
sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf

Starten Sie den gesamten Server neu

reboot now

Gratulation, Redis ist jetzt Installiert und eingerichtet.

Wenn alles geklappt hat ist Ihre Dolibarr Installation jetzt im Internett mit einem SSL-Zertifikat verschlüsselt und kann mit

https://ihre.domain.de

aufgerufen werden

Bitte nehmen Sie sich etwas Zeit und überprüfen den Sicherheitsstatus Ihres Servers.

Ziel sollte sein, mindestens ein „A+“-Ergebnis in den Tests zu erzielen

Testen Sie Ihre Server Sicherheit, es gibt dafür viele Anbieter, zwei davon habe ich nachfolgend verlinkt.

https://www.ssllabs.com/ssltest/index.html

https://observatory.mozilla.org/

Viel Spaß und erfolg bei der Installation und Nutzung von Dolibarr