Substrate inclut des mesures anti-spam par IP. Si vous avez un reverse proxy devant votre nœud Duniter v2, alors le nœud Duniter v2 verra tout le trafic extérieur comme provenant de la même IP et bannira tout le monde.
Vous devez configurer votre reverse proxy pour qu’il écrase les en-têtes X-Real-IP et/ou X-Forwarded-For.
Il faut également lancer votre nœud Duniter avec l’option --rpc-rate-limit-trust-proxy-headers pour qu’il prenne en compte ces en-têtes. Par défaut, il ne les utilise pas, car ils peuvent être fournis arbitrairement par un spammeur.
Exemple de configuration nginx pour fournir ces en-têtes. Il faut bien fournir les deux, sinon l’un des deux peut être falsifié par un spammeur.
location / {
proxy_pass http://127.0.0.1:9944;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
# On supprime Forwarded pour éviter de relayer une valeur client.
proxy_set_header Forwarded "";
# Si RPC WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Il faut activer les logs target rpc au niveau debug avec l’option CLI -l rpc=debug ou la variable d’environnement RUST_LOG=rpc=debug, puis grep les logs pour rechercher proxy_ip=. Si proxy_ip=None (ou toujours l’IP du reverse proxy), alors ce n’est pas bon.
A t’on moyen de savoir lesquelles ? Histoire de savoir si un client App peut tomber dans ce cas. Par exemple Cesium v1 tombait parfois dans de limite rate sur l’api BMA de Duniter v1, le détectait via l’erreur, puis retentait plus tard ou changait de nœuds.
J’ai regardé de plus près : il semble que le log en question ne s’affiche que dans des conditions qui n’ont pas de sens; probablement un bug de Substrate. Pour voir le log s’afficher, il faut whitelister au moins une IP. Oui, c’est débile, je suis d’accord :
–rpc-rate-limit-whitelisted-ips 192.168.1.10/32
En plus substrate exige la notation CIDR avec un masque hôte pour les IP, utiliser /32 pour une IP v4 unique.
@elois Question supplémentaire, comme j’ai mis mes p2p derrière un reverse proxy également; est-ce qu’il y a un risque d’avoir le même genre de soucis ?