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