Entrar Cadastrar

Seu próprio servidor proxy em VPS: instalar 3proxy e testar

Guia passo a passo para iniciantes: instale o 3proxy em uma VPS com um script bash pronto, teste o acesso de fora e conecte o navegador. E quando não é preciso.

Pequeno servidor doméstico com luz quente e um cabo que segue para uma cidade à noite

Dá para montar um servidor proxy pessoal mesmo sem nunca ter aberto um console Linux: o instalador em si cabe em um minuto. Abaixo vai o guia passo a passo: alugar uma VPS, rodar um script pronto, testar o acesso de fora e conectar o navegador. O resultado é um IP permanente com HTTP e SOCKS5 sob login e senha.

No fim do artigo veremos em que tarefas um servidor pessoal perde para um serviço. Nós vendemos proxies, então dizemos isso abertamente.

O que você precisa

O quêQual
ServidorVPS com 1 núcleo e 512 MB de memória: para um proxy pessoal basta o menor plano
SistemaUbuntu 22.04 ou 24.04, Debian 12 ou 13 limpos
Acessousuário root e senha do e-mail da hospedagem
TerminalPowerShell no Windows 10 e 11, Terminal no macOS e Linux

Escolha o país da VPS pela tarefa desde já: o endereço do proxy será desse país, e só dá para mudá-lo migrando para outro servidor.

Rodamos todos os comandos deste artigo em imagens limpas dos quatro sistemas da tabela, com 512 MB de memória e um núcleo cada. A instalação levou de 10 a 31 segundos, e o 3proxy sem carga ocupou menos de 8 MB.

Vamos instalar o 3proxy. Um único programa atende HTTP e SOCKS5, gasta pouca memória e é configurado por um arquivo. O Squid funciona só como proxy HTTP e o Dante só como SOCKS, então com eles seria preciso configurar dois serviços. Os repositórios do Ubuntu não têm o pacote 3proxy, por isso o script pega o pacote oficial do desenvolvedor e confere sua soma de verificação.

Passo 1. Conecte-se ao servidor

Abra um terminal e digite o comando, usando o endereço do e-mail da hospedagem:

Seu computador
ssh root@SERVER_IP

No primeiro acesso o sistema pergunta se confia no servidor: digite yes. A senha não aparece ao digitar, e é assim mesmo. Digite às cegas ou cole e pressione Enter. Se a hospedagem deu um usuário comum em vez de root, rode sudo -i depois de entrar.

Passo 2. Rode o instalador

Clique em Copiar, cole o bloco inteiro na janela do terminal e pressione Enter. Ele cria o arquivo e o executa sozinho.

Servidor: instalação
cat > install-proxy.sh <<'SCRIPT'
#!/usr/bin/env bash
# Installs 3proxy with HTTP and SOCKS5, login and password required.
# Ubuntu 22.04+ or Debian 12+. Run as root on a clean server.
set -euo pipefail

VERSION="1.0.2"
CONF_DIR="/usr/local/3proxy/conf"

if [ "$(id -u)" -ne 0 ]; then
  echo "Run as root: sudo bash install-proxy.sh"
  exit 1
fi

case "$(dpkg --print-architecture)" in
  amd64) ARCH="x86_64"; SHA="d42c0a15ab7bc2e129de2e72fedfb6c908bfc1f7b7f4be15368c56eeb21e9a08" ;;
  arm64) ARCH="arm64";  SHA="e7b8f21bc527b30e9b7fd2ebd5889a11eb14889bb45f71074c94c865fc1b2556" ;;
  *) echo "Only amd64 and arm64 servers are supported"; exit 1 ;;
esac

echo "==> Installing packages"
export DEBIAN_FRONTEND=noninteractive NEEDRESTART_SUSPEND=1
APT="apt-get -o DPkg::Lock::Timeout=300"
$APT update -qq
$APT install -y -qq curl openssl ca-certificates >/dev/null

DEB="/tmp/3proxy-$VERSION.$ARCH.deb"
curl -fsSL -o "$DEB" "https://github.com/3proxy/3proxy/releases/download/$VERSION/3proxy-$VERSION.$ARCH.deb"
echo "$SHA  $DEB" | sha256sum -c --quiet -
$APT install -y -qq "$DEB" >/dev/null
rm -f "$DEB"

echo "==> Creating login, password and ports"
LOGIN="user$(openssl rand -hex 3)"
PASS="$(openssl rand -hex 12)"
HTTP_PORT="$(shuf -i 20000-59999 -n 1)"
SOCKS_PORT="$((HTTP_PORT + 1))"

echo "$LOGIN:CL:$PASS" > "$CONF_DIR/passwd"

cat > "$CONF_DIR/3proxy.cfg" <<EOF
nscache 65536
nserver 1.1.1.1
nserver 8.8.8.8
log /logs/3proxy.log D
rotate 7
maxconn 200
users \$/conf/passwd
auth strong
deny * * 127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16,100.64.0.0/10
deny * * * 25
allow *
proxy -a -p$HTTP_PORT
socks -p$SOCKS_PORT
EOF

chown proxy:proxy "$CONF_DIR/passwd" "$CONF_DIR/3proxy.cfg"
chmod 640 "$CONF_DIR/passwd" "$CONF_DIR/3proxy.cfg"

if command -v ufw >/dev/null && ufw status | grep -q "Status: active"; then
  echo "==> Opening ports in ufw"
  ufw allow "$HTTP_PORT/tcp" >/dev/null
  ufw allow "$SOCKS_PORT/tcp" >/dev/null
fi

echo "==> Starting the service"
systemctl enable 3proxy >/dev/null 2>&1
systemctl restart 3proxy
sleep 2

if ! systemctl is-active --quiet 3proxy; then
  echo "3proxy did not start. Details: journalctl -u 3proxy -n 30"
  exit 1
fi

SERVER_IP=""
for URL in https://ifconfig.me https://api.ipify.org; do
  SERVER_IP="$(curl -s --max-time 20 -x "http://$LOGIN:$PASS@127.0.0.1:$HTTP_PORT" "$URL" || true)"
  [ -n "$SERVER_IP" ] && break
done

if [ -z "$SERVER_IP" ]; then
  echo "The proxy runs but its test request failed. Details: tail /usr/local/3proxy/logs/3proxy.log.*"
  exit 1
fi

umask 077
cat > /root/proxy.txt <<EOF
Server:     $SERVER_IP
HTTP port:  $HTTP_PORT
SOCKS port: $SOCKS_PORT
Login:      $LOGIN
Password:   $PASS

curl -x "http://$LOGIN:$PASS@$SERVER_IP:$HTTP_PORT" https://ifconfig.me
curl --socks5-hostname "$LOGIN:$PASS@$SERVER_IP:$SOCKS_PORT" https://ifconfig.me
bash check-proxy.sh $SERVER_IP $HTTP_PORT $SOCKS_PORT $LOGIN $PASS
EOF

echo
echo "Done. These details are saved in /root/proxy.txt"
echo
cat /root/proxy.txt
SCRIPT
bash install-proxy.sh

Veja o que o script faz, em ordem:

  • instala o pacote 3proxy e verifica se o arquivo veio sem adulteração;
  • gera login, senha e duas portas aleatórias da faixa superior, onde os scanners olham menos que em 3128 e 1080;
  • proíbe conexão sem login e fecha o acesso do proxy aos endereços internos do servidor e aos de serviço da nuvem;
  • bloqueia a porta de e-mail 25, para que, se a senha vazar, spammers não ponham seu endereço em listas negras;
  • remove dos cabeçalhos HTTP os dados do cliente: o site não verá seu IP real;
  • ativa o início automático após reiniciar e abre as portas no ufw, se esse firewall estiver ativo.

No fim aparece um relatório assim, só que com seus valores:

Exemplo de saída
Done. These details are saved in /root/proxy.txt

Server:     203.0.113.10
HTTP port:  34512
SOCKS port: 34513
Login:      user4f2a9c
Password:   8c1f0e77a2d94b36c5e1a07d

curl -x "http://user4f2a9c:8c1f0e77a2d94b36c5e1a07d@203.0.113.10:34512" https://ifconfig.me
curl --socks5-hostname "user4f2a9c:8c1f0e77a2d94b36c5e1a07d@203.0.113.10:34513" https://ifconfig.me
bash check-proxy.sh 203.0.113.10 34512 34513 user4f2a9c 8c1f0e77a2d94b36c5e1a07d

Copie esses dados. No servidor eles ficam no arquivo /root/proxy.txt, e o comando cat /root/proxy.txt os mostra de novo.

Passo 3. Abra as portas no painel da hospedagem

Algumas hospedagens colocam o próprio firewall de rede na frente do servidor, configurado no painel do cliente. Se houver um, libere lá as duas portas por TCP. Se o painel não tiver essa seção, pode pular este passo.

Passo 4. Teste o proxy de fora

O teste é feito do seu computador: assim você vê o servidor pelos olhos do mundo externo. No Linux e macOS cole o bloco em um terminal: ele cria o arquivo check-proxy.sh. Depois cole e rode a última linha do relatório do instalador, que já traz seus dados.

Seu computador: verificação
cat > check-proxy.sh <<'SCRIPT'
#!/usr/bin/env bash
# Usage: bash check-proxy.sh HOST HTTP_PORT SOCKS_PORT LOGIN PASSWORD
# Run it from your own computer: only an outside check shows the real picture.
set -u
if [ "$#" -ne 5 ]; then
  echo "Usage: bash check-proxy.sh HOST HTTP_PORT SOCKS_PORT LOGIN PASSWORD"
  exit 2
fi
HOST="$1"; HTTP_PORT="$2"; SOCKS_PORT="$3"; LOGIN="$4"; PASS="$5"
URL="https://ifconfig.me"
FAILED=0

pass() { echo "[ OK ] $1"; }
fail() { echo "[FAIL] $1"; FAILED=$((FAILED + 1)); }
info() { echo "[INFO] $1"; }

MY_IP=$(curl -4 -s --max-time 10 "$URL" || curl -4 -s --max-time 10 https://api.ipify.org || true)
info "Your own IP: ${MY_IP:-unknown}"

HTTP_IP=$(curl -s --max-time 20 -x "http://$LOGIN:$PASS@$HOST:$HTTP_PORT" "$URL" || true)
if [ -n "$HTTP_IP" ]; then pass "HTTP proxy works, exit IP $HTTP_IP"; else fail "HTTP proxy gave no answer"; fi

SOCKS_IP=$(curl -s --max-time 20 --socks5-hostname "$LOGIN:$PASS@$HOST:$SOCKS_PORT" "$URL" || true)
if [ -n "$SOCKS_IP" ]; then pass "SOCKS5 proxy works, exit IP $SOCKS_IP"; else fail "SOCKS5 proxy gave no answer"; fi

if [ -n "$HTTP_IP" ] && [ "$HTTP_IP" = "$MY_IP" ]; then
  info "Exit IP equals your IP: fine on the server itself, a problem anywhere else"
fi

CODE=$(curl -s --max-time 20 -o /dev/null -w "%{http_code}" -x "http://$HOST:$HTTP_PORT" "http://ifconfig.me" || true)
if [ "$CODE" = "407" ]; then pass "HTTP without login is refused (407)"; else fail "HTTP without login returned $CODE, expected 407"; fi

CODE=$(curl -s --max-time 20 -o /dev/null -w "%{http_code}" -x "http://$LOGIN:wrong-$PASS@$HOST:$HTTP_PORT" "http://ifconfig.me" || true)
if [ "$CODE" = "407" ]; then pass "HTTP with a wrong password is refused (407)"; else fail "HTTP with a wrong password returned $CODE, expected 407"; fi

if [ -n "$SOCKS_IP" ]; then
  if curl -s --max-time 20 -o /dev/null --socks5-hostname "$HOST:$SOCKS_PORT" "$URL"; then
    fail "SOCKS5 lets you in without a login: the proxy is open"
  else
    pass "SOCKS5 without login is refused"
  fi
fi

if [ -n "$MY_IP" ] && [ -n "$HTTP_IP" ] && [ "$HTTP_IP" != "$MY_IP" ]; then
  if curl -s --max-time 20 -x "http://$LOGIN:$PASS@$HOST:$HTTP_PORT" "http://ifconfig.me/all" | grep -qF "$MY_IP"; then
    fail "The site can see your own IP in the proxy headers"
  else
    pass "Your own IP is not visible in the headers"
  fi
fi

echo
if [ "$FAILED" -eq 0 ]; then
  echo "All checks passed."
else
  echo "Failed checks: $FAILED"
  exit 1
fi
SCRIPT

Se tudo estiver certo, a saída será assim:

Exemplo de saída
[INFO] Your own IP: 198.51.100.7
[ OK ] HTTP proxy works, exit IP 203.0.113.10
[ OK ] SOCKS5 proxy works, exit IP 203.0.113.10
[ OK ] HTTP without login is refused (407)
[ OK ] HTTP with a wrong password is refused (407)
[ OK ] SOCKS5 without login is refused
[ OK ] Your own IP is not visible in the headers

All checks passed.

No Windows o script roda no Git Bash. Sem ele bastam dois comandos no PowerShell, e cada um deve mostrar o endereço do seu servidor. Escreva exatamente curl.exe: um simples curl no PowerShell chama outro comando.

PowerShell
curl.exe -x "http://LOGIN:PASSWORD@HOST:HTTP_PORT" https://ifconfig.me
curl.exe --socks5-hostname "LOGIN:PASSWORD@HOST:SOCKS_PORT" https://ifconfig.me

Se o teste falhar

O que você vêQual é o problemaO que fazer
As duas linhas "gave no answer", código 000portas fechadas no caminho até o servidorabra-as no painel da hospedagem e no ufw, confira o endereço do servidor
O proxy respondeu só no próprio servidorfirewall da hospedagem ou do provedorrepita o passo 3, escreva ao suporte da hospedagem
Código 407 com a senha certaerro no login ou na senha, ou seu IP não está entre os permitidoscompare com /root/proxy.txt e a linha allow nos ajustes
SOCKS5 deixa entrar sem loginajustes alterados à mãorode o instalador de novo, você receberá dados novos
O instalador diz "did not start"o serviço não iniciouveja a causa: journalctl -u 3proxy -n 30
O instalador diz "test request failed"o serviço funciona, mas o servidor não sai para a internet pelo proxyveja o log: tail /usr/local/3proxy/logs/3proxy.log.*
Erro de dependências na instalaçãosistema anterior ao Ubuntu 22.04 e Debian 12reinstale um SO recente no painel da hospedagem

Passo 5. Conecte o proxy

No navegador use a porta HTTP: Chrome e Firefox sem extensões não sabem pedir login e senha para SOCKS5. Onde colocar cada coisa está no artigo sobre configuração manual de proxy. Programas costumam aceitar uma linha do tipo IP:PORT:LOGIN:PASSWORD, e se precisarem de outro formato, o conversor de proxy reescreve a linha.

Conectou? Abra a verificação de anonimato pelo proxy: a página mostra que endereço e cabeçalhos um site vê. Como o HTTP difere do SOCKS5 e qual porta usar em cada software está na comparação de protocolos.

Como gerenciar o servidor

Todos os comandos abaixo rodam no servidor. Status do serviço e log de conexões de hoje. O 3proxy cria um arquivo novo por dia e os guarda por uma semana. Para sair do log use Ctrl+C:

Servidor
systemctl status 3proxy --no-pager
tail -f "$(ls -t /usr/local/3proxy/logs/* | head -1)"

Trocar a senha. Coloque o login do relatório no lugar de LOGIN. O comando mostra a nova senha, a antiga para de funcionar na hora, e em /root/proxy.txt ficam os dados anteriores:

Servidor
NEW="$(openssl rand -hex 12)"
sed -i "s/^LOGIN:CL:.*/LOGIN:CL:$NEW/" /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwd

Adicionar um segundo usuário:

Servidor
echo "friend:CL:$(openssl rand -hex 12)" >> /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwd

Permitir acesso só do seu endereço, se for permanente. Coloque seu IP no lugar de YOUR_IP. De outros endereços o proxy responderá com código 407 mesmo com a senha certa:

Servidor
sed -i 's/^allow \*$/allow * YOUR_IP/' /usr/local/3proxy/conf/3proxy.cfg
systemctl restart 3proxy

Remover tudo quando não precisar mais do servidor:

Servidor
systemctl disable --now 3proxy
apt-get purge -y 3proxy </dev/null
rm -rf /usr/local/3proxy /etc/3proxy /root/proxy.txt

Lista de segurança

Um proxy com erro na configuração de acesso vira público. Os scanners varrem os endereços das hospedagens sem parar, e uma porta aberta logo cai nas listas grátis: depois vêm tráfego alheio, canal consumido e reclamações à hospedagem. O script fecha o básico, o resto é com você:

  1. Ative o firewall com o comando abaixo, usando as portas do relatório: para fora ficam só SSH e o proxy.
  2. Ative as atualizações automáticas do sistema. O 3proxy é um pacote à parte, então a cada poucos meses verifique se saiu uma versão nova.
  3. Lembre que o login e a senha do proxy trafegam sem criptografia. Em rede pública um vizinho pode interceptá-los, então em cafés e aeroportos conecte-se ao proxy por VPN ou limite o acesso ao seu IP. Mais na análise de Wi-Fi público.
  4. Uma vez por mês veja o log em busca de endereços desconhecidos e verifique o IP do servidor nas listas negras RBL.
Servidor
DEBIAN_FRONTEND=noninteractive apt-get install -y ufw unattended-upgrades </dev/null
printf 'APT::Periodic::Update-Package-Lists "1";\nAPT::Periodic::Unattended-Upgrade "1";\n' > /etc/apt/apt.conf.d/20auto-upgrades
ufw allow 22/tcp
ufw allow HTTP_PORT/tcp
ufw allow SOCKS_PORT/tcp
ufw --force enable

Se seu SSH está em outra porta, troque 22 por ela antes de rodar, ou perderá o acesso ao servidor.

O que você ganha e o que perde

VPS própriaServiço de proxy
Controle e logstotalmente seuscom o operador
Endereçosum, poucos no máximopools de milhares de endereços
Tipo de endereçodata center da hospedagemde data center a domésticos e celulares
Localizaçãoo país da sua VPSescolha de país, cidade nos residenciais
Rotaçãonão, o endereço é permanentepor requisição ou por sessão
Manutençãoatualizações e disponibilidade por sua containcluída no preço
Preço de entradaaluguel de VPS mais tempoa partir de assinatura por hora

O mais importante aqui é a linha do tipo de endereço. A VPS vive em uma sub-rede de hospedagem, e qualquer site vê isso pelo sistema autônomo: verifique seu servidor na consulta ASN. Marketplaces e redes sociais tratam essas faixas com desconfiança, e um servidor pessoal não muda nada lá. Seu endereço não vai virar doméstico nem celular.

Com o dinheiro também sem ilusões. Uma VPS barata divide processador e canal com os vizinhos, por isso quedas de velocidade à noite são normais. Muitas hospedagens limitam o tráfego, e o excesso custa bem mais que um gigabyte em um serviço de proxy.

Quando um proxy próprio se justifica

  • IP permanente para seus serviços. Painéis de administração e internos abertos só de um endereço: a VPS o dá barato e por muito tempo.
  • Túnel entre suas máquinas. Escritório e servidor ligados diretamente, e você decide o que passa por esse ponto.
  • Exigências de logs. Os registros de tráfego devem ficar só com você.
  • Aprendizado. Montar, quebrar e consertar: é o jeito mais rápido de entender como um proxy funciona por dentro.

Quando é preciso um serviço

Um servidor pessoal sai do jogo assim que a tarefa pede mais de um endereço, rotação ou um tipo específico de IP: manter centenas de VPS custa mais que qualquer plano. Scraping, monitoramento de preços, trabalho com contas e verificação de anúncios vivem em pools. Para eles servem nossos planos: pacotes com lista ip:port e endereços residenciais com escolha de país. Muitos mantêm os dois: um servidor pessoal para acessar os próprios sistemas e um pool de serviço para as tarefas de trabalho.

Leia também

Três túneis luminosos de formas diferentes convergem para um arco em um data center escuro

Proxy

Tipos de servidores proxy: como o HTTP difere do SOCKS5

O protocolo decide como o software passa a requisição ao proxy: um proxy HTTP a lê inteira, o CONNECT abre um túnel para TLS e o SOCKS5 transmite o fluxo e suporta UDP. Vemos os quatro protocolos com…

8 min de leitura
Mapa escuro em relevo da Europa com fios luminosos entre cidades

Proxy

Proxies na Europa: quem precisa de IP europeu e qual usar

Os sites prendem cada vez mais o conteúdo ao país do visitante: preços, resultados, estoque e anúncios diferem entre Berlim e Paris. Vemos as tarefas que exigem um endereço europeu e escolhemos a…

5 min de leitura

Todos os artigos

Preços Testar uma hora grátis