# 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:** 1\
**Showing post:** 2

<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

---

_[View the full topic](https://forum.dolibarr.de/forum/t/installation-und-grund-haertung-von-dolibarr/8008)._
