[Résolu] PostgreSQL & Iptables: problème connexion localhost

Bonjour à vous tous,

Ayant des connaissances réseau assez basiques, j’aimerai vous faire part d’un problème purement technique que je n’arrive pas à résoudre. J’ai fait plusieurs recherches sur les forums, malheureusement en vain…

Voici un résumé :
J’utilise une dédibox sous Debian pour une utilisation personnelle où j’y ai installé une application web qui interroge une base PostgreSQL installée sur la même machine.
Malheureusement, il m’est impossible de configurer mon application sur l’adresse “localhost”!
La seule parade trouvée a été de passer en IPv6 avec l’adresse “::1”.

Après plusieurs tests, j’ai remarqué que de simples appels Telnet généraient le même problème.
Sur “127.0.0.1” la commande mouline pendant 5/6 minutes puis m’éjecte.
Sur “::1” la connection se fait instantanément.
Sur “localhost” un premier essai est fait avec “127.0.0.1” sans succès, puis un nouvel essai sur “::1” réussi!

Voici ce que j’obtiens à l’écran :

kowak@sd-xxxxx:~$ telnet 127.0.0.1 5432
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection timed out

kowak@sd-xxxxx:~$ telnet ::1 5432
Trying ::1...
Connected to ::1.
Escape character is '^]'.
Connection closed by foreign host.

kowak@sd-xxxxx:~$ telnet localhost 5432
Trying 127.0.0.1...
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

Il faut aussi savoir que j’utilise Iptables pour me protéger à travers un parefeu.
Lorsque je désactive temporairement iptables, la connexion en 127.0.0.1 redevient instantanée!!
Voici ma configuration :

Chain INPUT (policy DROP)
target     prot opt source               destination
fail2ban-ssh  tcp  --  anywhere             anywhere            multiport dports ssh
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  [MyIP*]              anywhere            tcp dpt:ssh
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:telnet
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  [MyIP*]              anywhere            tcp dpt:postgresql
ACCEPT     tcp  --  [MyIP*]              anywhere            tcp dpt:mysql
ACCEPT     tcp  --  88.191.254.0/24      anywhere            tcp dpt:snmp state NEW,ESTABLISHED
ACCEPT     udp  --  88.191.254.0/24      anywhere            udp dpt:snmp state NEW,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
ACCEPT     udp  --  anywhere             anywhere            udp dpt:ntp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssmtp
ACCEPT     tcp  --  88.191.254.0/24      anywhere            tcp dpt:snmp state NEW,ESTABLISHED
ACCEPT     udp  --  88.191.254.0/24      anywhere            udp dpt:snmp state NEW,ESTABLISHED

Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

[MyIP*] : accès au SSH, PostgreSQL et MySQL uniquement depuis mon poste, interdit pour tous les autres.

A mon humble avis, j’ai certainement du rater quelque chose dans les configurations d’iptables, mais je tourne en rond…

Auriez-vous une idée ?

Par avance merci :wink:

envoi tes règles iptables ça ira plus vite.

sinon valable pour mysql, je ne sais pas pour posresql, mais la connexion via le socket réseau est plus lente que par le fichier d’echange (plus le nom exacte). donc en local il n’est pas forcement conseillé d’utilise le socket reseau.

mais c’est clair que si tu commence à filtrer le localhost avec iptables tu auras des ennuis :smiley:

Merci d’avoir pris le temps de me répondre ^^
Voici les fameuses règles en lignes de commande cette fois ci :

IPT=/sbin/iptables
F2B=/etc/init.d/fail2ban

# Mon adresse IP publique
KOWAK_IP=xxx.xxx.xxx.xxx

echo Arret de Fail2Ban...
$F2B stop

modprobe ip_conntrack_ftp

echo Mise en place des regles...
$IPT -F
$IPT -X
$IPT -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# regles: SSH (uniquement depuis chez moi)
$IPT -A INPUT -p tcp --dport 22 --source $KOWAK_IP -j ACCEPT

# regles: DROP partout par defaut
$IPT -t filter -P INPUT   DROP
$IPT -t filter -P FORWARD DROP
$IPT -t filter -P OUTPUT  DROP

# regles: PING
$IPT -A INPUT  -p icmp -j ACCEPT
$IPT -A OUTPUT -p icmp -j ACCEPT

# regles: DNS, HTTP, HTTPS, etc...
$IPT -A INPUT -p tcp --dport 23 -j ACCEPT
$IPT -A INPUT -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp --dport 443 -j ACCEPT

# regles: Autoriser l'envoie de requetes DNS, FTP, HTTP, HTTPS, NTP
$IPT -A OUTPUT -p tcp --dport 20 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 21 -j ACCEPT
$IPT -A OUTPUT -p udp --dport 53 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 80 -j ACCEPT
$IPT -A OUTPUT -p udp --dport 123 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 443 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 465 -j ACCEPT

# regles: Acces uniquement depuis chez moi (PostgreSQL, MySQL)
$IPT -A INPUT -p tcp --dport 5432 --source $KOWAK_IP -j ACCEPT
$IPT -A INPUT -p tcp --dport 3306 --source $KOWAK_IP -j ACCEPT

# regles: Monitoring Dedibox
$IPT -A INPUT  -i eth0 -p tcp --dport 161 --source 88.191.254.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT  -i eth0 -p udp --dport 161 --source 88.191.254.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o eth0 -p tcp --dport 161 --source 88.191.254.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o eth0 -p udp --dport 161 --source 88.191.254.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT

echo Redemarrage de Fail2Ban...
$F2B start
echo Firewall demarre avec succes!
exit 0

Qu’est-ce qui cloche??? :confused:

Ce n’est pourtant pas bien dur. Tu veux te connecter en TCP sur le port 5432 à l’adresse locale 127.0.0.1, par défaut depuis la même adresse. La connexion passera par l’interface de loopback. Donc tu regardes si le jeu de règles accepte ce type de connexion, en entrée et en sortie puisque c’est sur la même machine. Tout ce que je vois, c’est une règle qui autorise la connexion en entrée - mais pas en sortie - sur le port 5432 depuis l’adresse $KOWAK_IP.

Le plus simple est d’accepter le trafic sur l’interface de loopback car, comme l’a fort justement écrit Thomas, ne pas le faire revient à s’exposer à des ennuis.

iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT

Superbe! Le problème était bien là :wink:

Effectivement quand on y réfléchit un peu ça parait évident, il me manquait juste les commandes pour résoudre ce nœud!

Merci à tous les deux!!