Tecnologia

Shadowsocks: como criar uma VPN segura e camuflada

Publicado em 25/06/2020    13 minutos de leitura

O Shadowsocks é um protocolo de criptografia bastante utilizado na China continental para burlar censura na internet. Ele não é um proxy em si, mas permite criar uma VPN segura similar a um túnel SSH e cuja conexão pode ser camuflada de várias formas.

No texto de hoje vamos aprender a usar o Shadowsocks para criar uma VPN capaz de se camuflar no tráfego HTTPS e se esconder atrás do Cloudflare, evitando assim que seja bloqueada. Quem tentar, vai ter que quebrar vários sites que usam essa rede de distribuição de conteúdo.

Além disso, a porta usada é a 443, a mesma empregada no acesso a qualquer site seguro (HTTPS). Bloquear esta porta não é viável.

Assim você deverá ser capaz de se conectar na VPN mesmo dentro de redes de empresas e universidades, onde costumeiramente existem bloqueios. Também é uma solução excelente para usar fora de casa em redes WiFi públicas visando maior segurança e privacidade.

Você pode ainda configurar uma página a ser exibida para quem tentar acessar o endereço da sua VPN. Este indivíduo vai dar de cara com um inocente site em sua tentativa de descobrir o que está se passando.

Ingredientes

Eis o que vamos precisar:

  • Um VPS rodando CentOS, Ubuntu ou Debian;
  • Um domínio, que pode ser um gratuito;
  • Script de instalação do Shadowsocks;
  • Servidor web nginx;
  • Clientes para seu dispositivo;
  • Tesoura sem ponta.

Se você não tem um VPS, pode dar uma olhada na Vultr, DigitalOcean, Linode ou ReadyDedis, por exemplo. Através desse link você ganha US$ 100 para testar a Vultr, atual hospedagem deste blog. Quanto ao domínio, não precisa pagar nada se não quiser.

Basta visitar o Freenom e procurar um domínio disponível em um dos TLDs gratuitos (.tk, .ml, .ga e .gq). Você também vai precisar de uma conta gratuita no Cloudflare para esconder sua VPN Shadowsocks atrás dele e burlar bloqueios.

Você precisa ainda ter conhecimentos básicos sobre como operar e se conectar ao servidor VPS por meio de um cliente SSH e como configurar corretamente as entradas DNS do seu domínio.

Não use a função de proxy do Cloudflare (nuvem laranja no painel) durante a configuração. Mas não esqueça de ativar ela no domínio ou subdomínio desejado após terminar este tutorial.

O que vamos fazer

Ao final deste texto você terá um VPS com o Shadowsocks instalado e escondido atrás do Cloudflare, exibindo uma página web no domínio que você tem ou registrou na Freenom. Você vai precisar de um cliente específico para conectar na sua VPN.

Para este tutorial, será usado o cliente para Windows. Caso use Android, baixe este cliente e este complemento para o app do Shadowsocks. Para outros sistemas operacionais, visite o link no parágrafo anterior.

Pense bem no domínio que deseja usar para sua VPN. Pode ser um novo, um subdomínio deste ou um subdomínio de algum que você já tenha. Use o exato mesmo endereço no decorrer de todo o tutorial nos lugares que forem apropriados.

Configurando o VPS

Para este passo a passo, vamos usar um VPS da Vultr rodando Debian 10. Caso prefira usar CentOS, nesta página você encontra os comandos para baixar o script correto. Depois de criar seu VPS, acesse ele através de um cliente SSH como o PuTTY e digite:

apt-get install nginx

Isso vai instalar o servidor web nginx, que vai ficar ouvindo nas portas 80 e 443. Ele vai servir para mostrar uma página inocente aos curiosos e também responder ao pedido de criação do certificado SSL a seguir. Após instar o nginx, digite as seguintes linhas:

# wget -O ubuntu-ss-install.sh https://github.com/M3chD09/shadowsocks-with-v2ray-plugin-install/raw/master/ubuntu-ss-install.sh
# chmod +x ubuntu-ss-install.sh
# ./ubuntu-ss-install.sh

Se preferir tudo em uma linha só:

wget -O ubuntu-ss-install.sh https://github.com/M3chD09/shadowsocks-with-v2ray-plugin-install/raw/master/ubuntu-ss-install.sh && chmod +x ubuntu-ss-install.sh && ./ubuntu-ss-install.sh

Ele é um assistente que vai fazer perguntas e configurar tudo de acordo. Também vai gerar um certificado SSL gratuito da Let’s Encrypt. Ao final, vai te dizer as informações necessárias para configurar o cliente em seu computador ou smartphone.

Preencha tudo corretamente e tenha o domínio informado apontado para seu VPS. Caso ocorra problemas na criação do certificado SSL, edite o arquivo ubuntu-ss-install.sh e remova todas as menções ao termo get_cert e o trecho que contém:

get_cert(){
   ...
}

Assim você pode gerar um certificado manualmente para seu domínio através de clientes Let’s Encrypt como o acme.sh ou então através de sites como o SSL for Free, ZeroSSL e Get HTTPS for Free, para facilitar o processo.

Caso o processo automático tenha dado certo, salve os caminhos até os arquivos gerados para usar depois no nginx.

Agora vamos ativar o TCP Fast Open no seu VPS. Isso acelera a abertura de conexões com seu servidor. Digite o seguinte comando:

echo "net.ipv4.tcp_fastopen=3" > /etc/sysctl.d/30-tcp_fastopen.conf && sysctl --system

Também vamos ativar o algoritmo de gestão de congestionamento chamado TCP BBR, desenvolvido pelo Google. Para isso, digite:

nano /etc/sysctl.d/10-custom-kernel-bbr.conf

Em seguida, adicione essas linhas no arquivo:

net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

Aperte CTRL + O para salvar e CTRL + X para sair. Por fim, aplique as novas configurações:

sysctl --system

Com isso, as comunicações que usem o seu VPS como ponto final (tal qual nossa VPN) vão se beneficiar da melhoria de desempenho proporcionada pelo algoritmo que ativamos.

Configurando o Shadowsocks

Agora, vamos para a configuração do Shadowsocks em si. Digite:

// cria um backup do arquivo de configuração original
# cp /etc/shadowsocks-libev/config.json /etc/shadowsocks-libev/config.json.bak
# nano /etc/shadowsocks-libev/config.json

Substitua todo o conteúdo do arquivo por esse:

{
	"server":["[::0]","0.0.0.0"],
	"server_port":10101,
	"password":"<sua senha aqui>",
	"timeout":300,
	"user":"nobody",
	"method":"xchacha20-ietf-poly1305",
	"nameserver": "1.0.0.2",
	"fast_open":true,
	"reuse_port":true,
	"no_delay":true,
	"mptcp":true,
	"mode":"tcp_and_udp",
	"plugin":"v2ray-plugin",
	"plugin_opts":"server;path=/go;loglevel=none;fast-open;mux=1"
}

Isso vai configurar o servidor VPN para ouvir na porta 10101 em qualquer endereço IP que seu VPS responda e a conexão vai usar a cifra criptográfica xChaCha20-Poly1305, uma das melhores, mais modernas, seguras e rápidas.

Lembre de definir uma senha forte e fácil de lembrar, substituindo o trecho <sua senha aqui> por ela. Essa senha vai ser usada nos clientes para se conectar na sua VPN Shadowsocks.

O restante da configuração aponta qual servidor DNS será usado pela VPN (nameserver), faz uso do TCP Fast Open (fast_open) e do plugin de camuflagem (v2ray-plugin), entre outros parâmetros que vão se encaixar depois com o uso do nginx e dos clientes.

Para aplicar as novas configurações, digite service shadowsocks restart no terminal SSH. Para ativar o Shadowsocks durante o boot do VPS, digite service shadowsocks enable. Agora vamos configurar o servidor web.

Configurando o nginx

Continuando, vamos trabalhar com o nginx para exibir uma página qualquer no domínio que você tem/registrou e encaminhar a conexão da VPN para o servidor Shadowsocks instalado no seu VPS. Digite no terminal SSH do seu VPS:

//cria a pasta caso não exista
# mkdir -p /etc/nginx/hosts.d/
# nano /etc/nginx/hosts.d/shadowsocks.conf

Dentro do arquivo shadowsocks.conf criado, cole o seguinte conteúdo:

server {
	listen				80;
	listen				[::]:80;
	server_name			<seu domínio>;
	return 301			https://$host$request_uri;
}

server {
	listen				443 ssl http2;
	listen				[::]:443 ssl http2;
	server_name			<seu domínio>;
	root				/home/vpn;

	ssl_protocols			TLSv1.2 TLSv1.3;
	ssl_early_data			on;
	ssl_session_tickets		off;
	ssl_prefer_server_ciphers	off;
	ssl_ciphers			EECDH+AESGCM:EDH+AESGCM:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
	ssl_buffer_size			4k;
	ssl_session_timeout		1d;
	ssl_stapling			on;
	ssl_stapling_verify		on;
	ssl_session_cache		shared:SSL:10m;
	ssl_ecdh_curve			auto;
	ssl_trusted_certificate		/caminho/ate/arquivo/ca-bundle.crt;
	resolver			1.0.0.3 8.8.4.4 valid=60s;
	resolver_timeout		5s;

	ssl_certificate			/caminho/ate/cert-bundle.crt;
	ssl_certificate_key		/caminho/ate/arquivo-chave.key;

	location / {
		index			index.html;
	}

	location /go {
		proxy_redirect		off;
		proxy_http_version	1.1;
		proxy_pass		http://127.0.0.1:10101;
		proxy_set_header	Host $http_host;
		proxy_set_header	Upgrade $http_upgrade;
		proxy_set_header	Connection "upgrade";
	}
}

Você vai precisar configurar os seguintes parâmetros:

  • server_name: informe o domínio que você vai usar na sua VPN. Aparece duas vezes no código acima e deve estar corretamente apontado no Cloudflare para o IP do seu VPS;
  • root: pasta onde ficarão os arquivos do seu site. Altere a gosto se desejar e aponte corretamente neste parâmetro;
  • ssl_trusted_certificate: pode usar o caminho padrão do sistema, caso saiba qual é, ou baixar este arquivo no seu VPS e informar o caminho no parâmetro;
  • ssl_certificate: caminho até o certificado SSL criado pelo Let’s Encrypt e que contém o certificado intermediário. É um arquivo chamado de “full chain” ou “full path”;
  • ssl_certificate_key: caminho até o arquivo da chave criada junto com o certificado gerado pela Let’s Encrypt.

No arquivo /etc/nginx/nginx.conf, adicione include /etc/nginx/hosts.d/*.conf; antes do último sinal de }. Uma vez que tudo esteja configurado, digite nginx -t no SSH. Caso não sejam apontados erros, digite service nginx restart para reiniciar o serviço e aplicar as configurações.

Sobre a página a ser exibida aos curiosos, pode ser algo tão simples e bobo quanto:

<html>
	<head>
		<title>Instalando vírus...</title>
	</head>
	<body>
		Instalação do vírus em andamento...
	</body>
</html>

Salve com o nome index.html na pasta /home/vpn ou outra que você tenha definido e reinicie o nginx.

Configurando o cliente Shadowsocks

Agora vamos para a grande final do tutorial. Vamos informar ao cliente como se conectar no seu servidor VPN Shadowsocks. Primeiro, no programa para Windows. Essa é a tela de configuração dele:

Interface do Shadowsocks no Windows
Interface do Shadowsocks para Windows

Explicando os campos:

  • Server IP: pode ser o endereço IP do seu VPS ou o domínio usado neste tutorial;
  • Server port: deixe como 443 para poder ser encaminhada através do Cloudflare e respondida pelo nginx no seu VPS;
  • Password: a senha que você definiu no arquivo de configuração do Shadowsocks no decorrer deste tutorial;
  • Encryption: selecione xchacha20-ietf-poly1305 na lista para bater com o que configuramos no Shadowsocks;
  • Plugin program: digite v2ray-plugin;
  • Plugin options: digite host=<seu domínio aqui>;tls;fast-open;path=/go;mux=1 para bater com o que foi configurado no Shadowsocks. Insira seu domínio no local informado;
  • Remarks: o nome do seu servidor Shadowsocks, podendo ser qualquer coisa.

O restante deixe no padrão. Clique em Apply para salvar tudo.

Agora, para configurar no Android, não precisa preencher tudo de novo. No Windows, vá no ícone do cliente Shadowsocks próximo ao relógio e clique com o botão direito do mouse em cima. Em Servers, selecione Share server config. Você verá a seguinte tela:

Compartilhando as configurações do servidor Shadowsocks
Compartilhando as configurações do servidor Shadowsocks

Ela vai apresentar um QR Code e um endereço cifrado.

No cliente para Android existe um ícone de folha com um sinal de mais no canto superior direito. Selecione Scan QR Code e aponte para a tela do seu computador. Se preferir, copie o endereço cifrado que começa com ss://. Depois envie para o Android, copie em seu smartphone e, no app do Shadowsocks, use a opção Import from clipboard.

Importando a configuração do Shadowsocks por QR Code
Importando a configuração do Shadowsocks por QR Code

Agora precisamos configurar o uso do plugin v2ray-plugin no celular por meio daquele segundo aplicativo que instalamos no início do tutorial. Para isso, toque na canetinha no perfil que você acabou de importar.

Configurando o v2ray-plugin no Android
Configurando o v2ray-plugin no Android

Role até o fim de página e em Plugin, selecione o v2ray-plugin como na imagem acima. Agora salve e vamos nos conectar na VPN que acabamos de criar. Primeiro toque no perfil que você importou, fazendo a barra vertical do lado esquerdo dele ficar verde.

Depois é só clicar no círculo com um aviãozinho de papel riscado no rodapé da tela. Na sua primeira vez o Android deve informar sobre a criação de um perfil de VPN, devendo você confirmar o diálogo. Pronto!

Shadowsocks conectado no Android
Shadowsocks conectado no Android

Tudo estando no lugar certo, você vai ver a tela acima. Tocando na área que contorna a parte de baixo do círculo verde com o avião de papel irá realizar um teste de conectividade. Você deve ver uma mensagem de sucesso.

Testando a VPN

Para navegar dentro de sua VPN no Windows, você pode usar o ProxyFoxy no Firefox ou o ProxySwitchy Omega no Chrome e navegadores baseados nele. Funciona em outros sistemas operacionais desktop também.

Crie um novo perfil que use o protocolo SOCKS5 ou HTTP e configure o servidor como 127.0.0.1 ou localhost e a porta como 1080. Alternativamente, você pode clicar com o botão direito do mouse em cima do ícone do Shadowsocks próximo ao relógio.

Em System Proxy, selecione Global. O ícone vai ficar azul e todos os programas do computador que usam o proxy padrão do sistema operacional vão trafegar por dentro da sua VPN Shadowsocks.

Agora, para confirmar que está navegando na internet por meio do Shadowsocks, clique aqui. Você deve ver o endereço IP e localização do seu servidor VPS. Para ver se não está havendo nenhum vazamento de DNS, acesse este serviço.

Clique em qualquer um dos dois botões apresentados abaixo do seu IP. Ao final do teste, deve aparecer somente o serviço de DNS configurado por você. No caso deste tutorial é o Cloudflare.

Explicando o funcionamento

Quando sua VPN se conecta no seu VPS, ela na verdade acessa o endereço terminado em seudominio.com/go. Quem visita apenas seudominio.com não sabe desse caminho extra e assim dá de cara com o nginx e não com sua VPN, carregando a página de um site.

Todo o tráfego, tanto do seu site quanto da VPN, transita por meio do Cloudflare, dificultando bloqueios e que percebam que se trata de uma VPN. O site pode ser qualquer coisa, desde uma página HTML até sites dinâmicos como o WordPress ou qualquer outra coisa suportada pelo servidor web nginx.

Fique à vontade para iniciar um blog ou o que desejar. Nunca saberão.

Você conhecendo como fazer, pode simplificar o funcionamento, dispensando o nginx e o Cloudflare e deixando o Shadowsocks lidar com tudo diretamente após fazer os devidos ajustes. Também dá para dispensar só o nginx e deixar o Shadowsocks logo atrás do Cloudflare ou deixar só o nginx escondendo a VPN.

Este tutorial visa burlar bloqueios e censura, em qualquer lugar do mundo onde você estiver. Mas para a maioria das pessoas, esta é uma ferramente para proporcionar mais privacidade e segurança enquanto navega em redes de terceiros.

Visitante, fique por dentro!
Para mais conteúdos como este, siga:

E se você gostou da leitura
Compartilhe esta postagem e espalhe a palavra: