Quelles sont les meilleures pratiques d'hébergement de nœuds Tezos avec des RPC exposés?
4 réponses
- votes
-
- 2019-02-06
soit:
- N'exposezpas le RPC dutout (!) ou
- Mettez unproxy à l'avant avec un Whitelist .
Bien sûr,pour un whitelist à aider,vousne devezpasinclure despoints d'extrémitépotentiellementnocifs dans votreblancheur ...même apparemment despointsfinauxinoffensivespourraient être utiliséspour le déni de service,et certainspoints determinaison sont étonnammentnocifs.
Either:
- don't expose the RPC at all (!), or
- put a proxy in front with a maximally restrictive whitelist.
Of course, for a whitelist to help, you must not include potentially harmful endpoints in your whitelist... Even seemingly harmless endpoints might be used for denial of service, and some endpoints are surprisingly harmful.
-
- 2019-02-06
Ce quenousfaisonspour TezRPC (quelspouvoirs Tezbox)estexécuté unproxy sur chaque serveur. Dans ceproxy,vouspouvezensuitebloquer,restreindreet personnaliser lespoints d'extrémité dupublic.
Nous utilisons actuellement unproxy léger construit avec NodeJS,maisbasculera vers unproxy de style Nginx (meilleureperformance).
Voici unexemple denœud.js Proxy quibloquepresquetous lespointsfinaux (écoutant l'API RPC local sur leport 8732):
var express = require('express'); var request = require('request'); var app = express(); var cors = require('cors') var apiServerHost = "http://localhost:8732"; app.use(cors()) app.use('/', function(req, res) { // Whitelist. Be afraid. if (req.url === '/chains/main/blocks/head' || req.url === '/chains/main/blocks/head/hash') { var url = apiServerHost + req.url; req.pipe(request(url)).pipe(res); } else { res.status(404).send('Not available'); } }); app.listen(process.env.PORT || 3000, function () { console.log('TZProxy running') })
What we do for TezRPC (which powers TezBox) is run a proxy on each server. Within this proxy, you can then block, restrict and customize public facing endpoints.
We currently use a light proxy built with NodeJS, but will switch over to a nginx style proxy (better performance).
Here is an example of a node.js proxy that blocks almost all endpoints (listening to the local RPC API on port 8732):
var express = require('express'); var request = require('request'); var app = express(); var cors = require('cors') var apiServerHost = "http://localhost:8732"; app.use(cors()) app.use('/', function(req, res) { // Whitelist. Be afraid. if (req.url === '/chains/main/blocks/head' || req.url === '/chains/main/blocks/head/hash') { var url = apiServerHost + req.url; req.pipe(request(url)).pipe(res); } else { res.status(404).send('Not available'); } }); app.listen(process.env.PORT || 3000, function () { console.log('TZProxy running') })
-
Donc,votre listenoireicipermettra auxnouveauxpoints d'extrémité de la question,parexemple.:(So your blacklist here will allow the new endpoints in the question, for example. :(
- 0
- 2019-02-06
- Tom
-
Jepostais simplement unexemple de déploiement deproxypersonnalisé,ce que l'utilisateur demande.Commementionné,ilbloque "certainspoints d'extrémité".I was simply posting an example of how to deploy a custom proxy, which is what the user is asking for. As mentioned, it blocks "some endpoints".
- 0
- 2019-02-06
- Stephen Andrews
-
Jejouaisen fait avec vosnœudsplustôt aujourd'hui,remarquais destemps de réponse assez longs ~ 700ms (d'Europe).I was actually playing around with your nodes earlier today, noticed pretty long response times ~700ms (from Europe).
- 0
- 2019-02-06
- Matej maht0rz Šima
-
YEPespérant que le commutateur Nginx sera accéléréYep hoping the nginx switch will speed it up
- 0
- 2019-02-06
- Stephen Andrews
-
Laproposition d'une approche listenoireest certainementmoins sécurisée que d'utiliser unblancheur restrictif.Étant donné que la questionest liée à lameilleurepratique,la réponsepourrait être amélioréeen changeant l'exemple à un whitelist,l'approche listenoire a denombreuses lacunes de sécurité.Owasp avoir unebonne ressource sur ce sujet https://www.owasp.org/index.php/input_validation_cheat_sheetProposing a blacklist approach is certainly less secure than using a restrictive whitelist. Since the question is related to best practice, the answer could be improved by changing the example to a whitelist, the blacklist approach has many security shortcomings. Owasp have a good resource on this topic https://www.owasp.org/index.php/Input_Validation_Cheat_Sheet
- 2
- 2019-02-06
- xtzbaker
-
Stephen - Celapourrait également être lié à lagéolocalisation,mais cen'estpas le sujetprincipalici.Stephen - it could be related to geolocation as well, but that's not the main topic here.
- 0
- 2019-02-06
- Matej maht0rz Šima
-
J'aimis àjour l'exemplepour utiliser un whitelist.Celaexclura d'ancienset denouveaux critères demauvaisbout.Parexemple,il y aeu uneidée de l'ajout de [RPCS liés à Snapshot] (https://gitlab.com/nomadic-labs/tezos/commit/3345423EBAA9B5EBD3F075124AA7F0B47ACAED3).J'espère que les deuxpointsfinaux quej'ai autorisés sont raisonnablementen sécurité ...I updated the example to use a whitelist. This will exclude old and new bad endpoints. For example, there was some idea to add [snapshot-related RPCs](https://gitlab.com/nomadic-labs/tezos/commit/3345423ebaa9b5ebd3f075124eaa7f0b47acaed3). I hope the two endpoints I allowed are reasonably safe...
- 0
- 2019-07-04
- Tom
-
- 2019-02-06
Une des alternatives queje pouvaispenser,utilise
Conseil
: https://github.com/cryptonomic/conseilDansmon humble compréhension Ce que le Conseilfait,fournit une API étendue au-dessus d'unnœud Tezos-noeud/RPC.Etpeut-être (?) Quelquesfonctionnalités supplémentairespouvantpermettre deperfectionner/désactiver despoints d'extrémité ou d'autresmesures de sécurité.
One of the alternatives i could think of, is using
Conseil
: https://github.com/Cryptonomic/ConseilIn my humble understanding what Conseil does, is provide an extended API on top of a tezos-node/rpc. And perhaps (?) some extra features which could allow enabling/disabling endpoints or other security measures.
-
Pourriez-vous s'il vousplaît développer votre réponse?Merci!Could you please expand on your answer ? Thanks!
- 1
- 2019-02-06
- Ezy
-
Mise àjour du commentaire avec desexempleset desexplications.Updated the comment with examples and explanation.
- 1
- 2019-02-06
- Matej maht0rz Šima
-
- 2019-02-09
Lorsque vousn'avezbesoin que du RPCpour vous-même,vouspouvez également utiliser letransfert deport local SSHpourtransférer le RPC àpartir du localhost de votremachine distante à la localhost de votremachine locale.
Parexemple,commeprocessus d'arrière-plan:
SSH -FNT -L 8732: Localhost: 8732 User @ Nom d'hôte
Jene saispas à quelpoint ceciesten sécurité.
When you only need the RPC for yourself you could also use ssh local port forwarding to forward the RPC from the localhost of your remote machine to the localhost of your local machine.
For instance, as a background process:
ssh -fNT -L 8732:localhost:8732 user@hostname
I don't know how safe this is though.
Sij'espèremonproprenoeud,parexemple. Comme
TezBox
fait,quelleest lameilleurepratique concernant l'accessibilité de certainspoints d'extrémité RPC?TZScan restreint déjà certains appels,comme décritici .
tezos Docs Conseillez comme suit:
avec lenouveau Gestion de lamémoire Mise àjour ,despoints d'extrémité RPC supplémentaires seront disponibleset ilspeuventposséder un danger siexposépubliquement sans savoir.