Iptables et file_get_contents

Eléphant du PHP | 107 Messages

24 mars 2016, 19:19

Bonjour à tous,

J'ai un gros problème avec iptables qui bloque les requêtes sortantes de la fonction php file_get_contents().

Si je désactive iptables et que je fais un file_get_contents($url), ça marche. Mais quand iptables est actif, la fonction ne parvient pas à récupérer le contenu de l'url.

Quelle règle puis-je ajouter à mon firewall pour autoriser fiel get contents à fonctionner normalement?
voici mes règles iptables

Code : Tout sélectionner

#!/bin/sh # Vider les tables actuelles iptables -t filter -F # Vider les règles personnelles iptables -t filter -X # Interdire toute connexion entrante et sortante iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP # --- # Ne pas casser les connexions etablies iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Autoriser loopback iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT # ICMP (Ping) iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPT # --- # SSH In iptables -t filter -A INPUT -p tcp --dport 7678 -j ACCEPT # SSH Out iptables -t filter -A OUTPUT -p tcp --dport 7678 -j ACCEPT # DNS In/Out iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT # NTP Out iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT # HTTP + HTTPS Out iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 8080 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT # HTTP + HTTPS In iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 8080 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT #allow apple push gateway iptables -t filter -A INPUT -p tcp --dport 2195 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 2195 -j ACCEPT #allow mysql port iptables -A INPUT -p tcp -s 127.0.0.1 --sport 1024:65535 -d 127.0.0.1 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -s 127.0.0.1 --sport 3306 -d 127.0.0.1 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT # Allows SMTP access iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT # tmp: allow port 21 iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT iptables -t filter -A OUTPUT -p tcp --dport 21 -j ACCEPT #allow ports for samba -A RH-Firewall-1-INPUT -p udp -m udp --dport 137 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 138 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
en vous remerciant pour votre aide.

Eléphant du PHP | 107 Messages

24 mars 2016, 19:27

je pensais que file get_contents utilisait le port 80 par défaut, et je pensais avoir ouvert le port 80 sur mon serveur, compte tenu des règles énoncées ci-dessus.
N'est-ce pas le cas?

J'ai également essayé avec curl mais même résultat, file_get_contents renvoie false actuellement si iptables est actif:

$CURL = curl_init($url);
curl_setopt($CURL, CURLOPT_PORT, 80);
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);

var_dump(curl_exec($CURL)); //renvoie false

Eléphant du PHP | 107 Messages

24 mars 2016, 19:46

j'ai par exemple tenté d'ouvrir le port 100 pour ma requete curl:

iptables -t filter -A OUTPUT -p tcp --dport 100 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 100 -j ACCEPT

et ensuite je fais:
$CURL = curl_init($url);
curl_setopt($CURL, CURLOPT_PORT, 100);
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);

Toujours pareil, impossible de faire passer les données

ViPHP
ViPHP | 5924 Messages

26 mars 2016, 10:59

Bonjour,

L'URL est bien une URL http ? Tu as vérifié avec d'autres URL ? (d'autres sites)

Comment est ce que tu "actives" iptables ? Utilises tu un outil existant ?

Peux-tu fournir le résultat des commandes suivantes lorsque iptables est activé ?
# iptables -S
# ip6tables -S

Cordialement