Was sind die besten Praktiken für das Hosting von Tezos-Knoten mit exponierten RPCs?
4 Antworten
- Stimmen
-
- 2019-02-06
entweder:
- .
- Setzen Sie den RPCnicht überhaupt (!) oder aus
- Setzen Sieeinen Proxymit einemmaximal restriktiven whitelist ein.
Natürlich,umeinen Whitelisten zu helfen,dürfen Sienichtpotenziell schädliche Endpunktein Ihre Whitelisteinschließen ... Sogar scheinbar harmlose Endpunkte könnenfür den Dauer des Dienstes verwendet werden,undeinige Endpunkte sind überraschend schädlich.
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
Was wirfür Tezrpctun (welche Power TEZBOX) aufjedem Serverein Proxy ausführen wird. Innerhalb dieses Proxys können Sie öffentliche Endpunkteblockieren,einschränken und anpassen.
Wir verwenden derzeiteinen mit Nodejsgebauten leichten Proxy,derjedoch zueinem NginX-Style-Proxy (bessere Leistung) umgewandelt wird.
Hieristein Beispieleines Node.js-Proxy,derfast alle Endpunkteblockiert (hört auf die lokale RPC-API auf 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') })
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') })
-
Ihre Blacklisterlaubt also hier dieneuen Endpunktein der Frage.:(So your blacklist here will allow the new endpoints in the question, for example. :(
- 0
- 2019-02-06
- Tom
-
Ich habeeinfachein Beispiel dafürgepostet,wieein benutzerdefinierter Proxybereitgestellt wird,wonach der Benutzerfragt.Wieerwähnt,blockiertes "einige Endpunkte".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
-
Ich habe heutefrühermit deinen Knotengespielt,bemerkte ziemlich lange Reaktionszeiten ~ 700ms (aus 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
-
Yep hofft,dass der Nginx-SchalteresbeschleunigtYep hoping the nginx switch will speed it up
- 0
- 2019-02-06
- Stephen Andrews
-
Das Vorschlageiner Blacklist-Ansatzist sicherlich weniger sicher alsmit einem restriktiven Whitelist.Da die Fragemit bewährter Praxis zusammenhängt,könnte die Antwort verbessert werden,indem das Beispiel aneinen Whitelistgeändert wird,der Blacklist-Ansatz hat viele Sicherheitsdefunden.OWAP habeneine gute Ressource auf diesem Thema 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 -es könnte auchmit Geolocation zusammenhängen,aber dasist hiernicht das Hauptthema.Stephen - it could be related to geolocation as well, but that's not the main topic here.
- 0
- 2019-02-06
- Matej maht0rz Šima
-
Ich habe das Beispiel aktualisiert,umeinen Whitelisten zu verwenden.Dies schließt alte undneue schlechte Endpunkte aus.Zum Beispielgabeseinige Idee,[Snapshot-online-RPCs] hinzuzufügen (https://gitlab.com/nomadic-labs/tezos/commit/3345423EBAA9B5EBD3F075124AA7F0BD3F075124AA7F0BD3F07AG3).Ich hoffe,dass diebeiden Endpunkte,dieicherlaubt,einigermaßen sicher sind ...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
Einer der Alternativen,an dieich denken konnte,nutzt
Conseil
: https://github.com/cryptonomic/conseilInmeinem bescheidenen Verständnis,welches Conseilist,lieferteine erweiterte API aufeinem Tezos-Knoten/RPC.Und vielleicht (?) Einige zusätzliche Funktionen,die die Aktivierung/Deaktivierung von Endpunkten oder anderen Sicherheitsmaßnahmenermöglichen könnten.
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.
-
Könnten Siebitte auf Ihre Antwort ausdehnen?Vielen Dank!Could you please expand on your answer ? Thanks!
- 1
- 2019-02-06
- Ezy
-
Der Kommentarmit Beispielen und Erläuterungen hat aktualisiert.Updated the comment with examples and explanation.
- 1
- 2019-02-06
- Matej maht0rz Šima
-
- 2019-02-09
Wenn Sienur den RPCfür sich selbstbenötigen,können Sie auch SSH-Local-Portweiterleitung verwenden,um den RPC von der LOCALHOST Ihrer Remote-Maschine an die Lokalhost Ihres lokalen Computers weiterzuleiten.
zum Beispiel als Hintergrundvorgang:
SSH -FNT -L 8732: localhost: 8732 Benutzer @ Hostname
Ich weißnicht,wie sicher dasist.
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.
Wennichmeinen eigenen Knotengehe,z. Wie
TezBox
tut,wasist diebestepraxisin Bezug auf die Zugänglichkeitbestimmter RPC-Endpunkte?tzscan schränktbereitsbestimmte Anrufeein,da hierbeschrieben .
tezos docs berät wiefolgt:
mit demneuen Speicherverwaltung Update ,zusätzliche RPC-Endpunkte sind verfügbar,und sie könneneine Gefahrbesitzen,wenn sie öffentlichfreigelegtist,ohne zu wissen.