PostgreSQL, auch bekannt als Postgres, ist ein universelles objektrelationales Datenbankverwaltungssystem. Es ist eine der fortschrittlichsten verfügbaren Open-Source-Datenbanken. Es gibt jedoch viele Sicherheitsbedenken und potenzielle Schwachstellen, wenn die Anwendung nicht ordnungsgemäß gesichert ist.
Wenn Sie ein System- oder Datenbankadministrator sind, müssen Sie wissen, wie Sie Postgres schützen, bevor Sie in die Produktion gehen.
In diesem Tutorial zeigen wir Ihnen, wie Sie den PostgreSQL-Server unter Ubuntu18.04 sichern.
Voraussetzungen
- Ein frisches Ubuntu 18.04 VPS auf der Atlantic.net Cloud Platform.
- Ein auf Ihrem Server konfiguriertes Root-Passwort.
Schritt 1 – Erstellen Sie einen Atlantic.Net Cloud-Server
Melden Sie sich zunächst bei Ihrem Atlantic.Net Cloud Server an. Erstellen Sie einen neuen Server und wählen Sie Ubuntu 18.04 als Betriebssystem mit mindestens 1 GB RAM. Stellen Sie über SSH eine Verbindung zu Ihrem Cloud-Server her und melden Sie sich mit den oben auf der Seite hervorgehobenen Anmeldeinformationen an.
Sobald Sie sich bei Ihrem Ubuntu 18.04-Server angemeldet haben, führen Sie den folgenden Befehl aus, um Ihr Basissystem mit den neuesten verfügbaren Paketen zu aktualisieren.
apt-get update -y
Schritt 2 – PostgreSQL installieren
apt-get install postgresql postgresql-contrib -y
Sobald die Installation abgeschlossen ist, starten Sie den PostgreSQL-Server und ermöglichen Sie ihm, beim Neustart zu starten:
systemctl start postgresql systemctl enable postgresql
Schritt 3 – Datenbank und Benutzer erstellen
Als Nächstes müssen Sie zu Testzwecken eine Datenbank und einen Benutzer erstellen.
Melden Sie sich zunächst mit dem folgenden Befehl bei der PostgreSQL-Shell an:
sudo -i -u postgres psql
Sie sollten die folgende Ausgabe sehen:
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)) Type "help" for help. postgres=#ein
Erstellen Sie als Nächstes einen Benutzer namens testuser und legen Sie das Passwort fest.
postgres=# CREATE USER testuser WITH PASSWORD 'password';
Erstellen Sie als Nächstes eine Datenbank namens testdb und gewähren Sie dem neuen Benutzer vollen Zugriff:
postgres=# CREATE DATABASE testdb OWNER testuser;
Verlassen Sie als Nächstes die PostgreSQL-Shell mit dem folgenden Befehl:
postgres=# \q
Schritt 4 – Abhöradresse konfigurieren
Für die Produktionsumgebung müssen Sie PostgreSQL so konfigurieren, dass es auf einer öffentlichen Schnittstelle lauscht.
Sie können diese Einstellung ändern, indem Sie die Datei /postgresql.conf:
bearbeitennano /etc/postgresql/10/main/postgresql.conf
Suchen Sie die folgende Zeile:
#listen_addresses = 'localhost'
Ersetzen Sie es durch Folgendes:
listen_addresses = 'localhost,your-server-ip'
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den PostgreSQL-Dienst neu, um die Änderungen zu implementieren:
systemctl restart postgresql
Schritt 5 – Konfigurieren Sie die zulässigen Hosts
Für eine bessere Sicherheit wird empfohlen, nur bestimmten IPs den Zugriff auf und die Änderung der PostgreSQL-Datenbank zu erlauben. Sie können dies tun, indem Sie die Datei pg_hba.conf:
bearbeitennano /etc/postgresql/10/main/pg_hba.conf
Suchen Sie die folgende Zeile:
# local DATABASE USER METHOD [OPTIONS]
Fügen Sie die folgende Zeile unter der obigen Zeile hinzu:
host testdb testuser client-ip-address/32 md5
Speichern und schließen Sie die Datei, wenn Sie fertig sind. Starten Sie dann den PostgreSQL-Dienst neu, um die Änderungen zu implementieren:
systemctl restart postgresql
Wo:
Host :Host ist ein einfacher oder SSL-verschlüsselter TCP/IP-Socket.
Datenbank :testdb ist der Name der Datenbank, mit der sich der Host verbinden kann.
Benutzer :testuser ist der Name des Benutzers, der die Verbindung herstellen darf.
Adresse :client-ip-address/32 Geben Sie die IP-Adresse des Client-Computers an.
auth-method :md5 ist der Name der Authentifizierungsmethode.
Schritt 6 – UFW-Firewall konfigurieren
apt-get install ufw -y
Als Nächstes wird empfohlen, die UFW-Firewallregel so zu konfigurieren, dass nur der IP des Clients Zugriff auf den PostgreSQL-Standardport 5432 gewährt wird.
WICHTIG: Bevor Sie beginnen, müssen Sie eine eingehende SSH-Verbindung über UFW zulassen, da Sie dadurch den Shell-Zugriff verlieren. Sie werden gesperrt und können keine Verbindung zu Ihrer Instanz herstellen.
Sie können den SSH-Dienst mit dem folgenden Befehl zulassen:
ufw allow ssh
Aktivieren Sie als Nächstes die UFW-Firewall mit dem folgenden Befehl:
ufw enable
Lassen Sie als Nächstes PostgreSQL-Port 5432 mit dem folgenden Befehl nur für die IP-Adresse des Clients zu:
ufw allow from client-ip-address to any port 5432
Überprüfen Sie als Nächstes den Status der UFW-Regel mit dem folgenden Befehl:
ufw status
Sie sollten die folgende Ausgabe erhalten:
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 5432 ALLOW client-ip-address 22/tcp (v6) ALLOW Anywhere (v6)zulassen
Schritt 7 – Überprüfen Sie die Remote-Verbindung
Zu diesem Zeitpunkt ist der PostgreSQL-Server gesichert und nur über die IP des Clients zugänglich.
Um dies zu überprüfen, verbinden Sie Ihre PostgreSQL-Datenbank vom System des Kunden:
psql -U testuser -h postgres-server-ip -d testdb
Sie werden aufgefordert, das Passwort für den Testbenutzer einzugeben, wie unten gezeigt:
Password for user testuser:
Geben Sie Ihr Passwort ein und drücken Sie Enter . Sobald die Verbindung hergestellt wurde, sollten Sie die folgende Ausgabe erhalten:
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=>ein
Das war es für jetzt.
Schlussfolgerung
In der obigen Anleitung haben Sie gelernt, wie Sie PostgreSQL sichern, indem Sie PostgreSQL so konfigurieren, dass nur bestimmten Hosts Zugriff gewährt wird. Sie haben auch gelernt, wie Sie UFW konfigurieren, um nur Verbindungen von bestimmten Hosts zuzulassen. Sie sollten jetzt in der Lage sein, Ihren PostgreSQL-Server vor bestimmten Arten von Angriffen zu schützen. Beginnen Sie noch heute mit VPS-Hosting von Atlantic.Net!