Mit diesem Tutorial kannst Du einen kompletten Webhosting-Server mit OpenSUSE Leap und Webmin / Virtualmin GPL erstellen

Anmerkung 1: Ich werde für dieses Tutorial den Hostnamen "sr1.pmj.rocks" benutzen. Du kannst diesen natürlich anpassen.

Anmerkung 2: Das Tutorial habe ich für meinen eigenen Usecase erstellt.
Das bedeutet dass einige Dinge unter Umständen angepasst werden sollten. Vorallem die Liste der Software kann je nach dem überdimensioniert sein.

System Installation

Ich nutze meistens die Network Installation da das Image kleiner ist und die Systemkomponenten auf dem neuesten Stand sind.
Das System wird grundsätzlich ganz normal installiert, allerdings sind einige Kleingkeiten zu beachten:

  • Bei der Auswahl zur Art des Systems wählt man "Minimale Server-Installation"
  • Bei der Auswahl zum Dateisystem wählt man "ext4" wenn man Benutzer Quota nutzen möchte, ansonsten empfehle ich btrfs
  • Bei der Partitionierung wählt man entweder eine einzelne root-Partition "/" oder eine root-Partition und eine separate "/srv"-Partition
    (swap sollte zwischen 2-4GB liegen)
  • Man kann einen zusätzlichen unpriviligierten Benutzer erstellen, ich lasse das aber meistens und arbeite direkt mit root (Ja Ja, Security)

Den Rest lässt man Standard bzw. passt ihn auf die eigenen Bedürftnisse (z.b. local) an.

SSH Konfiguration

Nach der Installation sollte als erstes der SSH-Server so konfiguriert werden, dass man nur noch mit einem Schlüssel Zugriff hat.

Erstelle ein 4096-bit Schlüsselpaar:

ssh-keygen -t rsa -b4096

Danach fügt man den Schlüssel den authorized_keys hinzu

cd .ssh
cat id_rsa.pub >> authorized_keys

Um das Ganze mit Putty zu nutzen, kopiert man den privaten id_rsa Schlüssel und importiert ihn in puttygen. Danach erstellt man den Schlüssel für Putty.

Den SSH server habe ich dann wie folgt konfiguriert:

nano /etc/ssh/sshd_config

und am Ende folgende Konfiguration einfügen:

IgnoreRhosts yes
IgnoreUserKnownHosts no
PrintMotd yes
StrictModes yes
PubkeyAuthentication yes
PermitRootLogin without-password
PermitEmptyPasswords no
GatewayPorts no
AllowTcpForwarding yes
TCPKeepAlive yes
Protocol 1,2
DenyGroups deniedssh
KeepAlive yes

Neustart

service sshd restart

Basis Konfiguration

Nach der Installation überprüft man die Updates

zypper up

und installiert sie!

Es kann sein, dass Yast2 via SSH in Putty nicht sauber gerendert wird. Dafür gibt es folgende Lösung:

nano .bashrc
export NCURSES_NO_UTF8_ACS=1

Dann sollten in

yast2

folgende Community-Repositories hinzugefügt werden:

  • Packman Repository
  • Libdvdcss Repository

Zurück im CLI kann man noch das folgende Repository für NodeJS/yarn hinzufügen:

zypper ar -f "https://download.opensuse.org/repositories/devel:/languages:/nodejs/\$releasever/" node.js
zypper ref

Anschliessend kann man die zusätzlichen Pakete installieren:

zypper in quota glibc-devel icu libicu-devel gcc gcc-c++ cmake flex fail2ban rkhunter amavisd-new clamav monit lynx pwgen zoo unrar spamassassin ruby-devel ruby2.5-rubygem-bundler gd gd-devel ImageMagick nodejs10 git go ncdu zlib-devel libopenssl-devel libbz2-devel libcurl-devel pam-devel aspell-devel net-snmp-devel libtidy-devel libvpx-devel libjpeg8-devel libXpm-devel freetype2-devel libzip-devel imap-devel libxslt-devel ffmpeg flac docker yarn liberation-fonts shntool wkhtmltopdf

Nun wird der Clam Virenscanner initialisiert

freshclam
systemctl enable clamd
service clamd start

Quota

Quota-Managment ist relativ einfach zu installieren und aktivieren.
Bei btrfs muss man nur folgendes machen

btrfs quota enable /srv
btrfs qgroup show /srv
btrfs subvolume list /srv | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} /srv
btrfs quota rescan /srv

Für das alte ext4 wie folgt (obsolet, nur zur Referenz)
Zuerst editiert man die fstab

nano /etc/fstab

und fügt folgende Optionen zu allen Partitionen hinzu, welche Quota-Management haben sollen

,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0

Nun aktiviert man das Quota-Managment wie folgt

mount -o remount /
quotacheck -avugm
quotaon -avug

Es kann sein, dass eine Warnung ausgegeben wird, weil das System keine vorhandenen Konfiguration finden kann. Diese Warnung kann man ignorieren.

Server

Nun zur Server-Software.
Als erstes wird die Serversoftware installiert. Sie wird im laufe dises Tutorials konfiguriert.

zypper in bind mariadb dovecot perl-DBD-mysql perl-Date-Manip procmail pure-ftpd postgrey postgresql postgresql-contrib postgresql-devel postgresql-server redis

Apache 2 / PHP

Zuerst wird Apache2 und PHP 7.4 installiert.

zypper in apache2 apache2-devel apache2-event apache2-mod_fcgid apache2-prefork apache2-worker
zypper in php7 php7-bcmath php7-bz2 php7-calendar php7-ctype php7-curl php7-dba php7-devel php7-dom php7-exif php7-fastcgi php7-fileinfo php7-ftp php7-gd php7-gettext php7-iconv php7-imagick php7-intl php7-json php7-mbstring php7-mysql php7-odbc php7-openssl php7-pdo php7-pear php7-pgsql php7-phar php7-posix php7-readline php7-shmop php7-snmp php7-soap php7-sodium php7-sysvmsg php7-sysvshm php7-tidy php7-tokenizer php7-xmlreader php7-xmlrpc php7-xmlwriter php7-xsl php7-zip php7-zlib apache2-mod_php7 php-composer

Apache 2 konfigurieren

Nun gibt es noch einige kleine Tweaks für den Apache.
Zuerst wird http2 aktiviert und anschliessend die Limite für FastCGI-Requests erhöht.

nano /etc/apache2/httpd.conf

am Ende folgendes einfügen:

Protocols h2 h2c http/1.1
nano /etc/apache2/conf.d/mod_fcgid.conf

und vor </IfModule> folgendes einfügen bzw. ändern:

MaxRequestLen 157286400

Nun werden die Apache2 Module aktiviert

a2enmod rewrite
a2enmod suexec
a2enmod ssl
a2enmod actions
a2enmod fcgid
a2enmod ruby
a2enmod status
a2enmod headers
a2enmod proxy
a2enmod version
a2enmod http2
a2enflag SSL
a2enflag STATUS

Da ich PHP im fastcgi Modus betreibe kann man das PHP modul entfernen

a2dismod php7

Anmerkung: Es kann immer wieder mal vorkommen, dass SuExec die falschen Dateirechte erhält nach einem Update und sich der Apache2 dann nicht starten lässt.
Dies kann man mit folgendem Befehl beheben

chmod 4755 /usr/sbin/suexec2

Server starten

systemctl enable apache2
service apache2 start

PHP selber kompilieren / verschiedene Versionen nutzen

Da ich mit Virtualmin arbeite, ist es möglich neben der vom System bereitgestellten PHP Version (7.4) noch weitere Versionen zu installieren und zu nutzen.
Der Vorgang ist mehr oder weniger für alle Versionen der selbe, ich mache hier mal ein das Beispiel mit der Version 7.3.

Zuerst wird die Quelle nach /opt/php/source heruntergeladen und entpackt:

mkdir -p /opt/php/source
cd /opt/php/source
wget https://www.php.net/distributions/php-7.3.31.tar.bz2
bzip2 -d php-7.3.31.tar.bz2
tar xvf php-7.3.31.tar

Nun wird PHP möglichst nahe an der System Version kompiliert und nach /opt/php/php7.3.31 installiert

cd  /opt/php/source/php-7.3.31
./configure --prefix=/opt/php/php7.3.31 --enable-debug --disable-short-tags --with-libdir=lib64 --with-openssl --with-zlib --enable-bcmath --with-bz2 --enable-calendar --with-curl --enable-dba --with-libxml-dir --enable-exif --enable-ftp --with-gd --with-jpeg-dir --with-png-dir --with-xpm-dir --with-freetype-dir --with-zlib-dir --with-gettext --with-mhash --with-imap --with-imap-ssl --with-icu-dir --enable-intl --enable-mbstring --with-mysqli --enable-opcache --enable-pcntl --with-mysql-sock --with-pdo-mysql --with-readline --enable-shmop --with-snmp --enable-soap --enable-sockets --enable-sysvmsg --enable-sysvshm --with-tidy --with-xmlrpc --with-xsl --enable-zip --with-libzip --with-pear --with-pspell --with-icu-dir=/usr

Wenn folgender Fehler auf 64-bit Systemen auftritt

configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

muss ein symlink zur 64-bit library gesetzt werden und das vorherige ./configure-Skript erneut ausgeführt werden.

ln -s /usr/lib64/libc-client.a /usr/lib/libc-client.a

Sobald das ./configure-Skript ohne Fehler durgelaufen ist, kann man PHP komnpilieren und installieren

make
make install

Damit diese Version von PHP in Virtualmin genutzt bzw. ausgewählt werden kann, muss ein Symlink gesetzt und die php.ini kopiert werden, da Virtualmin in einem ganz bestimmten Verzeichnis nach den PHP-Installationen sucht.

mkdir -p /opt/rh/php73/root/usr
ln -s /opt/php/php7.3.31/bin /opt/rh/php73/root/usr/bin
cp /opt/php/source/php-7.3.31/php.ini-production /opt/php/php7.3.31/php.ini

Datenbanken

Zuerst muss der MariaDB Server einmal gestartet werden um ihn abzusichern

service mysql start

Danach startet man die Secure Installation und folgt der Installation. Man sollten den Vorgaben folgen (immer Enter drücken ausser beim neu setzen des Root-Passworts)

mysql_secure_installation

Da war irgendwann noch etwas mit STRICT_TRANS_TABLES beim sql_mode, aber ich kann mich nicht mehr erinnern ob man das entfernen oder hinzufügen muss und aus welchem Grund ich das überhaupt mal in das Tutorial aufgenommen hatte.

Server starten

systemctl enable mysql
service mysql restart

Nun folgt die Konfiguration von PostgreSQL.

PostgreSQL muss man eigentlich nur starten, das root Passwort setzen und eine Extension aktivieren.

systemctl enable postgresql
service postgresql start
su - postgres
psql
\password postgres
\q
psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
exit
service postgresql restart

Postfix / Dovecot / Procmail

Als erstes wird ein Zertifikat für Postfix und Dovecot erstellt um die Verbindung zu verschlüsseln. Das Zertifikat ist 10 Jahre gültig.
Dabei müssen immer wieder Informationen zum Zertifikatsausteller eingegeben werden.
Passphrases würde ich weglassen.

Zuerst das Zertifikat für Postfix SMTP

cd /etc/ssl/private/
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 4096
chmod 600 smtpd.key
openssl req -new -key smtpd.key -out smtpd.csr
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout smtpdkey.pem -out smtpdcert.pem -days 3650

Nun das Zertifikat für Dovecot IMAP

cd /etc/ssl/private/
openssl genrsa -des3 -rand /etc/hosts -out dovecot.key 4096
chmod 600 dovecot.key
openssl req -new -key dovecot.key -out dovecot.csr
openssl x509 -req -days 3650 -in dovecot.csr -signkey dovecot.key -out dovecot.crt
openssl rsa -in dovecot.key -out dovecot.key.unencrypted
mv -f dovecot.key.unencrypted dovecot.key
openssl req -new -x509 -extensions v3_ca -keyout dovecotkey.pem -out dovecotcert.pem -days 3650

Nun wird Postfix konfiguriert.
Wichtig: die vorliegende Konfiguration muss überprüft und die eigene Serverkonfiguration angepasst werden!

postconf -e "content_filter = amavis:[127.0.0.1]:10024"
postconf -e "delay_warning_time = 0h"
postconf -e "inet_interfaces = all"
postconf -e "mydomain = pmj.rocks"
postconf -e "myhostname = sr1.\$mydomain"
postconf -e "mynetworks = 127.0.0.0/8"
postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination"
postconf -e "smtpd_sender_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unknown_sender_domain,reject_unknown_reverse_client_hostname,reject_unknown_client_hostname"
postconf -e "smtpd_sasl_auth_enable = yes"
postconf -e "smtpd_sasl_security_options = noanonymous"
postconf -e "smtp_use_tls = yes"
postconf -e "smtp_tls_note_starttls_offer = yes"
postconf -e "smtpd_use_tls = yes"
postconf -e "smtpd_helo_required = yes"
postconf -e "smtpd_helo_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_unknown_helo_hostname"
postconf -e "smtpd_tls_key_file = /etc/ssl/private/smtpd.key"
postconf -e "smtpd_tls_cert_file = /etc/ssl/private/smtpd.crt"
postconf -e "smtpd_tls_CAfile = /etc/ssl/private/smtpdcert.pem"
postconf -e "smtpd_tls_loglevel = 1"
postconf -e "smtpd_tls_received_header = yes"
postconf -e "smtpd_tls_session_cache_timeout = 3600s"
postconf -e "smtpd_sasl_type = dovecot"
postconf -e "smtpd_sasl_path = private/auth"
postconf -e "tls_random_source = dev:/dev/urandom"
postconf -e "alias_maps = lmdb:/etc/aliases"
postconf -e "virtual_alias_maps = lmdb:/etc/postfix/virtual"
postconf -e "sender_canonical_maps = lmdb:/etc/postfix/canonical"
postconf -e "tls_server_sni_maps = lmdb:/etc/postfix/sni_map"
postconf -e "sender_dependent_default_transport_maps = hash:/etc/postfix/dependent"
postconf -e "home_mailbox = Maildir/"
postconf -e "mailbox_command = /usr/bin/procmail -a \"\$EXTENSION\""

Nun muss noch die master.cf konfiguriert werden

nano /etc/postfix/master.cf

Dort entfernt man die Kommentare bei amavis (Block), tlsmgr (Zeile) und localhost (Block)

amavis    unix  -       -       n       -       4       smtp
  -o smtp_data_done_timeout=1200
  -o smtp_send_xforward_command=yes
  -o disable_dns_lookups=yes
  -o max_use=20
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
localhost:10025 inet   n       -       n       -       -       smtpd
  -o content_filter=
  -o smtpd_delay_reject=no
  -o smtpd_client_restrictions=permit_mynetworks,reject
  -o smtpd_helo_restrictions=
  -o smtpd_sender_restrictions=
  -o smtpd_recipient_restrictions=permit_mynetworks,reject
  -o smtpd_data_restrictions=reject_unauth_pipelining
  -o smtpd_end_of_data_restrictions=
  -o smtpd_restriction_classes=
  -o mynetworks=127.0.0.0/8
  -o smtpd_error_sleep_time=0
  -o smtpd_soft_error_limit=1001
  -o smtpd_hard_error_limit=1000
  -o smtpd_client_connection_count_limit=0
  -o smtpd_client_connection_rate_limit=0
  -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_address_mappings
  -o local_header_rewrite_clients=
  -o local_recipient_maps=
  -o relay_recipient_maps=

Jetzt muss eine Konfiguration für Dovecot erstellt werden

nano /etc/dovecot/local.conf

mit folgendem Inhalt

mail_location = maildir:~/Maildir
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
passdb {
 driver = pam
}
protocols = imap pop3
service auth {
 unix_listener /var/spool/postfix/private/auth {
 group = postfix
 mode = 0660
 user = postfix
 }
 user = root
}
#ssh_dh = </etc/ssl/private/dovecotcert.pem
ssl_ca = </etc/ssl/private/dovecotcert.pem
ssl_cert = </etc/ssl/private/dovecot.crt
ssl_key = </etc/ssl/private/dovecot.key
userdb {
 driver = passwd
}
protocol imap {
 #mail_plugin_dir = /usr/lib64/dovecot/modules/imap
 #mail_plugins = antispam
}
protocol pop3 {
 mail_plugin_dir = /usr/lib64/dovecot/modules/pop3
}
protocol lda {
 mail_plugin_dir = /usr/lib64/dovecot/modules/lda
}

Da nun alles in der local.conf konfiguriert ist, müssen die anderen .conf-Dateien ausgeschaltet werden.
Dazu wird in der Hauptkonfiguration dovecot.conf die Zeile !include conf.d/*.conf auskommentiert werden.

nano /etc/dovecot/dovecot.conf
- !include conf.d/*.conf
+ #!include conf.d/*.conf

Amavis

In der Amavis Konfiguration müssen folgende Dinge angepasst werden

nano /etc/amavisd.conf
$mydomain = 'pmj.rocks';
$myhostname = "sr1.$mydomain";

$log_level = 3;

$sa_tag_level_deflt  = -999;
$sa_tag2_level_deflt = 4.8;
$sa_kill_level_deflt = 15;
$sa_dsn_cutoff_level = 22;

$sa_spam_subject_tag = '';

Dann konfiguriert man Procmail damit die als Spam geflagten Emails im Spam Ordner landen

nano /etc/procmailrc
:0
* ^X-Spam-Status: Yes
$HOME/Maildir/.spam/

Alle Server starten

systemctl enable postfix
systemctl enable dovecot
systemctl enable postgrey
systemctl enable amavis
systemctl enable named
sa-update
service postfix start
service dovecot start
service postgrey start
systemctl start amavis
service named start

Pure-Ftp Server

Der FTP-Server sollte wie folgt konfiguriert werden.
Am besten geht man die ganze Konfiguration Zeile für Zeile durch!

nano /etc/pure-ftpd/pure-ftpd.conf
MaxClientsNumber (je nach dem sollte diese Nummer angepasst werden)
MaxClientsPerIP (je nach dem sollte diese Nummer angepasst werden)
#AnonymousOnly (Kommentar setzen)
NoAnonymous yes
#PAMAuthentication
UnixAuthentication yes
MaxLoad (je nach dem sollte diese Nummer angepasst werden)
Umask 133:022 (Dateien:Verzeichnisse)
AllowUserFXP yes
ProhibitedDotFilesWrite no
AutoRename no
NoRename no
TLS 1
#AntiWarez

Anschliesend erstellt man wieder ein Zertifikat für die verschlüsselte Verbindung

mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
chmod 600 /etc/ssl/private/pure-ftpd.pem

Server starten

systemctl enable pure-ftpd
systemctl start pure-ftpd

Firewall

Da nun die meisten Services konfiguriert sind kann man nun auch die Firewall öffnen.

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=imap
firewall-cmd --permanent --add-service=imaps
firewall-cmd --permanent --add-service=smtp
firewall-cmd --permanent --add-service=smtps
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=10000/tcp
firewall-cmd --permanent --add-port=20000/tcp
firewall-cmd --permanent --add-port=2812/tcp
firewall-cmd --permanent --add-port=30000-30100/tcp

Firewall neu laden

firewall-cmd --reload

Webmin / Virtualmin

Bevor man Virtualmin installiert, sollte man den NSCD service stoppen und entfernen da er beim erstellen von Benutzern in Virtualmin Probleme machen kann.

service nscd stop
systemctl disable nscd

Webmin und Virtualmin muss man manuell installieren.
Das Installationsscript sollte eigentlich selbsterklärend sein.

mkdir -p /opt/software
cd /opt/software
wget --continue https://prdownloads.sourceforge.net/webadmin/webmin-1.997.tar.gz
gunzip webmin-1.997.tar.gz
tar xf webmin-1.997.tar
cd webmin-1.997
./setup.sh /opt/webmin

Nach der Installation muss man noch das MariaDB Module konfigurieren (Server -> MariaDB Configuration) - dort klickt man auf das Getriebe oben links und ändert bei "System Configuration" die beiden Einträge "Command to start MySQL server" und "Command to stop MySQL server" zu "service mysql start" und "service mysql stop".

Das gleiche macht man dann auch noch mit dem Bind DNS Server (Server -> Bind DNS Configuration) - dort klickt man auf das Getriebe oben links und ändert bei "System Configuration" die beiden Einträge "Command to start Bind server", "Command to stop Bind server" und "Command to restart Bind server" zu "service named start", "service named stop" und "service named restart".

Da Virtualmin bei der Erstellung des Let's Encrypt SSL Zertifikats es irgendwie nicht schaft den .well-known/acme-challenge Pfad zu erstellen muss man noch ein Dummy Skeleton Verzeichnis erstellen in welchem der Pfad bereits vorhanden ist:

mkdir -p /opt/skel/public_html/.well-known/acme-challenge
touch /opt/skel/public_html/.well-known/acme-challenge/.htaccess

Virtualmin installiert man nun direkt als Modul in Webmin.
Dazu loggt man sich in Webmin ein und geht auf Webmin Configuration -> Webmin Modules und wählt im Install Tab "Install From HTTP or FTP URL"
Dort gibt man dann folgende URL ein

https://download.webmin.com/download/virtualmin/virtual-server-7.0.gpl.wbm.gz

Dann klickt man auf Install Module.
Sobald die Installation abgeschlossen ist lädt man das Fenster/Tab mit ctrl+f5 neu.

Wenn man Virtualmin zum ersten Mal startet führt einem ein Wizard durch die Basis-Konfiguration.
Hier sollte man noch keinen Default Server erstellen da zuerst alles korrekt konfiguriert werden muss.
Man kann den Wizard auch zu einem späteren Zeitpunkt erneut starten.

Virtualmin Plugin Konfiguration

Nun folgt die etwas mühsame Virtualmin Konfiguration (Virtualmin -> System Settings -> Features and Plugins).
Damit ich das Tutorial etwas schneller zu Ende bringe werde ich die einzelnen Punkte einfach kurz auflisten.

  • Zuerst Plugins deaktivieren, da sie nicht installiert sind
    • Bind DNS
    • Webalizer Reporting
  • Falls der Fehler "The procmail command /usr/bin/procmail has 100755 permissions, when it should be setuid and setgid to root." auftaucht dann einfach folgenden Befehl eingeben
    chmod 6755 /usr/bin/procmail
  • Anschliessend macht man "Re-Check Configuration"

Virtualmin Server Settings

Nun kommt die Basis Virtualmin Konfiguration (Virtualmin -> System Settings -> Virtualmin Configuration)
Ich werde nur die Dinge listen die geändert werden müssen, der Rest kann auf den Default Settings belassen werden.

  • Server Settings
    • Also update outgoing addresses for mailboxes - Yes
  • Die "User Interface Settings" können nach den eigenen Bedürftnissen angepasst werden.
  • Defaults for new Domains
    • Home directory base - /srv/www/virtual (oder ein anderes Verzeichnis nach Wahl unter /srv/www)
    • Domain name style in username - Full Domain Name
    • Force group name to be always same as username - Yes
  • SSL Settings
    • Redirect HTTP to HTTPS by default - Yes
  • Actions upon server and user creation
    • From: address for email sent by Virtualmin - (optional)
    • Check Apache configuration before applying - Yes
    • Add users with no SSH access to deniedssh group - Yes
  • Spam filtering options
    • Default delivery for spam - Other file or email address - $HOME/Maildir/.spam/
    • Default delivery for viruses - kann man entweder auf "delete" lassen oder auf $HOME/Maildir/.virus/ stellen

Virtualmin Server Template

Nun erstellt man ein eigenes Server Template (Virtualmin -> System Settings -> Server Templates -> Create a template from the default settings)

  • Basic settings and usage
    • Template name - einen Templatenamen einegeben (z.b. PMJ Rocks)
    • For use by - Alle auswählen
    • Initially selected template for top-level servers - Yes
    • Initially selected template for sub-servers - Yes
  • Administration user
    • Initial Unix shell - Email, FTP and SSH
  • Home directory
    • Skeleton directory for files - None
    • Directories to exclude from backups - From default settings
  • Mail for domain
    Die meisten Dinge hier können nach eigenem Ermessen konfiguriert werden. Ich empfehle jedoch folgende Einstellungen:
    • Mail aliases for new domains - None
    • Format for usernames that include domain - username@domain (sollte unbedingt so gesetzt werden da es sonst Probleme mit den Emails geben kann)
  • Website for domain
    • Directives and settings for new websites - Hier müssen alle "allow from all" durch "Require all granted" ersetzt werden
    • Allow server-side includes by default - No
    • Configure Dovecot to use same SSL cert - No (bin mir nicht mehr sicher, aber Yes kann Probleme verursachen auf einem Server mit nur einer IP)
    • Configure Postfix to use same SSL cert - No (bin mir nicht mehr sicher, aber Yes kann Probleme verursachen auf einem Server mit nur einer IP)
  • Log file rotation
    • Share logrotate configuration with all domains - No
  • MariaDB database
    • Default database name - ${DOM}
    • Prefix for additional databases - ${DOM}_
    • Default database character set - utf8
    • Default database collation order - utf8_bin
  • Spam filtering
    • Create spamtrap and hamtrap aliases - Yes
  • PHP options
    • Default PHP execution mode - FCGId
    • Default FCGId PHP sub-processes - None
    • Template PHP 7.3 configuration file - /opt/php/php7.3.31/php.ini
    • Template PHP 7.4 configuration file - /etc/php7/fastcgi/php.ini
    • PHP configuration variables for scripts - None
  • Administrator's Webmin modules
    • BIND DNS Server (for DNS domain) - No
    • Webalizer Logfile Analysis (for website's logs) - No

Virtualmin Account Plan

Nun muss man noch einen Account Plan erstellen oder den default bearbeiten (Virtualmin -> System Settings -> Acount Plans)
Wichtig ist nur die Einstellung "Can choose database names" auf "Yes" zu lassen, da sonst beim erstellen einer neuen Datenbank den Namen nicht selbst bestimmen kann!