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.

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 |
|---|---|
| Servidor | VPS com 1 núcleo e 512 MB de memória: para um proxy pessoal basta o menor plano |
| Sistema | Ubuntu 22.04 ou 24.04, Debian 12 ou 13 limpos |
| Acesso | usuário root e senha do e-mail da hospedagem |
| Terminal | PowerShell 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:
ssh root@SERVER_IPNo 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.
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.shVeja 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:
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 8c1f0e77a2d94b36c5e1a07dCopie 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.
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
SCRIPTSe tudo estiver certo, a saída será assim:
[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.
curl.exe -x "http://LOGIN:PASSWORD@HOST:HTTP_PORT" https://ifconfig.me
curl.exe --socks5-hostname "LOGIN:PASSWORD@HOST:SOCKS_PORT" https://ifconfig.meSe o teste falhar
| O que você vê | Qual é o problema | O que fazer |
|---|---|---|
| As duas linhas "gave no answer", código 000 | portas fechadas no caminho até o servidor | abra-as no painel da hospedagem e no ufw, confira o endereço do servidor |
| O proxy respondeu só no próprio servidor | firewall da hospedagem ou do provedor | repita o passo 3, escreva ao suporte da hospedagem |
| Código 407 com a senha certa | erro no login ou na senha, ou seu IP não está entre os permitidos | compare com /root/proxy.txt e a linha allow nos ajustes |
| SOCKS5 deixa entrar sem login | ajustes alterados à mão | rode o instalador de novo, você receberá dados novos |
| O instalador diz "did not start" | o serviço não iniciou | veja 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 proxy | veja o log: tail /usr/local/3proxy/logs/3proxy.log.* |
| Erro de dependências na instalação | sistema anterior ao Ubuntu 22.04 e Debian 12 | reinstale 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:
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:
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/passwdAdicionar um segundo usuário:
echo "friend:CL:$(openssl rand -hex 12)" >> /usr/local/3proxy/conf/passwd
systemctl restart 3proxy
cat /usr/local/3proxy/conf/passwdPermitir 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:
sed -i 's/^allow \*$/allow * YOUR_IP/' /usr/local/3proxy/conf/3proxy.cfg
systemctl restart 3proxyRemover tudo quando não precisar mais do servidor:
systemctl disable --now 3proxy
apt-get purge -y 3proxy </dev/null
rm -rf /usr/local/3proxy /etc/3proxy /root/proxy.txtLista 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ê:
- Ative o firewall com o comando abaixo, usando as portas do relatório: para fora ficam só SSH e o proxy.
- 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.
- 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.
- Uma vez por mês veja o log em busca de endereços desconhecidos e verifique o IP do servidor nas listas negras RBL.
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 enableSe 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ópria | Serviço de proxy | |
|---|---|---|
| Controle e logs | totalmente seus | com o operador |
| Endereços | um, poucos no máximo | pools de milhares de endereços |
| Tipo de endereço | data center da hospedagem | de data center a domésticos e celulares |
| Localização | o país da sua VPS | escolha de país, cidade nos residenciais |
| Rotação | não, o endereço é permanente | por requisição ou por sessão |
| Manutenção | atualizações e disponibilidade por sua conta | incluída no preço |
| Preço de entrada | aluguel de VPS mais tempo | a 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

Proxies na China: quem precisa de IP chinês e o que ele dá
O segmento chinês da rede tem regras próprias, e olhar de fora quase não adianta: alguns sites só respondem a endereços da China, e preços e resultados diferem dos globais. Vemos as tarefas que…
5 min de leitura
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
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