Installation und “Grund”-Härtung von Dolibarr

und mit dem privilegierten Benutzerrechten am Server anmelden

sudo -s

Starten Sie mit folgenden Softwarepakete, als notwendige Grundlage den Serverbetriebs

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

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

nano /etc/hosts

Passen Sie die roten Werte an Ihre Umgebung an:

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:

nano /etc/hostname

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

Ihre.Domain.de

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

NTP=ntp1.dismail.de ntp2.dismail.de

Speichern Sie diese Datei und starten den Zeitserver neu:

systemctl restart systemd-timesyncd

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

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

Starten Sie abschließend den Server neu

reboot now

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

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:

apt install -y ubuntu-keyring

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

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

Tragen Sie anschließend die Softwarequellen für nginx und PHP ein:

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

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

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

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

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

Aktualisierung des Servers:

apt update

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

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

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

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

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

apt install -y nginx

und den Dienst zum automatischen Start nach einem Systemneustart mittels

systemctl enable nginx.service

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

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

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

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:

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

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

reboot now

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

sudo -s

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

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

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

timedatectl set-timezone Europe/Berlin

jetzt können wir die php.ini anpassen

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

Starten Sie nun beide Dienste, nginx und PHP, neu:

service php7.4-fpm restart
service nginx restart

Die Installation von MariaDB erfolgt mit diesem Befehl:

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

Härten wir nun den Datenbankserver mittels des mitgelieferten Tools
„mysql_secure_installation“. Bei einer Erstinstallation besteht kein Root Passwort, so dass
Sie die Abfrage mit ENTER bestätigen könne. Es wird empfohlen, ein Passwort direkt zu
setzen, der entsprechende Dialog erscheint automatisch:

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

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

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

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

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

Kopieren Sie alle nachfolgenden Zeilen in die leere Datei:

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

Speichern und schließen Sie die Datei und starten dann den Datenbankserver neu, um die
Dolibarr-Datenbank, den Dolibarr-Benutzer und sein Passwort einzurichten:
root-Passwort eingeben – Ihr-starkes-stück-Passwort -

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

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

reboot now

Wir richten nun verschiedene vhost, also Serverkonfigurationsdateien, ein und modifizieren
die Standard vhost-Datei persistent. 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.

sudo -s

Erstellen Sie die globale vhost-Datei

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.

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

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

in die kommt das rein

# 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.

service nginx restart

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

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)

unzip dolibarr-15.0.1.zip && rm /tmp/dolibarr-15.0.1.zip
mv dolibarr-15.0.1/* /var/www/doli

setzen der Berechtigung

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

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

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

Server neustart

reboot now

und mit dem priviligierten Benutzerrechten am Server anmelden

sudo -s

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

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

nachstehendes suchen und anpassen

fastcgi_read_timeout 360;
fastcgi_send_timeout 360;

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

nano /mnt/doli-data/install.lock
# nur ein Enter und wieder raus

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

php.ini anpassen

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

Sie sollten die PHP-Funktionen deaktivieren, falls Sie keine Systembefehle
in benutzerdefiniertem Code ausführen wollen:

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

sed -i "s/disable_functions =.*/disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals/" /etc/php/7.4/fpm/php.ini
# Starten Sie nun beide Dienste, nginx und PHP, neu:
service php7.4-fpm restart
service nginx restart

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

gehen Sie zurück zur Serverseite

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

nachstehendes suchen und anpassen, speichern und schließen

$dolibarr_main_prod='1';

Jetzt vergeben Sie an die /conf.php nur Leserechte

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:

apt update -q4 && apt install -y fail2ban

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

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:

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

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:

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:

nano /etc/fail2ban/jail.local

Hier fügen wir folgenden Inhalt ein:

[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

nano /var/log/doli-passforgotten.log
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:

service fail2ban restart
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:

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) und zuletzt
noch den smtp.Server.

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

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

und fügen Sie nun die folgende Postfixkonfiguration ein:

nano /etc/postfix/main.cf

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

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:

nano /etc/postfix/sasl_passwd

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

smtp.server [email protected]:Ihr-Passwort

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

chmod 600 /etc/postfix/sasl_passwd
# Schreiben Sie nun die Domäne in die Datei mailname:
nano /etc/mailname

Ersetzen Sie den roten Wert durch Ihre Domäne:

Mailadresse.de

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

nano /etc/postfix/sender_canonical

und legen dort Benutzer und Mailadressen fest:

root [email protected]
< [email protected] > [email protected] 
www-data [email protected] 
default [email protected]

Jetzt werden die Konfiguration kompiliert und Postfix neu gestartet:

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

Testen Sie nun den Versandt einer Mail über Ihr Postfix

echo "Dies ist eine Testmail" | mailx -s "Test" [email protected]

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

nano /var/log/mail.log

Passen Sie die PHP-Konfiguration an um auch PHP-Mails über postfix zu versenden:
Setzen Sie den sendmail_path wie folgt:

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

und starten dann PHP neu:

service php7.4-fpm restart

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

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak
sed -i "s/destemail =.*/destemail = [email protected]/" /etc/fail2ban/jail.conf 
sed -i "s/sender =.*/sender = [email protected]/" /etc/fail2ban/jail.conf
sed -i "s/mta =.*/mta = mail/" /etc/fail2ban/jail.conf
sed -i "s/action = %(action_)s.*/action = %(action_mwl)s/" /etc/fail2ban/jail.conf

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

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

Kopieren Sie den Inhalt hinein:

[Definition]
actionstart =
actionstop =

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

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

Starten Sie den fail2ban-Service neu

service fail2ban restart

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

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

apt update -q4 && apt install -y apticron

Nun passen wir apticron an und ändern wenigstens die folgenden Parameter:
Die ,conf ist selbsterklärend und Sie können weitere Anpassungen nach Ihren
Vorstellungen vornehmen

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

nano /etc/apticron/apticron.conf
EMAIL="[email protected]"
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="[email protected]"

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

apticron

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

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

den vorhandenen Eintrag durch diesen ersetzen

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:

nano /etc/profile
if [ -n "$SSH_CLIENT" ]; then
        echo 'Login on' `hostname` `date` `who -m` | mail -s "Login on `hostname` from `echo $SSH_CLIENT |
        awk '{print $1}'`" [email protected]
fi

Bei jeder erfolgreichen SSH-Einwahl werden Sie ab sofort aktiv benachrichtigt.
Solange Sie selbst es wahren ist alles okay – aber wenn nicht……

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

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

1 „Gefällt mir“