# Installation und “Grund”-Härtung von Dolibarr

**URL:** <https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008>\
**Category:** Dolibarr installieren\
**Created:** [1. Mai 2022 um 15:42 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008 "2022-05-01T15:42:48Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![Scalar](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/s/76d3ee/32.png) [@Scalar](https://forum.dolibarr.de/forum/u/Scalar)\
**Post date:** [1. Mai 2022 um 15:42 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/1 "2022-05-01T15:42:48Z")

</div>

Hallo Zusammen  
Ich habe eine umfassende Anleitung zur Installation und „Grund“-Härtung von Dolibarr geschrieben  
Das Ganze ist für einen Ubuntu 20.04 Server erstellt  
Zugriff habe ich per SSH und PuTTY von einem Windows PC  
Leider kann ich keine Farben im Text verwenden. zum Teil steht in der Beschreibung das die roten texte ersetzt gehören. Zum Teil ergibt es sich von alleine das da andere Werte reingehören.

Bitte lest die Texte durch und schaut euch auch die Codes und Befehle an, dann sollte das mit der Farbe nicht so schlimm sein.  
Ich hoffe das es Euch hilft

* * *

Windows  
unter Windows das SSH-Paar erstellen  
Windows Startmenü in die Eingabezeile - cmd.exe - eingeben und bestätigen  
oder mit Cmder - [https://cmder.net/](https://cmder.net/)  
ins eigene Benutzerverzeichnis wechseln - das rot geschriebene mit Ihren Daten ersetzen

```auto
cd C:\Users\Name

```

SSH-Key erzeugen → Pfad und Name bestätigen (Enter) oder eigenen Pfad und Namen eingeben →   
Passphrase eingeben (oder leer lassen - nicht empfohlen)  
Standard Sicherheit 2048 Bit  
ssh-keygen  
höhere Sicherheit 4096 Bit

```auto
ssh-keygen -t rsa -b 4096

```

Server  
befehle am Server über PuTTY mit USER/PASSWORD Login beim sudo Root User‬‬‬‬‬‬‬‬‬‬‬‬‬ System update

```auto
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

```auto
sudo apt install openssh-server

```

kontrolle ob SSH aktiv ist - mit ‚q‘ verlassen

```auto
sudo systemctl status ssh

```

```
# SSH als Service aktivieren wenn nicht aktiv

```

```auto
sudo systemctl enable ssh
sudo systemctl start ssh

```

```
# Ordner für SSH Key anlegen - das rot geschriebene mit Ihren Daten ersetzen

```

```auto
mkdir /home/user-name-server/.ssh
chmod 700 /home/user-name-server/.ssh
chown -R user-name-server:user-name-server /home/user-name-server/ssh

```

wechseln auf Windows Eingabe mit Cmder - [https://cmder.net/](https://cmder.net/)  
SSH-Key und authorized-keys erstellen – das rot geschriebene mit Ihren Daten ersetzen

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

```

aufs Benutzerkonto wechseln – eigenen User und Namen eintragen

```auto
cd C:\Users\Name\

```

SSH-Key und authorized\_keys auf den Server kopieren  
user-name-server und server\_IP-Adresse anpassen

```auto
cat ~/.ssh/id_rsa.pub | ssh user-name-server@server-IP-Adresse "cat >> ~/.ssh/authorized_keys"

```

mit PuTTY am Server:  
rechte eingeben - das rot geschriebene mit Ihren Daten ersetzen

```auto
chmod 700 /home/user-name-server/.ssh
chmod 600 /home/user-name-server/.ssh/authorized_keys

```

testen ob SSH Autorisiergun läuft

```auto
ssh-add -l >> ~/.ssh/authorized_keys

```

wächseln auf Windows Eingabe mit Cmder  
authorized\_keys löschen - das rot geschriebene mit Ihren Daten ersetzen

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

```

mit PuTTY am Server SSH Härten und absichern  
erstellen einer Backup der sshd\_config

```auto
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

```

aktuell festgelegte Optionen überprüfen

```auto
sudo sshd -T

```

verschieben der original sshd\_config als .bak

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

```

mit einem Texteditor neue sshd\_config erstellen

```auto
sudo nano /etc/ssh/sshd_config

```

nachstehendes einfügen und anpassen – SSH Port anpassen

```auto
# $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 Sie können es gegen ein Anderes „freies“ Port ersetzen
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

```auto
sudo systemctl restart ssh

```

verwendeten SSH-Port anzeigen

```auto
grep -i port /etc/ssh/sshd_config

```

Server verlassen

```auto
exit

```

PuTTY einrichten  
PuTTYgen starten → Conversation → Import Key  
und den Privaten Schlüssel - id\_rsa - laden (ggf muss die Passphrase eingegeben werden)  
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  
UFW Firewall einrichten  
Firewall Status abfragen

```auto
sudo ufw status

```

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

```auto
sudo ufw enable

```

alle eingehenden Anfragen blocken

```auto
sudo ufw default deny incoming

```

alle ausgehenden Anfragen erlauben

```auto
sudo ufw default allow outgoing

```

IPv6 unterstützung aktivieren

```auto
cat /etc/default/ufw

```

Sie Können mit dem standart SSH Port weitermachen, denn Sie es nicht geändert haben  
 → # vor sudo entfernen

```auto
#sudo ufw allow SSH

```

zusätzliche Sicherheit gibt es, wenn man nur ausgewählte IP Adressen zulässt  
IP Adresse identifizieren mit der man am Server angemeldet ist

```auto
w

```

erhaltene IP Adresse übernehmen und Server IP Adresse einfügen – ggf. eigene Portadresse  
so haben Sie nur SSH Zugang für die IP des Clientrechners am Server und dem SSH Port  
 → # vor sudo entfernen

```auto
#sudo ufw allow proto tcp from erhaltene IP Adresse to Server IP Adresse port eigenes Port

```

http und https freigeben

```auto
sudo ufw allow http
sudo ufw allow https

```

ggf Limits für das SSH Port eingeben [https://www.cyberciti.biz/faq/howto-limiting-ssh-connections-with-ufw-on-ubuntu-debian/](https://www.cyberciti.biz/faq/howto-limiting-ssh-connections-with-ufw-on-ubuntu-debian/)

```auto
#sudo ufw limit ssh

```

zur Kontrolle Firewall Status abfragen

```auto
sudo ufw status

```

UFW Firewall neustarten

```auto
sudo ufw reload

```

UFW Firewall als Service einrichten → UFW wird bei jedem Neustart aktiviert  
mit ‚q‘ verlassen

```auto
sudo systemctl status ufw.service

```

nicht zu empfehlen aber manchmal nötig  
UFW Firewall deaktivieren - deaktiviert auch den Service

```auto
#sudo ufw disable

```

Server Neustart

```auto
sudo reboot now

```

---

<div class="post-metadata">

**Author:** ![Scalar](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/s/76d3ee/32.png) [@Scalar](https://forum.dolibarr.de/forum/u/Scalar)\
**Post date:** [1. Mai 2022 um 16:05 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/2 "2022-05-01T16:05:31Z")

</div>

und mit dem privilegierten Benutzerrechten am Server anmelden

```auto
sudo -s

```

Starten Sie mit folgenden Softwarepakete, als notwendige Grundlage den Serverbetriebs

```auto
apt update -q4 && apt install -y curl gnupg2 git lsb-release 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

```

Server update und upgrade

```auto
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 – vorhandenen Eintrag löschen und mit neuem ersetzen

```auto
nano /etc/hosts

```

Passen Sie die roten Werte an Ihre Umgebung an:

```auto
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 und ersetzen den roten  
Wert durch Ihren:

```auto
nano /etc/hostname

```

Der Servername muss als FQDN, also vollqualifiziert angegeben werden  
vorhandenen Eintrag löschen und mit neuem ersetzen

```auto
Ihre.Domain.de

```

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

```auto
NTP=ntp1.dismail.de ntp2.dismail.de

```

Speichern Sie diese Datei und starten den Zeitserver neu:

```auto
systemctl restart systemd-timesyncd

```

Sorgen Sie nun dafür, dass der Server nicht in einen „Energiesparmodus“ wechseln kann:

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

```

Starten Sie abschließend den Server neu

```auto
reboot now

```

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

```auto
sudo -s

```

Fügen Sie dem System weitere Software-Repositories (Softwarequellen) hinzu, um die  
aktuellen Releases der jeweiligen Pakete installieren zu können.  
Das folgende gilt nur für Ubuntu Server (AMD64 und ARM64)  
Debian ist ein bisschen anders  
Stellen Sie sicher, dass das Paket „ubuntu-keyring“ installiert ist:

```auto
apt install -y ubuntu-keyring

```

Fügen Sie Ihrem System den nginx-Key hinzu:

```auto
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 und PHP ein:

```auto
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:

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

```

Wir ergänzen die Paketquellen für MariaDB, aktualisieren dann das System  
Vorbereitung MariaDB:

```auto
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:

```auto
apt update

```

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

```auto
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.

```auto
systemctl stop apache2.service && systemctl disable apache2.service

```

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

```auto
apt install -y nginx

```

und den Dienst zum automatischen Start nach einem Systemneustart mittels

```auto
systemctl enable nginx.service

```

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

```auto
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak && touch /etc/nginx/nginx.conf

```

```auto
nano /etc/nginx/nginx.conf

```

Kopieren Sie den gesamten nachfolgenden Inhalt in die Datei und ersetzen die rot  
markierten Werte entsprechend Ihres Systems:

```auto
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; # 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:

```auto
service nginx restart

```

Legen Sie drei Ordner an und setzen die korrekten Berechtigungen:  
Ich habe als Dokument Ortner (/mnt/doli-data) eine weitere Festplatte verwendet  
daher muss ich diesen Ortner nicht mehr anlegen – näheres dazu gern auf Anfrage  
ohne extraplatte einfach weiter machen

```auto
mkdir -p /var/log/doli /mnt/doli-data /var/www/doli
chown -R www-data:www-data /mnt/doli-data /var/www/doli /var/log/doli

```

Starten Sie abschließend den Server neu

```auto
reboot now

```

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

```auto
sudo -s

```

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

```auto
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:

```auto
timedatectl set-timezone Europe/Berlin

```

jetzt können wir die php.ini anpassen

```auto
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:

```auto
service php7.4-fpm restart
service nginx restart

```

Die Installation von MariaDB erfolgt mit diesem Befehl:

```auto
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:

```auto
mysql_secure_installation

```

```auto
 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

```auto
service mysql stop

```

```auto
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak

```

```auto
nano /etc/mysql/my.cnf

```

Kopieren Sie alle nachfolgenden Zeilen in die leere Datei:

```auto
[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 -

```auto
service mysql restart

```

```auto
mysql -uroot -p

```

```auto
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:

```auto
reboot now

```

Wir richten nun verschiedene vhost, also Serverkonfigurationsdateien, ein und modifizieren  
die Standard vhost-Datei persistent. Da das System zuvor neu gestartet wurde wechseln wir  
erneut in den privilegierten Benutzermodus, sichern die Standard vhost-Datei namens   
default.conf und legen leere vHost-Dateien zum Konfigurieren an.

```auto
sudo -s

```

Erstellen Sie die globale vhost-Datei

```auto
nano /etc/nginx/conf.d/doli.conf

```

Kopieren Sie alle nachfolgenden Zeilen in die Datei und passen die rot markierten  
Werte entsprechend Ihres Systems an und speichern und schließen Sie diese Datei.

```auto
server {
	listen 80;
	listen [::]:80;
	root /var/www/doli/htdocs;
	index index.php index.html index.htm;
	server_name Ihr-Server-Name;

	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;
}

```

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

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

```

in die kommt das rein

```auto
# nur verwenden wenn Sie einen Proxi oder revers-Proxi nutzen

server {
	listen 80;
	location /
	{
		proxy_pass http://IP-Dolibarr-Server;
		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;
	}
}

```

Webserver erneut starten.

```auto
service nginx restart

```

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

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

```

Entpacken Sie Dolibarr und verschieben es in das Webverzeichnis (var/www/doli)

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

```

```auto
mv dolibarr-15.0.1/* /var/www/doli

```

setzen der Berechtigung

```auto
chown -R www-data:www-data /var/www/doli

```

Wir können nun mit der installation von Dolibarr fortfahren.  
öffnen Sie Dolibarr in Ihrem Browser

```auto
Ihre.Domain.de

```

den Dokumentortner eintragen - /mnt/doli-data  
den DB-Namen eintragen  
Datenbank erstellen nicht anklicken  
DB-User und DB-Passwort eintragen  
Erstellen Sie ein Benutzerkonto… anklicken  
root und root-Passwort eintragen

Admin-Name und Admin-Passwort eintragen  
jetzt können Sie sich bei Dolibarr einloggen

Um Dolibarr in einer sicheren (zumindest sicherer) Umgebung zu nutzen  
Schließen Sie es wieder und machen mit der Serverseitigen Einrichtung weiter

Server update und upgrade und unnötiges löschen

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

```

Server neustart

```auto
reboot now

```

und mit dem priviligierten Benutzerrechten am Server anmelden

```auto
sudo -s

```

Jetzt wo die Installation geklappt hat können Sie die Ladezeit wieder verringern

```auto
nano /etc/nginx/conf.d/doli.conf

```

nachstehendes suchen und anpassen

```auto
fastcgi_read_timeout 360;
fastcgi_send_timeout 360;

```

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

```auto
nano /mnt/doli-data/install.lock

```

```auto
# nur ein Enter und wieder raus

```

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

php.ini anpassen

```auto
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 sollten die PHP-Funktionen deaktivieren, falls Sie keine Systembefehle  
in benutzerdefiniertem Code ausführen wollen:

```auto
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 geändert haben und doch benutzerdefinierte  
Code ausführen möchten

```auto
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:

```

```auto
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 und klicken Sie bei  
Datenbankpasswort in der Konfigurationsdatei conf.php verschlüsselt speichern  
(empfohlene Einstellung) auf → Aktivieren

gehen Sie zurück zur Serverseite

```auto
nano /var/www/doli/htdocs/conf/conf.php

```

nachstehendes suchen und anpassen, speichern und schließen

```auto
$dolibarr_main_prod='1';

```

Jetzt vergeben Sie an die /conf.php nur Leserechte

```auto
chmod -R 400 /var/www/doli/htdocs/conf/conf.php

```

Als nächstes installieren wir fail2ban um den Server gegen Brute-force-Attacken und  
fehlerhafte Login versuche zu schützen:

```auto
apt update -q4 && apt install -y fail2ban

```

Erstellen Sie eine neue Filterdatei für Passwort vergessen und befüllen diese wie  
nachfolgend beschrieben

```auto
touch /etc/fail2ban/filter.d/doli-passforgotten.conf

```

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

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

```

Erstellen Sie eine neue Filterdatei für Passwort Falscheingabe und befüllen diese wie  
nachfolgend beschrieben

```auto
touch /etc/fail2ban/filter.d/doli-passwrong.conf

```

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

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

```

Bestätigen Sie mit um die Datei zu befüllen

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

```auto
nano /etc/fail2ban/jail.local

```

Hier fügen wir folgenden Inhalt ein:

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

[doli-passwrong]
; rule against bruteforce hacking (login + api)
enabled = true
port = http,https
filter = doli-passwrong
logpath = /var/log/doli-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 ind jedes Log nur ein Enter ein und speichern

```auto
nano /var/log/doli-passforgotten.log

```

```auto
nano /var/log/doli-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:

```auto
service fail2ban restart

```

```auto
service fail2ban status

```

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:

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

```

Erstellen Sie Ihre Mailkonfiguration  
Wählen Sie zuerst Satellitensystem aus,  
geben dann ihre Domäne ein ([Ihre.Domain.de](http://Ihre.Domain.de)) und zuletzt  
noch den smtp.Server.

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

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

```

und fügen Sie nun die folgende Postfixkonfiguration ein:

```auto
nano /etc/postfix/main.cf

```

Ersetzen Sie die rot markierten Stellen und überschreichen damit den inhalt:

```auto
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_un>
myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = $myhostname, Ihre-Domain.de, localhost.Ihre.Dolain.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:

```auto
nano /etc/postfix/sasl_passwd

```

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

```auto
smtp.server Ihre@Mailadresse.de:Ihr-Passwort

```

Da in dieser Datei das Passwort im Klartext steht setzen wir die Dateiberechtigungen auf # 600

```auto
chmod 600 /etc/postfix/sasl_passwd

```

```
# Schreiben Sie nun die Domäne in die Datei mailname:

```

```auto
nano /etc/mailname

```

Ersetzen Sie den roten Wert durch Ihre Domäne:

```auto
Mailadresse.de

```

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

```auto
nano /etc/postfix/sender_canonical

```

und legen dort Benutzer und Mailadressen fest:

```auto
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:

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

```

Testen Sie nun den Versandt einer Mail über Ihr Postfix

```auto
echo "Dies ist eine Testmail" | mailx -s "Test" Ihre@Mailadresse.de

```

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

```auto
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:

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

```

und starten dann PHP neu:

```auto
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:

```auto
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak

```

```auto
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:

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

```

Kopieren Sie den Inhalt hinein:

```auto
[Definition]
actionstart =
actionstop =

```

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

```auto
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

```auto
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.

Apticron informiert Sie über verfügbare Systemaktualisierungen bzw. auch dann, wenn ihr  
System „up2date“ ist. Installieren Sie apticron aus den Standardsoftwarequellen Ubuntus:

```auto
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

```auto
cp /usr/lib/apticron/apticron.conf /etc/apticron/apticron.conf

nano /etc/apticron/apticron.conf

```

```auto
EMAIL="Ihre@Mailadresse.de"
SYSTEM="Ihre.Domai.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:

```auto
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:

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

```

den vorhandenen Eintrag durch diesen ersetzen

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

```

Apticron Informiert Sie jetzt jeden Morgen um 07.30 Uhr per Mail über Ihren  
Systemaktualitätsgrad und möglich Aktualisierungs Maßnahmen.

wenn Sie über die erfolgreichen SSH-Einwahl informiert werden möchten  
Passen Sie die Profildatei an und erweitern diese am Ende um die folgenden Zeilen:

```auto
nano /etc/profile

```

```auto
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……

```auto
service php7.4-fpm restart
service nginx restart

```

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

```

```auto
reboot now

```

Jetzt können Sie Dolibarr einrichten und ich wünsche Ihnen viel Spaß und Erfolg damit.  
Sollten Sie auf Probleme - Fehler oder sonstige Ärgernisse stoßen  
Fragen Sie jemanden der sich auskennt  
Wenn Sie Lob verteilen möchten stehe ich gerne zur Verfügung

Gruß Skalar

---

<div class="post-metadata">

**Author:** ![priojk](https://forum.dolibarr.de/forum/user_avatar/forum.dolibarr.de/priojk/32/701_2.png) [@priojk](https://forum.dolibarr.de/forum/u/priojk)\
**Post date:** [1. Mai 2022 um 18:44 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/3 "2022-05-01T18:44:10Z")

</div>

Super! Vielen Dank für die detaillierte Beschreibung, man sieht, dass dort viel Arbeit reingeflossen ist! 👍

Vielleicht könnte man die Anleitung auch zusätzlich ins Dolibarr-Wiki mit aufnehmen? Ich bin mir nicht sicher, wo es die Ratsuchenden am besten erreicht, dort oder hier im Forum.

---

<div class="post-metadata">

**Author:** ![Scalar](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/s/76d3ee/32.png) [@Scalar](https://forum.dolibarr.de/forum/u/Scalar)\
**Post date:** [2. Mai 2022 um 11:22 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/4 "2022-05-02T11:22:23Z")

</div>

**Installation und Konfiguration von Redis**

Wir installieren den Redis-Server um die Dolibarrperformance zu steigern, da durch Redis die Last auf der MariaDB-Dolibarrdatenbank reduziert wird:

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

```

Passen Sie die Rediskonfiguration durch das Sichern und Anpassen der Konfiguration mittels Ausführens der nachfolgenden Befehle an

```auto
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

```

```auto
cp /etc/sysctl.conf /etc/sysctl.conf.bak
sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf

```

Starten Sie den gesamten Server neu

```auto
reboot now

```

Gratulation, Redis ist jetzt Installiert und eingerichtet.

---

<div class="post-metadata">

**Author:** ![Scalar](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/s/76d3ee/32.png) [@Scalar](https://forum.dolibarr.de/forum/u/Scalar)\
**Post date:** [2. Mai 2022 um 11:25 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/5 "2022-05-02T11:25:29Z")

</div>

**Installation und Konfiguration einer SSL-Zertifizierung**

Vorausgesetzt Sie haben die bisherige Installation erfolgreich abgeschlossen, können Sie diese um ein SSL-Zertifikat erweitern.  
Selbstverständlich kann das schon im ersten Schritt erfolgen, aber dafür müsste ich jetzt den ganzen Post ändern.

Wechseln Sie in den privilegierten Benutzermodus

```auto
sudo -s

```

```auto
apt update -q4 && apt install -y ssl-cert ca-certificates

```

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

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

```

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

```

Wir richten nun verschiedene vhost, also Serverkonfigurationsdateien, ein und modifizieren die Standard vhost-Datei persistent. Sichern der Standard vhost-Datei namens default.conf und legen leere vHost-Dateien zum Konfigurieren an.

```auto
[-f /etc/nginx/conf.d/default.conf] && mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak

```

```auto
[-f /etc/nginx/conf.d/http.conf] && mv /etc/nginx/conf.d/http.conf /etc/nginx/conf.d/doli.http.bak

```

```auto
[-f /etc/nginx/conf.d/doli.conf] && mv /etc/nginx/conf.d/doli.conf /etc/nginx/conf.d/doli.conf.bak

```

```auto
touch /etc/nginx/conf.d/default.conf
touch /etc/nginx/conf.d/http.conf
touch /etc/nginx/conf.d/doli.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.

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

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

```

Kopieren Sie alle nachfolgenden Zeilen in die Datei http.conf und passen [Ihre.Domain.de](http://Ihre.Domain.de) entsprechend Ihres Systems an:

```auto
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;
}
}

```

Speichern und schließen Sie diese Datei. Bearbeiten Sie nun die eigentliche Dolibarr vHost-Datei doli.conf, die sämtliche Konfigurationen für den Betrieb der Dolibarr enthält.

```auto
nano /etc/nginx/conf.d/doli.conf

```

Kopieren Sie alle nachfolgenden Zeilen in die Datei doli.conf und passen [Ihre.Domain.de](http://Ihre.Domain.de) entsprechend Ihres Systems an

```auto
server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;
	root /var/www/doli/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;
	}
}

```

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

```auto
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.

```auto
service nginx restart

```

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 Encryptzertifikaten 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

```auto
adduser --disabled-login certuser

```

```auto
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.

```auto
touch /etc/sudoers.d/certuser

```

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

```

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

```auto
su - certuser

```

```auto
curl https://get.acme.sh | sh

```

```auto
exit

```

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

```auto
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

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

```

und wechseln dann erneut in die Shell des neuen Benutzers

```auto
su - certuser

```

Den nachfolgenden Schritt bitte sehr sorgfältig durchlesen und anpassen!!  
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](http://Ihre.Domain.de) mit Ihrer realen Domain :

```auto
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"

```

```auto
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

```auto
exit

```

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

```auto
nano /root/permissions.sh

```

Kopieren Sie alle Zeilen in die Datei:

```auto
#!/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/doli-data

exit 0

```

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

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

```

```auto
/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. Starten Sie dann den Webserver neu:

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

```

```auto
service nginx restart

```

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

```auto
crontab -l -u certuser

```

Wenn alles geklappt hat ist Ihre Dolibarr Installation jetzt im Internett mit einem SSL-Zertifikat verschlüsselt und kann mit [https://Ihre.Domain.de](https://Ihre.Domain.de) aufgerufen werden

Bitte nehmen Sie sich etwas Zeit und überprüfen den Sicherheitsstatus Ihres Servers.  
Ziel sollte zudem sein, mindestens das nachfolgend dargestellte „A+“-Ergebnis in den Tests zu erzielen:

[https://www.ssllabs.com/ssltest/index.html](https://www.ssllabs.com/ssltest/index.html)  
[https://observatory.mozilla.org/](https://observatory.mozilla.org/)

Ich hoffe das Euch das etwas hilft  
Gruß Scalar

---

<div class="post-metadata">

**Author:** ![Scalar](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/s/76d3ee/32.png) [@Scalar](https://forum.dolibarr.de/forum/u/Scalar)\
**Post date:** [2. Mai 2022 um 14:44 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/6 "2022-05-02T14:44:23Z")

</div>

Hallo und danke für dein Like

Ich denke nicht das, dass ins Wiki gehört. Das geht ja über Dolibarr raus und schafft eine halbwegs sichere Umgebung für den Betrieb.

In der Dolibarr-Wiki sollte, für den Laien verständliche Informationen zur Wartung, Nutzung, Erweiterung und Betrieb von Dolibarr geben.

Das dies in der Welt von Developern etwas anderes darstellt als für Normal-User mit rudimentären programmiert Kenntnissen ist etwas anderes.  
Bitte versteh das nicht als Kritik  
Es ist eine Tatsache das jemand der etwas wirklich gut kann, Probleme damit hat dies in einer Form wieder zu geben die jemand ohne dies Kenntnisse versteht.

Trotz allem hoffe ich das meine kleine Anleitung auch anderen hilft. Vll kommt ja noch das eine oder andre dazu.  
Hab da ein paar Ideen für die Zukunft, wenn ich wieder zu viel Zeit zwischen Essen und schlafen habe.

Gruß Scalar

---

<div class="post-metadata">

**Author:** ![Scalar](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/s/76d3ee/32.png) [@Scalar](https://forum.dolibarr.de/forum/u/Scalar)\
**Post date:** [4. Mai 2022 um 16:40 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/7 "2022-05-04T16:40:47Z")

</div>

Ich habe das ganze jetzt dich als Dolibarr-Wiki Seite erstellt.

[Installieren und Härten von Dolibarr - Dolibarr ERP CRM Wiki](https://wiki.dolibarr.org/index.php?title=Installieren_und_H%C3%A4rten_von_Dolibarr)

Da ist auch der Unterschied zu debian beschrieben.

Gruß Scalar

---

<div class="post-metadata">

**Author:** ![\_MSc](https://forum.dolibarr.de/forum/user_avatar/forum.dolibarr.de/_msc/32/467_2.png) [@\_MSc](https://forum.dolibarr.de/forum/u/_MSc)\
**Post date:** [10. Mai 2022 um 18:54 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/8 "2022-05-10T18:54:22Z")

</div>

So viel Wissen, was hier zur Verfügung gestellt wird! Respekt! Und Danke!  
Ein paar kleine Anmerkungen.  
Hier ist die Reihenfolge falsch. Wenn kein SSH-Server installiert und aktiv ist, komme ich per ssh-Client auch nicht drauf.

> [@Scalar](#):
>
> Server  
> befehle am Server über PuTTY mit USER/PASSWORD Login beim sudo Root User‬‬‬‬‬‬‬‬‬‬‬‬‬ System update
> 
> ```auto
> 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
> 
> ```auto
> sudo apt install openssh-server
> 
> ```
> 
> kontrolle ob SSH aktiv ist - mit ‚q‘ verlassen
> 
> ```auto
> sudo systemctl status ssh
> 
> ```
> 
> ```auto
> # SSH als Service aktivieren wenn nicht aktiv
> 
> ```
> 
> ```auto
> sudo systemctl enable ssh
> sudo systemctl start ssh
> 
> ```

Das ist (halb) doppelt. Ich kann die Optionen direkt in der sshd.conf überprüfen, das Erstellen eines backups, welches direkt danach überschrieben wird, ist nicht notwendig.

> [@Scalar](#):
>
> erstellen einer Backup der sshd\_config
> 
> ```auto
> sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
> 
> ```
> 
> aktuell festgelegte Optionen überprüfen
> 
> ```auto
> sudo sshd -T
> 
> ```
> 
> verschieben der original sshd\_config als .bak
> 
> ```auto
> sudo mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
> 
> ```

Lustig, dass das auch funktioniert. Auf anderen als Ubuntu/Debian kann es jedoch ggf. zu Problemen kommen.  
Besser wäre, den ssh **d** neuzustarten.

> [@Scalar](#):
>
> sshd\_config neu laden
> 
> ```auto
> sudo systemctl restart ssh
> 
> ```

Frage: Hier ist tcp als Protokoll angegeben, nicht ssh. Wäre das auch möglich (dann ohne Angabe des Ports)?

> [@Scalar](#):
>
> zusätzliche Sicherheit gibt es, wenn man nur ausgewählte IP Adressen zulässt  
> IP Adresse identifizieren mit der man am Server angemeldet ist
> 
> ```auto
> w
> 
> ```
> 
> erhaltene IP Adresse übernehmen und Server IP Adresse einfügen – ggf. eigene Portadresse  
> so haben Sie nur SSH Zugang für die IP des Clientrechners am Server und dem SSH Port  
> → # vor sudo entfernen
> 
> ```auto
> `#sudo ufw allow proto tcp from erhaltene IP Adresse to Server IP Adresse port eigenes Port`
> 
> ```

---

<div class="post-metadata">

**Author:** ![\_MSc](https://forum.dolibarr.de/forum/user_avatar/forum.dolibarr.de/_msc/32/467_2.png) [@\_MSc](https://forum.dolibarr.de/forum/u/_MSc)\
**Post date:** [10. Mai 2022 um 20:52 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/9 "2022-05-10T20:52:14Z")

</div>

> [@Scalar](#):
>
> Zudem stellen wir sicher, dass das Pendant (Apache2) zum nginx Webserver weder aktiv  
> noch installiert ist.
> 
> ```auto
> systemctl stop apache2.service && systemctl disable apache2.service
> 
> ```

Damit ist Apache zwar deaktiviert, aber noch installiert.  
`systemctl stop apache2.service && systemctl disable apache2.service && apt remove apache2`  
wäre vollständig(er)

---

<div class="post-metadata">

**Author:** ![Scalar](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/s/76d3ee/32.png) [@Scalar](https://forum.dolibarr.de/forum/u/Scalar)\
**Post date:** [11. Mai 2022 um 05:21 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/10 "2022-05-11T05:21:33Z")

</div>

Hallo und danke für die Antwort

> [@\_MSc](#):
>
> Hier ist die Reihenfolge falsch. Wenn kein SSH-Server installiert und aktiv ist, komme ich per ssh-Client auch nicht drauf.
> 
> Server  
> befehle am Server über PuTTY mit USER/PASSWORD Login beim sudo Root User‬‬‬‬‬‬‬‬‬‬‬‬‬ System update
> 
> ```auto
> 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
> 
> ```auto
> sudo apt install openssh-server
> 
> ```

Stimmt, OpenSSH sollte, zu diesem Zeitpunkt, schon installiert sein. Meist geschieht das mit der Installation von Ubuntu.  
Den Status ab zu fragen ist aber in jedem Fall nicht verkehrt.

> [@\_MSc](#):
>
> Das ist (halb) doppelt. Ich kann die Optionen direkt in der sshd.conf überprüfen, das Erstellen eines Bakus, welches direkt danach überschrieben wird, ist nicht notwendig.
> 
> erstellen einer Backup der sshd\_config
> 
> ```auto
> sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
> 
> ```
> 
> aktuell festgelegte Optionen überprüfen
> 
> ```auto
> sudo sshd -T
> 
> ```
> 
> verschieben der original sshd\_config als .bak
> 
> ```auto
> sudo mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
> 
> ```

Nun das hat schon einen Grund, der sich aus meiner Erfahrung mit - nicht neu aufgesetzten - Betriebssystemen ergeben hat.

```auto
sudo cp .......

```

kopiert, in dem Fall die sshd\_config nach sshd\_config.bak

damit bleibt der Inhalt beider erhalten und kann mit

```auto
sudo sshd -T

```

ausgelesen werden, bestehende Systeme haben gelegentlich Einstellungen die in die neue mit übernommen werden müssen, daher erst mal nur kopiert.  
Um den Inhalt der ganzen sshd.config zu ersetzen gibt es ein paar Möglichkeiten.  
eine ist das File zu löschen

```auto
sudo rm /etc/ssh/sshd_config

```

eine andere ist, die beschriebene, die sshd\_config zu verschieben

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

```

man könnte auch im Editor jede einzelne Zeile löschen z.B. mit strg-k (ctrl-k) im Fall von nano

> [@\_MSc](#):
>
> Frage: Hier ist tcp als Protokoll angegeben, nicht ssh. Wäre das auch möglich (dann ohne Angabe des Ports)?
> 
> > [@Scalar](#):
> >
> > zusätzliche Sicherheit gibt es, wenn man nur ausgewählte IP Adressen zulässt
> > 
> > > IP Adresse identifizieren mit der man am Server angemeldet ist
> > > 
> > > ```auto
> > > w
> > > 
> > > ```
> > > 
> > > erhaltene IP Adresse übernehmen und Server IP Adresse einfügen – ggf. eigene Portadresse  
> > > so haben Sie nur SSH Zugang für die IP des Clientrechners am Server und dem SSH Port  
> > > → # vor sudo entfernen
> > > 
> > > ```auto
> > > #sudo ufw allow proto tcp from erhaltene IP Adresse to Server IP Adresse port eigenes Port
> > > 
> > > ```

Die Portfreigabe habe ich mit 3 Möglichkeiten beschrieben

- entweder direkte Freigabe des Standard Port mit → sudo ufw allow allow ssh  
(ist die schwächste da der Port bereits bekannt ist und so der unerwünschte Zugriff leichter fällt)

- oder die Freigabe des selbst gewählten Port mit → sudo ufw allow allow PORT  
(in dem Fall muss der Port erst gefunden werden der für eine Verbindung mit SSH offen ist)

Die Dritte Möglichkeit, und sicherste ist die Freigabe noch zu verstärkten indem diese an einen festgelegte IP-Adresse gebunden wird.  
 → sudo ufw allow proto tcp from erhaltene IP Adresse to Server IP Adresse port eigenes Port  
Wenn Sie den Port hier nicht mit angibt, ist auch kein Port offen und es kann keine Verbindung hergestellt werden.

" proto tcp " ist nur das Protokoll und gibt kein Port frei.

> [@\_MSc](#):
>
> > [@Scalar](#):
> >
> > Zudem stellen wir sicher, dass das Pendant (Apache2) zum nginx Webserver weder aktiv
> > 
> > > noch installiert ist.
> > > 
> > > ```auto
> > > systemctl stop apache2.service && systemctl disable apache2.service
> > > 
> > > ```
> 
> Damit ist Apache zwar deaktiviert, aber noch installiert.  
> `systemctl stop apache2.service && systemctl disable apache2.service && apt remove apache2`  
> wäre vollständig(er)

Stimmt kann man machen und sollte auch gemacht werden, wenn Apache unnötig als Installation vorhanden ist.

Vielen Dank für das Feedback \_MSc und die Anmerkungen.  
Ich bin mir sicher Sie finden noch mehr das ich falsch, unverständlich oder doppelt beschrieben habe und freue mich über weitere Anmerkungen.  
Gruß Scalar

---

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [23. September 2022 um 20:06 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/11 "2022-09-23T20:06:10Z")

</div>

PS  
Es hat sich erledigt, der Key war ja noch in meinem Windows Verzeichnis, der Grund warum Putty sich nicht anmelden konnte war mein Benutzername (Groß und Klein-schreibung) hatte ich nicht beachtet.

Hallo Scalar,  
erstmal vielen Dank für diese Tolle Anleitung, es hat mir viel geholfen Dolibarr Sicher einzurichten und ist seit fast 2 Monaten im Einsatz, heute habe ich leider meinen SSH Putty Zugang verloren, ich wollte lediglich die Schriftgröße ändern und überschrieb mein Dolibarr Profil und schon war das Zertifikat oder ähnl. nicht mehr da.  
Meine Frage, kann ich sorglos ein Neues Schlüssel Paar erstellen ohne den Betrieb von Dolibarr zu gefährden, bei mir läuft es unter Ubuntu 20.04 als Hyper-V VM, ich habe also über Hyper-V noch Zugriff, würde aber gerne wieder mit Putty arbeiten.

LG  
Jason.

---

<div class="post-metadata">

**Author:** ![cfoellmann](https://forum.dolibarr.de/forum/user_avatar/forum.dolibarr.de/cfoellmann/32/591_2.png) [@cfoellmann](https://forum.dolibarr.de/forum/u/cfoellmann)\
**Post date:** [23. Oktober 2023 um 11:10 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/12 "2023-10-23T11:10:36Z")

</div>

das installiert zwar Redis aber es gibt keine Nutzung durch Dolibarr, oder?

---

<div class="post-metadata">

**Author:** ![cyberfact](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/c/e274bd/32.png) [@cyberfact](https://forum.dolibarr.de/forum/u/cyberfact)\
**Post date:** [20. September 2025 um 06:31 UTC](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008/13 "2025-09-20T06:31:07Z")

</div>

Moin, Moin,

vielen Dank für die perfekte Anleitung ! Ich hatte div. andere getestet, alle meist unvollständig/fehlerhaft. Diese funktioniert immer noch (2025), allerdings hatte ich eine Fehlermeldung beim restart von fail2ban:

# ERROR „Failed during configuration: Have not found any log file for sshd jail“

Behebung:

nano /etc/fail2ban/jail.local

Hinzufügung:

[sshd]  
backend=systemd  
enabled = true

all credits go to: „sebres“ on: [[BR]: fail2ban does not start on some debian/ubuntu systems - backend should probably be set to systemd on all systemd-based distros · Issue #3292 · fail2ban/fail2ban · GitHub](https://github.com/fail2ban/fail2ban/issues/3292)

just in case… 🙂

falls dies ein Doppel ist, sorry … dann natürlich bitte löschen.

greetz

cyberfact
