Listen_addresses può davvero essere impostato su un elenco?


32

Ho una VM con indirizzo IP 192.168.0.192 che esegue postgreSQL.

Se lo specifico

listen_addresses = '*'

quindi posso collegarmi da un'altra VM al 192.168.0.191 e da localhost.

Ma non riesco a usare un elenco per dire a postgreSQL di usare quei due indirizzi. Se cambio a hear_addresses in un elenco:

listen_addresses = '192.168.0.191, localhost'

quindi non riesco più a connettermi da 192.168.0.191.

Ho notato che quasi tutti gli esempi su stackexchange impostano hear_addresses su '*'. Questo perché il modulo elenco non funziona?

Risposte:


45

Sì, listen_addressespuò essere impostato su un elenco di indirizzi sull'host locale a cui associarsi per l'ascolto.

Nel tuo esempio:

hear_addresses = '192.168.0.191, localhost'

Se il computer locale dispone di IP 192.168.0.192, è necessario specificare tale IP, non l' 192.168.0.191IP host remoto . PostgreSQL non può essere associato all'indirizzo IP di un host remoto.

Non stai dicendo "a chi è consentito connettersi", stai dicendo "su quali interfacce PostgreSQL dovrebbe accettare connessioni". Il bit "a chi è autorizzato a connettersi" è successivo ed è configurato in pg_hba.conf.

Quindi: prova '192.168.0.192, localhost'. O semplicemente *, dal momento che probabilmente vuoi davvero ascoltare su tutte le interfacce di rete.


1
Funziona. Quindi c'è qualche differenza pratica tra l'elenco e '*'?
zabouti,

10
@zabouti Certo. Se il tuo server ha (diciamo) due interfacce di rete esterne, puoi dire a PostgreSQL di collegarsi solo a una di esse, quindi non è nemmeno possibile stabilire una connessione TCP con Pg sull'altra. È principalmente un ulteriore livello di sicurezza per un sistema che ha più interfacce per diversi domini di sicurezza. Abbastanza utile in combinazione con VLAN, switch virtuali, ecc. L'uso più comune è l'impostazione in localhostmodo che le connessioni TCP / IP non siano possibili da alcuna interfaccia di rete esterna, solo l'indirizzo di loopback.
Craig Ringer,

1
@CraigRinger: un'ottima risposta!
franchi,

@CraigRinger dovresti aggiungere questi commenti alla tua risposta. Sono informazioni molto utili.
João Portela,

1
Sì, penso che il commento potrebbe essere persino migliore della risposta. Rock on Craig!
Darth Egregious,

2

Ho scoperto che invece di usarlo localhostdeve essere 127.0.0.1se stai specificando anche altri indirizzi.

Quindi nel mio caso di ascolto sull'indirizzo IP dell'host Docker e su localhost, ma non sull'IP esterno, questo non funziona (ricevo una connessione rifiutata dall'interno dei miei contenitori Docker):

listen_addresses = '172.17.0.1, localhost'

Ma questo fa:

listen_addresses = '172.17.0.1, 127.0.0.1'

0

La voce 0.0.0.0 consente l'ascolto di tutti gli indirizzi IPv4 e :: consente l'ascolto di tutti gli indirizzi IPv6. Se l'elenco è vuoto, il server non è in ascolto su nessuna interfaccia IP, nel qual caso solo i socket di dominio Unix possono essere utilizzati per connettersi ad esso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.