PostgreSQL, noto anche come Postgres, è un sistema di gestione di database relazionale a oggetti generico. È uno dei database open source più avanzati disponibili. Tuttavia, ci sono molti problemi di sicurezza e potenziali vulnerabilità se l'applicazione non è protetta correttamente.
Se sei un amministratore di sistema o database, devi sapere come proteggere Postgres prima di entrare in produzione.
In questo tutorial, ti mostreremo come proteggere il server PostgreSQL su Ubuntu18.04.
Prerequisiti
- Un nuovo VPS Ubuntu 18.04 sulla piattaforma Atlantic.net Cloud.
- Una password di root configurata sul tuo server.
Fase 1:crea un server cloud Atlantic.Net
Per prima cosa, accedi al tuo server Atlantic.Net Cloud. Crea un nuovo server, scegliendo Ubuntu 18.04 come sistema operativo con almeno 1GB di RAM. Collegati al tuo Cloud Server tramite SSH e accedi utilizzando le credenziali evidenziate in alto nella pagina.
Dopo aver effettuato l'accesso al tuo server Ubuntu 18.04, esegui il comando seguente per aggiornare il tuo sistema di base con gli ultimi pacchetti disponibili.
apt-get update -y
Passaggio 2:installazione di PostgreSQL
apt-get install postgresql postgresql-contrib -y
Una volta completata l'installazione, avvia il server PostgreSQL e abilitalo all'avvio al riavvio:
systemctl start postgresql systemctl enable postgresql
Fase 3:crea database e utente
Successivamente, dovrai creare un database e un utente a scopo di test.
Innanzitutto, accedi alla shell di PostgreSQL con il seguente comando:
sudo -i -u postgres psql
Dovresti vedere il seguente output:
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) Type "help" for help. postgres=#
Quindi, crea un utente chiamato testuser e imposta la password.
postgres=# CREATE USER testuser WITH PASSWORD 'password';
Quindi, crea un database chiamato testdb e concedi l'accesso completo al nuovo utente:
postgres=# CREATE DATABASE testdb OWNER testuser;
Quindi, esci dalla shell di PostgreSQL con il seguente comando:
postgres=# \q
Fase 4:configurare l'indirizzo di ascolto
Per l'ambiente di produzione, dovrai configurare PostgreSQL per l'ascolto su un'interfaccia pubblica.
Puoi modificare questa impostazione modificando il file /postgresql.conf:
nano /etc/postgresql/10/main/postgresql.conf
Trova la riga seguente:
#listen_addresses = 'localhost'
Sostituiscilo con il seguente:
listen_addresses = 'localhost,your-server-ip'
Salva e chiudi il file quando hai finito. Quindi, riavvia il servizio PostgreSQL per implementare le modifiche:
systemctl restart postgresql
Fase 5:configurare gli host consentiti
Per una maggiore sicurezza, si consiglia di consentire solo a IP specifici di accedere e modificare il database PostgreSQL. Puoi farlo modificando il file pg_hba.conf:
nano /etc/postgresql/10/main/pg_hba.conf
Trova la riga seguente:
# local DATABASE USER METHOD [OPTIONS]
Aggiungi la seguente riga sotto la riga sopra:
host testdb testuser client-ip-address/32 md5
Salva e chiudi il file quando hai finito. Quindi, riavvia il servizio PostgreSQL per implementare le modifiche:
systemctl restart postgresql
Dove:
ospite :l'host è un socket TCP/IP semplice o crittografato con SSL.
database :testdb è il nome del database a cui l'host può connettersi.
utente :testuser è il nome dell'utente autorizzato a effettuare la connessione.
indirizzo :client-ip-address/32 specifica l'indirizzo IP del computer client.
auth-method :md5 è il nome del metodo di autenticazione.
Passaggio 6:configurazione del firewall UFW
apt-get install ufw -y
Successivamente, si consiglia di configurare la regola del firewall UFW per concedere l'accesso alla porta predefinita di PostgreSQL 5432 solo all'IP del client.
IMPORTANTE: Prima di iniziare, dovrai consentire la connessione SSH in entrata tramite UFW, poiché ciò ti farà perdere l'accesso alla shell. Sarai bloccato e non potrai connetterti alla tua istanza.
Puoi consentire il servizio SSH utilizzando il seguente comando:
ufw allow ssh
Quindi, abilita il firewall UFW con il seguente comando:
ufw enable
Quindi, consenti alla porta 5432 di PostgreSQL solo l'indirizzo IP del client utilizzando il seguente comando:
ufw allow from client-ip-address to any port 5432
Quindi, controlla lo stato della regola UFW con il seguente comando:
ufw status
Dovresti ottenere il seguente output:
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 5432 ALLOW client-ip-address 22/tcp (v6) ALLOW Anywhere (v6)
Fase 7:verifica della connessione remota
A questo punto, il server PostgreSQL è protetto e accessibile solo dall'IP del client.
Per verificarlo, collega il tuo database PostgreSQL dal sistema del client:
psql -U testuser -h postgres-server-ip -d testdb
Ti verrà chiesto di fornire la password per testuser, come mostrato di seguito:
Password for user testuser:
Digita la tua password e premi Invio . Una volta stabilita la connessione, dovresti ottenere il seguente output:
psql (9.3.24, server 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) WARNING: psql major version 9.3, server major version 10. Some psql features might not work. SSL connection (cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256) Type "help" for help. testdb=>
Per ora è tutto.
Conclusione
Nella guida sopra, hai imparato come proteggere PostgreSQL configurando PostgreSQL per concedere l'accesso solo a host specifici. Hai anche imparato come configurare UFW per consentire connessioni solo da host specifici. Ora dovresti essere in grado di proteggere il tuo server PostgreSQL da determinati tipi di attacchi. Inizia oggi con l'hosting VPS di Atlantic.Net!