¿Cuáles son las mejores prácticas para alojar nodos de Tezos con RPC expuestas?
4 respuestas
- votos
-
- 2019-02-06
Obien:
- noexponga la RPCen absoluto (!),o
- coloque unproxy alfrente con una listablanca extremadamente restrictiva.
Por supuesto,para que una listablanca le ayude,no debeincluirpuntosfinalespotencialmente dañinosen su listablanca ... Incluso lospuntosfinales aparentementeinofensivospueden usarsepara la denegación de servicio,y algunospuntosfinales son sorprendentemente dañinos.
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
Lo que hacemospara TezRPC (que alimenta a TezBox)esejecutar unproxyen cada servidor. Dentro deesteproxy,puedebloquear,restringir ypersonalizar lospuntos de conexiónpúblicos.
Actualmente usamos unproxy ligero construido con NodeJS,pero cambiaremos a unproxyestilonginx (mejor rendimiento).
Aquí hay unejemplo de unproxynode.js quebloquea casitodos lospuntosfinales (escuchando la API de RPC localen elpuerto 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') })
-
Entonces,su listanegra aquípermitirá losnuevospuntosfinalesen lapregunta,porejemplo.:(So your blacklist here will allow the new endpoints in the question, for example. :(
- 0
- 2019-02-06
- Tom
-
Simplementeestabapublicando unejemplo de cómoimplementar unproxypersonalizado,quees lo quepideel usuario.Como semencionó,bloquea "algunospuntosfinales".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
-
De hecho,estabajugando con susnodos hoy,notétiempos de respuestabastante largos ~ 700ms (desde Europa).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
-
Sí,esperando queelinterruptornginx lo acelereYep hoping the nginx switch will speed it up
- 0
- 2019-02-06
- Stephen Andrews
-
Proponer unenfoque de listanegraes ciertamentemenos seguro que usar una listablanca restrictiva.Dado que lapreguntaestá relacionada con lasmejoresprácticas,la respuestapodríamejorarse cambiandoelejemplo a una listablanca,elenfoque de la listanegratiene muchas deficiencias de seguridad.Owasptiene unbuen recurso sobreestetema 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:tambiénpodríaestar relacionado con lageolocalización,peroesenoeseltemaprincipal aquí.Stephen - it could be related to geolocation as well, but that's not the main topic here.
- 0
- 2019-02-06
- Matej maht0rz Šima
-
Actualicéelejemplopara usar una listablanca.Estoexcluirá lospuntosfinalesmalos antiguos ynuevos.Porejemplo,setuvo laidea de agregar [RPC relacionados coninstantáneas] (https://gitlab.com/nomadic-labs/tezos/commit/3345423ebaa9b5ebd3f075124eaa7f0b47acaed3).Espero que los dospuntosfinales quepermití sean razonablemente seguros ...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
Una de las alternativas que seme ocurrenes usar
Conseil
: https://github.com/Cryptonomic/ConseilEnmi humildeentendimiento,lo que hace Conseilesproporcionar una APIextendida sobre untezos-node/rpc.Y quizás (?) Algunas características adicionales quepodríanpermitir habilitar/deshabilitarterminales u otrasmedidas de seguridad.
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.
-
¿Podría ampliar su respuesta?¡Gracias!Could you please expand on your answer ? Thanks!
- 1
- 2019-02-06
- Ezy
-
Se actualizóel comentario conejemplos yexplicación.Updated the comment with examples and explanation.
- 1
- 2019-02-06
- Matej maht0rz Šima
-
- 2019-02-09
Cuando solonecesitael RPCpara usted,tambiénpuede usarel reenvío depuerto local sshpara reenviarel RPC desdeel localhost de sumáquina remota al localhost de sumáquina local.
Porejemplo,comoprocesoen segundoplano:
ssh -fNT -L 8732:localhost:8732 user@hostname
Sinembargo,no sé quétan seguroesesto.
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.
Si alojomi propionodo,p.ej. como hace
TezBox
,¿cuáles lamejorpráctica con respecto a la accesibilidad de ciertospuntosfinales de RPC?TzScan ya restringe ciertas llamadas,como se describe aquí .
Los docs de Tezos aconsejan lo siguiente:
Con lanueva gestión dememoria actualización ,habrápuntos de conexión RPC adicionales disponibles ypodrían representar unpeligro si seexponenpúblicamente sin saberlo.