Каковы лучшие практики для размещения узлов Tezos с открытыми RPC?
4 ответ
- голосов
-
- 2019-02-06
Либо:
- вообще не показывать RPC (!) или
- поместите прокси впереди с максимально ограниченным белым списком .
Конечно,чтобы белый список помог,вы не должны включать потенциально опасные конечные точки в свой белый список ... Даже кажущиеся безобидными конечные точки могут использоваться для отказа в обслуживании,а некоторые конечные точки на удивление вредны.
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
Что мы делаем для TezRPC (который поддерживает TezBox),так это запускаем прокси на каждом сервере. Затем в этом прокси-сервере вы можете блокировать,ограничивать и настраивать общедоступные конечные точки.
В настоящее время мы используем легкий прокси,созданный с помощью NodeJS,но перейдем на прокси в стилеnginx (лучшая производительность).
Вот пример прокси-сервераnode.js,который блокирует почти все конечные точки (прослушивая локальный RPC API на порту 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') })
-
Таким образом,ваш черный список здесь,например,разрешит новые конечные точки в вопросе.:(So your blacklist here will allow the new endpoints in the question, for example. :(
- 0
- 2019-02-06
- Tom
-
Я просто публиковал пример того,как развернуть собственный прокси-сервер,о чем и просит пользователь.Как уже упоминалось,он блокирует «некоторые конечные точки».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
-
Я фактически играл с вашими узлами ранее сегодня,заметил довольно долгое время отклика ~ 700 мс (из Европы).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
-
Да,надеюсь,что переключательnginx ускорит егоYep hoping the nginx switch will speed it up
- 0
- 2019-02-06
- Stephen Andrews
-
Использование черного списка,безусловно,менее безопасно,чем использование ограничительного белого списка.Поскольку вопрос относится к передовой практике,ответ можно улучшить,изменив пример на белый список,подход с использованием черного списка имеет много недостатков в безопасности.У Owasp есть хороший ресурс по этой теме 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 - it could be related to geolocation as well, but that's not the main topic here.
- 0
- 2019-02-06
- Matej maht0rz Šima
-
Я обновил пример,чтобы использовать белый список.Это исключит старые и новые неисправные конечные точки.Например,была идея добавить [RPC,относящиеся к моментальным снимкам] (https://gitlab.com/nomadic-labs/tezos/commit/3345423ebaa9b5ebd3f075124eaa7f0b47acaed3).Я надеюсь,что две разрешенные мной конечные точки достаточно безопасны ...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
Одна из альтернатив,о которых я мог подумать,- использовать
Conseil
: https://github.com/Cryptonomic/ConseilНасколько я понимаю,Conseil предоставляет расширенный API поверхtezos-node/rpc.И,возможно (?) Некоторые дополнительные функции,которые позволят включать/отключать конечные точки или другие меры безопасности.
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.
-
Не могли бы вы расширить свой ответ?Благодаря!Could you please expand on your answer ? Thanks!
- 1
- 2019-02-06
- Ezy
-
Обновлен комментарий с примерами и пояснениями.Updated the comment with examples and explanation.
- 1
- 2019-02-06
- Matej maht0rz Šima
-
- 2019-02-09
Если вам нужен только RPC,вы также можете использовать перенаправление локального порта ssh для перенаправления RPC с локального хоста вашего удаленного компьютера на локальный хост вашего локального компьютера.
Например,как фоновый процесс:
ssh -fNT -L 8732:localhost:8732 user@hostname
Я не знаю,насколько это безопасно.
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.
Если я размещаю свой собственный узел,например как и
TezBox
,каковы наилучшие методы обеспечения доступности определенных конечных точек RPC?TzScan уже ограничивает определенные вызовы,как описано здесь .
документы Tezos рекомендуют следующее:
<цитата>Интерфейс RPC должен быть включен,чтобы клиенты общаться с узлом,но он не должен быть общедоступным на Интернет.
С новым управлением памятью update ,будут доступны дополнительные конечные точки RPC,и они могут представлять опасность,если будут опубликованы без уведомления.