# חבר בביטחון סוכני AI לשרת MCP של Webship
חיבור MCP לשרת אינטרנט אינו ווידג'ט צ'אט. זהו ממשק פעולות שיכול לבדוק מצב ייצור, לשנות ניתוב ומדיניות אבטחה, לטעון מחדש תעודות, להפעיל גרסאות סטטיות, לתאם שינויים בצי ולהתקין עדכון חתום Webship.
טפל בזה בהתאם: כ-API מנהלי מועדף. ההגדרה הבטוחה ביותר של Webship שומרת על מאזין ה-MCP מחוץ למישור הנתונים הציבורי, מחברת אותו ללופבק, מגדירה לו הגנות עם TLS 1.3 וטוקן חזק מסוג bearer, ומגיעה אליו דרך מנהרת SSH מאומתת.
המדריך הזה בונה את ההגדרה הזו, מסביר מדוע כל גבול קיים, ומספק לך רשימת בדיקה להפעלתו מבלי להפוך נוחות לחשיפה.
התחל עם גבול האמון
תעבורת הצבור של Webship ותעבורת MCP משתמשות במאזינים נפרדים. מישור הבקרה של MCP מושבת כברירת מחדל ולעולם אינו משתף את מאזיני HTTP הרגיל, HTTP/2, HTTP/3 או WebTransport. כאשר הוא מופעל, הוא משרת את MCP דרך נקודת קצה ייעודית TLS 1.3 HTTP/1.1.
להטמעה מאובטחת יש ארבעה בקרות עצמאיות:
- נגישות רשת: מאזין MCP נקשר ל-
127.0.0.1, ולא לכתובת ציבורית או LAN פרטית. - זהות תחבורה: הלקוח מאמת תעודה שהונפקה על ידי רשות אסמכה (CA) שהוא סומך עליה.
- אימות אפליקציה: כל בקשה נושאת אסימון נושא חזק אחד.
- גישה אדמיניסטרטיבית: מפעילים מגיעים למאזין הלולאה דרך חשבון SSH מאומת וערוץ.
אף אחת מהבקרות הללו אינה מחליפה אחרת. TLS ללא נתיב רשת פרטי עדיין חושף משטח אימות. מנהרה ללא אימות תעודה הופכת את זהות הקצה לבלתי ברורה. אסימון נושא בתוך קובץ קריא לעולם אינו סוד.
הכן את התעודה והאסימון
הנפק תעודת MCP ייעודית מ-CA פנימי שלך. עבור המנהרה המוצגת למטה, כלל את localhost ו-127.0.0.1 בשמות האלטרנטיביים של הנושא בתעודה, ואז התקן את ה-CA המנפיק במאגר האמון של מכונת הלקוח MCP. אל תפתור שגיאת אמון באמצעות אפשרות TLS לא מאובטחת.
צור אסימון ייחודי עם לפחות 32 בתים הניתנים להדפסה ב-ASCII וללא רווחים. ערך אקראי באורך 32 בתים המקודד בהקסדצימלי נותן לך 64 תווים בטוחים:
umask 077
openssl rand -hex 32Webship קורא כרגע את אסימון MCP ישירות מהתצורה המוגנת TOML; token_file אינו נתמך. שמור את התוצאה בקובץ תצורה שניתן לקרוא רק על ידי חשבון השירות Webship והקבוצה המנהלת שלו. אל תכניס את האסימון ליחידת systemd, להיסטוריית shell, לכרטיס תמיכה, להודעת צ'אט או ל-prompt שנשלח למודל AI.
במערכת דביאן טיפוסית:
sudo chown root:webship /etc/webship/production.toml
sudo chmod 0640 /etc/webship/production.toml
sudo chown root:webship /etc/webship/mcp-cert.pem /etc/webship/mcp-key.pem
sudo chmod 0644 /etc/webship/mcp-cert.pem
sudo chmod 0640 /etc/webship/mcp-key.pemהתאם את משתמש השירות והקבוצה להתקנה שלך. המפתח הפרטי וההגדרות חייבים להיות קריאים על ידי Webship, אך לא על ידי חשבונות לא קשורים.
אפשר את המאזין הבודד
הוסף חלק זה לתצורת Webship הפעילה:
[security.mcp]
enabled = true
listen = "127.0.0.1:9443"
token = "replace-with-your-generated-64-character-token"
allowed_ips = []
expose_remote = false
[security.mcp.tls]
cert = "/etc/webship/mcp-cert.pem"
key = "/etc/webship/mcp-key.pem"רשימת allowed_ips ריקה לא פותחת את נקודת הקצה. לקוחות לופבק נשארים מורשים כברירת מחדל. expose_remote = false עושה את הגבול המתוכנן למפורש: אם מישהו בהמשך משנה את listen לכתובת שאינה לופבק, Webship דוחה את ההגדרה במקום לפרסם את מישור השליטה בשקט.
Webship גם דוחה מאזין MCP שמופעל ללא TLS, ללא אסימון, עם אסימון קצר או כזה שמכיל רווחים, או עם נתיבי תעודה ריקים. אסימונים ציבוריים זמניים נדחים לפני חשיפה מרחוק.
אמת לפני הפעלה מחדש
MCP מאזין, זהות TLS ושינויים בטוקן משחזרים את מישור הבקרה, ולכן הם דורשים אתחול של התהליך. אמת את ההגדרות המלאות תחילה:
/usr/local/bin/webship --check-config --config /etc/webship/production.toml
sudo systemctl restart webship
sudo systemctl status webship --no-pagerאשר שהמאזין קיים רק על לולאת החזרה:
ss -ltn | grep '127.0.0.1:9443'אל תוסיף את פורט 9443 לכללי החומת אש הציבוריים של המארח. הצעד הבא יגיע אליו דרך SSH.
צור את המנהרה הפרטית
מתחנת העבודה של המנהל, העבר פורט מקומי למאזין הלולאה של Webship:
ssh -N \
-L 127.0.0.1:19443:127.0.0.1:9443 \
webship-admin@edge.example.comהלקוח MCP מתחבר כעת ל-https://localhost:19443/mcp. TCP מגיע לשרת SSH, SSH מעביר את החיבור למארח, והמארח פותח את החיבור הסופי ל-Webship בלופבק. סגירת מושבת SSH מסירה את הנתיב הזה מיד.
השתמש באימות SSH מבוסס מפתח, הגבל אילו מנהלים יכולים לפתוח את המנהרה, והחיל את בקרות הגישה הרגילות שלך למארח. אם יש צורך במארח קפיצה, שמור את המאזין MCP בממשק הלולאה של המארח Webship והרחב את נתיב ה-SSH במקום להרחיב את טווח המאזין.
הגדר את הלקוח MCP
פורמטים של קונפיגורציית לקוח שונים, אבל רשומת HTTP טיפוסית MCP נראית כך:
{
"mcpServers": {
"webship-production": {
"url": "https://localhost:19443/mcp",
"headers": {
"Authorization": "Bearer <your-token>"
}
}
}
}השתמש במנגנון הסודי המוגן של הלקוח כאשר יש לו כזה. אחרת, הגבל את תצורת הלקוח לחשבון מערכת ההפעלה הנוכחי. לקוח HTTP—ולא המודל—צריך לצרף את כותרת האישור. לעולם אל תדביק את הטוקן החי בשיחה.
שמור על הפעלת אימות התעודה. אם הלקוח דוחה את התעודה, תקן את שמות האלטרנטיבה של הנושא של התעודה או התקן את מוסד התעודות הפנימי הנכון. אל תוסיף עקיפה קבועה.
הפוך את המפגש הראשון לקריאה בלבד
לאחר שהמנהרה והלקוח מחוברים, התחילו בגילוי ובבדיקה:
- בקש
tools/list; תגובתו היא הסכמה המוסמכת לטיעון עבור הגרסה הפועלת. - התקשר ל-
webship.get_configורשום את גרסת התצורה הנוכחית. - בדוק את
webship.reverse_proxy.get_status,webship.security.get_status,webship.ddos.get_status, ו-webship.tls.get_statusכפי שנדרש. - השתמש ב-
webship.policy.explainאוwebship.security.simulateלפני שינוי מדיניות. - אשר כי התצורה שהוחזרה מטשטשת אסימוני נושא.
רק אז יש לבדוק מוטציה בסביבה שאינה פרודקשן. המוטציות בקונפיגורציה של Webship דורשות את מזהה הגרסה הנוכחית. כתיבה מיושנת נדחית במקום להחליף שינוי חדש יותר. מדיניות מועמדת יכולה להיבדק באמצעות אימות בצל ותרחישי מעבדת תנועה לפני הפעלה.
Webship גם מסרב להורדות אבטחה חיות נבחרות. בקשת MCP לא יכולה לכבות WAF פעיל, שכבת DDoS, מגן API, אתגר בוטים, מדיניות אימות קצה או שכבת כותרות תגובה. שינויים במאזין, פרוטוקול, עובד, זמן ריצה ו-MCP-אימות התלויים בתהליך דורשים אתחול מכוון.
אותם שומרים מפחיתים טעויות; הם לא עושים שכל פעולה מורשית תהיה חסרת פגע. האסימון מעניק משטח שליטה עוצמתי, כולל פעולות עדכון ושחרור. בדוק את קריאות הכלי המוצעות בדיוק כפי שתבדוק פקודת סלול של מנהל מערכת.
אם קשירה מרחוק היא בלתי נמנעת
לולבק בנוסף ל-SSH הוא העיצוב המומלץ. אם הסביבה שלך דורשת מאזין ברשת פרטית, הפוך את החריגה לברורה:
[security.mcp]
enabled = true
listen = "10.20.0.15:9443"
expose_remote = true
allowed_ips = ["10.20.10.0/24"]
token = "replace-with-your-generated-64-character-token"שמור על בלוק ה-TLS מהדוגמה הקודמת, השתמש בתעודה שמתאימה לשם ה-DNS הפרטי, ואכוף את אותו טווח מקור בחומות האש של השרת והרשת. לעולם אל תשתמש ב-0.0.0.0/0 או ב-::/0 כרשימת חסימה נוחה. זכור כי רשימת אפליקציה רואה את כתובת המקור שהגיעה בפועל ל-Webship; אמת את ההתנהגות כאשר מאזן עומסים, שער NAT או רשת שירותים נמצא מולו.
חשיפה מרחוק מגדילה את הערך של יומני גישה מרוכזים, חלונות תפעול קצרצרים וסבב מהיר. זה אינו נדרש רק משום שללקוח MCP פועל על מכונה אחרת; זה בדיוק מה שהמנהרה SSH פותרת.
הפעל את מישור הבקרה במתכוון
השתמש ברשימת הבדיקה הזו לייצור:
- השאר את MCP מושבת כאשר אין סוכן או מפעיל שצריך אותו.
- קשר ללולאת החזרה והשתמש במנהרת SSH כברירת מחדל.
- השתמש בזהות TLS ייעודית ושמור על הפעלת אימות התעודה.
- צור אסימון נושא ייחודי עבור כל סביבה של Webship.
- הגן על TOML, קונפיגורציית הלקוח, מפתח TLS ומפתחות SSH עם הרשאות מערכת קבצים.
- להפריד אישורי פיתוח, בדיקה וייצור.
- התחל סשנים עם כלים למצב ולסימולציית מדיניות לפני המוטציות.
- שמור ובחן את אירועי ביקורת האבטחה של Webship.
- סובב את הטוקן והפעל מחדש את Webship לאחר חשד לחשיפה.
- סגור את המנהרות כאשר סיום הפגישה המנהלית.
למענה לאירועים, סגור מנהרות פעילות, הגבל את חשבון ה-SSH, החלף את הטוקן MCP ב-TOML המוגן, הפעל מחדש את Webship, ובדוק את רשומות הביקורת הביטחונית והגרסאות האחרות האחרונות. אם מפתח ה-TLS הפרטי עלול להיות חשוף, הנפיק תעודה ומפתח חדשים כחלק מאותה הפעלה מחדש. בדוק את הטוקן הישן לאחר מכן ואשר שהוא נדחה.
מישור בקרה צריך להישאר מישור בקרה
MCP שימושי מכיוון שסוכן יכול לבדוק מצב אמיתי וליישם שינויים מאומתים دون להפנות את הפעולות האלה דרך נתיב הבקשה הציבורי. יתרון זה נעלם אם מאזין הבקרה הופך לנקודת קצה אחרת באינטרנט.
השמר על הגבול פשוט: מאזין נפרד, נגישות לולאת חזרה, TLS מאומת, אישור נושא מוגן אחד, מנהרה מאומתת, שינויים מבוקרי גרסה, ותהליך סקירה אנושי לפעולות חזקות. Webship מספק את הפרוטוקול ואמצעי הבטיחות; המפעיל מחליט מי יכול להגיע אליהם.
המדריך הזה מבוסס על התיעוד של מפעיל Webship 1.3.1, דוגמאות קונפיגורציה שנשלחו, קוד ולידציה וטרנספורט של MCP, משמרות קונפיגורציה בזמן ריצה וקטלוג כלים. יש לעיין בתיעוד הנוכחי של Webship ובתגובה של tools/list של השרת הרץ לפני שיוחל על גרסה אחרת.