Quais são as melhores práticas para hospedar os nós de Tezos com RPCs expostos?
4 respostas
- votos
-
- 2019-02-06
Ou:
- nãoexponha o RPCem todos (!),ou
- Coloque umproxynafrente com uma clareiramáxima restritiva .
Claro,para um whitelist ajudar,vocênão deveincluirendpointspotencialmenteprejudiciaisem seu whitelist ... Mesmo osendpoints aparentementeinofensivospodem ser usadosparanegação de serviço,e algunspontosfinais são surpreendentementeprejudiciais.
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
O quefazemospara TezRPC (quaispoderestezbox) sãoexecutados umproxyem cada servidor. Dentro desteproxy,vocêpodebloquear,restringire personalizarendpointspúblico voltados.
Atualmente,usamos umproxy leve construído com Nodejs,masirámudarpara umproxy deestilo NginX (melhor desempenho).
Aquiestá umexemplo de umproxy Node.js quebloqueia quasetodos osendpoints (ouvindo a API local RPCnaporta 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') })
-
Então sua listanegra aquipermitirá osnovosendpointsnapergunta,porexemplo.:(So your blacklist here will allow the new endpoints in the question, for example. :(
- 0
- 2019-02-06
- Tom
-
Euestava simplesmenteposando umexemplo de comoimplantar umproxypersonalizado,que é o que o usuárioestápedindo.Comomencionado,bloqueia "algunsendpoints".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
-
Euestava realmentebrincando com seusnósmais cedo hoje,notoumuito longostempos de resposta ~ 700ms (da 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
-
Simesperando que ointerruptornginx acelere-oYep hoping the nginx switch will speed it up
- 0
- 2019-02-06
- Stephen Andrews
-
Propor uma abordagem da listanegra é certamentemenos segura do que usar uma lista depermissões restritiva.Uma vez que a questãoestá relacionada àmelhorprática,a respostapode sermelhorada alterando oexemplopara um whitelist,a abordagem da listanegratem muitas deficiências de segurança.Owaspotem umbom recursonestetópico 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 - Pode ser relacionado ageolocalizaçãotambém,masessenão é oprincipaltópico aqui.Stephen - it could be related to geolocation as well, but that's not the main topic here.
- 0
- 2019-02-06
- Matej maht0rz Šima
-
Eu atualizei oexemplopara usar um whitelist.Issoexcluiránovose novosendpoints ruins.Porexemplo,houve algumaideiapara adicionar [RPCs relacionados aoinstantâneo] (https://gitlab.com/nomadic-labs/tezos/commit/3345423ebaa9b5ebd3f075124EAA7F0B47ACAED3).Espero que os doisendpoints queeupermitisse são razoavelmente 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
Uma das alternativas queeupoderiapensar,está usando
Conseil
: https://github.com/cryptonomic/conseilNomeu humildeentendimento O que a Conseilfaz,éfornecer uma APIestendidanotopo de umnó de Tezos/RPC.Etalvez (?) Algumas característicasextras quepoderiampermitir ativar/desativarendpoints ou outrasmedidas de segurança.
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.
-
Vocêpoderiaporfavorexpandir sua resposta?Obrigado!Could you please expand on your answer ? Thanks!
- 1
- 2019-02-06
- Ezy
-
Atualizou o comentário comexemplose explicação.Updated the comment with examples and explanation.
- 1
- 2019-02-06
- Matej maht0rz Šima
-
- 2019-02-09
Quando você sóprecisa do RPCpara simesmo,vocêtambémpode usar oencaminhamento daporta local do SSHparaencaminhar o RPC do Host Host da suamáquina remotapara amáquina local.
Porexemplo,comoprocesso defundo:
ssh -fNT -L 8732:localhost:8732 user@hostname
Eunão sei o quão seguro éembora.
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.
Seeu hospedarmeupróprionó,e. Como
Tezbox
faz,qual é amelhorpráticaem relação à acessibilidade de certosendpoints RPC?tzscanjá restringe determinadas chamadas,como descrito aqui .
Tezos docs Aconselhar como a seguinte:
com onovo Manejo dememória Atualizar ,osendpoints de RPC adicionaisestarão disponíveis,e podempossuir umperigo seexpostospublicamente sem saber.