Server Setup · 12 min read · Oct 02, 2025

Il Server Perfetto - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)

Il Server Perfetto - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)

Versione 1.0
Autori: Till Brehm, Srijan Kishore e Falko Timme
Segui howtoforge su Twitter

Questo tutorial mostra come preparare un server CentOS 7 x86_64 per l’installazione di ISPConfig 3 e come installare ISPConfig 3 su di esso. ISPConfig 3 è un pannello di controllo per web hosting che ti consente di configurare i seguenti servizi tramite un browser web: server web nginx, server di posta Postfix, MySQL, server di nomi BIND, PureFTPd, SpamAssassin, ClamAV, Mailman e molti altri. Dalla versione 3.0.4, ISPConfig viene fornito con supporto completo per il server web nginx oltre ad Apache; questo tutorial tratta la configurazione di un server che utilizza nginx, non Apache. Il tutorial ISPConfig 3 per il server perfetto apache è disponibile qui.

Manuale di ISPConfig 3

Per imparare a utilizzare ISPConfig 3, ti consiglio vivamente di scaricare il Manuale di ISPConfig 3.

Su circa 300 pagine, copre il concetto alla base di ISPConfig (amministratore, rivenditori, clienti), spiega come installare e aggiornare ISPConfig 3, include un riferimento per tutti i moduli e i campi modulo in ISPConfig insieme a esempi di input validi e fornisce tutorial per i compiti più comuni in ISPConfig 3. Illustra anche come rendere il tuo server più sicuro e include una sezione di risoluzione dei problemi alla fine.

1. Requisiti

Per installare un sistema del genere avrai bisogno dei seguenti

2. Nota Preliminare

In questo tutorial utilizzo il nome host server1.example.com con l’indirizzo IP 192.168.0.100 e il gateway 192.168.0.1. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato. Si prega di installare l’installazione minima di CentOS 7 da questo link del tutorial prima di procedere.

3 Installa l’editor nano e modifica /etc/hosts

yum -y install nano wget

Successivamente modifichiamo /etc/hosts. Fai in modo che appaia così:

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

e imposta il nome host su server1.example.com:

echo ‘server1.example.com’ > /etc/hostname

4 Configura il Firewall e installa alcuni software di rete di base

(Puoi saltare questo capitolo se hai già disabilitato il firewall alla fine dell’installazione del sistema di base.)

Voglio installare ISPConfig alla fine di questo tutorial, che viene fornito con il proprio firewall. Ecco perché disabilito ora il firewall predefinito di CentOS. Naturalmente, sei libero di lasciarlo attivo e configurarlo secondo le tue esigenze (ma in tal caso non dovresti utilizzare alcun altro firewall in seguito poiché interferirà probabilmente con il firewall di CentOS).

Esegui

systemctl stop firewalld.service
systemctl disable firewalld.service

[root@server1 ~]# systemctl disable firewalld.service

rm ‘/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service’

rm ‘/etc/systemd/system/basic.target.wants/firewalld.service’

[root@server1 ~]#

e disabilita il firewall.

Per controllare che il firewall sia stato realmente disabilitato, puoi eseguire

firewall-cmd –state

dopo. L’output dovrebbe apparire così:

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

yum -y install net-tools NetworkManager-tui

5 Disabilita SELinux

SELinux è un’estensione di sicurezza di CentOS che dovrebbe fornire una sicurezza estesa. A mio parere, non ne hai bisogno per configurare un sistema sicuro e di solito causa più problemi che vantaggi (pensa a questo dopo aver fatto una settimana di risoluzione dei problemi perché qualche servizio non funzionava come previsto, e poi scopri che tutto andava bene, solo SELinux stava causando il problema). Pertanto, lo disabilito (questo è un must se vuoi installare ISPConfig in seguito).

Modifica /etc/selinux/config e imposta SELINUX=disabled:

nano /etc/selinux/config

# Questo file controlla lo stato di SELinux sul sistema.
# SELINUX= può assumere uno di questi tre valori:
#     enforcing - La politica di sicurezza SELinux è applicata.
#     permissive - SELinux stampa avvisi invece di applicare.
#     disabled - Nessuna politica SELinux è caricata.
SELINUX=disabled
# SELINUXTYPE= può assumere uno di questi due valori:
#     targeted - I processi mirati sono protetti,
#     mls - Protezione Multi Level Security.
SELINUXTYPE=targeted

Dopo dobbiamo riavviare il sistema:

reboot

6 Abilita Repository Aggiuntivi e Installa Alcuni Software

Abiliteremo i repository EPEL sul nostro sistema CentOS poiché molti dei pacchetti che installeremo nel corso di questo tutorial non sono disponibili nei repository ufficiali di CentOS 7.0:

yum -y install epel-release

yum -y install yum-priorities

Modifica /etc/yum.repos.d/epel.repo…

nano /etc/yum.repos.d/epel.repo

… e aggiungi la riga priority=10 alla sezione [epel]:

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[...]  

Poi aggiorniamo i nostri pacchetti esistenti sul sistema:

yum update

Ora installiamo alcuni pacchetti software che sono necessari in seguito:

yum -y groupinstall ‘Development Tools’

7 Quota

(Se hai scelto uno schema di partizionamento diverso dal mio, devi adattare questo capitolo in modo che la quota si applichi alle partizioni di cui hai bisogno.)

Per installare la quota, eseguiamo questo comando:

yum -y install quota

Ora controlliamo se la quota è già abilitata per il filesystem dove sono memorizzati i dati del sito web (/var/www) e del maildir (var/vmail). In questo esempio, ho una grande partizione root, quindi cerco ‘ / ‘:

mount | grep ‘ / ‘

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

Se hai una partizione /var separata, usa:

mount | grep ‘ /var ‘ invece. Se la riga contiene la parola “ noquota “, procedi con i seguenti passaggi per abilitare la quota.

Abilitare la quota sulla partizione / (root)

Normalmente abiliteresti la quota nel file /etc/fstab, ma se il filesystem è il filesystem root “/“, allora la quota deve essere abilitata tramite un parametro di avvio del kernel Linux.

Modifica il file di configurazione grub:

nano /etc/default/grub

cerca la riga che inizia con GRUB_CMDLINE_LINUX e aggiungi rootflags=uquota,gquota ai parametri della riga di comando in modo che la riga risultante appaia così:

[...]  

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=us rhgb quiet rootflags=uquota,gquota"  
[...]  

applica le modifiche eseguendo il seguente comando.

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

riavvia il server.

reboot

Ora controlla se la quota è abilitata:

mount | grep ‘ / ‘

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

Quando la quota è attiva, possiamo vedere “ usrquota,grpquota “ nell’elenco delle opzioni di montaggio.

Abilitare la quota su una partizione /var separata

Se hai una partizione /var separata, modifica /etc/fstab e aggiungi,uquota,gquota alla partizione / ( /dev/mapper/centos-var):

nano /etc/fstab


#
# /etc/fstab
# Creato da anaconda domenica 21 settembre 2014 16:33:45
#
# I filesystem accessibili, per riferimento, sono mantenuti sotto '/dev/disk'
# Vedi le pagine man fstab(5), findfs(8), mount(8) e/o blkid(8) per ulteriori informazioni
#
/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

Poi esegui

mount -o remount /var

quotacheck -avugm
quotaon -avug

per abilitare la quota.

8 Sincronizza L’Orologio Del Sistema

È una buona idea sincronizzare l’orologio di sistema con un server NTP ( n etwork t ime p rotocol) su Internet. Esegui semplicemente

yum -y install ntp

e il tuo orario di sistema sarà sempre sincronizzato.

9 Installa MariaDB

Installeremo MariaDB-server e client come segue:

yum -y install mariadb mariadb-server

Vogliamo che il servizio Mariadb venga eseguito all’avvio e avviare il servizio come:

systemctl enable mariadb.service
systemctl start mariadb.service

Imposta le password per l’account root di MySQL:

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE: È RACCOMANDATO ESEGUIRE TUTTE LE PARTI DI QUESTO SCRIPT PER TUTTI I SERVER MariaDB IN USO PRODUZIONE!  PER FAVORE LEGGI OGNI PASSO ATTENTAMENTE!

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. <–INVIO

Inserisci la password attuale per root (invio per nessuna): <–INVIO
OK, password utilizzata con successo, procedendo…

Impostare la password root garantisce che nessuno possa accedere all’utente root di MariaDB senza la corretta autorizzazione.

Impostare la password root? [Y/n] <–INVIO
Nuova password: <–tuapasswordmariadb
Reinserisci nuova password: <–tuapasswordmariadb
Password aggiornata con successo!
Ricaricamento delle tabelle di privilegi..
… Successo!

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 un po’ più fluida.  Dovresti rimuoverli prima di passare a un ambiente di produzione.

Rimuovere gli utenti anonimi? [Y/n] <–INVIO
… Successo!

Normalmente, l’utente root dovrebbe essere autorizzato a connettersi solo da ‘localhost’.  Questo garantisce che qualcuno non possa indovinare la password root dalla rete.

Disabilitare l’accesso remoto per root? [Y/n] <–INVIO
… Successo!

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

  • Eliminazione del database di test…
    … Successo!
  • Rimozione dei privilegi sul database di test…
    … Successo!

Ricaricare le tabelle di privilegi garantirà che tutte le modifiche apportate finora abbiano effetto immediato.

Ricaricare le tabelle di privilegi ora? [Y/n] <–INVIO
… Successo!

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 ~]#

10 Installa Dovecot

Dovecot può essere installato come segue:

yum -y install dovecot dovecot-pigeonhole dovecot-mysql

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

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

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

systemctl enable dovecot.service
systemctl start dovecot.service

11 Installa Postfix

Postfix può essere installato come segue:

yum -y install postfix

Quindi disattiva Sendmail e avvia Postfix:

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

12 Installa Getmail

Getmail può essere installato come segue:

yum -y install getmail

13 Installa Amavisd-new, SpamAssassin e ClamAV

Per installare amavisd-new, spamassassin e clamav, esegui il seguente comando:

yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 unrar perl-DBD-mysql

Modifica il file di configurazione freshclam /etc/freshclam.conf

nano /etc/freshclam.conf

e commenta la riga “Esempio”

[….]

[….]

Poi avviamo freshclam, amavisd e clamd.amavisd:

sa-update
freshclam
systemctl enable amavisd.service

14 Installa Nginx, PHP5 (PHP-FPM) e Fcgiwrap

Nginx è disponibile come pacchetto per CentOS 7.0 (da EPEL) che possiamo installare come segue:

yum -y install nginx

Se Apache2 è già installato sul sistema, fermalo ora…

systemctl stop httpd.service

… e rimuovi i collegamenti di avvio di sistema di Apache:

systemctl disable httpd.service

Poi creiamo i collegamenti di avvio del sistema per nginx e lo avviamo:

systemctl enable nginx.service
systemctl start nginx.service

(Se sia Apache2 che nginx sono installati, l’installer di ISPConfig 3 ti chiederà quale vuoi utilizzare - rispondi nginx in questo caso. Se solo uno di questi due è installato, ISPConfig eseguirà automaticamente la configurazione necessaria.)

Possiamo far funzionare PHP5 in nginx tramite PHP-FPM (PHP-FPM (FastCGI Process Manager) è un’implementazione alternativa di PHP FastCGI con alcune funzionalità aggiuntive utili per siti di qualsiasi dimensione, in particolare siti più trafficati). Possiamo installare php-fpm insieme a php-cli e alcuni moduli PHP5 come php-mysql di cui hai bisogno se vuoi utilizzare MySQL dai tuoi script PHP come segue:

yum -y install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy

Successivamente apriamo /etc/php.ini…

nano /etc/php.ini

… e cambiamo la segnalazione degli errori (in modo che le notifiche non vengano più visualizzate):

[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]

Imposta anche cgi.fix_pathinfo=0:

nano /etc/php.ini

[...]
; 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 PATH_INFO, vedere le specifiche cgi.  Impostare
; questo a 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=0
[...]

(Per favore leggi http://wiki.nginx.org/Pitfalls per scoprire perché dovresti farlo.)

In aggiunta a ciò, per evitare errori come

[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): Non è sicuro fare affidamento sulle impostazioni del fuso orario del sistema. Devi obbligatoriamente utilizzare l’impostazione date.timezone o la funzione date_default_timezone_set(). Nel caso tu abbia utilizzato uno di questi metodi e stai ancora ricevendo questo avviso, è molto probabile che tu abbia scritto male l’identificatore del fuso orario. Abbiamo selezionato ‘Europe/Berlin’ per ‘CEST/2.0/DST’ invece in /usr/share/nginx/html/info.php alla riga 2

… in /var/log/php-fpm/www-error.log quando chiami uno script PHP nel tuo browser, dovresti impostare date.timezone in /etc/php.ini:

[...]
[Date]
; Definisce il fuso orario predefinito utilizzato dalle funzioni di data
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]

Poi crea i collegamenti di avvio del sistema per php-fpm e avvialo:

systemctl enable php-fpm
systemctl restart php-fpm

PHP-FPM è un processo daemon (con lo script di init /etc/init.d/php-fpm) che esegue un server FastCGI sulla porta 9000.

Per ottenere il supporto CGI in nginx, installiamo Fcgiwrap.

Fcgiwrap è un wrapper CGI che dovrebbe funzionare anche per script CGI complessi e può essere utilizzato per ambienti di hosting condivisi perché consente a ciascun vhost di utilizzare la propria directory cgi-bin.

Poiché non esiste un pacchetto fcgiwrap per CentOS 7.0, dobbiamo costruirlo noi stessi. Prima installiamo alcune dipendenze:

yum -y install fcgi-devel

Ora possiamo costruire fcgiwrap come segue:

cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install

Questo installa fcgiwrap in /usr/local/sbin/fcgiwrap.

Successivamente installiamo il pacchetto spawn-fcgi che ci consente di eseguire fcgiwrap come un daemon:

yum -y install spawn-fcgi

Apri /etc/sysconfig/spawn-fcgi…

nano /etc/sysconfig/spawn-fcgi

… e modifica il file come segue:

# Devi impostare alcune opzioni di lavoro prima che il servizio "spawn-fcgi" funzioni.
# Se SOCKET punta a un file, questo file viene pulito dallo script di init.
#
# Vedi spawn-fcgi(1) per tutte le opzioni possibili.
#
# Esempio :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"

FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

Ora aggiungi l’utente nginx al gruppo apache:

usermod -a -G apache nginx

Crea i collegamenti di avvio del sistema per spawn-fcgi…

chkconfig spawn-fcgi on

… e avvialo come segue:

systemctl start spawn-fcgi

Ora dovresti trovare il socket fcgiwrap in /var/run/fcgiwrap.socket, di proprietà dell’utente e del gruppo apache (alcuni script, ad esempio Mailman, si aspettano di essere eseguiti dall’utente/gruppo apache, ecco perché non eseguiamo spawn-fcgi come utente/gruppo nginx, ma invece aggiungiamo nginx al gruppo apache).

14.1 Versioni PHP Aggiuntive

A partire da ISPConfig 3.0.5, è possibile avere più versioni di PHP su un server (selezionabili tramite ISPConfig) che possono essere eseguite tramite FastCGI e PHP-FPM. La procedura per costruire versioni aggiuntive di PHP su CentOS è descritta in questo tutorial: Come Utilizzare Più Versioni di PHP (PHP-FPM & FastCGI) Con ISPConfig 3 (CentOS 6.3)

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.