Anmelden Registrieren

Eigener Proxy-Server auf VPS: 3proxy einrichten und prüfen

Anleitung für Einsteiger: 3proxy per fertigem Bash-Skript auf einem VPS installieren, Zugang von außen prüfen, Browser verbinden. Und wann es unnötig ist.

Kleiner Heimserver mit warmem Licht und einem Kabel, das in eine nächtliche Stadt führt

Einen persönlichen Proxy-Server können Sie auch einrichten, wenn Sie noch nie eine Linux-Konsole geöffnet haben: Das Installationsprogramm selbst braucht eine Minute. Unten steht die Anleitung Schritt für Schritt: VPS mieten, fertiges Skript starten, Zugang von außen prüfen und Browser verbinden. Das Ergebnis ist eine feste IP mit HTTP und SOCKS5 unter Login und Passwort.

Am Ende des Artikels zeigen wir, bei welchen Aufgaben ein persönlicher Server einem Dienst unterliegt. Wir verkaufen selbst Proxys und sagen das deshalb offen.

Was Sie brauchen

WasWelches
ServerVPS mit 1 Kern und 512 MB Arbeitsspeicher: Für einen persönlichen Proxy reicht der kleinste Tarif
Systemsauberes Ubuntu 22.04 oder 24.04, Debian 12 oder 13
ZugangBenutzer root und Passwort aus der Mail des Hosters
TerminalPowerShell unter Windows 10 und 11, Terminal unter macOS und Linux

Wählen Sie das VPS-Land gleich passend zur Aufgabe: Die Proxy-Adresse kommt aus diesem Land, ändern lässt sie sich nur durch den Umzug auf einen anderen Server.

Wir haben alle Befehle dieses Artikels auf sauberen Images der vier Systeme aus der Tabelle ausgeführt, jeweils mit 512 MB Arbeitsspeicher und einem Kern. Die Installation dauerte 10 bis 31 Sekunden, und 3proxy selbst belegte ohne Last weniger als 8 MB.

Wir installieren 3proxy. Ein Programm bedient HTTP und SOCKS5, braucht wenig Speicher und wird über eine Datei eingerichtet. Squid arbeitet nur als HTTP-Proxy, Dante nur als SOCKS, damit müssten Sie zwei Dienste einrichten. In den Ubuntu-Repositorys gibt es kein 3proxy-Paket, daher nimmt das Skript das offizielle Paket des Entwicklers und prüft dessen Prüfsumme.

Schritt 1. Mit dem Server verbinden

Öffnen Sie ein Terminal und geben Sie den Befehl mit der Adresse aus der Mail des Hosters ein:

Ihr Computer
ssh root@SERVER_IP

Bei der ersten Anmeldung fragt das System, ob Sie dem Server vertrauen: Tippen Sie yes. Das Passwort erscheint bei der Eingabe nicht, das ist so gewollt. Tippen Sie es blind oder fügen Sie es ein und drücken Sie Enter. Hat der Hoster einen normalen Benutzer statt root vergeben, führen Sie nach der Anmeldung sudo -i aus.

Schritt 2. Installationsprogramm starten

Klicken Sie auf Kopieren, fügen Sie den ganzen Block ins Terminalfenster ein und drücken Sie Enter. Er legt die Datei an und startet sie selbst.

Server: Installation
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

Das macht das Skript der Reihe nach:

  • installiert das Paket 3proxy und prüft, dass die Datei unverfälscht heruntergeladen wurde;
  • erzeugt zufällige Login, Passwort und zwei Ports aus dem oberen Bereich, wo Scanner seltener nachsehen als bei 3128 und 1080;
  • verbietet Verbindungen ohne Login und sperrt den Zugriff vom Proxy auf interne Adressen des Servers und Dienstadressen der Cloud;
  • sperrt den Mail-Port 25, damit Spammer bei einem Passwortleck Ihre Adresse nicht auf Sperrlisten bringen;
  • entfernt Client-Angaben aus den HTTP-Headern: Die Website sieht Ihre echte IP nicht;
  • schaltet den Autostart nach einem Neustart ein und öffnet die Ports in ufw, falls diese Firewall aktiv ist.

Am Ende erscheint ein solcher Bericht, nur mit Ihren Werten:

Beispielausgabe
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

Kopieren Sie diese Daten für sich. Auf dem Server liegen sie in der Datei /root/proxy.txt, der Befehl cat /root/proxy.txt zeigt sie erneut.

Schritt 3. Ports im Hoster-Panel öffnen

Manche Hoster setzen vor den Server eine eigene Netzwerk-Firewall, die sich im Kundenbereich einstellen lässt. Falls vorhanden, erlauben Sie dort beide Ports über TCP. Hat das Panel keinen solchen Bereich, können Sie diesen Schritt überspringen.

Schritt 4. Proxy von außen prüfen

Geprüft wird vom eigenen Computer aus: So sehen Sie den Server mit den Augen der Außenwelt. Unter Linux und macOS fügen Sie den Block ins Terminal ein: Er legt die Datei check-proxy.sh an. Danach fügen Sie die letzte Zeile aus dem Bericht des Installationsprogramms ein und starten sie, Ihre Daten stehen schon darin.

Ihr Computer: Prüfung
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

Ist alles richtig eingerichtet, sieht die Ausgabe so aus:

Beispielausgabe
[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.

Unter Windows läuft das Skript in Git Bash. Ohne dieses genügen zwei Befehle in PowerShell, jeder muss die Adresse Ihres Servers ausgeben. Schreiben Sie genau curl.exe: Einfach curl ruft in PowerShell einen anderen Befehl auf.

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

Wenn die Prüfung fehlschlägt

Was Sie sehenWoran es liegtWas zu tun ist
Beide Zeilen „gave no answer", Code 000Ports auf dem Weg zum Server geschlossenim Hoster-Panel und in ufw öffnen, Serveradresse prüfen
Proxy antwortete nur auf dem Server selbstFirewall von Hoster oder ProviderSchritt 3 wiederholen, Hoster-Support anschreiben
Code 407 bei richtigem PasswortTippfehler in Login oder Passwort, oder Ihre IP gehört nicht zu den erlaubtenmit /root/proxy.txt und der Zeile allow in den Einstellungen vergleichen
SOCKS5 lässt ohne Login hineinEinstellungen von Hand geändertInstallationsprogramm neu starten, Sie bekommen neue Daten
Installationsprogramm meldet „did not start"Dienst ist nicht gestartetUrsache ansehen: journalctl -u 3proxy -n 30
Installationsprogramm meldet „test request failed"Dienst läuft, aber der Server gelangt nicht über den Proxy ins InternetLog ansehen: tail /usr/local/3proxy/logs/3proxy.log.*
Abhängigkeitsfehler bei der InstallationSystem älter als Ubuntu 22.04 und Debian 12im Hoster-Panel ein aktuelles OS neu installieren

Schritt 5. Proxy verbinden

Im Browser nutzen Sie den HTTP-Port: Chrome und Firefox können ohne Erweiterungen kein Login und Passwort für SOCKS5 eingeben. Was wohin gehört, steht im Artikel zur manuellen Proxy-Einrichtung. Programme nehmen meist eine Zeile der Form IP:PORT:LOGIN:PASSWORD an, und brauchen sie ein anderes Format, schreibt der Proxy-Konverter die Zeile um.

Verbunden? Öffnen Sie die Anonymitätsprüfung über den Proxy: Die Seite zeigt, welche Adresse und welche Header eine Website sieht. Wie sich HTTP von SOCKS5 unterscheidet und welchen Port Sie für welche Software nehmen, steht im Protokollvergleich.

So verwalten Sie den Server

Alle Befehle unten laufen auf dem Server. Dienststatus und Verbindungslog von heute. 3proxy legt jeden Tag eine neue Datei an und hebt sie eine Woche auf. Das Log verlassen Sie mit Strg+C:

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

Passwort ändern. Setzen Sie statt LOGIN den Login aus dem Bericht ein. Der Befehl zeigt das neue Passwort, das alte funktioniert sofort nicht mehr, und in /root/proxy.txt bleiben die bisherigen Daten:

Server
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

Zweiten Benutzer hinzufügen:

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

Nur von Ihrer Adresse zulassen, falls sie fest ist. Setzen Sie statt YOUR_IP Ihre IP ein. Von anderen Adressen antwortet der Proxy selbst bei richtigem Passwort mit Code 407:

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

Alles entfernen, wenn Sie den Server nicht mehr brauchen:

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

Sicherheits-Checkliste

Ein Proxy mit einem Fehler in der Zugangseinstellung wird öffentlich. Scanner durchkämmen Hoster-Adressen ständig, und ein offener Port landet schnell in kostenlosen Listen: Dann warten fremder Traffic, ein aufgezehrter Kanal und Beschwerden beim Hoster. Das Skript schließt das Wichtigste, der Rest liegt bei Ihnen:

  1. Schalten Sie die Firewall mit dem Befehl unten ein und setzen Sie die Ports aus dem Bericht ein: Nach außen bleiben nur SSH und der Proxy.
  2. Schalten Sie automatische Systemupdates ein. 3proxy selbst ist ein eigenes Paket, prüfen Sie daher alle paar Monate, ob eine neue Version erschienen ist.
  3. Denken Sie daran, dass Login und Passwort des Proxys unverschlüsselt übertragen werden. In einem öffentlichen Netz kann ein Nachbar sie abfangen, daher verbinden Sie sich in Cafés und Flughäfen über ein VPN oder begrenzen den Zugang auf Ihre IP. Mehr in der Analyse zum öffentlichen WLAN.
  4. Sehen Sie einmal im Monat im Log nach unbekannten Adressen und prüfen Sie die Server-IP über RBL-Sperrlisten.
Server
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

Läuft Ihr SSH auf einem anderen Port, ersetzen Sie 22 vor dem Start, sonst verlieren Sie den Zugang zum Server.

Was Sie gewinnen und was Sie verlieren

Eigener VPSProxy-Dienst
Kontrolle und Logsganz Ihrebeim Betreiber
Adresseneine, höchstens wenigePools mit Tausenden Adressen
AdresstypRechenzentrum des Hostersvon Rechenzentrum bis Heim und Mobilfunk
StandortLand Ihres VPSLänderwahl, bei Residential auch Stadt
Rotationnein, die Adresse ist festpro Anfrage oder pro Sitzung
WartungUpdates und Verfügbarkeit bei Ihnenim Preis enthalten
EinstiegspreisVPS-Miete plus Zeitab einem Stundenabo

Am wichtigsten ist hier die Zeile zum Adresstyp. Ein VPS lebt in einem Hosting-Subnetz, und jede Website erkennt das am autonomen System: Prüfen Sie Ihren Server über die ASN-Abfrage. Marktplätze und soziale Netzwerke behandeln solche Bereiche misstrauisch, und ein persönlicher Server ändert dort nichts. Seine Adresse wird nicht zu einer Heim- oder Mobilfunkadresse.

Auch beim Geld ohne Illusionen. Ein billiger VPS teilt CPU und Kanal mit Nachbarn, abendliche Tempoeinbrüche sind daher normal. Viele Hoster begrenzen den Traffic, und Mehrverbrauch kostet merklich mehr als ein Gigabyte bei einem Proxy-Dienst.

Wann sich ein eigener Proxy lohnt

  • Feste IP für Ihre Dienste. Admin- und interne Panels sind nur von einer Adresse aus offen: Ein VPS liefert sie günstig und langfristig.
  • Tunnel zwischen Ihren Rechnern. Büro und Server sind direkt verbunden, und Sie entscheiden, was über diesen Punkt läuft.
  • Anforderungen an Logs. Traffic-Aufzeichnungen müssen nur bei Ihnen liegen.
  • Lernen. Aufsetzen, kaputt machen, reparieren: So verstehen Sie am schnellsten, wie ein Proxy von innen arbeitet.

Wann ein Dienst nötig ist

Ein persönlicher Server scheidet aus, sobald eine Aufgabe mehr als eine Adresse, Rotation oder einen bestimmten IP-Typ braucht: Hunderte VPS zu unterhalten kostet mehr als jeder Tarif. Scraping, Preisüberwachung, Kontoarbeit und Anzeigenprüfung leben auf Pools. Dafür passen unsere Tarife: Pakete mit ip:port-Liste und Residential-Adressen mit Länderwahl. Viele halten beides: einen persönlichen Server für den Zugang zu eigenen Systemen und einen Dienst-Pool für die Arbeit.

Weiterlesen

Dunkle Stadt mit Pagoden-Silhouetten und modernen Türmen, verbunden durch leuchtende Bögen

Proxy

Proxys in China: Wer eine chinesische IP braucht und wozu

Das chinesische Netz lebt nach eigenen Regeln, und ein Blick von außen bringt kaum etwas: Manche Websites antworten nur Adressen aus China, Preise und Ergebnisse weichen von den globalen ab. Wir…

5 Min. Lesezeit

Alle Artikel

Preise Gratisstunde holen