Ricerca nel sito web

Serie RHCSA: installazione, configurazione e protezione di un server Web e FTP - Parte 9


Un server web (noto anche come server HTTP) è un servizio che gestisce i contenuti (più comunemente pagine web, ma anche altri tipi di documenti) su un client in una rete.

Un server FTP è una delle risorse più antiche e comunemente utilizzate (fino ad oggi) per rendere i file disponibili ai client su una rete nei casi in cui non è necessaria l'autenticazione poiché FTP utilizza nome utente e password senza crittografia.

Il server Web disponibile in RHEL 7 è la versione 2.4 del server HTTP Apache. Per quanto riguarda il server FTP, utilizzeremo il Very Secure Ftp Daemon (noto anche come vsftpd) per stabilire connessioni protette da TLS.

In questo articolo spiegheremo come installare, configurare e proteggere un server Web e un server FTP in RHEL 7.

Installazione di Apache e server FTP

In questa guida utilizzeremo un server RHEL 7 con un indirizzo IP statico di 192.168.0.18/24. Per installare Apache e VSFTPD, esegui il comando seguente:


yum update && yum install httpd vsftpd

Al termine dell'installazione, entrambi i servizi verranno inizialmente disabilitati, quindi per il momento dobbiamo avviarli manualmente e abilitarli all'avvio automatico a partire dall'avvio successivo:


systemctl start httpd
systemctl enable httpd
systemctl start vsftpd
systemctl enable vsftpd

Inoltre, dobbiamo aprire le porte 80 e 21, dove sono in ascolto rispettivamente i demoni web e ftp, per consentire l'accesso a tali servizi dall'esterno:


firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --reload

Per verificare che il server web funzioni correttamente, avvia il browser e inserisci l'IP del server. Dovresti vedere la pagina di test:

Per quanto riguarda il server ftp, dovremo configurarlo ulteriormente, cosa che faremo tra un minuto, prima di confermare che funzioni come previsto.

Configurazione e protezione del server Web Apache

Il file di configurazione principale per Apache si trova in /etc/httpd/conf/httpd.conf, ma potrebbe fare affidamento su altri file presenti all'interno di /etc/httpd /conf.d.

Anche se la configurazione predefinita dovrebbe essere sufficiente nella maggior parte dei casi, è una buona idea acquisire familiarità con tutte le opzioni disponibili descritte nella documentazione ufficiale.

Come sempre, fai una copia di backup del file di configurazione principale prima di modificarlo:


cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

Quindi aprilo con il tuo editor di testo preferito e cerca le seguenti variabili:

  1. ServerRoot: la directory in cui sono conservati i file di configurazione, di errore e di registro del server.
  2. Ascolta: ordina ad Apache di ascoltare su indirizzi IP e/o porte specifici.
  3. Includi: consente l'inclusione di altri file di configurazione, che devono esistere. In caso contrario, il server fallirà, a differenza della direttiva IncludeOptional, che viene ignorata silenziosamente se i file di configurazione specificati non esistono.
  4. Utente e gruppo: il nome dell'utente/gruppo con cui eseguire il servizio httpd.
  5. DocumentRoot: la directory da cui Apache servirà i tuoi documenti. Per impostazione predefinita, tutte le richieste vengono prese da questa directory, ma è possibile utilizzare collegamenti simbolici e alias per puntare ad altre posizioni.
  6. ServerName: questa direttiva imposta il nome host (o l'indirizzo IP) e la porta che il server utilizza per identificarsi.

La prima misura di sicurezza consisterà nel creare un utente e un gruppo dedicati (ad esempio tecmint/tecmint) per eseguire il server Web e modificare la porta predefinita con una più alta (9000 in questo caso):


ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

Puoi testare il file di configurazione con.


apachectl configtest

e se tutto è OK, riavvia il server web.


systemctl restart httpd

e non dimenticare di abilitare la nuova porta (e disabilitare quella vecchia) nel firewall:


firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload

Tieni presente che, a causa delle politiche di SELinux, puoi utilizzare solo le porte restituite da


semanage port -l | grep -w '^http_port_t'

per il server web.

Se desideri utilizzare un'altra porta (ad esempio la porta TCP 8100), dovrai aggiungerla al contesto della porta SELinux per il servizio httpd:


semanage port -a -t http_port_t -p tcp 8100

Per proteggere ulteriormente la tua installazione di Apache, segui questi passaggi:

1. L'utente Apache è in esecuzione e non dovrebbe avere accesso a una shell:


usermod -s /sbin/nologin tecmint

2. Disabilita l'elenco delle directory per impedire al browser di visualizzare il contenuto di una directory se non è presente index.html in quella directory.

Modifica /etc/httpd/conf/httpd.conf (e i file di configurazione per gli host virtuali, se presenti) e assicurati che la direttiva Options, sia in alto che ai livelli di blocco della directory, è impostato su Nessuno:


Options None

3. Nascondi le informazioni sul server web e sul sistema operativo nelle risposte HTTP. Modifica /etc/httpd/conf/httpd.conf come segue:


ServerTokens Prod 
ServerSignature Off

Ora sei pronto per iniziare a fornire contenuti dalla tua directory /var/www/html.

Configurazione e protezione del server FTP

Come nel caso di Apache, il file di configurazione principale per Vsftpd (/etc/vsftpd/vsftpd.conf) è ben commentato e mentre la configurazione predefinita dovrebbe essere sufficiente per la maggior parte delle applicazioni , dovresti familiarizzare con la documentazione e la pagina man (man vsftpd.conf) per poter utilizzare il server ftp in modo più efficiente (non potrò sottolinearlo abbastanza!).

Nel nostro caso queste sono le direttive utilizzate:


anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

Utilizzando chroot_local_user=YES, gli utenti locali verranno (per impostazione predefinita) inseriti in una prigione chroot nella loro directory home subito dopo l'accesso. Ciò significa che gli utenti locali non saranno in grado di accedere ad alcun file al di fuori delle loro directory home corrispondenti.

Infine, per consentire a ftp di leggere i file nella directory home dell'utente, imposta il seguente valore booleano SELinux:


setsebool -P ftp_home_dir on

Ora puoi connetterti al server ftp utilizzando un client come Filezilla:

Tieni presente che il registro /var/log/xferlog registra i download e i caricamenti, che concordano con l'elenco delle directory di cui sopra:

Leggi anche: Limita la larghezza di banda della rete FTP utilizzata dalle applicazioni in un sistema Linux con Trickle

Riepilogo

In questo tutorial abbiamo spiegato come configurare un server web e un server ftp. A causa della vastità dell'argomento, non è possibile coprire tutti gli aspetti di questi argomenti (ad esempio host web virtuali). Pertanto, ti consiglio di consultare anche altri articoli eccellenti in questo sito Web su Apache.