פרק 8
Cloudflare Tunnel
חשיפת שרת אינטרנט או שירות פיתוח הפועל בתוך רשת פנימית (בבית, במשרד או בענן פרטי) דרשה בעבר פתיחת פורטים בנתב (Port Forwarding), רכישת כתובת IP ציבורית קבועה, והתמודדות עם סיכוני חשיפה של הרשת המקומית לסריקות פורטים זדוניות.
Cloudflare Tunnel (חלק מחבילת Cloudflare One ו-Zero Trust) משנה מודל זה לחלוטין. במקום לפתוח חיבורים נכנסים (Inbound), תוכנת שירות קלת משקל בשם cloudflared מותקנת על השרת שלכם ומקימה חיבורים יוצאים בלבד (Outbound-Only) אל מרכזי הנתונים של קלאודפלייר מעל פרוטוקול QUIC או HTTP/2.
ארכיטקטורת Cloudflare Tunnel:
[דפדפן חיצוני] ──(HTTPS)──> [Edge של קלאודפלייר] ◄══(חיבור יוצא מוצפן בלבד)══ [cloudflared daemon] ──> [שירות מקומי: 127.0.0.1:3000]
(אין פורטים פתוחים בראוטר)#יתרונות מרכזיים
- אפס פורטים פתוחים: חומת האש בנתב או בשרת יכולה לחסום את כלל החיבורים הנכנסים.
- אין צורך ב-IP סטטי: המנהרה מתחברת מכל רשת שיש בה גישה לאינטרנט (כולל חיבורי CGNAT סלולריים).
- הגנה מלאה בברירת מחדל: כל בקשה העוברת במנהרה נהנית אוטומטית מהגנת DDoS, סינון WAF, ותעודות SSL של קלאודפלייר.
- גמישות שירותים: מעבר לשרתי HTTP/HTTPS, ניתן להעביר במנהרה גם תעבורת SSH, RDP, פרוטוקולי TCP שרירותיים ומאגרי מידע.
#שני אופני ניהול: לוח בקרה (Remote) מול קובץ מקומי (Locally Managed)
ניתן לנהל מנהרה בשתי דרכים:
- ניהול מרוחק מלוח הבקרה (Dashboard / Zero Trust - מומלץ למתחילים):
- בלוח הבקרה נכנסים ל-Zero Trust → Networks → Tunnels → Create Tunnel.
- קלאודפלייר מספקת פקודת התקנה מוכנה עם טוקן ייעודי.
- מיפוי הדומיינים והפורטים המקומיים (Public Hostnames) מוגדר ישירות בממשק הדפדפן.
- ניהול מקומי באמצעות שורת הפקודה וקובץ תצורה (
config.yml):- מתאים לאוטומציה, תשתיות מבוססות קוד (IaC) ושרתים ללא ממשק גרפי.
#מדריך הקמה מעשי משורת הפקודה (Locally Managed)
#1. התקנת cloudflared
מתקינים את החבילה על המערכת:
# במערכות לינוקס מבוססות דביאן / אובונטו:
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
# במערכות macOS (באמצעות Homebrew):
brew install cloudflared#2. אימות מול חשבון קלאודפלייר
מריצים את פקודת ההתחברות:
cloudflared tunnel loginהפקודה תציג קישור לדפדפן. נכנסים, בוחרים את הדומיין המבוקש, ומאשרים. קובץ אישור בשם cert.pem יישמר בתיקיית ~/.cloudflared/.
#3. יצירת מנהרה
יוצרים מנהרה עם שם לפי בחירתכם:
cloudflared tunnel create my-app-tunnelהפקודה תחזיר מזהה ייחודי (Tunnel UUID) ותייצר קובץ מפתחות JSON בתיקייה.
#4. כתיבת קובץ התצורה (config.yml)
יוצרים את הקובץ ~/.cloudflared/config.yml ומגדירים את כללי הניתוב (Ingress Rules):
tunnel: 12345678-abcd-1234-abcd-1234567890ab
credentials-file: /root/.cloudflared/12345678-abcd-1234-abcd-1234567890ab.json
ingress:
# ניתוב דומיין ראשי לאפליקציה מקומית
- hostname: app.example.com
service: http://127.0.0.1:3000
# ניתוב תת-דומיין לשירות ניהול פנימי
- hostname: admin.example.com
service: http://127.0.0.1:8080
# כלל חובה בסוף הקובץ: חסימת כל בקשה שלא תאמה לשמות הקודמים
- service: http_status:404#5. שיוך רשומת DNS למנהרה
מקשרים את הדומיין למזהה המנהרה:
cloudflared tunnel route dns my-app-tunnel app.example.comפקודה זו יוצרת אוטומטית רשומת CNAME בדומיין המצביעה אל כתובת ה-UUID של המנהרה.
#6. הפעלת השירות ברקע (System Service)
כדי שהמנהרה תרוץ באופן קבוע ותעלה מחדש לאחר אתחול השרת:
sudo cloudflared --config /root/.cloudflared/config.yml service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared#דגשים חשובים ומלכודות נפוצות
- חובת שורת סיום 404: קובץ
config.ymlשאינו מסתיים בכלל ברירת המחדל- service: http_status:404יוכרז כלא חוקי והמנהרה לא תעלה. - בלבול במצב הניהול: אם המנהרה הוגדרה במצב Remote דרך לוח Zero Trust, עריכת קובץ
config.ymlמקומי לא תשפיע כלל. יש לעדכן את הנתיבים בממשק הדפדפן. - זמינות השירות המקומי: אם האפליקציה המקומית קורסת בפורט 3000, קלאודפלייר תחזיר שגיאת HTTP 502 Bad Gateway.
בפרק הבא נלמד על Cloudflare Access - שכבת האבטחה שמאפשרת לנעול את המנהרה ודפי האתר שלכם מאחורי מנגנון אימות משתמשים חזק בשיטת Zero Trust.