PostgreSQL, également connu sous le nom de Postgres, est un système de gestion de base de données relationnelle objet à usage général. C'est l'une des bases de données open source les plus avancées disponibles. Cependant, il existe de nombreux problèmes de sécurité et des vulnérabilités potentielles si l'application n'est pas sécurisée correctement.
Si vous êtes un administrateur système ou de base de données, vous devez savoir comment protéger Postgres avant de passer en production.
Dans ce tutoriel, nous allons vous montrer comment sécuriser le serveur PostgreSQL sur Ubuntu18.04.
Prérequis
- Un nouveau VPS Ubuntu 18.04 sur la plate-forme cloud d'Atlantic.net.
- Un mot de passe root configuré sur votre serveur.
Étape 1 - Créer un serveur cloud Atlantic.Net
Tout d'abord, connectez-vous à votre serveur Atlantic.Net Cloud. Créez un nouveau serveur en choisissant Ubuntu 18.04 comme système d'exploitation avec au moins 1 Go de RAM. Connectez-vous à votre serveur cloud via SSH et connectez-vous à l'aide des informations d'identification mises en évidence en haut de la page.
Une fois que vous êtes connecté à votre serveur Ubuntu 18.04, exécutez la commande suivante pour mettre à jour votre système de base avec les derniers packages disponibles.
apt-get update -y
Étape 2 - Installer PostgreSQL
apt-get install postgresql postgresql-contrib -y
Une fois l'installation terminée, démarrez le serveur PostgreSQL et autorisez-le à démarrer au redémarrage :
systemctl start postgresql systemctl enable postgresql
Étape 3 - Créer une base de données et un utilisateur
Ensuite, vous devrez créer une base de données et un utilisateur à des fins de test.
Tout d'abord, connectez-vous au shell PostgreSQL avec la commande suivante :
sudo -i -u postgres psql
Vous devriez voir le résultat suivant :
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) Type "help" for help. postgres=#
Ensuite, créez un utilisateur nommé testuser et définissez le mot de passe.
postgres=# CREATE USER testuser WITH PASSWORD 'password';
Ensuite, créez une base de données nommée testdb et accordez un accès complet au nouvel utilisateur :
postgres=# CREATE DATABASE testdb OWNER testuser;
Ensuite, quittez le shell PostgreSQL avec la commande suivante :
postgres=# \q
Étape 4 - Configurer l'adresse d'écoute
Pour l'environnement de production, vous devrez configurer PostgreSQL pour écouter sur une interface publique.
Vous pouvez modifier ce paramètre en éditant le fichier /postgresql.conf :
nano /etc/postgresql/10/main/postgresql.conf
Recherchez la ligne suivante :
#listen_addresses = 'localhost'
Remplacez-le par ce qui suit :
listen_addresses = 'localhost,your-server-ip'
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le service PostgreSQL pour implémenter les modifications :
systemctl restart postgresql
Étape 5 - Configurer les hôtes autorisés
Pour une meilleure sécurité, il est recommandé de n'autoriser que des adresses IP spécifiques à accéder et à modifier la base de données PostgreSQL. Vous pouvez le faire en éditant le fichier pg_hba.conf :
nano /etc/postgresql/10/main/pg_hba.conf
Recherchez la ligne suivante :
# local DATABASE USER METHOD [OPTIONS]
Ajoutez la ligne suivante sous la ligne ci-dessus :
host testdb testuser client-ip-address/32 md5
Enregistrez et fermez le fichier lorsque vous avez terminé. Ensuite, redémarrez le service PostgreSQL pour implémenter les modifications :
systemctl restart postgresql
Où :
hôte :l'hôte est un socket TCP/IP simple ou crypté SSL.
base de données :testdb est le nom de la base de données à laquelle l'hôte peut se connecter.
user :testuser est le nom de l'utilisateur autorisé à établir la connexion.
adresse :client-ip-address/32 spécifiez l'adresse IP de l'ordinateur client.
auth-method :md5 est le nom de la méthode d'authentification.
Étape 6 - Configurer le pare-feu UFW
apt-get install ufw -y
Ensuite, il est recommandé de configurer la règle de pare-feu UFW pour accorder l'accès au port 5432 par défaut de PostgreSQL uniquement à l'adresse IP du client.
IMPORTANT : Avant de commencer, vous devrez autoriser la connexion SSH entrante via UFW, car cela vous fera perdre l'accès au shell. Vous serez verrouillé et incapable de vous connecter à votre instance.
Vous pouvez autoriser le service SSH à l'aide de la commande suivante :
ufw allow ssh
Ensuite, activez le pare-feu UFW avec la commande suivante :
ufw enable
Ensuite, autorisez le port PostgreSQL 5432 uniquement à l'adresse IP du client à l'aide de la commande suivante :
ufw allow from client-ip-address to any port 5432
Ensuite, vérifiez l'état de la règle UFW avec la commande suivante :
ufw status
Vous devriez obtenir le résultat suivant :
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 5432 ALLOW client-ip-address 22/tcp (v6) ALLOW Anywhere (v6)
Étape 7 - Vérifier la connexion à distance
À ce stade, le serveur PostgreSQL est sécurisé et accessible uniquement à partir de l'IP du client.
Pour le vérifier, connectez votre base de données PostgreSQL depuis le système du client :
psql -U testuser -h postgres-server-ip -d testdb
Il vous sera demandé de fournir le mot de passe pour testuser, comme indiqué ci-dessous :
Password for user testuser:
Tapez votre mot de passe et appuyez sur Entrée . Une fois la connexion établie, vous devriez obtenir le résultat suivant :
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=>
C'est tout pour le moment.
Conclusion
Dans le guide ci-dessus, vous avez appris à sécuriser PostgreSQL en configurant PostgreSQL pour n'accorder l'accès qu'à des hôtes spécifiques. Vous avez également appris à configurer UFW pour autoriser les connexions uniquement à partir d'hôtes spécifiques. Vous devriez maintenant être en mesure de protéger votre serveur PostgreSQL de certains types d'attaques. Commencez dès aujourd'hui avec l'hébergement VPS d'Atlantic.Net !