Serie RHCSA: Installazione, Configurazione e Sicurezza di un Server Web e FTP – Parte 9

A web server (also known as a HTTP server) is a service that handles content (most commonly web pages, but other types of documents as well) over to a client in a network.

A FTP server is one of the oldest and most commonly used resources (even to this day) to make files available to clients on a network in cases where no authentication is necessary since FTP uses username and password without encryption.

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

RHCSA: Installing, Configuring and Securing Apache and FTP – Part 9

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

Installazione di Apache e del 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, eseguire il seguente comando:

# yum update && yum install httpd vsftpd

Quando l’installazione è completata, entrambi i servizi saranno disabilitati inizialmente, quindi dovremo avviarli manualmente per il momento ed abilitarli per l’avvio automatico a partire dal prossimo avvio:

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

Inoltre, dovremo aprire le porte 80 e 21, dove i demoni web e ftp sono in ascolto, rispettivamente, 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 confermare che il server web funziona correttamente, aprire il browser e inserire l’IP del server. Dovresti vedere la pagina di test:

Confirm Apache Web Server

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

Configurazione e Sicurezza 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 per la maggior parte dei casi, è una buona idea familiarizzare con tutte le opzioni disponibili come descritto nella documentazione ufficiale.

Come sempre, fare 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 aprirlo con il tuo editor di testo preferito e cercare le seguenti variabili:

  1. ServerRoot: la directory in cui vengono conservati i file di configurazione, errori e log del server.
  2. Listen: istruisce Apache ad ascoltare su un indirizzo IP specifico e/o porte specifiche.
  3. Include: 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. User and Group: 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 provengono da questa directory, ma possono essere utilizzati collegamenti simbolici e alias per puntare ad altre posizioni.
  6. ServerName: questa direttiva imposta l’hostname (o l’indirizzo IP) e la porta che il server utilizza per identificarsi.

La prima misura di sicurezza consisterà nella creazione di un utente e gruppo dedicato (cioè tecmint/tecmint) per eseguire il server web e nel cambiare 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, allora 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

Nota 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 (cioè porta TCP 8100), dovrai aggiungerla al contesto della porta SELinux per il servizio httpd:

# semanage port -a -t http_port_t -p tcp 8100
Add Apache Port to SELinux Policies

Per proteggere ulteriormente l’installazione di Apache, segui questi passaggi:

1. L’utente con cui Apache è in esecuzione non dovrebbe avere accesso a una shell:

# usermod -s /sbin/nologin tecmint

2. Disabilita l’elenco delle directory per impedire al browser di visualizzare i contenuti di una directory se non è presente un file 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 al livello superiore che ai livelli dei blocchi di Directory, sia impostata su None:

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 servire contenuti dalla tua directory /var/www/html.

Configurazione e Sicurezza 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, è consigliabile familiarizzare con la documentazione e la pagina man (man vsftpd.conf) per operare in modo più efficiente il server ftp (non posso 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) collocati in una “prigione” chroot nel loro directory home subito dopo il login. Ciò significa che gli utenti locali non potranno accedere a file al di fuori delle rispettive directory home corrispondenti.

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

# setsebool -P ftp_home_dir on

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

Check FTP Connection

Nota che il registro /var/log/xferlog registra i download e gli upload, che corrispondono all’elenco delle directory sopra:

Monitor FTP Download and Upload

Leggi Anche: Limitare la larghezza di banda di 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 dell’ampiezza dell’argomento, non è possibile coprire tutti gli aspetti di questi argomenti (ad esempio gli host web virtuali). Pertanto, ti consiglio di controllare anche altri eccellenti articoli su questo sito web su Apache.

Source:
https://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/