Installare Apache HTTP Server in sicurezza su CentOS


Data di pubblicazione:

Aggiornato:


Articoli > Installare Apache HTTP Server in sicurezza su CentOS

2026 stato e uso sicuro

Conclusione: Su un host RHEL-famiglia supportato, installare il pacchetto httpd, convalidare la configurazione prima di ricaricare, aprire solo i servizi firewall necessari e utilizzare i contesti e i booleani di SELinux corretti piuttosto che disabilitare SELinux.

Cosa imparerai

  • Come l'installazione dei pacchetti, l'avvio sistemato, la convalida della configurazione e l'accesso alla rete si adattano insieme.
  • Come le radici dei documenti personalizzati interagiscono con le autorizzazioni e le etichette SELinux.
  • Quali comandi CentOS 7 di seguito sono storici e richiedono un equivalente supportato-piattaforma.

Destinatari: Gli amministratori Linux che dispiegano un server HTTP Apache di base o migrano un vecchio runbook CentOS.

Nota di aggiornamento (2026): CentOS 7 è la fine della vita. Mantenere il passaggio originale per riferimento, ma utilizzare DNF e la documentazione RHEL/Apache corrente, mantenere il controllo SELinux, ridurre al minimo i moduli e testare apachectl configtest prima di una graziosa ricarica.

Nota di sicurezza: i comandi e gli esempi di configurazione dell'articolo originale non sono stati rieseguiti in un ambiente di produzione moderno. Prima di applicarli, verifica versioni supportate, backup, controlli di accesso e procedura di rollback in un ambiente di prova isolato.

Fonti primarie ufficiali

Panoramica

Questa è la procedura di configurazione iniziale necessaria per installare e avviare Apache su CentOS. Le informazioni si basano sull'ipotesi di utilizzo di CentOS7.

Le versioni sono le seguenti.

Versione CentOS7.6 (1810)
Versione Apache2.4.6

Indice dei contenuti

  1. installare
  2. impostazione di base
  3. sintesi

1. installare

Questa sezione descrive la configurazione di Apache dall'installazione all'avvio.

1-1. Installazione di Apache

Eseguire l'installazione di Apache con il comando yum. Eseguire il lavoro come utente root.

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install httpd

1-2. Controllo dell'avvio (accesso http)

Verificare brevemente se è accessibile. L'installazione di Apache (httpd) con il comando yum abilita il comando apachectl.

Utilizzare questa opzione per avviare Apache.

[root@hostname ~]# apachectl start
[root@hostname ~]# apachectl status
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-12-06 17:08:12 JST; 1s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1303 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           |-1303 /usr/sbin/httpd -DFOREGROUND
           |-1304 /usr/sbin/httpd -DFOREGROUND
           |-1305 /usr/sbin/httpd -DFOREGROUND
           |-1306 /usr/sbin/httpd -DFOREGROUND
           |-1307 /usr/sbin/httpd -DFOREGROUND
           `-1308 /usr/sbin/httpd -DFOREGROUND

Dec 06 17:08:11 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Dec 06 17:08:12 localhost.localdomain httpd[1303]: AH00558: httpd: Could not reliably determ...ge
Dec 06 17:08:12 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

Se il risultato dell'esecuzione del comando "apachectl status" è "Active: active (running)", il sistema è stato avviato correttamente.

Quindi accedere ad Apache dal browser. Impostare i permessi http poiché il firewall (o iptables per CentOS6 e precedenti) consente solo l'accesso ssh per impostazione predefinita su CentOS7. Vorrei anche inserire un'impostazione di autorizzazione collettiva per https.

Aggiungere anche l'opzione "permanente" per rendere la configurazione permanente.

[root@hostname ~]# firewall-cmd --permanent --add-service=http
[root@hostname ~]# firewall-cmd --permanent --add-service=https
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

È corretto se 'http' e 'https' sono stati aggiunti a 'servizi'.

Accesso tramite browser. Nel mio caso, l'indirizzo IP del server è 192.168.50.10, quindi accedo a "http://192.168.50.10". Se viene visualizzata la seguente pagina è tutto ok

Schermo superiore Apache

Una volta avviato con successo il sistema, arrestarlo.

[root@hostname ~]# apachectl stop

2. impostazione di base

2-1. Creazione della cartella di output del file di log

Per gestire la registrazione sotto /var/log/, creare una cartella httpd sotto /var/log/ come cartella per i log di Apache.

Le autorizzazioni (permessi) devono essere 755. Questa impostazione consente ad Apache di scrivere, ma agli altri utenti di leggere. Se altri utenti possono scrivere, i registri possono essere manomessi.

'mkdir /var/log/httpd' non deve essere eseguito se è già stata creata una directory con lo stesso nome.

[root@hostname ~]# mkdir /var/log/httpd
[root@hostname ~]# chmod 755 /var/log/httpd

Utilizzare quest'ultima procedura per modificare le impostazioni di destinazione del log di Apache.

Questa procedura serve solo a creare una cartella in cui memorizzare i registri.

2-2. Impostazione del dominio

Modificare le impostazioni del dominio elencate in httpd.conf. La configurazione di Apache è fondamentalmente centralizzata in httpd.conf, quindi se si vuole cambiare la configurazione, si deve modificare httpd.conf.

Non è necessario impostare i domini se l'ambiente è locale (non aperto al pubblico su Internet).

[root@hostname ~]# vi /etc/httpd/conf/httpd.conf

# Togliere il commento e abilitare l'impostazione ServerName. Il nome del dominio viene impostato in base all'ambiente.

httpd.conf【Prima del cambiamento】


#ServerName www.example.com:80

httpd.conf【dopo la modifica】


ServerName domainname:80

2-3. Attivazione dei moduli SSL e dei file di configurazione

Abilitare SSL per consentire l'accesso tramite https. Le impostazioni SSL sono legate alla SEO e l'http non è una buona idea per motivi di sicurezza, quindi, a meno che non dobbiate usare l'http, usate l'https.

Installare il modulo ssl con yum.

[root@hostname ~]# yum -y install mod_ssl

L'installazione con yum abilita automaticamente il modulo ssl, quindi è sufficiente installarlo. Viene creato automaticamente anche un file di configurazione. (/etc/httpd/conf.d/ssl.conf viene creato automaticamente).

2-4. Modificare il percorso di uscita del log

Cambiare la destinazione di output del log di Apache nella cartella di output del file di log appena creato. Modificare solo il file di configurazione ssl, poiché in un passaggio successivo sarà impostato per essere accessibile solo tramite ssl (https).

[root@hostname ~]# vi /etc/httpd/conf.d/ssl.conf


ssl.conf【Prima del cambiamento】


ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

~abbreviazione~

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


ssl.conf【dopo la modifica】


ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log

~abbreviazione~

CustomLog /var/log/httpd/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

La modifica precedente cambia la destinazione dell'output di log in "/var/log/httpd".


%t, %h", ecc. è l'impostazione della formattazione del registro. Di seguito è riportato un elenco di formati che possono essere utilizzati frequentemente come riferimento.

Riferimento

• %T: Tempo necessario per elaborare la richiesta (secondi)

• %h: Nome host o indirizzo IP del client. Tenta di risolvere i nomi di host solo se HostnameLookups è impostato su On

• %r: Prima riga della richiesta

• %b: Byte della risposta (escluse le intestazioni HTTP). formato CLF, vale a dire che se nessuno dei byte è inviato

• %D: Tempo necessario per elaborare la richiesta (microsecondi)

• %>s: Stato HTTP

2-5. Creazione di certificati SSL

Procedura per la creazione di certificati. L'autocertificazione va bene per le operazioni private. Per i server disponibili al pubblico, l'autocertificazione dovrebbe essere scoraggiata.

Un certificato autofirmato cifra la connessione, ma il client non può verificarne l’attendibilità tramite un’autorità di certificazione pubblica. È adatto ai test o a reti in cui la fiducia viene distribuita esplicitamente ai client. Per un servizio pubblico usate un certificato emesso da un’autorità riconosciuta.

Quindi, per i server disponibili al pubblico (server visibili a terzi), emettete un normale certificato.

Le impostazioni predefinite dei certificati per Apache sono "/etc/pki/tls/certs/localhost.crt" e "/etc/pki/tls/private/localhost.key".

Le impostazioni si trovano in "SSLCertificateFile" e "SSLCertificateKeyFile" in "/etc/httpd/conf.d/ssl.conf".


(Per l'autocertificazione)

Per creare un autocertificato, eseguire il seguente comando. Eseguire come utente root.

L'esecuzione di 'openssl req -new -key /etc/pki/tls/private/localhost.key > /etc/pki/tls/certs/localhost.crt' richiederà una risposta diverse volte, tutte con Invio, senza problemi. Si tratta di informazioni su chi rilascia il certificato (ad esempio, in quale Paese vive e qual è il suo indirizzo e-mail).

Se state emettendo un normale certificato, inserite le informazioni corrette e impostatelo.

[root@hostname ~]# openssl genrsa > /etc/pki/tls/private/localhost.key
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key > /etc/pki/tls/certs/localhost.csr
[root@hostname ~]# openssl x509 -req -signkey /etc/pki/tls/private/localhost.key < /etc/pki/tls/certs/localhost.csr > /etc/pki/tls/certs/localhost.crt

(Per i certificati normali)

Per creare un certificato normale, eseguire il seguente comando. Eseguire come utente root.

[root@hostname ~]# openssl genrsa -out /etc/pki/tls/private/localhost.key 2048
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.csr

Per i certificati regolari questo non è sufficiente per completare il processo. Il lavoro consiste nel consegnare il file "server.csr" creato all'Autorità di certificazione per ottenere un certificato del server e nell'installare il certificato del server che è stato rilasciato.

2-6. permanente SSL (Secure Socket Layer)

Non è una buona sicurezza se l'accesso avviene tramite http, quindi aggiungere un'impostazione per reindirizzare a https se l'accesso avviene tramite http.

È possibile vietare l'accesso via http, ma dal punto di vista dell'usabilità si consiglia di impostare un reindirizzamento. Eseguire le seguenti operazioni come utente root.

[root@hostname ~]# vi /etc/httpd/conf/httpd.conf

Aggiungere alla fine quanto segue.

httpd.conf


<IfModule rewrite_module>
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

È possibile modificare questa impostazione in modo che gli accessi provenienti da http siano gestiti da https.

Si afferma che questa impostazione non funziona se si arriva tramite https. (RewriteCond %{HTTPS} off)

Non dimenticate che senza questa impostazione, anche gli accessi https saranno reindirizzati, dando luogo a un ciclo infinito.

2-7. Conferma dell'attivazione (accesso https).

Una volta completate le varie impostazioni, verificate che il sito sia accessibile via https. Avviare prima di tutto.

[root@hostname ~]# apachectl start

Accesso tramite browser. Come per l'accesso http, ma nel mio caso l'indirizzo IP del server è 192.168.50.10, quindi accedo a "http://192.168.50.10".

L'URL viene modificato da "http://192.168.50.10" a "https://192.168.50.10" perché l'impostazione di reindirizzamento http è inclusa.

Ora che l'avvio è avvenuto con successo, si deve arrestare Apache.

[root@hostname ~]# apachectl stop

2-8. Impostazione dell'avvio automatico

Infine, anche se non è obbligatorio, è difficile avviare Apache ogni volta che il server viene riavviato, quindi viene messa a punto una configurazione in modo che Apache si avvii automaticamente all'avvio del server. Si registra anche al comando systemctl. Si noti che questa procedura si riferisce a CentOS7, quindi se si utilizza qualcosa di diverso da CentOS7, è necessario utilizzare il comando Service.

Creare un file 'apache.service' e descrivere le impostazioni necessarie.

[root@hostname ~]# touch /etc/systemd/system/apache.service
[root@hostname ~]# vi /etc/systemd/system/apache.service

Vengono fornite le seguenti informazioni.

[Unit]
#Descrizione.
Description=Apache
#Controllo pre e post esecuzione.
#Before=xxx.service
#After=xxx.service

[Service]
#Designazione di utenti e gruppi
User=root
Group=root
#Una volta attivato, impostare lo stato su Attivato.
Type=oneshot
RemainAfterExit=yes
#Avvio, arresto e ricarica.
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart

[Install]
#Impostazioni equivalenti al Runlevel 3.
WantedBy=multi-user.target

Una volta terminata la descrizione, registrarla con il comando systemctl.

[root@hostname ~]# systemctl enable apache
[root@hostname ~]# systemctl is-enabled apache
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep apache
apache.service                                enabled
[root@hostname ~]# systemctl daemon-reload


3. sintesi

Abbiamo descritto la configurazione iniziale richiesta al momento dell'installazione di Apache.

Apache funziona fondamentalmente in una certa misura con le impostazioni predefinite, ma se si desidera personalizzarlo, si prega di fare riferimento alle impostazioni di destinazione dell'output di log e alle impostazioni SSL, che devono essere modificate durante il funzionamento del sistema.

■INFORMATION

Articoli


■PROFILE

Profilo


■Contatti

Contatti