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
[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]#
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 clamd@amavisd.service 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.
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
root@server1 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. listadmin@example.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 [root@server1
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.