Bonjour tout le monde,
ça fait un moment que je travaille sur un site web pour un client et ma dernière mission était d'implementer une fonctionnalité realtime donc j'ai fait appel à NodeJS/Socket.IO.
En locale tout fonctionne à merveille, les clients se connectent et communiquent avec le serveur. Sur le serveur de production c'est different, le client est incappable de contacter le serveur.
Pour tester la connection j'ai créer un simple serveur socket:
var server = require('http').createServer();
var io = require('socket.io')(server);
const PORT = 3000;
io.on('connection', function (socket) {
console.log('A client Connected');
socket.on('test',function() {
console.log('A client sent a message');
socket.emit('receive');
});
});
console.log('starting server on port ', PORT);
io.listen(PORT);
Et sur ma page web j'ai inclut Socket.io et et j'utilise ça pour tester la connection:
var socket = io(window.location.origin+':3000');
// = io('https://monsite.exemple:3000');
socket.emit('test');
socket.on('receive',function () {
console.log('server response');
});
Mais, bien évidemment ça ne fonctionne pas -> Je dois ouvrir les ports de mon serveur;
En utilisant iptables j'ai essayer d'ouvrir le port 3000 mais rien n'y fais, il reste fermer. (J'ai essayer avec d'autre ports, par exemple 2424 mais le problème persiste)
Voici le resultat de iptables -L --line-numbers (voir INPUT ligne 5 et OUTPUT ligne 1)
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 fail2ban-postfix-sasl tcp -- anywhere anywhere multiport dports smtp
2 fail2ban-pureftpd tcp -- anywhere anywhere multiport dports ftp
3 fail2ban-dovecot-pop3imap tcp -- anywhere anywhere multiport dports pop3,pop3s,imap2,imaps
4 fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
5 ACCEPT tcp -- anywhere anywhere tcp dpt:3000
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:3000
Chain fail2ban-dovecot-pop3imap (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain fail2ban-postfix-sasl (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain fail2ban-pureftpd (1 references)
num target prot opt source destination
1 RETURN all -- anywhere anywhere
Chain fail2ban-ssh (1 references)
num target prot opt source destination
1 REJECT all -- (some IP) anywhere reject-with icmp-port-unreachable
2 RETURN all -- anywhere anywhere
En utilisant un client en locale (sur la machine de prod); la socket se connecte sans soucis.
Je ne comprends pas comment faire j'espère que vous pourrez m'aider et merci d'avance.
PS: Le site est en HTTPS (les ports 80,443 et sont donc déjà utilisé par apache)
PS2: J'ai fait un coup de /etc/init.d/networking restart sans succès
J'ai du mal à determiner l'interface de mon reseau; j'utilise google cloud. J'ai finalement reglé mon problème en créeant un second "Compute Engine" (+- un vps) et l'associé a un sous-domaine. Sur ce Compute Engine j'ai lancé le serveur socket sur le port 80. Le problème est reglé =)
Merci beaucoup pour ton aide jeanMat !
Essaye ça
iptables -A INPUT -i eth0 -p tcp --dport 3000
A personnaliser si ton interface réseau n'est pas eth0
sous un distrib de type debian, un simple "ifconfig" te permetra de connaître le nom de ton interface réseau