7.5 KiB
15.1: Bitcoin Core como um Serviço I2P (Projeto Internet Invisível)
ℹ️ NOTA: Esta seção foi adicionada recentemente ao curso e ainda é um rascunho inicial que pode estar aguardando revisão. Proceda com cuidado, leitor.
Ao invés de utilizarmos o serviço baseado em proxy do Tor para garantir a privacidade das nossas comunicações no Bitcoin, podemos querer utilizar o I2P, que é projetado para agir como uma rede privada dentro da internet, ao invés de simplesmente oferecer acesso privado a serviços de internet.
Compreendendo as Diferenças
Tanto o Tor quanto o I2P oferecem acesso privado a serviços online, mas com roteamentos, bancos de dados e arquiteturas para retransmissões diferentes. Como serviços ocultos (como acesso ao Bitcoin) são centrais ao design do I2P, eles também foram otimizados:
Tor | I2P | |
---|---|---|
Roteamento | Onion | Garlic |
Banco de Dados da Rede | Servidores de Diretório Confiados | Banco de Dados de Rede Distribuído |
Retransmissão | Conexões criptografadas de mão-dupla entre cada Retransmissor | Conexões de mão-única entre todo servidor em seus túneis |
Serviços Ocultos | Devagar | Rápido |
Podemos encontrar uma comparação mais detalhada em geti2p.net.
Compreenda os Tradeoffs para Limitar Conexões de Saída
Existem tradeoffs caso escolhamos suportar apenas o I2P, apenas o Tor, ou ambos. Essas configurações, que limitam conexões de saída de clearnet, são feitas no Bitcoin Core usando o argumento onlynet
em bitcoin.conf
.
onlynet=onion
, que limita conexões de saída ao Tor, pode expor um node a ataques "Sybil" e criar partições na rede, devido às conexões limitadas entre Tornet e clearnet.onlynet=onion
eonlynet=i2p
, juntas, que executa serviço Onion com serviço I2P, é experimental por enquanto.
Instalando o I2P
Para instalar o I2P, devemos nos certificar de que configuramos as portas devidamente e apenas então continuar com o processo.
Preparando as Portas
Para usar o I2P, devemos abrir as seguintes portas, necessárias para o I2P:
- De saída (olhando para a internet): uma porta aleatória entre 9000 e 31000 é selecionada. É melhor se todas essas portas estiverem abertas para conexões de saída, o que não afeta nossa segurança.
- Podemos checar o status do nosso firewall usando
sudo ufw status verbose
, o que não deve negar conexões de saída por padrão
- Podemos checar o status do nosso firewall usando
- De entrada (olhando para a internet): opcional. A variedade de portas de entrada são listadas na documentação do I2P
- Para maximizarmos privacidade, é preferível desabilitarmos conexões de entrada.
Executando o I2P
O seguinte irá executar serviços I2P no Bitcoin Core:
-
Instalando
i2pd
no Ubuntu:sudo add-apt-repository ppa:purplei2p/i2pd sudo apt-get update sudo apt-get install i2pd
Para instalarmos em outros sistemas operacionais, podemos ver estes documentos.
-
Executando o serviço I2P:
$ sudo systemctl start i2pd.service
-
Verificando se o I2P está em execução, devemos vê-lo na porta 7656:
$ ss -nlt State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 4096 127.0.0.1:7656 0.0.0.0:*
-
Devemos adicionar as seguintes linhas em
bitcoin.conf
:i2psam=127.0.0.1:7656 debug=i2p
A opção para os logs,
debug=i2p
, é utilizada para recordarmos informações adicionais no debug log sobre nossas configurações e conexões I2P. O lugar padrão para esse arquivo de debug no Linux é:~/.bitcoin/debug.log
-
Reiniciando o
bitcoind
$ bitcoind
-
Devemos verificar se o I2P foi configurado corretamente olhando o
debug.log
, ou se algum erro apareceu nos logs.2021-06-15T20:36:16Z i2paccept thread start 2021-06-15T20:36:16Z I2P: Creating SAM session with 127.0.0.1:7656 2021-06-15T20:36:56Z I2P: SAM session created: session id=3e0f35228b, my address=bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p:18333 2021-06-15T20:36:56Z AddLocal(bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p:18333,4)
O nosso endereço I2P é mencionado nos logs, e termina com b32.i2p. Por exemplo
bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p:18333
. -
Devemos confirmar que
i2p_private_key
foi criado no diretório do Bitcoin Core. A primeira vez que o Bitcoin Core conectar ao roteador I2P, o endereço I2P (e a chave privada correspondente) será automaticamente gerado e salvado em um arquivo chamado i2p_private_key:~/.bitcoin/testnet3$ ls anchors.dat chainstate i2p_private_key settings.json banlist.dat debug.log mempool.dat wallets blocks fee_estimates.dat peers.dat
-
Devemos verificar que
bitcoin-cli -netinfo
oubitcoin-cli getnetworkinfo
retorna o endereço I2P:Local addresses bmwyyuzyqdc5dcx27s4baltbu6zw7rbqfl2nmclt45i7ng3ul4pa.b32.i2p port 18333 score 4
Agora temos um servidor do Bitcoin acessível através da rede I2P no nosso novo endereço local.
Resumo: Bitcoin Core como um Serviço I2P (Projeto Internet Invisível)
É sempre positivo termos alternativas para privacidade e não dependermos exclusivamente do Tor para executarmos o Bitcoin Core como um serviço oculto. Como I2P foi adicionado recentemente ao Bitcoin Core, poucas pessoas o utilizam. Podemos experimentar com ele e reportar bugs se encontrarmos algum problema.
ℹ️ NOTA: Para a implementação oficial do I2P em Java, podemos visitar a página de download do I2P e seguirmos as instruções para nosso Sistema Operacional. Após instalado, podemos abrir uma janela do Terminal e escrever
i2prouter start
. Em seguida, podemos visitar o endereço127.0.0.1:76571
em um navegador e permitirmos o SAM. Para fazermos isso, selecionamos: "Configure Homepage", então "Clients", e finalmente selecionar o "Play Button" ao lado da Bridge de aplicativo SAM. No lado esquerdo da página, devemos ver uma luz verde próximo a "Shared Clients".
Siga em frente para "Programando com RPC" no Capítulo Dezesseis: Conversando com o Bitcoind com C.
Ou, se não formos programadores, podemos pular para o Capítulo Dezenove: Compreendendo Sua Configuração Lightning para continuarmos nosso aprendizado da linha de comando com a rede Lightning.