Der perfekte Server CentOS 7.6 mit Apache, PHP 7.2, Postfix, Dovecot, Pure-FTPD, BIND und ISPConfig 3.1

Dieses Tutorial zeigt die Installation von ISPConfig 3.1 auf einem CentOS 7.6 (64Bit)-Server. ISPConfig ist ein Webhosting-Control-Panel, mit dem Sie die folgenden Dienste über einen Webbrowser konfigurieren können: Apache-Webserver, PHP 7.2, Postfix-Mailserver, MySQL, BIND-Nameserver, PureFTPd, SpamAssassin, ClamAV, Mailman und viele mehr.

1 Anforderungen

Um ein solches System zu installieren, benötigen Sie folgendes:

  • Ein Centos 7.6 minimales Server-System. Dies kann ein von Grund auf neu installierter Server sein, wie in unserem Centos 7 Minimal-Server-Tutorial beschrieben, oder ein virtueller Server oder Root-Server von einer Hosting-Firma, die ein minimales Centos 7.6-Setup installiert hat.
  • Eine schnelle Internetverbindung.

2 Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.0.100 und dem Gateway 192.168.0.1. Diese Einstellungen können sich für Sie unterscheiden, so dass Sie sie gegebenenfalls ersetzen müssen.

3 Bereiten Sie den Server vor

Legen Sie das Tastaturlayout fest

Für den Fall, dass das Tastaturlayout des Servers nicht mit Ihrer Tastatur übereinstimmt, können Sie mit dem Befehl localectl auf die richtige Tastatur umschalten (in meinem Fall „de“ für ein deutsches Tastaturlayout):

localectl set-keymap de

Um eine Liste aller verfügbaren Tastaturbelegungen zu erhalten, starten Sie:

localectl list-keymaps

Ich möchte ISPConfig am Ende dieses Tutorials installieren, ISPConfig wird mit dem Bastille-Firewall-Skript ausgeliefert, das ich als Firewall verwenden werde, daher deaktiviere ich jetzt die Standard-CentOS-Firewall. Natürlich steht es Ihnen frei, die CentOS-Firewall eingeschaltet zu lassen und sie nach Ihren Bedürfnissen zu konfigurieren (aber dann sollten Sie später keine andere Firewall verwenden, da sie höchstwahrscheinlich die CentOS-Firewall stören wird).

Ausführen…

yum -y install net-tools
systemctl stop firewalld.service
systemctl disable firewalld.service

um die CentOS-Firewall zu stoppen und zu deaktivieren. Es ist in Ordnung, wenn Sie hier Fehler erhalten, dies zeigt nur an, dass die Firewall nicht installiert wurde.

Dann sollten Sie überprüfen, ob die Firewall wirklich deaktiviert wurde. Führen Sie dazu den Befehl aus:

iptables -L

Die Ausgabe sollte wie folgt aussehen:

[root@server1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Oder verwenden Sie den Befehl firewall-cmd:

firewall-cmd --state
[root@server1 ~]# firewall-cmd --state
not running
[root@server1 ~]#

Nun werde ich den Netzwerkkonfigurations-Editor und den Shell-basierten Editor „nano“ installieren, die ich in den nächsten Schritten zur Bearbeitung der Konfigurationsdateien verwenden werde:

yum -y install nano wget NetworkManager-tui yum-utils

Falls Sie Ihre Netzwerkkarte während der Installation nicht konfiguriert haben, können Sie das jetzt tun. Starten Sie…

nmtui

… und gehen Sie auf Verbindung bearbeiten:

Wählen Sie Ihre Netzwerkschnittstelle aus:

Geben Sie dann Ihre Netzwerkdetails ein – deaktivieren Sie DHCP und geben Sie eine statische IP-Adresse, eine Netzmaske, Ihr Gateway und ein oder zwei Nameserver ein, dann drücken Sie Ok:

Wählen Sie dann OK, um die Änderungen zu bestätigen, die Sie in den Netzwerkeinstellungen vorgenommen haben.

und Quit, um das Netzwerkkonfigurationswerkzeug nmtui zu schließen.

Beenden Sie nmtui

Sie sollten

ifconfig

Jetzt können Sie überprüfen, ob der Installer Ihre IP-Adresse richtig eingegeben hat:

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
 inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255
 inet6 fe80::20c:29ff:fee5:5b47 prefixlen 64 scopeid 0x20<link>
 inet6 2003:c2:9731:a445:20c:29ff:fee5:5b47 prefixlen 64 scopeid 0x0<global>
 ether 00:0c:29:e5:5b:47 txqueuelen 1000 (Ethernet)
 RX packets 227784 bytes 317714901 (302.9 MiB)
 RX errors 0 dropped 0 overruns 0 frame 0
 TX packets 205574 bytes 23608521 (22.5 MiB)
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@localhost ~]#

Wenn Ihre Netzwerkkarte dort nicht auftaucht, dann ist sie beim Booten nicht aktiviert. In diesem Fall öffnen Sie die Datei /etc/sysconfig/network-scripts/ifcfg-eth0

nano /etc/sysconfig/network-scripts/ifcfg-ens33

und setzen Sie ONBOOT auf „yes“:

[...]
ONBOOT=yes
[...]

und starten Sie den Server neu.

Überprüfen Sie Ihre /etc/resolv.conf, ob sie alle Nameserver auflistet, die Sie zuvor konfiguriert haben:

cat /etc/resolv.conf

Wenn Nameserver fehlen, führen Sie aus

nmtui

und die fehlenden Nameserver wieder hinzufügen.

Nun, weiter zur Konfiguration…

Anpassen von /etc/hosts und /etc/hostname

Als nächstes werden wir /etc/hosts bearbeiten. Lassen Sie es so aussehen:

nano /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100   server1.example.com     server1

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

Legen Sie den Hostnamen in der Datei /etc/hostname fest. Die Datei muss den voll qualifizierten Domänennamen enthalten (z.B. server1.example.com in meinem Fall) und nicht nur den Kurznamen wie „server1“. Öffnen Sie die Datei mit dem Nano-Editor:

nano /etc/hostname

Und setzen den Hostnamen in der Datei.

server1.example.com

Speichern Sie die Datei und beenden Sie nano.

SELinux auf freizügig setzen

SELinux ist eine Sicherheitserweiterung von CentOS, die erweiterte Sicherheit bieten soll. ISPConfig wird nicht mit einem SELinux-Regelsatz ausgeliefert, daher habe ich ihn auf permissiv gesetzt (dies ist ein Muss, wenn Sie ISPConfig später installieren wollen).

Bearbeiten Sie /etc/selinux/config und setzen Sie SELINUX=permissive:

nano /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Danach müssen wir das System neu starten:

reboot

4 Aktivieren Sie zusätzliche Repositories und installieren Sie einige Software

Zuerst importieren wir die GPG-Schlüssel für Softwarepakete:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Dann aktivieren wir das EPEL-Repository auf unserem CentOS-System, da viele der Pakete, die wir im Laufe dieses Tutorials installieren werden, nicht im offiziellen CentOS-7-Repository verfügbar sind:

yum -y install epel-release

Dann aktualisieren wir unsere bestehenden Pakete auf dem System:

yum -y update

Jetzt installieren wir einige Softwarepakete, die später benötigt werden:

yum -y groupinstall 'Development Tools'

5 Quote

(Wenn Sie ein anderes Partitionierungsschema als ich gewählt haben, müssen Sie dieses Kapitel so anpassen, dass Quota für die Partitionen gilt, auf denen Sie es benötigen).

Um Quota zu installieren, führen wir diesen Befehl aus:

yum -y install quota

Nun prüfen wir, ob Quota für das Dateisystem, in dem die Website (/var/www) und die maildir-Daten (var/vmail) gespeichert sind, bereits aktiviert ist. In diesem Beispielsetup habe ich eine große Root-Partition, also suche ich nach ‚ / ‚:

mount | grep ' / '
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#

Wenn Sie eine separate /var-Partition haben, dann verwenden Sie

mount | grep ' /var '

stattdessen. Wenn die Zeile das Wort „noquota“ enthält, dann fahren Sie mit den folgenden Schritten fort, um die Quote zu aktivieren.

Quota auf der / (root)-Partition aktivieren

Normalerweise würden Sie Quota in der Datei /etc/fstab aktivieren, aber wenn das Dateisystem das Root-Dateisystem „/“ ist, dann muss Quota durch einen Boot-Parameter des Linux-Kernels aktiviert werden.

Bearbeiten Sie die grub-Konfigurationsdatei:

nano /etc/default/grub

Suchen Sie nach der Zeile, die mit GRUB_CMDLINE_LINUX beginnt, und fügen Sie rootflags=uquota,gquota zu den Kommandozeilenparametern hinzu, so dass die resultierende Zeile wie folgt aussieht:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet rootflags=uquota,gquota"

und wenden Sie die Änderungen an, indem Sie den folgenden Befehl ausführen.

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg

und starten den Server neu.

reboot

Prüfen Sie nun, ob Quota aktiviert ist:

mount | grep ' / '
[root@server1 ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#

Wenn quota aktiv ist, können wir „usrquota,grpquota“ in der Liste der Mount-Optionen sehen.

Aktivieren von Quoten auf einer separaten /var-Partition

Wenn Sie eine separate /var-Partition haben, dann editieren Sie /etc/fstab und fügen Sie der /-Partition (/dev/mapper/centos-var) ,uquota,gquota hinzu:

nano /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sun Sep 21 16:33:45 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        1 1
/dev/mapper/centos-var /var                     xfs     defaults,uquota,gquota        1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot                   xfs     defaults        1 3
/dev/mapper/centos-swap swap                    swap    defaults        0 0

Führen Sie dann

mount -o remount /var
quotacheck -avugm
quotaon -avug

um die Quote zu aktivieren. Wenn Sie die Fehlermeldung erhalten, dass es keine Partition mit aktivierter Quota gibt, dann starten Sie den Server neu, bevor Sie fortfahren.

6 Apache, PHP, MySQL und phpMyAdmin installieren

Aktivieren Sie das Remi-Repository, um neuere PHP-Versionen zu erhalten:

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php72

Wir können die benötigten Pakete mit einem einzigen Befehl installieren:

yum -y install ntp httpd mod_ssl mariadb-server php php-mysql php-mbstring phpmyadmin

Um sicherzustellen, dass der Server nicht durch die HTTPOXY-Schwachstelle angegriffen werden kann, werden wir den HTTP_PROXY-Header in Apache global deaktivieren.

Fügen Sie die Apache-Header-Regel am Ende der Datei httpd.conf hinzu:

echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf

Und starten Sie httpd neu, um die Konfigurationsänderung zu übernehmen.

service httpd restart

7 Dovecot installieren

Dovecot kann wie folgt installiert werden:

yum -y install dovecot dovecot-mysql dovecot-pigeonhole

Erstellen Sie eine leere Datei dovecot-sql.conf und legen Sie Symlinks an:

touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf

Erstellen Sie nun die Systemstart-Verknüpfungen und starten Sie Dovecot:

systemctl enable dovecot
systemctl start dovecot

8 Postfix installieren

Postfix kann wie folgt installiert werden:

yum -y install postfix

Schalten Sie dann Sendmail aus und starten Sie Postfix und MariaDB (MySQL):

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.service

Wir deaktivieren sendmail, um sicherzustellen, dass es nicht gestartet wird, falls es auf Ihrem Server installiert ist. Daher wird die Fehlermeldung „Failed to issue method call: Einheit sendmail.service nicht geladen“ kann ignoriert werden.

9 Getmail installieren

Getmail kann wie folgt installiert werden:

yum -y install getmail

10 MySQL-Passwörter setzen und phpMyAdmin konfigurieren

Legen Sie Passwörter für den MySQL-Root-Account fest:

mysql_secure_installation
[root@server1 tmp]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]

 <-- ENTER
New password: <-- yourrootsqlpassword
Re-enter new password: <-- yourrootsqlpassword
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]

 <-- ENTER
 ... Success!

Normally, root should only be allowed to connect from ‚localhost‘.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]

 <-- ENTER
 ... Success!

By default, MariaDB comes with a database named ‚test‘ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]

 <-- ENTER
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]

 <-- ENTER
 ... Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

[root@server1 tmp]#

Jetzt konfigurieren wir phpMyAdmin. Wir ändern die Apache-Konfiguration so, dass phpMyAdmin Verbindungen nicht nur von localhost aus zulässt (indem wir die rot markierten Zeilen auskommentieren):

nano /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
  #  <RequireAny>
     #  Require ip 127.0.0.1
     #  Require ip ::1
  #  </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

Als nächstes ändern wir die Authentifizierung in phpMyAdmin von Cookie auf http:

nano /etc/phpMyAdmin/config.inc.php
[...]
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]

Dann erstellen wir die Systemstart-Verknüpfungen für den Apache und starten ihn:

systemctl enable  httpd.service
systemctl restart  httpd.service

Jetzt können Sie Ihren Browser auf http://server1.example.com/phpmyadmin/ oder http://192.168.0.100/phpmyadmin/ verweisen und sich mit dem Benutzernamen root und Ihrem neuen root-MySQL-Passwort anmelden.

11 Installieren Sie Amavisd-neu, SpamAssassin, ClamAV und Postgrey

Um amavisd-new, SpamAssassin und ClamAV zu installieren, führen Sie den folgenden Befehl aus:

yum -y install amavisd-new spamassassin clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd unzip bzip2 perl-DBD-mysql postgrey re2c

Dann starten wir freshclam, amavisd und clamd.amavisd:

sa-update
freshclam
systemctl enable amavisd.service
systemctl start amavisd.service
systemctl start clamd@amavisd.service
systemctl enable postgrey.service
systemctl start postgrey.service

12 Installation von Apache mit mod_php, mod_fcgi/PHP, PHP-FPM

ISPConfig 3 erlaubt Ihnen die Verwendung von mod_php, mod_fcgi/PHP, cgi/PHP und PHP-FPM auf einer Pro-Website Basis.

Wir können Apache2 mit mod_php, mod_fcgid und PHP wie folgt installieren:

yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel php-fpm php-intl php-imagick php-pspell wget

Als nächstes öffnen wir /etc/php.ini

nano /etc/php.ini

… und ändern Sie den Fehlerbericht (so dass keine Hinweise mehr angezeigt werden), setzen Sie die Zeitzone und kommentieren Sie cgi.fix_pathinfo=1 aus:

[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PAppp.tldTH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]
date.timezone = 'Europe/Berlin'
[...]

Aktivieren Sie httpd und PHP-FPM, um zur Boot-Zeit zu starten und den PHP-FPM-Dienst zu starten.

systemctl start php-fpm.service
systemctl enable php-fpm.service
systemctl enable httpd.service

Abschließend starten wir Apache neu:

systemctl restart httpd.service

Jetzt werden wir Unterstützung für Let’s encrypt hinzufügen.

mkdir /opt/certbot
cd /opt/certbot
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto

Führen Sie nun den Befehl certbot-auto aus, der die Software und ihre Abhängigkeiten herunterlädt und installiert.

./certbot-auto

Der Befehl teilt Ihnen dann mit, dass „keine Namen in Ihren Konfigurationsdateien gefunden wurden“ und fragt, ob er fortgesetzt werden soll. Bitte wählen Sie „c“, um hier abzubrechen, da die Zertifikate von ispconfig erstellt werden.

Installieren Sie certbot auf CentOS

13 Installation von mod_python

Das Apache-Modul mod_python ist nicht als RPM-Paket verfügbar, daher werden wir es aus den Quellen kompilieren. Der erste Schritt besteht darin, die Python-Entwicklungsdateien zu installieren und die aktuelle mod_python-Version als .tar.gz-Datei herunterzuladen

yum -y install python-devel
cd /usr/local/src/
wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz
tar xfz mod_python-3.5.0.tgz
cd mod_python-3.5.0

und dann das Modul konfigurieren und kompilieren.

./configure
make

Es gibt einen Fehler im kompilierten Modul, der die Installation mit dem Fehler „version = „fatal: Not a git repository (or any of the parent directories): .git“ fehlschlagen lässt. Um das zu beheben, führen Sie diesen sed-Befehl aus (der Befehl ist eine Zeile!).

sed -e 's/(git describe --always)/(git describe --always 2>\/dev\/null)/g' -e 's/`git describe --always`/`git describe --always 2>\/dev\/null`/g' -i $( find . -type f -name Makefile\* -o -name version.sh )

Installieren Sie dann das Modul mit diesem Befehl.

make install

und aktivieren Sie das Modul in Apache:

echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf
systemctl restart httpd.service

14 PureFTPd installieren

PureFTPd kann mit dem folgenden Befehl installiert werden:

yum -y install pure-ftpd

Erstellen Sie dann die System-Startup-Links und starten Sie PureFTPd:

systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service

Nun konfigurieren wir PureFTPd, um FTP- und TLS-Sitzungen zuzulassen. FTP ist ein sehr unsicheres Protokoll, da alle Passwörter und alle Daten im Klartext übertragen werden. Durch die Verwendung von TLS kann die gesamte Kommunikation verschlüsselt werden, wodurch FTP wesentlich sicherer wird.

OpenSSL wird von TLS benötigt; um OpenSSL zu installieren, führen wir es einfach aus:

yum install openssl

Öffnen Sie /etc/pure-ftpd/pure-ftpd.conf

nano /etc/pure-ftpd/pure-ftpd.conf

Wenn Sie FTP- und TLS-Sitzungen erlauben wollen, setzen Sie TLS auf 1, indem Sie das # vor der TLS-Zeile entfernen. Es wird dringend empfohlen, TLS zu aktivieren.

[...]
# This option can accept three values :
# 0 : disable SSL/TLS encryption layer (default).
# 1 : accept both traditional and encrypted sessions.
# 2 : refuse connections that don't use SSL/TLS security mechanisms,
#     including anonymous sessions.
# Do _not_ uncomment this blindly. Be sure that :
# 1) Your server has been compiled with SSL/TLS support (--with-tls),
# 2) A valid certificate is in place,
# 3) Only compatible clients will log in.

TLS                      1
[...]

Um TLS verwenden zu können, müssen wir ein SSL-Zertifikat erstellen. Ich erstelle es in /etc/ssl/private/, daher lege ich dieses Verzeichnis zuerst an:

mkdir -p /etc/ssl/private/

Anschliessend können wir das SSL-Zertifikat wie folgt generieren:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Name des Landes (2-Buchstaben-Code) [XX]: <– Geben Sie Ihren Ländernamen ein (z.B. „DE“).
Name des Bundesstaates oder der Provinz (vollständiger Name) []:
<– Geben Sie Ihren Staats- oder Provinznamen ein.
Name des Ortes (z.B. Stadt) [Standard-Stadt]:
<– Geben Sie Ihre Stadt ein.
Name der Organisation (z.B. Firma) [Standardfirma Ltd]: &lt;– Geben Sie Ihre Stadt ein:
<– Geben Sie den Namen Ihrer Organisation ein (z.B. den Namen Ihrer Firma).
Name der Organisationseinheit (z.B. die Sektion) []:
<– Geben Sie den Namen Ihrer Organisationseinheit ein (z.B. „IT-Abteilung“).
Common Name (z.B. Ihr Name oder der Hostname Ihres Servers) []:
<– Geben Sie den vollqualifizierten Domänennamen des Systems ein (z.B. „server1.example.com“).
E-Mail-Adresse []:
<– Geben Sie Ihre E-Mail-Adresse ein.

Ändern Sie die Berechtigungen des SSL-Zertifikats:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Erstellen Sie eine DHParam-Datei:

openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048

Starten Sie abschließend PureFTPd neu:

systemctl restart pure-ftpd.service

Das war’s schon. Sie können nun versuchen, eine Verbindung mit Ihrem FTP-Client herzustellen; Sie sollten Ihren FTP-Client jedoch so konfigurieren, dass er TLS verwendet.

15 BIND installieren

Wir können BIND wie folgt installieren:

yum -y install bind bind-utils haveged

Machen Sie ein Backup der bestehenden Datei /etc/named.conf und erstellen Sie eine neue Datei wie folgt:

cp /etc/named.conf /etc/named.conf_bak
cat /dev/null > /etc/named.conf
nano /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
				allow-recursion {"none";};
        recursion no;
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.conf.local";

Erstellen Sie die Datei /etc/named.conf.local, die am Ende von /etc/named.conf eingebunden ist (/etc/named.conf.local wird später von ISPConfig aufgefüllt, wenn Sie DNS-Zonen in ISPConfig erstellen):

touch /etc/named.conf.local

Dann erstellen wir die Startlinks und starten BIND:

systemctl enable named.service
systemctl start named.service
systemctl enable haveged.service
systemctl start haveged.service

16 Webalizer und AWStats installieren

AWStats kann wie folgt installiert werden:

yum -y install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder

Bearbeiten Sie die Datei /etc/httpd/conf.d/awstats.conf:

nano /etc/httpd/conf.d/awstats.conf

und ändern Sie die Zeile:

Require local

an:

Require all granted

und starten Sie Apache neu:

systemctl restart httpd.service

17 Jailkit installieren

Jailkit wird zum Chrooten von SSH-Benutzern und Cronjobs verwendet. Es kann wie folgt installiert werden:

cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz
tar xvfz jailkit-2.20.tar.gz
cd jailkit-2.20
./configure
make
make install
cd ..
rm -rf jailkit-2.20*

18 Fail2Ban installieren

Dies ist optional, wird aber empfohlen, da der ISPConfig-Monitor versucht, das Protokoll anzuzeigen.

yum -y install iptables-services fail2ban fail2ban-systemd
systemctl stop firewalld.service
systemctl mask firewalld.service
systemctl disable firewalld.service
systemctl stop firewalld.service

Als nächstes erstellen wir die Datei /etc/fail2ban/jail.local und aktivieren die Überwachung für ssh, E-Mail und ftp-Dienst.

nano /etc/fail2ban/jail.local

Fügen Sie den folgenden Inhalt zur Datei jail.local hinzu:

[sshd]
enabled = true
action = iptables[name=sshd, port=ssh, protocol=tcp]

[pure-ftpd]
enabled = true
action = iptables[name=FTP, port=ftp, protocol=tcp]
maxretry = 3

[dovecot]
enabled = true
action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]
maxretry = 5

[postfix-sasl]
enabled = true
action = iptables-multiport[name=postfix-sasl, port="smtp,smtps,submission", protocol=tcp]
maxretry = 3

Erstellen Sie dann die Systemstart-Links für fail2ban und starten Sie das System:

systemctl enable fail2ban.service
systemctl start fail2ban.service

19 rkhunter installieren

rkhunter kann wie folgt installiert werden:

yum -y install rkhunter

20 Mailman installieren

Wenn Sie Mailinglisten mit Mailman auf Ihrem Server verwalten möchten, dann installieren Sie Mailman jetzt. Mailman wird von ISPConfig unterstützt, so dass Sie später in der Lage sein werden, neue Mailinglisten über ISPConfig zu erstellen.

yum -y install mailman

Bevor wir Mailman starten können, muss eine erste Mailingliste namens mailman eingerichtet werden:

touch /var/lib/mailman/data/aliases
postmap /var/lib/mailman/data/aliases
/usr/lib/mailman/bin/newlist mailman
ln -s /usr/lib/mailman/mail/mailman /usr/bin/mailman

[root@server1 tmp]# /usr/lib/mailman/bin/newlist mailman Geben Sie die E-Mail-Adresse
der Person ein, die die Liste betreibt: <– Admin-E-Mail-Adresse, z.B. listadmin@example.
com
Ursprüngliches Briefträger-Passwort:<– Admin-Passwort für die Mailman-Liste Um die Erstellung Ihrer Mailingliste abzuschließen,
müssen SieIhre Datei /etc/aliases (oder gleichwertig
), indem Sie die folgenden Zeilen hinzufügen und möglicherweise das Programm `newaliases‘ ausführen:

## mailman mailing list mailman: “
|/usr/usr/lib/mailman/mail/mailman post mailman“ mailman-admin:“|/usr/usr/lib/mailman/mail/mailman admin mailman“ mailman-bounces: „|/usr/lib/mailman/mailman/mail/mailman admin mailman“ mailman-bounces:“|/usr/lib/mailman/mail/mail/mailman bounces mailman“ mailman-bestätigen: „|/usr/lib/mailman/mail/mail/mailman
confirm mailman“ mailman-join:“|/usr/usr/lib/mailman/mail/mailman join mailman“ mailman-belassen:|/usr/lib/lib/mailman/mail/mailman leave mailman“ Briefträger-Eigentümer:“|/usr/lib/mailman/mail/mailman/mailman owner mailman“ Briefträger-Anfrage: „|/usr/lib/mailman/mailman/mailman owner mailman“:“|/usr/lib/mailman/mail/mailman request mailman“ mailman-subscribe: „|/usr/lib/mailman/mail/mail/mailman
subscribe mailman“ mailman-abbestellen:“|/usr/lib/mailman/mail/mailman unsubscribe mailman“ Drücken Sie die Eingabetaste, um den Eigentümer des Postboten zu benachrichtigen

…. <– ENTER [root@server1

tmp]#

Öffnen Sie anschließend /etc/aliases

nano /etc/aliases

… und die folgenden Zeilen hinzufügen:

[...]
mailman:              "|/usr/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/usr/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/usr/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/usr/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/usr/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/usr/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/usr/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/usr/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/usr/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/usr/lib/mailman/mail/mailman unsubscribe mailman"

Führen Sie aus.

newaliases

danach und starten Sie Postfix neu:

systemctl restart postfix.service

Öffnen Sie nun die Mailman-Apache-Konfigurationsdatei /etc/httpd/conf.d/mailman.conf

nano /etc/httpd/conf.d/mailman.conf

… und fügen Sie die Zeile ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/ hinzu. Kommentieren Sie den Alias /pipermail/ /var/lib/mailman/archives/public/ aus und fügen Sie die Zeile Alias /pipermail /var/lib/mailman/archives/public/ hinzu:

#
#  httpd configuration settings for use with mailman.
#

ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/
<Directory /usr/lib/mailman/cgi-bin/>
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>


#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/
<Directory /var/lib/mailman/archives/public>
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AddDefaultCharset Off
</Directory>

# Uncomment the following line, to redirect queries to /mailman to the
# listinfo page (recommended).

# RedirectMatch ^/mailman[/]*$ /mailman/listinfo

Starten Sie Apache neu:

systemctl restart httpd.service

Erstellen Sie die Systemstart-Verknüpfungen für Mailman und starten Sie ihn:

systemctl enable mailman.service
systemctl start mailman.service

Nachdem Sie ISPConfig 3 installiert haben, können Sie wie folgt auf Mailman zugreifen:

Sie können den Alias /cgi-bin/mailman für alle Apache-Hosts verwenden (bitte beachten Sie, dass suExec und CGI für alle vhosts, von denen aus Sie auf Mailman zugreifen wollen, deaktiviert sein müssen!), was bedeutet, dass Sie auf die Mailman-Administrationsschnittstelle für eine Liste unter http://<vhost>/cgi-bin/mailman/admin/<listname> zugreifen können. Die Webseite für Benutzer einer Mailingliste finden Sie unter http://<vhost>/cgi-bin/mailman/listinfo/<listname>.

Unter http://<vhost>/pipermail/<listname> finden Sie die Archive der Mailingliste.

Das könnte dich auch interessieren …