כניסה הרשמה

שרת פרוקסי משלכם על VPS: התקנת 3proxy ובדיקה שלב אחר שלב

מדריך למתחילים שלב אחר שלב: מתקינים 3proxy על VPS בסקריפט bash מוכן, בודקים גישה מבחוץ, מחברים דפדפן. ובכנות: מתי אין בו צורך.

שרת ביתי קטן בתאורה חמה וכבל שנמשך אל עיר לילית

אפשר להקים שרת פרוקסי אישי גם אם מעולם לא פתחתם מסוף Linux: המתקין עצמו לוקח דקה. למטה מדריך לפי שלבים: שוכרים VPS, מריצים סקריפט מוכן, בודקים גישה מבחוץ ומחברים דפדפן. התוצאה היא IP קבוע אחד עם HTTP ו-SOCKS5 תחת שם משתמש וסיסמה.

בסוף המאמר נראה באילו משימות שרת אישי מפסיד לשירות. אנחנו בעצמנו מוכרים פרוקסי, אז נאמר את זה ישר.

מה צריך

מהאיזה
שרתVPS עם ליבה אחת ו-512 MB זיכרון: לפרוקסי אישי מספיק המסלול הקטן ביותר
מערכתUbuntu 22.04 או 24.04, ‏Debian 12 או 13 נקיים
גישהמשתמש root וסיסמה מהמייל של ספק האחסון
מסוףPowerShell ב-Windows 10 ו-11, ‏Terminal ב-macOS וב-Linux

בחרו את מדינת ה-VPS לפי המשימה כבר בהתחלה: כתובת הפרוקסי תהיה מהמדינה הזו, ואפשר לשנות אותה רק במעבר לשרת אחר.

הרצנו את כל הפקודות מהמאמר הזה על תמונות נקיות של ארבע המערכות מהטבלה, עם 512 MB זיכרון וליבה אחת לכל אחת. ההתקנה לקחה בין 10 ל-31 שניות, ו-3proxy בלי עומס תפס פחות מ-8 MB.

נתקין 3proxy. תוכנה אחת משרתת גם HTTP וגם SOCKS5, צורכת מעט זיכרון ומוגדרת בקובץ אחד. Squid עובד רק כפרוקסי HTTP ו-Dante רק כ-SOCKS, כך שאיתם היה צריך להגדיר שני שירותים. במאגרי Ubuntu אין חבילת 3proxy, ולכן הסקריפט לוקח את החבילה הרשמית של המפתח ומאמת את סכום הביקורת שלה.

שלב 1. התחברו לשרת

פתחו מסוף והזינו את הפקודה עם הכתובת מהמייל של ספק האחסון:

המחשב שלכם
ssh root@SERVER_IP

בכניסה הראשונה המערכת תשאל אם לסמוך על השרת: כתבו yes. הסיסמה לא מוצגת בהקלדה, וכך זה אמור להיות. הקלידו אותה בעיוורון או הדביקו ולחצו Enter. אם הספק נתן משתמש רגיל במקום root, הריצו sudo -i אחרי הכניסה.

שלב 2. הריצו את המתקין

לחצו «העתקה», הדביקו את כל הבלוק בחלון המסוף ולחצו Enter. הוא ייצור את הקובץ ויריץ אותו לבד.

שרת: התקנה
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

הנה מה שהסקריפט עושה, לפי הסדר:

  • מתקין את חבילת 3proxy ובודק שהקובץ ירד בלי זיוף;
  • יוצר שם משתמש, סיסמה ושני פורטים אקראיים מהטווח העליון, שאליו סורקים מציצים פחות מאשר ל-3128 ו-1080;
  • אוסר חיבור בלי שם משתמש וסוגר גישה מהפרוקסי לכתובות הפנימיות של השרת ולכתובות השירות של הענן;
  • חוסם את פורט הדואר 25, כדי שבדליפת סיסמה ספאמרים לא יכניסו את הכתובת שלכם לרשימות שחורות;
  • מסיר מכותרות HTTP פרטים על הלקוח: האתר לא יראה את ה-IP האמיתי שלכם;
  • מפעיל הפעלה אוטומטית אחרי אתחול ופותח פורטים ב-ufw אם חומת האש הזו פעילה.

בסוף יופיע דוח כזה, רק עם הערכים שלכם:

דוגמת פלט
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

העתיקו את הנתונים האלה אליכם. בשרת הם נמצאים בקובץ /root/proxy.txt, והפקודה cat /root/proxy.txt תציג אותם שוב.

שלב 3. פתחו פורטים בלוח של ספק האחסון

חלק מהספקים מציבים לפני השרת חומת אש רשתית משלהם, שמוגדרת בלוח הלקוח. אם יש לכם כזו, אפשרו שם את שני הפורטים ב-TCP. אם אין בלוח חלק כזה, אפשר לדלג על השלב.

שלב 4. בדקו את הפרוקסי מבחוץ

בודקים מהמחשב שלכם: כך רואים את השרת בעיני העולם החיצון. ב-Linux וב-macOS הדביקו את הבלוק במסוף: הוא ייצור את הקובץ check-proxy.sh. אחר כך הדביקו והריצו את השורה האחרונה מדוח המתקין, הנתונים שלכם כבר בפנים.

המחשב שלכם: בדיקה
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

אם הכול מוגדר נכון, הפלט ייראה כך:

דוגמת פלט
[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.

ב-Windows הסקריפט רץ ב-Git Bash. בלעדיו מספיקות שתי פקודות ב-PowerShell, וכל אחת צריכה להדפיס את כתובת השרת שלכם. כתבו בדיוק curl.exe: סתם curl ב-PowerShell קורא לפקודה אחרת.

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

אם הבדיקה נכשלה

מה רואיםמה הבעיהמה לעשות
שתי השורות «gave no answer», קוד 000פורטים סגורים בדרך לשרתפתחו אותם בלוח הספק וב-ufw, בדקו את כתובת השרת
הפרוקסי ענה רק בשרת עצמוחומת אש של הספקחזרו על שלב 3, כתבו לתמיכת הספק
קוד 407 עם סיסמה נכונהטעות בשם המשתמש או בסיסמה, או שה-IP שלכם לא ברשימת המותריםהשוו מול /root/proxy.txt ומול השורה allow בהגדרות
SOCKS5 נותן להיכנס בלי שם משתמשההגדרות שונו ידניתהריצו את המתקין מחדש, יונפקו נתונים חדשים
המתקין כותב «did not start»השירות לא עלהראו את הסיבה: journalctl -u 3proxy -n 30
המתקין כותב «test request failed»השירות פועל, אבל השרת לא יוצא לאינטרנט דרך הפרוקסיראו את היומן: tail /usr/local/3proxy/logs/3proxy.log.*
שגיאת תלויות בהתקנהמערכת ישנה מ-Ubuntu 22.04 ו-Debian 12התקינו מחדש מערכת עדכנית בלוח הספק

שלב 5. חברו את הפרוקסי

בדפדפן השתמשו בפורט HTTP: ‏Chrome ו-Firefox בלי תוספים לא יודעים להזין שם משתמש וסיסמה ל-SOCKS5. מה לכתוב ואיפה מוסבר במאמר על הגדרת פרוקסי ידנית. תוכנות מקבלות בדרך כלל שורה מהצורה IP:PORT:LOGIN:PASSWORD, ואם הן צריכות פורמט אחר, ממיר הפרוקסי ישכתב אותה.

התחברתם? פתחו את בדיקת האנונימיות דרך הפרוקסי: הדף יראה איזו כתובת ואילו כותרות אתר רואה. במה HTTP שונה מ-SOCKS5 ואיזה פורט לקחת לתוכנה מסוימת הסברנו בהשוואת הפרוטוקולים.

איך לנהל את השרת

כל הפקודות למטה רצות בשרת. סטטוס השירות ויומן החיבורים של היום. 3proxy פותח קובץ חדש בכל יום ושומר אותם שבוע. יוצאים מהיומן ב-Ctrl+C:

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

החלפת סיסמה. במקום LOGIN כתבו את שם המשתמש מהדוח. הפקודה תציג את הסיסמה החדשה, הישנה תפסיק לעבוד מיד, וב-/root/proxy.txt יישארו הנתונים הקודמים:

שרת
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

הוספת משתמש שני:

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

גישה רק מהכתובת שלכם, אם היא קבועה. במקום YOUR_IP כתבו את ה-IP שלכם. מכתובות אחרות הפרוקסי יענה בקוד 407 גם עם סיסמה נכונה:

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

מחיקת הכול כשהשרת כבר לא נחוץ:

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

רשימת אבטחה

פרוקסי עם טעות בהגדרת הגישה הופך לציבורי. סורקים עוברים על כתובות של ספקים כל הזמן, ופורט פתוח מגיע מהר לרשימות חינמיות: ואז מחכים לכם תעבורה זרה, ערוץ אכול ותלונות לספק. הסקריפט סוגר את העיקר, והשאר עליכם:

  1. הפעילו חומת אש בפקודה למטה עם הפורטים מהדוח: החוצה יישארו רק SSH והפרוקסי.
  2. הפעילו עדכונים אוטומטיים של המערכת. 3proxy הוא חבילה נפרדת, אז אחת לכמה חודשים בדקו אם יצאה גרסה חדשה.
  3. זכרו ששם המשתמש והסיסמה של הפרוקסי עוברים בלי הצפנה. ברשת ציבורית שכן יכול ליירט אותם, לכן בבתי קפה ובשדות תעופה התחברו לפרוקסי דרך VPN או הגבילו גישה ל-IP שלכם. עוד בניתוח של Wi-Fi ציבורי.
  4. פעם בחודש עברו על היומן בחיפוש כתובות לא מוכרות ובדקו את ה-IP של השרת ברשימות שחורות 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 enable

אם ה-SSH שלכם בפורט אחר, החליפו את 22 בו לפני ההרצה, אחרת תאבדו גישה לשרת.

מה מרוויחים ומה מפסידים

VPS משלכםשירות פרוקסי
שליטה ויומניםלגמרי שלכםבצד המפעיל
כתובותאחת, לכל היותר כמהמאגרים של אלפי כתובות
סוג כתובתמרכז הנתונים של הספקממרכזי נתונים ועד ביתיות וסלולריות
מיקוםמדינת ה-VPS שלכםבחירת מדינה, בביתיים גם עיר
רוטציהלא, הכתובת קבועהלכל בקשה או לפי סשן
תחזוקהעדכונים וזמינות עליכםכלול במחיר
מחיר כניסהשכירת VPS ועוד זמןממנוי שעתי

החשובה ביותר כאן היא שורת סוג הכתובת. VPS חי בתת-רשת של אחסון, וכל אתר רואה את זה לפי המערכת האוטונומית: בדקו את השרת שלכם בבדיקת ASN. מרקטפלייסים ורשתות חברתיות מתייחסים לטווחים כאלה בחשדנות, ושרת אישי לא ישנה שם דבר. הכתובת שלו לא תהפוך לביתית או סלולרית.

גם בכסף בלי אשליות. VPS זול חולק מעבד וערוץ עם שכנים, ולכן נפילות מהירות בערב הן עניין רגיל. ספקים רבים מגבילים תעבורה, וחריגה עולה בבירור יותר מג'יגהבייט בשירות פרוקסי.

מתי פרוקסי משלכם מוצדק

  • IP קבוע לשירותים שלכם. לוחות ניהול ופנימיים פתוחים רק מכתובת אחת: ‏VPS נותן אותה בזול ולאורך זמן.
  • מנהרה בין המכונות שלכם. משרד ושרת מחוברים ישירות, ואתם מחליטים מה עובר דרך הנקודה הזו.
  • דרישות ליומנים. רישומי התעבורה חייבים להישאר רק אצלכם.
  • למידה. להקים, לשבור ולתקן: זו הדרך המהירה ביותר להבין איך פרוקסי עובד מבפנים.

מתי צריך שירות

שרת אישי יוצא מהמשחק ברגע שמשימה צריכה יותר מכתובת אחת, רוטציה או סוג IP מסוים: להחזיק מאות VPS יקר מכל מסלול. סריקה, ניטור מחירים, עבודה עם חשבונות ובדיקת מודעות חיים על מאגרים. להם מתאימים המסלולים שלנו: חבילות עם רשימת ip:port וכתובות ביתיות עם בחירת מדינה. רבים מחזיקים את שניהם: שרת אישי לגישה למערכות שלהם ומאגר שירות למשימות עבודה.

לקריאה נוספת

עיר חשוכה עם צלליות של פגודות ומגדלים מודרניים המחוברים בקשתות זוהרות

פרוקסי

פרוקסי בסין: למי דרוש IP סיני ומה הוא באמת נותן לכם

החלק הסיני של הרשת חי לפי כללים משלו, ולהסתכל עליו מבחוץ כמעט לא מועיל: חלק מהאתרים עונים רק לכתובות מסין, ומחירים ותוצאות שונים מהעולם. נסביר אילו משימות דורשות IP סיני, מה הוא נותן בפועל, מה לא…

4 דק׳ קריאה
שלוש מנהרות זוהרות בצורות שונות מתכנסות לקשת אחת במרכז נתונים חשוך

פרוקסי

סוגי שרתי פרוקסי: במה HTTP שונה מ-SOCKS5 בפועל בעבודה

הפרוטוקול קובע איך התוכנה מעבירה בקשה לפרוקסי: פרוקסי HTTP קורא אותה בשלמותה, ‏CONNECT פותח מנהרה ל-TLS, ו-SOCKS5 מעביר זרם ותומך ב-UDP. נסביר את ארבעת הפרוטוקולים עם תרשים וטבלאות: היכן socks5h…

6 דק׳ קריאה
מפת תבליט כהה של אירופה עם חוטים זוהרים בין ערים

פרוקסי

פרוקסי באירופה: למי דרוש IP אירופי ובאיזה אפשרות לבחור

אתרים קושרים תוכן למדינת המבקר יותר ויותר: מחירים, תוצאות, מלאי ומודעות שונים בין ברלין לפריז. נעבור על משימות שדורשות כתובת אירופית ונבחר כלי לכל אחת: מאגר אירופה בחבילות לבדיקות המוניות, ושורות…

4 דק׳ קריאה

כל המאמרים

מחירים שעה חינם לניסיון