PostgreSQL externe Erreichbarkeit

  • Hallo zusammen,

    ich habe mir einen vServer mit CentOS 7 (ssh-only) eingerichtet. Geplant ist darauf eine Anwendung laufen zu lassen, die Daten in einer lokalen PostgreSQL Datenbank ablegt. Remotekommunikation mit der Datenbank muss möglich sein.


    Die Installation von PostgreSQL (11) war kein Problem. Ist als Dienst eingerichtet und lokaler Zugriff funktioniert. Ich habe den Remotezugriff wie bspw. hier beschrieben eingerichtet und den Server neu gestartet. Leider scheitern Verbindungen dorthin:

    Code
    psql -h IPADRESSE -U postgres
    psql: konnte nicht mit dem Server verbinden: Keine Route zum Zielrechner
        Läuft der Server auf dem Host »IPADRESSE« und akzeptiert er
        TCP/IP-Verbindungen auf Port 5432?


    Ein Scan mit nmap zeigt auch nur einen Port, undzwar ssh:

    Code
    Not shown: 999 filtered ports
    PORT   STATE SERVICE
    22/tcp open  ssh


    Wie kann ich erreichen dass Port 5432 ebenfalls extern erreichbar ist?


    Lieben Dank für alle Hinweise :)

  • Du müsstest auch die postgresql.conf entsprechend anpassen, so dass der Dienst nicht nur auf localhost lauscht. Zudem werden wohl Anpassungen in der pg_hba.conf vorgenommen werden müssen, so dass Zugriffe von extern möglich werden. Ich möchte hier aber keine direkte Anleitung geben, da es nicht ganz ohne Risiko ist, wenn man Datenbanken so ohne weiteres öffentlich zugänglich betreibt. Daher hier nur kurz die entsprechende Hinweise für weitere Recherchen, damit du dich mit dem Thema ein bisschen besser auseinandersetzen kannst :)


    TL;DR

    * postgresql.conf anpassen
    * pg_hba.conf anpassen
    * firewalld anpassen


    MIt einem kurzen Blick in die Doku sollte das recht leicht umzusetzen sein.

  • Lese ich da CentOS? Dann werfe ich mal zusätzlich zu den oben genannten Hinweisen noch SELinux in den Raum (bitte nicht einfach deaktivieren, sondern konfigurieren, wenn der DB-Server schon im offenen Netz hängen muss). :)


    Gruß

    René

  • Hallo Thuulok,


    wie Paul schon geschrieben hat, kann es ein Risiko sein eine Datenbank direkt im Internet zugänglich zu machen.


    Du könntest statt dessen ein VPN,wie z.B.Tinc VPN verwenden. Das gibt es sowohl für Linux als auch für Windows, und ist einfach zu installieren.


    Oder den DB-Port per SSH Port forwarding tunneln. Damit wird ein Port von dem Server auf den eigenen Rechner getunnelt. Dann kann der DB-Client einfach 127.0.0.1:5432 verwenden, anstatt "Netcup-IP":5432 (127.0.0.1:5432 sofern man den gleichen Port verwendet, und lokal kein Postgre läuft. Sonst halt einen anderen nehmen.)

    Müsste unter Linux etwa so aussehen:

    ssh -L 127.0.0.1:5432:127.0.0.1:5432 "Netcup-IP-oder-Domain"

    Unter Windows hat putty ein GUI um die Daten einzutragen.

  • Vielen Dank für die Hinweise!

    pg_hba.conf hatte ich schon angepasst. Was fehlte, war die firewalld Konfiguration. Für postgresql gibt es bereits einen Service, von daher ist sie kinderleicht:

    Code
    firewall-cmd --zone=public --add-service=postgresql --permanent
    firewall-cmd --reload

    (Als root; ausgehend von der "public" Zone; permanenter Eintrag)


    Danke auch für die Infos zum Thema VPN. Da die Datenbank aktuell nur für Aggregate frei verfügbarer Daten genutzt werden soll, ist das Thema nicht so heiß für mich. Aber man weis ja nie was noch dazu kommt :).