Rendere Odoo sicuro su Internet
Esporre Odoo su Internet in sicurezza
Pagina in costruzione
Installazione reverse proxy Nginx
L'installazione del reverse proxy ci consentirà pilotare le chiamate verso il server Odoo apportando le opportune misure di sicurezza caso per caso
sudo apt install nginx -y
Per analizzare il log del servizio Nginx appena lanciato
journalctl -u nginx
Disabilitare la configurazione di default e impostare quella relativa a Odoo
sudo rm /etc/nginx/sites-enabled/default sudo touch /etc/nginx/sites-available/odoo sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
Modificare il file /etc/nginx/sites-available/odoo al fine di reindirizzare il traffico sulla porta 8069
upstream backend-odoo { server 127.0.0.1:8069; } server { location / { proxy_pass http://backend-odoo; } }
Ricaricare e riavviare il servizio con la nuova configurazione
sudo systemctl reload nginx
Ora il servizio di Odoo risponderà anche senza indicare la porta da utilizzare
http://localhost
Protocollo https
Al fine di mettere in sicurezza le transazioni tra il browser client e il servizio Odoo, è necessario attivare il protocollo HTTPS il quale si appoggia su un certificato SSL.
Soluzione #1: certificato SSL autofirmato
Possiamo generare il certificato in autonomia, firmato da noi stessi
sudo mkdir /etc/nginx/ssl && cd /etc/nginx/ssl sudo openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes sudo chmod a-wx * sudo chown www-data:root *
Attivazione protocollo SSL
Sostituire il contenuto del file /etc/nginx/sites-available/odoo come indicato
upstream backend-odoo { server 127.0.0.1:8069; } server { listen 443 default; # ssl settings ssl on; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/key.pem; keepalive_timeout 60; # proxy header and settings proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; location / { proxy_pass http://backend-odoo; } }
Ora il servizio di Odoo risponderà solo sulla porta 443
https://localhost
Provando ad accedere al sito, noterete che il certificato autofirmato però genera un'eccezzione al browser perchè i browser riconoscono soltanto gli enti certificati a rilasciarli, e noi non lo siamo.
Per ovviare questo avviso, è possibile sostituire il nostro certificato con uno rilasciato da un ente accreditato a farlo: Let's Encrypt
Soluzione #2: certificato SSL letsencrypt
Per l'attivazione del certificato è necessario disporre di un nome di dominio il quale deve puntare all'indirizzo IP della macchina dov'è installato Odoo.
Se necessario, configurate opportunamente il router in modo che la chiamata arrivi direttamente al pc nattando l'indirizzo LAN
Fermare il servizio di nginx
systemctl stop nginx
Installare il programma cerbot
sudo apt install certbot
Procedere con la richiesta del certificato
sudo certbot certonly --standalone
seguire le indicazioni fornite dalla procedura di creazione del cerificato indicando tutti i dati richiesti, incluso il nome dominio.
Se tutto funziona correttamente, avrete un messaggio simile a questo:
Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mio_dominio.it/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mio_dominio.it/privkey.pem
Modificate nuovamente il file di configurazione /etc/nginx/sites-available/odoo indicando dove si trova il nuovo certificato
server { upstream backend-odoo { server 127.0.0.1:8069; } listen 443; server_name mio_dominio.it; ssl on; ssl_ciphers ALL:!ADH:!MD5:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_certificate /etc/letsencrypt/live/mio_dominio.it/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mio_dominio.it/privkey.pem; location / { proxy_pass http://backend-odoo; } }
Fate ripartire il servizio nginx
systemctl start nginx
Ora il servizio di Odoo risponderà correttamente al nome dominio indicato sull'url
https://mio_dominio.it
Rinnovo automatico del certificato letsencrypt
Il certificato appena creato ha una validità di 3 mesi dal momento del rilascio.
È consigialto aggiungere un processo automatico di rinnovo in modo che non dobbiamo ricordarci di farlo noi manualmente.
sudo crontab -e
0 4 1 * * /opt/letsencrypt/letsencrypt-auto renew
con questa configurazione, alle 4:00 di ogni primo del mese viene invocato il comando per aggiornare i certificati presenti.
Impostazione firewall
Chiudere tutte le porte non necessarie al servizio Odoo
sudo apt-install ufw sudo ufw status sudo ufw allow http sudo ufw allow https sudo ufw allow ssh sudo ufw enable sudo ufw status sudo reboot
File to ban
Questo servizio blocca temporaneamente gli indirizzi IP dopo un numero di tentativi di autenticazione non riusciti
Installazione:
sudo apt install fail2ban
Visualizzazione stato del servizio:
sudo fail2ban-client status sshd
Per monitorare le azioni recenti di Fail2ban:
sudo tail -F /var/log/fail2ban.log