Server Setup · 12 min read · Oct 30, 2025

Il Server Perfetto CentOS 7.6 con Apache, PHP 7.2, Postfix, Dovecot, Pure-FTPD, BIND e ISPConfig 3.1 - Pagina 2

7 Installa Dovecot

Dovecot può essere installato come segue:

yum -y install dovecot dovecot-mysql dovecot-pigeonhole

Crea un file dovecot-sql.conf vuoto e crea symlink:

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

Ora crea i link di avvio del sistema e avvia Dovecot:

systemctl enable dovecot  
systemctl start dovecot

8 Installa Postfix

Postfix può essere installato come segue:

yum -y install postfix

Poi disabilita Sendmail e avvia Postfix e 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

Disabilitiamo sendmail per assicurarci che non venga avviato nel caso sia installato sul tuo server. Quindi il messaggio di errore “Failed to issue method call: Unit sendmail.service not loaded.” può essere ignorato.

9 Installa Getmail

Getmail può essere installato come segue:

yum -y install getmail

10 Imposta le Password di MySQL e Configura phpMyAdmin

Imposta le password per l’account root di MySQL:

mysql_secure_installation
[root@server1 tmp]# mysql_secure_installation  
  
NOTE: E' RACCOMANDATO ESEGUIRE TUTTE LE PARTI DI QUESTO SCRIPT PER TUTTI I SERVER MariaDB  
IN USO IN PRODUZIONE! PER FAVORE LEGGI ATTENTAMENTE OGNI PASSO!
Per accedere a MariaDB per metterlo in sicurezza, avremo bisogno della password attuale  
per l'utente root. Se hai appena installato MariaDB, e  
non hai ancora impostato la password root, la password sarà vuota,  
quindi dovresti semplicemente premere invio qui.
Inserisci la password attuale per root (invio per nessuna):  
OK, password utilizzata con successo, procedendo...
Impostare la password root assicura che nessuno possa accedere all'utente root di MariaDB  
senza la corretta autorizzazione.  
Impostare la password root? [Y/n] <-- INVIO  
Nuova password: <-- yourrootsqlpassword  
Reinserire la nuova password: <-- yourrootsqlpassword  
Password aggiornata con successo!  
Ricaricamento delle tabelle di privilegio..  
 ... Success!  
  
Per impostazione predefinita, un'installazione di MariaDB ha un utente anonimo, che consente a chiunque  
di accedere a MariaDB senza dover avere un account utente creato per  
loro. Questo è inteso solo per test, e per rendere l'installazione  
più fluida. Dovresti rimuoverli prima di passare a un  
ambiente di produzione.  

Rimuovere gli utenti anonimi? [Y/n] <-- INVIO  
 ... Success!  

Normalmente, root dovrebbe essere autorizzato a connettersi  
solo da 'localhost'.  Questo  
assicura che qualcuno non possa indovinare  
la password root dalla rete.  

Negare l'accesso remoto a root? [Y/n] <-- INVIO  
 ... Success!  

Per impostazione predefinita, MariaDB viene fornito con un database chiamato 'test' a cui chiunque può  
accedere. Questo è anche inteso solo per test, e dovrebbe essere rimosso  
prima di passare a un ambiente di produzione.  

Rimuovere il database di test e l'accesso ad esso? [Y/n] <-- INVIO  
- Rimozione del database di test...  
 ... Success!  
- Rimozione dei privilegi sul database di test...  
 ... Success!  

Ricaricare le tabelle di privilegio assicurerà che  
tutte le modifiche effettuate finora  
entreranno in vigore immediatamente.  

Ricaricare le tabelle di privilegio ora? [Y/n] <-- INVIO  
 ... Success!  

Pulizia...  
  
Tutto fatto! Se hai completato tutti i passaggi sopra, la tua installazione di MariaDB  
dovrebbe ora essere sicura.  

Grazie per aver utilizzato MariaDB!  

[root@server1 tmp]#

Ora configuriamo phpMyAdmin. Cambiamo la configurazione di Apache in modo che phpMyAdmin consenta connessioni non solo da localhost (commentando le righe contrassegnate in rosso):

nano /etc/httpd/conf.d/phpMyAdmin.conf
# phpMyAdmin - Browser MySQL basato sul web scritto in php
#
# Consente solo localhost per impostazione predefinita
#
# Ma consentire phpMyAdmin a chiunque altro oltre a localhost dovrebbe essere considerato
# pericoloso a meno che non sia adeguatamente protetto da SSL

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


   
     # Apache 2.4
  #  
     #  Require ip 127.0.0.1
     #  Require ip ::1
  #  
   
   
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   

            

Successivamente, cambiamo l’autenticazione in phpMyAdmin da cookie a http:

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

Poi creiamo i link di avvio del sistema per Apache e lo avviamo:

systemctl enable  httpd.service  
systemctl restart  httpd.service

Ora puoi indirizzare il tuo browser a http://server1.example.com/phpmyadmin/ o http://192.168.0.100/phpmyadmin/ e accedere con il nome utente root e la tua nuova password root di MySQL.

11 Installa Amavisd-new, SpamAssassin, ClamAV e Postgrey

Per installare amavisd-new, SpamAssassin e ClamAV, esegui il seguente comando:

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

Poi avviamo freshclam, amavisd e 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 Installazione di Apache con mod_php, mod_fcgi/PHP, PHP-FPM

ISPConfig 3 ti consente di utilizzare mod_php, mod_fcgi/PHP, cgi/PHP e PHP-FPM su base per sito web.

Possiamo installare Apache2 con mod_php, mod_fcgid e PHP come segue:

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

Successivamente apriamo /etc/php.ini…

nano /etc/php.ini

… e cambiamo la segnalazione degli errori (in modo che le notifiche non vengano più mostrate), impostiamo il fuso orario e decommentiamo cgi.fix_pathinfo=1:

[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
[...]
; cgi.fix_pathinfo fornisce supporto *reale* per PATH_INFO/PATH_TRANSLATED per CGI. PHP's
; il comportamento precedente era impostare PATH_TRANSLATED su SCRIPT_FILENAME, e non comprendere
; cosa sia PATH_INFO. Per ulteriori informazioni su PAppp.tldTH_INFO, vedere le specifiche cgi. Impostare
; questo su 1 farà sì che PHP CGI corregga i suoi percorsi per conformarsi alla specifica. Un'impostazione
; di zero fa sì che PHP si comporti come prima. Il valore predefinito è 1. Dovresti correggere i tuoi script
; per utilizzare SCRIPT_FILENAME piuttosto che PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1  
[...]  
date.timezone = 'Europe/Berlin'
[...]

Abilita httpd e PHP-FPM per avviarsi all’avvio e avvia il servizio PHP-FPM.

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

Infine, riavviamo Apache:

systemctl restart httpd.service

Ora aggiungeremo supporto per Let’s encrypt.

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

Ora esegui il comando certbot-auto che scaricherà e installerà il software e le sue dipendenze.

./certbot-auto

Il comando ti dirà quindi che “nessun nome è stato trovato nei tuoi file di configurazione” e chiede se deve continuare, per favore scegli “c” per annullare qui poiché i certificati saranno creati da ispconfig.

Installa certbot su CentOS

13 Installazione di mod_python

Il modulo Apache mod_python non è disponibile come pacchetto RPM, quindi lo compileremo da sorgente. Il primo passo è installare i file di sviluppo di python e scaricare la versione corrente di mod_python come file .tar.gz

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

e poi configurare e compilare il modulo.

./configure  
make

C’è un errore nel modulo compilato che causerà il fallimento dell’installazione con l’errore “ version = “fatal: Not a git repository (or any of the parent directories): .git “. Per risolvere ciò, esegui questo comando sed (il comando è una sola riga!).

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 )

Poi installa il modulo con questo comando.

make install

e abilita il modulo in Apache:

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

14 Installa PureFTPd

PureFTPd può essere installato con il seguente comando:

yum -y install pure-ftpd

Poi crea i link di avvio del sistema e avvia PureFTPd:

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

Ora configuriamo PureFTPd per consentire sessioni FTP e TLS. FTP è un protocollo molto insicuro perché tutte le password e tutti i dati vengono trasferiti in chiaro. Utilizzando TLS, l’intera comunicazione può essere crittografata, rendendo così FTP molto più sicuro.

OpenSSL è necessario per TLS; per installare OpenSSL, eseguiamo semplicemente:

yum install openssl

Apri /etc/pure-ftpd/pure-ftpd.conf…

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

Se desideri consentire sessioni FTP e TLS, imposta TLS su 1 rimuovendo il # davanti alla riga TLS. È altamente raccomandato abilitare TLS.

[...]
# Questa opzione può accettare tre valori :
# 0 : disabilita il livello di crittografia SSL/TLS (predefinito).
# 1 : accetta sia sessioni tradizionali che crittografate.
# 2 : rifiuta connessioni che non utilizzano meccanismi di sicurezza SSL/TLS,
#     comprese le sessioni anonime.
# Non decommentare questo ciecamente. Assicurati che :
# 1) Il tuo server sia stato compilato con supporto SSL/TLS (--with-tls),
# 2) Un certificato valido sia in atto,
# 3) Solo i client compatibili accederanno.

TLS                      1
[...]

Per utilizzare TLS, dobbiamo creare un certificato SSL. Lo creo in /etc/ssl/private/, quindi creo prima quella directory:

mkdir -p /etc/ssl/private/

Dopo, possiamo generare il certificato SSL come segue:

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

Nome del Paese (codice di 2 lettere) [XX]: <– Inserisci il tuo Nome del Paese (es. “DE”).
Nome dello Stato o della Provincia (nome completo) []: <– Inserisci il Nome del tuo Stato o Provincia.
Nome della Località (es. città) [Default City]: <– Inserisci la tua Città.
Nome dell’Organizzazione (es. azienda) [Default Company Ltd]: <– Inserisci il Nome della tua Organizzazione (es. il nome della tua azienda).
Nome dell’Unità Organizzativa (es. sezione) []: <– Inserisci il Nome della tua Unità Organizzativa (es. “Reparto IT”).
Nome Comune (es. il tuo nome o il nome host del tuo server) []: <– Inserisci il Nome di Dominio Completo del sistema (es. “server1.example.com”).
Indirizzo Email []: <– Inserisci il tuo Indirizzo Email.

Cambia i permessi del certificato SSL:

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

Crea un file DHParam:

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

Infine, riavvia PureFTPd:

systemctl restart pure-ftpd.service

Questo è tutto. Ora puoi provare a connetterti utilizzando il tuo client FTP; tuttavia, dovresti configurare il tuo client FTP per utilizzare TLS.

15 Installa BIND

Possiamo installare BIND come segue:

yum -y install bind bind-utils haveged

Fai un backup del file esistente /etc/named.conf e crea un nuovo file come segue:

cp /etc/named.conf /etc/named.conf_bak  
cat /dev/null > /etc/named.conf  
nano /etc/named.conf
// named.conf
//
// Fornito dal pacchetto bind di Red Hat per configurare il server DNS ISC BIND named(8)
// come nameserver solo in cache (come risolutore DNS localhost solo).
//
// Vedi /usr/share/doc/bind*/sample/ per file di configurazione named di esempio.
//
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";

Crea il file /etc/named.conf.local che è incluso alla fine di /etc/named.conf ( /etc/named.conf.local verrà successivamente popolato da ISPConfig se crei zone DNS in ISPConfig):

touch /etc/named.conf.local

Poi creiamo i link di avvio e avviamo BIND:

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

16 Installa Webalizer e AWStats

AWStats può essere installato come segue:

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

Modifica il file /etc/httpd/conf.d/awstats.conf:

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

e cambia la riga:

Require local

in:

Require all granted

E riavvia apache:

systemctl restart httpd.service

17 Installa Jailkit

Jailkit è utilizzato per chrootare gli utenti SSH e i cronjob. Può essere installato come segue:

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 Installa Fail2Ban

Questo è facoltativo ma raccomandato, perché il monitor di ISPConfig cerca di mostrare il log.

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

Successivamente creiamo il file /etc/fail2ban/jail.local e abilitiamo il monitoraggio per ssh, email e servizio ftp.

nano /etc/fail2ban/jail.local

Aggiungi il seguente contenuto al file jail.local:

[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

Poi crea i link di avvio del sistema per fail2ban e avvialo:

systemctl enable fail2ban.service  
systemctl start fail2ban.service

19 Installa rkhunter

rkhunter può essere installato come segue:

yum -y install rkhunter

20 Installa Mailman

Se desideri gestire le liste di distribuzione con Mailman sul tuo server, installa ora mailman. Mailman è supportato da ISPConfig, quindi potrai creare nuove liste di distribuzione tramite ISPConfig in seguito.

yum -y install mailman

Prima di poter avviare Mailman, deve essere creata una prima lista di distribuzione chiamata mailman:

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
Inserisci l’email della persona che gestisce la lista: <– indirizzo email dell’amministratore, es. [email protected]
Password iniziale di mailman: <– password dell’amministratore per la lista mailman
Per completare la creazione della tua lista di distribuzione, devi modificare il tuo
/etc/aliases (o file equivalente) aggiungendo le seguenti righe, e possibilmente eseguendo il
programma newaliases:

lista di distribuzione mailman

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”

Premi invio per notificare il proprietario di mailman… <– INVIO

[root@server1 tmp]#

Apri /etc/aliases dopo…

nano /etc/aliases

… e aggiungi le seguenti righe:

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

Esegui

newaliases

dopo e riavvia Postfix:

systemctl restart postfix.service

Ora apri il file di configurazione di Apache di Mailman /etc/httpd/conf.d/mailman.conf…

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

… e aggiungi la riga ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/. Decommenta Alias /pipermail/ /var/lib/mailman/archives/public/ e aggiungi la riga Alias /pipermail /var/lib/mailman/archives/public/:

#
#  impostazioni di configurazione httpd per l'uso con mailman.
#
ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/

    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all



#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/

    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AddDefaultCharset Off


# Decommenta la seguente riga, per reindirizzare le query a /mailman alla
# pagina listinfo (raccomandato).

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

Riavvia Apache:

systemctl restart httpd.service

Crea i link di avvio del sistema per Mailman e avvialo:

systemctl enable mailman.service  
systemctl start mailman.service

Dopo aver installato ISPConfig 3, puoi accedere a Mailman come segue:

Puoi utilizzare l’alias /cgi-bin/mailman per tutti i vhost Apache (si prega di notare che suExec e CGI devono essere disabilitati per tutti i vhost da cui desideri accedere a Mailman!), il che significa che puoi accedere all’interfaccia di amministrazione di Mailman per una lista su http:///cgi-bin/mailman/admin/, e la pagina web per gli utenti di una lista di distribuzione può essere trovata su http:///cgi-bin/mailman/listinfo/.

Sotto http:///pipermail/ puoi trovare gli archivi delle liste di distribuzione.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.