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

7 Taubenschlag installieren

Dovecot kann wie folgt installiert werden:

yum -y install dovecot dovecot-mysql dovecot-pigeonhole

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

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 Systemstartup-Links 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. Die Fehlermeldung „Methodenaufruf konnte nicht ausgegeben werden: Unit sendmail.service not loaded“ kann ignoriert werden.

9 Getmail installieren

Getmail kann wie folgt installiert werden:

yum -y install getmail

10 MySQL-Passwörter setzen und phpMyAdmin konfigurieren

Setzt Passwörter für das MySQL Root-Konto:

mysql_secure_installation
[[email protected] 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!

[[email protected] tmp]#

Nun konfigurieren wir phpMyAdmin. Wir ändern die Apache-Konfiguration so, dass phpMyAdmin Verbindungen nicht nur vom localhost zulässt (indem wir die beiden Zeilen „Require ip“ auskommentieren und die neue Zeile „Require all granted“ im <Directory /usr/share/phpMyAdmin/> stanza hinzufügen):

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
        Require all granted
     </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 Systemstartup-Links für Apache und starten sie:

systemctl enable  httpd.service
systemctl restart  httpd.service

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

11 Amavisd-neu, SpamAssassin, ClamAV und Postgrau installieren

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

Bearbeiten Sie die freshclam-Konfigurationsdatei /etc/freshclam.conf.

nano /etc/freshclam.conf

und überprüfen Sie, ob die Zeile „Beispiel“ wie unten gezeigt auskommentiert ist:

[....]
# Example
[....]

Um automatische ClamAV-Signatur-Updates mit freshclam zu aktivieren, bearbeiten Sie die Datei /etc/sysconfig/freshclam:

nano /etc/sysconfig/freshclam

und setzen Sie ein # vor die letzte Zeile, so dass es so aussieht, falls das noch nicht der Fall ist:

# FRESHCLAM_DELAY=

Dann starten wir freshclam, amavisd und clamd.amavisd:

sa-update
freshclam
systemctl enable amavisd.service
systemctl start amavisd.service
systemctl start [email protected]
systemctl enable postgrey.service
systemctl start postgrey.service

12 Apache installieren mit mod_php, mod_fcgi/PHP, PHP-FPM

ISPConfig 3 ermöglicht es Ihnen, mod_php, mod_fcgi/PHP, cgi/PHP und PHP-FPM auf Webseitenbasis zu verwenden.

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 wget

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

nano /etc/php.ini

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

[...]
;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 beim Booten zu starten und den PHP-FPM-Dienst zu starten.

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

Schließlich starten wir den 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 certboot-auto aus, der die Software und ihre Abhängigkeiten herunterlädt und installiert.

./certbot-auto

Der Befehl meldet Ihnen dann, dass „keine Namen in Ihren Konfigurationsdateien gefunden wurden“ und fragt, ob es weitergehen soll, bitte wählen Sie „c“, um hier abzubrechen, da die Zertifikate von ispconfig erstellt werden.

certbot auf CentOS installieren

13 Installation von mod_python

Das Apache-Modul mod_python ist nicht als RPM-Paket verfügbar, daher werden wir es aus dem Quellcode kompilieren. Der erste Schritt ist die Installation der Python-Entwicklungsdateien und das Herunterladen der aktuellen mod_python-Version als tar.gz-Datei.

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 konfigurieren und kompilieren Sie dann das Modul.

./configure
make

Es gibt einen Fehler im kompilierten Modul, der dazu führt, dass die Installation mit dem Fehler „version = „fatal: Not a git repository (or any of the parent directories): .git“ fehlschlägt. 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 im 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 Systemstartup-Links und starten Sie PureFTPd:

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

Jetzt konfigurieren wir PureFTPd so, dass es FTP- und TLS-Sitzungen erlaubt. FTP ist ein sehr unsicheres Protokoll, da alle Passwörter und Daten im Klartext übertragen werden. Durch den Einsatz von TLS kann die gesamte Kommunikation verschlüsselt werden, wodurch FTP viel sicherer wird.

OpenSSL wird von TLS benötigt; um OpenSSL zu installieren, führen wir 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 zulassen möchten, 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 nutzen zu können, müssen wir ein SSL-Zertifikat erstellen. Ich erstelle es in /etc/ssl/private/, deshalb erstelle ich dieses Verzeichnis:

mkdir -p /etc/ssl/private/

Anschließend können wir das SSL-Zertifikat wie folgt erstellen:

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

Ländername (2-stelliger Code)[XX]: <– Geben Sie Ihren Ländernamen ein (z.B. „DE“).
Name des Staates oder der Provinz (vollständiger Name) []:
<– Geben Sie Ihren Staats- oder Provinztitel ein.
Ortsname (z.B. Stadt)[Standardstadt]:
<– Betrete deine Stadt.
Name des Unternehmens (z.B. Firma)[Default Company Ltd]:
<– Geben Sie Ihren Firmennamen ein (z.B. den Namen Ihrer Firma).
Name der Organisationseinheit (z.B. Abschnitt) []:
<– 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 voll qualifizierten Domainnamen 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 schließlich PureFTPd neu:

systemctl restart pure-ftpd.service

Das ist es. Das ist es. Sie können nun versuchen, eine Verbindung über Ihren FTP-Client herzustellen; Sie sollten jedoch Ihren FTP-Client für die Verwendung von TLS konfigurieren.

15 BIND installieren

Wir können BIND wie folgt installieren:

yum -y install bind bind-utils haveged

Erstellen Sie ein Backup der vorhandenen Datei /etc/named.conf und erstellen Sie eine neue 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 sich am Ende von /etc/named.conf.conf befindet (/etc/named.conf.local wird später von ISPConfig gefüllt, wenn Sie DNS-Zonen in ISPConfig erstellen):

touch /etc/named.conf.local

Dann erstellen wir die Startup-Links 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

zu:

Require all granted

Und starten Sie den Apache neu:

systemctl restart httpd.service

17 Jailkit installieren

Jailkit wird verwendet, um SSH-Benutzer und Cronjobs zu chrooten. Es kann wie folgt installiert werden (wichtig: Jailkit muss vor dem ISPConfig installiert werden – es kann nicht danach installiert werden! ):

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

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

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

Dann erstellen Sie die Systemstartup-Links für fail2ban und starten Sie sie:

mkdir /var/run/fail2ban
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 jetzt mailman. Mailman wird von ISPConfig unterstützt, so dass Sie später neue Mailinglisten über ISPConfig erstellen können.

yum -y install mailman

Bevor wir Mailman starten können, muss eine erste Mailingliste namens mailman erstellt 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

[email protected] tmp]# /usr/lib/mailman/bin/newlist mailman Geben Sie die E-Mail-Adresse
der Person ein, die die Liste ausführt: <– admin E-Mail-Adresse, z.B. [email protected]
com
Initiales Mailman-Passwort:<– Admin-Passwort für die Mailingliste Um die Erstellung Ihrer Mailingliste abzuschließen,
müssen Sie Folgendes bearbeitenIhre /etc/aliases (oder gleichwertige
) Datei, indem Sie die folgenden Zeilen hinzufügen und möglicherweise das Programm `newaliases‘ ausführen: „|/usr/lib/mailman/mail/mail/mailman admin mailman“ mailman-bounces:“|/usr/lib/mailman/mail/mail/mailman join mailman“ mailman-leave:“|/usr/lib/mailman/mail/mail/mail/mailman leave mailman“ mailman-owner:“|/usr/lib/mailman/mail/mail/mail/mailman owner mailman“ mailman-Anfrage:“|/usr/lib/mailman/mail/mail/mailman unsubscribe mailman“ Drücken Sie die Eingabetaste, um den Besitzer des Posters zu benachrichtigen

.... < <– ENTER [[email protected]

tmp]#

Öffnen Sie anschließend /etc/aliases……

nano /etc/aliases

…. und fügen Sie die folgenden Zeilen hinzu:

[...]
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"

Laufen

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/. Kommentieren Sie 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 den Apache neu:

systemctl restart httpd.service

Erstellen Sie die Systemstartup-Links für Mailman und starten Sie es:

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 vhosts verwenden (bitte beachten Sie, dass suExec und CGI für alle vhosts, von denen aus Sie auf Mailman zugreifen möchten, deaktiviert sein müssen!), was bedeutet, dass Sie auf die Mailman-Administrationsschnittstelle für eine Liste unter http://<vhost>/cgi-bin/mailman/mailman/admin/<listname> zugreifen können, und 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 …