/webserver

Breve documentazione per inizializzare un server web Ubuntu.

webserver

Breve documentazione per inizializzare un server web Ubuntu (versione in questione: 20.04.1 LTS)

❗ Usare sudo prima del comando se non si hanno i diritti necessari.

Link per visualizzare direttamente la parte interessata:

Configurazione IP & installazione pacchetti necessari

Installazione SSH & Apache2

Attivazione HTTPS su Apache2 (Self-Signed)

Attivazione HTTPS su Apache2

Attivazione del servizio FTP

Installazione e configurazione del servizio Samba (SMB)

Installazione Tomcat 9


👻 CONFIGURAZIONE IP & INSTALLAZIONE PACCHETTI NECESSARI

  • apt update

  • apt upgrade

  • apt install net-tools

  • nano /etc/hosts

  • nano /etc/hostname

📌Checkpoint: immettere il comando 'reboot' per riavviare il server web e visualizzare l'hostname aggiornato.

  reboot
  • nano /etc/netplan/00-installer-config.yaml

Versione senza DHCP, indirizzi statici

  network:
    version: 2
    renderer: networkd
    ethernets:
      enp0s3:
        addresses: [172.16.29.105/16]
        gateway4: 172.16.1.7
        nameservers:
            addresses: [172.16.1.10, 1.1.1.1]

Versione con DHCP, indirizzi dinamici

    network:
    version: 2
    renderer: networkd
    ethernets:
      enp0s3:
        dhcp4: true
        dhcp6: true

Questa configurazione IP è stata fatta all'interno della scuola e riguarda il mio caso in particolare. Se il server è virtualizzato occorre impostare la scheda di rete in modalità Bridge.

  • netplan try

📌Checkpoint: verificare se l'indirizzo è stato modificato correttamente tramite il comando 'ip addr' e verificare la connessione con il comando 'ping'.

  ip addr
  ping www.google.com

Torna su


👻 INSTALLAZIONE SSH & APACHE2

Introduzione SSH: protocollo che stabilisce una connessione remota cifrata tramite un'interfaccia a riga di comando con un altro host della rete. Ha sostituito il protocollo insicuro Telnet.

Introduzione Apache2: è il server web libero piu' diffuso al mondo, in grado di operare su una grande vastità di S.O. Ha il vantaggio di offrire controlli per la sicurezza come quelle effettuate da un proxy.

1. Installazione

  • apt install openssh-server

  • apt install apache2

📌Checkpoint: verificare l'installazione del server Apache aprendo il browser e mettendo nella barra degli indirizzi l'IP del server web, se viene visualizzata la pagina di default di Apache l'installazione è andata a buon fine.

  172.16.29.105/index.html

2. Creazione di un utente per un sito specifico

  • useradd -s /bin/bash -d /var/www/'nome_cartella_sito' -m 'nome_user'

  • passwd 'password'

📌Checkpoint: fare il login da remoto per verificare la corretta aggiunta dell'utente.

3. Aggiunta del sito web

  • cd /var/www/'nome_cartella_sito'

  • mkdir log

  • cd /etc/apache2/sites-available

  • cp 000-default.conf 'nome_cartella_sito'.conf

  • nano 'nome_cartella_sito'.conf

Togliere il commento nella riga ServerName e inserire il dominio del sito; In DocumentRoot inserire il percorso della cartella del sito; In ErrorLog e CustomLog togliere il $, le parentesi graffe e inserire il percorso della cartella del sito /log.

4. Abilitazione del sito

  • a2ensite 'file_configurazione_sito'.conf

  • systemctl restart apache2.service

📌Checkpoint: immettere nella barra degli indirizzi del browser 'nome_cartella_sito.dominio', se vengono visualizzati i file inseriti dall'utente registrato il sito funziona correttamente. Di seguito alcuni esempi:

  sitoa-105.virtual.marconi
  sitob-105.virtual.marconi
  ubuntu-srv105.virtual.marconi

Torna su


👻 ATTIVAZIONE HTTPS SU APACHE2 (Self-Signed)

❗ Questo sarà un esempio applicato al sito chiamato sitoa-105.virtual.marconi, modificare i testi di seguito per adattarli a qualsiasi altro sito.

Azione preliminare. Controllo della versione OpenSSL

  • openssl version -a

📌Checkpoint: Controllare l'output, dovrà essere simile al seguente:

  OpenSSL 1.1.1f  31 Mar 2020
  built on: Mon Apr 20 11:53:50 2020 UTC
  platform: debian-amd64
  options:  bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
  compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack ...
  OPENSSLDIR: "/usr/lib/ssl"
  ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
  Seeding source: os-specific
  • a2enmod ssl, in caso il modulo SSL non fosse attivo.

1. Creazione del certificato SSL

  • openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/'nome_chiave'.key -out /etc/ssl/certs/'nome_certificato'.crt

    Country Name (2 letter code) [AU]:
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:sitoa-105.virtual.marconi
    Email Address []:
    
  • openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

2. Configurare Apache per utilizzare SSL

  • nano /etc/apache2/conf-available/ssl-params.conf

    # from https://cipherli.st/
    # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html
    
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    SSLProtocol All -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    # Disable preloading HSTS for now.  You can use the commented out header line that includes
    # the "preload" directive if you understand the implications.
    #Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
    Header always set X-Frame-Options DENY
    Header always set X-Content-Type-Options nosniff
    # Requires Apache >= 2.4
    SSLCompression off
    SSLSessionTickets Off
    SSLUseStapling on
    SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
    
    SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
    
  • cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak, prima di modificare il file di configurazione di SSL creiamo un backup del file stesso.

  • nano /etc/apache2/sites-available/default-ssl.conf

    <IfModule mod_ssl.c>
            <VirtualHost _default_:443>
                    ServerAdmin webmaster@localhost
                    ServerName sitoa-105.virtual.marconi
    
                    DocumentRoot /var/www/html
    
                    ErrorLog ${APACHE_LOG_DIR}/error.log
                    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
                    SSLEngine on
    
                    SSLCertificateFile      /etc/ssl/certs/'nome_certificato'.crt
                    SSLCertificateKeyFile /etc/ssl/private/'nome_chiave'.key
    
                    <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                    SSLOptions +StdEnvVars
                    </FilesMatch>
                    <Directory /usr/lib/cgi-bin>
                                    SSLOptions +StdEnvVars
                    </Directory>
    
                    BrowserMatch "MSIE [2-6]" \
                                   nokeepalive ssl-unclean-shutdown \
                                   downgrade-1.0 force-response-1.0
    
            </VirtualHost>
    </IfModule>
    

3. Reindirizzamento delle richieste HTTP ad HTTPS

  • nano /etc/apache2/sites-available/sitoa-105.conf e aggiungere le righe comprese tra i tre punti di sospensione.

      <VirtualHost *:80>
          . . .
          
          ServerName sitoa-105.virtual.marconi
          Redirect / https://sitoa-105.virtual.marconi/
          
          . . .
      </VirtualHost>
    
  • systemctl reload apache2

4. Modificare le impostazioni del firewall per permette il traffico in entrata e uscita

  • ufw allow 'Apache Full'

  • ufw delete allow 'Apache'

  • ufw status, visualizzare lo stato del firewall.

📌Checkpoint: lo status del firewall dovrà essere simile al seguente:

  Status: active

  To                         Action      From
  --                         ------      ----
  OpenSSH                    ALLOW       Anywhere
  Apache Full                ALLOW       Anywhere
  OpenSSH (v6)               ALLOW       Anywhere (v6)
  Apache Full (v6)           ALLOW       Anywhere (v6)

5. Controllare che le modifiche siano avvenute con successo

📌Checkpoint: immettere il comando 'apache2ctl configtest' per verificare che non ci siano errori di sintassi. Output:

  AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
  Syntax OK
  • systemctl restart apache2, solo se il checkpoint non ha dato errori.

6. Test

Digitare sul browser https://sitoa-105.virtual.marconi (questo è il mio caso in particolare, il dominio o l'IP può essere differente in base alla configurazione effettuata). Visto che il certificato non è verificato e confermato da nessuna autorità, riceveremo questo avvertimento, ma solamente per la prima volta:

image

Per procedere fare click su 'Avanzate' e fare un click sul link per continuare comunque la connessione al sito.

N.B. il lucchetto sarà segnato da una X, questo vuol dire che il certificato non è confermato, ma la connessione è comunque criptata.

image

Torna su


👻 ATTIVAZIONE HTTPS SU APACHE2

❗ Questo sarà un esempio applicato al sito chiamato sitoa-105.virtual.marconi, modificare i testi di seguito per adattarli a qualsiasi altro sito.

Azione preliminare. Controllo della versione OpenSSL

  • openssl version -a

📌Checkpoint: Controllare l'output, dovrà essere simile al seguente:

  OpenSSL 1.1.1f  31 Mar 2020
  built on: Mon Apr 20 11:53:50 2020 UTC
  platform: debian-amd64
  options:  bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
  compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack ...
  OPENSSLDIR: "/usr/lib/ssl"
  ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
  Seeding source: os-specific
  • a2enmod ssl, in caso il modulo SSL non fosse attivo.

Azione preliminare 2. Creazione di una nuova cartella in /etc/apache2

  • cd /etc/apache2, spostamento all'interno di /etc/apache2.

  • mkdir ssl, creazione della cartella chiamata ssl, conterrà al suo interno la chiave privata, pubblica e il certificato.

  • cd ssl, spostamento all'interno della cartella appena creata.

1. Creazione della chiave privata

  • openssl genrsa -out 'nome_chiave_privata'.key 2048

2. Estrazione della chiave pubblica dalla chiave privata

  • openssl rsa -in 'nome_chiave_privata'.key -pubout -out 'nome_chiave_pubblica'.key

3. Creazione del CSR (Certificate Signing Request)

  • openssl req -new -key 'nome_chiave_privata'.key -out 'nome_csr'.csr

    Country Name (2 letter code) [AU]:
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:sitoa-105.virtual.marconi
    Email Address []:
    

📌Checkpoint: immettere il comando 'openssl req -text -in 'nome_csr'.csr -noout -verify' per verificare che le informazioni inserite all'interno del CSR siano corrette. Output:

  verify OK
  Certificate Request:
      Data:
          Version: 0 (0x0)
          Subject: C=US, ST=Utah, L=Lehi, O=Your Company, Inc., OU=IT, CN=yourdomain.com
          Subject Public Key Info:
              Public Key Algorithm: rsaEncryption
                  Public-Key: (2048 bit)
                  Modulus:
                      00:bb:31:71:40:81:2c:8e:fb:89:25:7c:0e:cb:76:
                      [...17 lines removed]
                  Exponent: 65537 (0x10001)
          Attributes:
              a0:00
      Signature Algorithm: sha256WithRSAEncryption
           0b:9b:23:b5:1f:8d:c9:cd:59:bf:b7:e5:11:ab:f0:e8:b9:f6:
           [...14 lines removed]

❗ Ora sarà necessario inviare il CSR creato alla CA (Certification Authority). Una volta inviato riceveremo un certificato rilasciato sicuro con estensione .cer.

4. Configurare Apache per utilizzare il nuovo certificato

  • nano /etc/apache2/sites-available/default-ssl.conf

    <IfModule mod_ssl.c>
            <VirtualHost _default_:443>
                    ServerAdmin webmaster@localhost
                    ServerName sitoa-105.virtual.marconi
    
                    DocumentRoot /var/www/html
    
                    ErrorLog ${APACHE_LOG_DIR}/error.log
                    CustomLog ${APACHE_LOG_DIR}/access.log combined
    
                    SSLEngine on
    
                    SSLCertificateFile      /etc/apache2/ssl/'nome_cer'.cer
                    SSLCertificateKeyFile /etc/apache2/ssl/'nome_chiave_privata'.key
    
                    <FilesMatch "\.(cgi|shtml|phtml|php)$">
                                    SSLOptions +StdEnvVars
                    </FilesMatch>
                    <Directory /usr/lib/cgi-bin>
                                    SSLOptions +StdEnvVars
                    </Directory>
    
                    BrowserMatch "MSIE [2-6]" \
                                   nokeepalive ssl-unclean-shutdown \
                                   downgrade-1.0 force-response-1.0
    
            </VirtualHost>
    </IfModule>
    

Torna su


👻 ATTIVAZIONE DEL SERVIZIO FTP

Introduzione: FTP (File Transfer Protocol) è un protocollo utilizzato per il trasferimento di dati basato su un sistema client-server. Consente di caricare, scaricare e spostare file all'interno di un sistema di directory.

  • apt install vsftpd

  • nano /etc/vsftpd.conf

    listen=yes
    
    listen_ipv6=NO
    
    anonymous_enable=NO
    
    local_enable=YES
    
    write_enable=YES
    
    local_umask=022
    
    dirmessage_enable=YES
    
    use_localtime=YES
    
    xferlog_enable=YES
    
    connect_from_port_20=YES
    
    xferlog_file=/var/log/vsftpd.log
    
    xferlog_std_format=YES
    
    ftpd_banner=Welcome to our  FTP service.
    
    chroot_local_user=YES
    
    local_root=/var/www/$USER
    
    user_sub_token=$USER
    
    allow_writeable_chroot=YES
    
    secure_chroot_dir=/var/run/vsftpd/empty
    
    pam_service_name=vsftpd
    
    rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    
    rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    
    ssl_enable=NO
    
    session_support=YES
    
    log_ftp_protocol=YES
    
  • systemctl start vsftpd

  • systemctl enable vsftpd

Torna su


👻 INSTALLAZIONE E CONFIGURAZIONE DEL SERVIZIO SAMBA (SMB)

Introduzione: SMB (Server Message Block) è un protocollo utilizzato soprattutto dai Microsoft Windows, principalmente per condividere file, stampanti, porte seriali e comunicazioni di varia natura tra diversi nodi di una rete. Include anche un processo di comunicazione tra processi autenticata.

  • apt update

  • apt install samba

📌Checkpoint: immettere il comando 'whereis samba' e verificare l'output, che deve essere il seguente:

  samba: /usr/sbin/samba /usr/lib/samba /etc/samba /usr/share/samba /usr/share/man/man7/samba.7.gz /usr/share/man/man8/samba.8.gz
  • mkdir /home/'nome_user'/sambashare/

  • nano /etc/samba/smb.conf e inserire in fondo al file queste righe di testo:

    [sambashare]
       comment=Samba on Ubuntu
       path=/home/'nome_user'/sambashare
       read only=no
       browsable=yes
    
    #Condivisione di una cartella
    [shared]
    comment = Cartella condivisa        # Commento sulla condivisione
    path = /cartella/da/condividere     # Percorso della condivisione
    browseable = yes                    # Rende visibile la condivisione
    public = yes                        # Rende la cartella accessibile
    create mask = 0755                  # Permessi dei file
    
    #Condivisione della home
    [homes]
    comment = Home condivisa            # Commento sulla condivisione
    browseable = yes                    # Rende visibile la condivisione
    valid users = %S                    # Utente che vi può accedere
    create mask = 0700                  # Permessi dei file
    directory mask = 0700               # Permessi della home
    
  • service smbd restart

  • ufw allow samba, permette al firewall di lasciar passare il traffico in entrata e in uscita che riguarda il servizio SMB.

  • smbpasswd -a 'nome_user'

📌Checkpoint per Ubuntu: aprire il default file manager, fare click su Connect to Server e inserire 'smb://ip-address/sambashare'.

📌Checkpoint per macOS: nel menu Finder, fare click su Go > Connect to Server e inserire 'smb://ip-address/sambashare'.

📌Checkpoint per Windows: aprire il default file manager e modificare l'indirizzo con '\\ip-address\sambashare'.

N.B. per 'ip-address' si intende l'IP del webserver; 'sambashare' è il nome della cartella per la condivisione.

Torna su


👻 INSTALLAZIONE TOMCAT 9

Introduzione: Tomcat è un server web che fornisce una piattaforma software per l'esecuzione di applicazioni web sviluppate in linguaggio Java.

1. Installazione Java

  • apt update

  • apt install default-jdk

📌Checkpoint: Verificare la versione Java installata inserendo il comando java -version. Un esempio di output è questo:

  openjdk version "11.0.9.1" 2020-11-04
  OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
  OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

2. Creazione di un nuovo utente che eseguirà il servizio Tomcat

  • useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat

3. Installazione Tomcat e permessi

4. Creazione di un systemd Unit file

  • nano /etc/systemd/system/tomcat.service, inserendo le righe di testo di sotto permetterà di eseguirlo come un servizio.

    [Unit]
    Description=Tomcat 9 servlet container
    After=network.target
    
    [Service]
    Type=forking
    
    User=tomcat
    Group=tomcat
    
    Environment="JAVA_HOME=/usr/lib/jvm/default-java"
    Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
    
    Environment="CATALINA_BASE=/opt/tomcat/latest"
    Environment="CATALINA_HOME=/opt/tomcat/latest"
    Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
    Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
    
    ExecStart=/opt/tomcat/latest/bin/startup.sh
    ExecStop=/opt/tomcat/latest/bin/shutdown.sh
    
    [Install]
    WantedBy=multi-user.target
    

N.B. Modificare il percorso JAVA_HOME se la cartella d'installazione di Java è differente

  • systemctl daemon-reload

  • systemctl start tomcat, esecuzione del servizio Tomcat.

📌Checkpoint: verificare lo stato del servizio inserendo il comando 'systemctl status tomcat'. L'output dovrà essere il seguente:

  * tomcat.service - Tomcat 9 servlet container
     Loaded: loaded (/etc/systemd/system/tomcat.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2018-09-05 15:45:28 PDT; 20s ago
    Process: 1582 ExecStart=/opt/tomcat/latest/bin/startup.sh (code=exited, status=0/SUCCESS)
   Main PID: 1604 (java)
      Tasks: 47 (limit: 2319)
     CGroup: /system.slice/tomcat.service
  • systemctl enable tomcat, se non ci sono errori è possibile eseguire il servizio Tomcat all'esecuzione del server utilizzando questo comando.

5. Modificare il firewall lasciando passare il traffico Tomcat sulla porta 8080

  • ufw allow 8080/tcp

6. Accesso a Tomcat

Digitare all'interno della barra di ricerca del browser http://server_domain_or_IP:8080

tomcat_page

Torna su