Si të aktivizoni SSL për lidhjet PostgreSQL
Si parazgjedhje, të gjitha lidhjet PostgreSQL janë të pasigurta, gjë që mund të shkaktojë probleme sigurie kur ekzekutohet në mjedise prodhimi me trafik të lartë. Kriptimi SSL siguron që çdo e dhënë e transferuar të mos përgjohet nga askush në mes të një lidhjeje.
Ky tutorial do t'ju mësojë se si të aktivizoni SSL/TLS për lidhjet PostgreSQL.
Parakushtet
-
A Linux server. For our tutorial, we are running a Ubuntu 22.04 server.
-
A non-root sudo user.
-
A fully qualified domain name (FQDN) like
postgresql.example.com
. -
Make sure everything is updated.
$ sudo apt update $ sudo apt upgrade
-
Few packages that your system needs.
$ sudo apt install curl nano software-properties-common apt-transport-https ca-certificates lsb-release ubuntu-keyring -y
Some of these packages may already be installed on your system.
Hapi 1 - Konfiguro Firewall
Para se të instaloni ndonjë paketë, hapi i parë është konfigurimi i murit të zjarrit për të hapur portat për HTTP, HTTPS dhe PostgreSQL.
Kontrolloni statusin e murit të zjarrit.
$ sudo ufw status
Ju duhet të shihni diçka si më poshtë.
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Hapni portat HTTP, HTTPS dhe PostgreSQL në murin e zjarrit.
$ sudo ufw allow 5432
$ sudo ufw allow http
$ sudo ufw allow https
Kontrolloni statusin përsëri për të konfirmuar.
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
5432 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
5432 (v6) ALLOW Anywhere (v6)
Hapi 2 - Instaloni PostgreSQL 14
Ubuntu 22.04 dërgohet me PostgreSQL 14 si parazgjedhje. Për të instaluar, lëshoni komandën e mëposhtme.
$ sudo apt install postgresql postgresql-contrib
Paketa postgresql-contrib
përmban disa shërbime shtesë.
Ju gjithashtu mund të përdorni depo zyrtare APT të PostgreSQLs për të instaluar. Ekzekutoni komandën e mëposhtme për të shtuar çelësin PostgreSQL GPG.
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null
Shtoni depo APT në listën tuaj të burimeve.
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
Përditësoni depon e sistemit.
$ sudo apt update
Tani, mund të instaloni PostgreSQL duke përdorur komandën e përmendur më lart.
Kontrolloni statusin e shërbimit PostgreSQL.
$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Mon 2022-12-12 00:01:06 UTC; 19s ago
Main PID: 3497 (code=exited, status=0/SUCCESS)
CPU: 1ms
Dec 12 00:01:06 postgresql systemd[1]: Starting PostgreSQL RDBMS...
Dec 12 00:01:06 postgresql systemd[1]: Finished PostgreSQL RDBMS.
Mund të shihni që shërbimi është aktivizuar dhe funksionon si parazgjedhje.
Vendosni fjalëkalimin për llogarinë postgres
.
$ sudo -i -u postgres psql -c "ALTER USER postgres PASSWORD '<new_password>';"
Hapi 3 - Instaloni SSL
Për të instaluar një certifikatë SSL duke përdorur Lets Encrypt, duhet të shkarkojmë mjetin Certbot. Ne do të përdorim instaluesin e paketës Snapd për këtë. Ubuntu 22.04 vjen i para-instaluar me Snap.
Sigurohuni që versioni juaj i Snapd të jetë i përditësuar.
$ sudo snap install core
$ sudo snap refresh core
Instaloni Certbot.
$ sudo snap install --classic certbot
Përdorni komandën e mëposhtme për të siguruar që komanda Certbot të ekzekutohet duke krijuar një lidhje simbolike në drejtorinë /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Gjeneroni një certifikatë SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d postgresql.example.com
Komanda e mësipërme do të shkarkojë një certifikatë në drejtorinë /etc/letsencrypt/live/postgresql.example.com
në serverin tuaj.
Krijo një certifikatë grupi Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Hapi 4 - Konfiguro rinovimin e Certbot për PostgreSQL
PostgreSQL nuk ka leje për të hyrë në certifikatat nga dosja Lets Encrypt, prandaj nuk mund t'i themi që të përdorë certifikatat nga dosja drejtpërdrejt. Alternativa është të kopjoni certifikatat në drejtorinë PostgreSQL, por kjo funksionon vetëm përkohësisht pasi ato do të skadojnë dhe do t'ju duhet t'i kopjoni përsëri manualisht.
Metoda më e mirë është të përdorni një grep rinovimi i cili do të funksionojë automatikisht në çdo rinovim dhe do të kryejë operacionet e kopjimit.
Kërkoni direktorinë e të dhënave PostgreSQL.
$ sudo -i -u postgres psql -U postgres -c 'SHOW data_directory'
Krijoni skedarin e rinovimit dhe hapeni për redaktim.
$ sudo nano /etc/letsencrypt/renewal-hooks/deploy/postgresql.sh
Vendos kodin e mëposhtëm në të.
#!/bin/bash
umask 0177
DOMAIN=postgresql.example.com
DATA_DIR=/var/lib/postgresql/15/main
cp /etc/letsencrypt/live/$DOMAIN/fullchain.pem $DATA_DIR/server.crt
cp /etc/letsencrypt/live/$DOMAIN/privkey.pem $DATA_DIR/server.key
chown postgres:postgres $DATA_DIR/server.crt $DATA_DIR/server.key
# only for SELinux - CentOS, Red Hat
# chcon -t postgresql_db_t $DATA_DIR/server.crt $DATA_DIR/server.key
Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.
Bëjeni skedarin të ekzekutueshëm.
$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/postgresql.sh
Hapi 5 - Konfiguro PostgreSQL
Gjeni shtegun për skedarin e konfigurimit PostgreSQL.
$ sudo -i -u postgres psql -U postgres -c 'SHOW config_file'
Hapni skedarin për redaktim.
$ sudo nano /etc/postgresql/15/main/postgresql.conf
Gjeni seksionin Cilësimet e lidhjes dhe hiqni komentin e ndryshores listen_address
dhe ndryshoni vlerën e saj në *
. Sigurohuni që të duket si më poshtë.
listen_address = '*' # what IP address(es) to listen on;
Gjeni seksionin SSL dhe modifikoni skedarin që të përputhet me vlerat e mëposhtme.
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_prefer_server_ciphers = on
ssl_dh_params_file = '/etc/ssl/certs/dhparam.pem'
Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.
Hapi 6 - Konfiguro lidhjen PostgreSQL
Hapni skedarin /etc/postgresql/15/main/pg_hba.conf
për modifikim.
$ sudo nano /etc/postgresql/15/main/pg_hba.conf
Shtoni rreshtin e mëposhtëm për të aktivizuar SSL për PostgreSQL.
hostssl all all 0.0.0.0/0 scram-sha-256
Ruani skedarin duke shtypur Ctrl + X dhe duke futur Y kur ju kërkohet.
Hapi 7 - Rinovoni certifikatën
Drejtoni komandën e mëposhtme për të kryer një rinovim të detyruar. Kjo do të aktivizojë skriptin e vendosjes i cili kopjon certifikatat në vendndodhjen e duhur për PostgreSQL për t'u përdorur.
$ sudo certbot renew --force-renewal
Verifikoni që certifikatat janë kopjuar në drejtorinë e të dhënave PostgreSQL.
$ sudo ls /var/lib/postgresql/15/main/
Do të shihni daljen e mëposhtme që do t'ju tregojë certifikatat.
base pg_dynshmem pg_notify pg_snapshots pg_subtrans PG_VERSION postgresql.auto.conf server.crt
global pg_logical pg_replslot pg_stat pg_tblspc pg_wal postmaster.opts server.key
pg_commit_ts pg_multixact pg_serial pg_stat_tmp pg_twophase pg_xact postmaster.pid
Rinisni PostgreSQL për të aplikuar ndryshimet.
$ sudo systemctl restart postgresql
Hapi 8 - Testoni lidhjen
Lidhu me bazën e të dhënave nga një makinë tjetër me klientin PostgreSQL të instaluar.
$ psql -d "dbname=postgres sslmode=require" -h postgresql.example.com -U postgres
Ju duhet të shihni kërkesën e mëposhtme PostgreSQL. Ne po përdorim një klient me klient PostgreSQL 14 prandaj, do të shihni një paralajmërim për versionet e papajtueshme.
Password for user postgres:
psql (14.5 (Ubuntu 14.5-0ubuntu0.22.04.1), server 15.1 (Ubuntu 15.1-1.pgdg22.04+1))
WARNING: psql major version 14, server major version 15.
Some psql features might not work.
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=#
Kjo konfirmon një lidhje të suksesshme SSL.
Dilni nga guaska.
postgres=# \q
Nëse aplikacioni juaj po përdor një varg lidhjeje, përdorni atë në formatin e mëposhtëm për një lidhje SSL.
postgres://user::5432/database_name?sslmode=require
Mund ta ndryshoni modalitetin SSL në verify-full
ose verify-ca
nëse keni certifikatën rrënjë për Lets encrypt të disponueshme në /var/lib/postgresql/.postgresql
vendndodhja në anën e klientit.
Krijo drejtorinë /var/lib/postgresql/.postgresql
.
$ sudo mkdir -p /var/lib/postgresql/.postgresql
Certifikata e rrënjës Lets Encrypt është ISRG Root X1 e cila ndodhet në server në vendndodhjen /usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt
.
Kopjo certifikatën rrënjë në drejtorinë /var/lib/postgresql/.postgresql
.
$ sudo cp /usr/share/ca-certificates/mozilla/ISRG_Root_X1.crt /var/lib/postgresql/.postgresql/root.crt
Testoni lidhjen duke përdorur modalitetin verify-full
ose verify-ca
dhe do të shihni një lidhje të suksesshme.
Hapi 9 - Kontrolloni klientët
Hyni në shell PostgreSQL në server.
$ sudo -i -u postgres psql
Ekzekutoni komandën e mëposhtme SQL për të kontrolluar klientët e lidhur.
SELECT ssl.pid, usename, datname, ssl, ssl.version, ssl.cipher, ssl.bits, client_addr
FROM pg_catalog.pg_stat_ssl ssl, pg_catalog.pg_stat_activity activity
WHERE ssl.pid = activity.pid;
Ju duhet të shihni një dalje të ngjashme.
pid | usename | datname | ssl | version | cipher | bits | client_addr
------+----------+----------+-----+---------+------------------------+------+----------------
5126 | postgres | postgres | t | TLSv1.3 | TLS_AES_256_GCM_SHA384 | 256 | 122.161.84.220
5154 | postgres | postgres | f | | | |
(2 rows)
Kjo konfirmon lidhjen e klientit nga ana e serverit.
konkluzioni
Kjo përfundon tutorialin për aktivizimin e SSL në lidhjet PostgreSQL. Nëse keni ndonjë pyetje, postojini ato në komentet më poshtë.