אבטחה, ניהול סשנים ו-Best Practices
הצפנת TLS, מזהי לקוח, הרשאות ACLs ומשמעות Clean Session. מכיוון ש-MQTT פותח במקור לרשתות מבודדות, הגרסאות המוקדמות לא כללו הצפנה מובנית. בעולם ה-IoT המודרני, אבטחת ערוץ ה-MQTT חיונית למניעת חבלות בתשתיות קריטיות, גניבת נתונים וחדירה למכשירים חכמים.
פתחו את היחידה האינטראקטיבית עם הסימולטור ←🎥 סרטון ההדרכה
🖼️ היחידה באינפוגרפיקה

💡 מושגי מפתח
פורטים סטנדרטיים והצפנת TLS/SSL
פורט 1883 משמש לחיבור MQTT פתוח ובלתי מוצפן (מתאים לפיתוח מקומי בלבד!). בייצור (Production), חובה להשתמש בפורט 8883 המוגן בשכבת TLS/SSL, אשר מצפינה את כל תוכן ההודעות והסיסמאות.
✏️ דוגמה: Port 1883 = Unencrypted MQTT | Port 8883 = MQTT over TLS
האימות המשולש: סיסמה, תעודות ו-ACLs
אבטחת ברוקר מתבצעת בשלוש שכבות: 1. אימות משתמש/סיסמה בפאקטת CONNECT. 2. אימות דו-כיווני בעזרת תעודות דיגיטליות (mTLS). 3. רשימות בקרת גישה (ACLs) המגדירות לאילו טופיקים מותר ללקוח ספציפי לפרסם או להירשם.
✏️ דוגמה: כלל ACL: "user sensor_1 can write to sensors/sensor_1/#, but read nothing".
Clean Session: שמירת סשן מול ניקוי
כאשר CleanSession=false (ב-MQTT 5 נקרא CleanStart=false), הברוקר שומר את כל ההרשמות של הלקוח וצובר עבורו הודעות QoS 1/2 בזמן שהוא מנותק! כאשר הלקוח מתחבר מחדש עם אותו ClientId, הוא מקבל את כל ההודעות שהוחמצו.
✏️ דוגמה: קריטי לציוד תעשייתי שמתנתק בעת מעבר תחנות אך אסור לו לאבד פקודות בקרה.
חשיבות ה-Client ID הייחודי
כל לקוח ב-Broker חייב להחזיק Client ID ייחודי. אם לקוח שני מתחבר עם אותו מזהה בדיוק, הברוקר ינתק מיידית את הלקוח הראשון! שימוש במזהה כפול מייצר "לופ התנתקויות" בלתי פוסק.
📌 מה לקחת מהיחידה
- בייצור משתמשים תמיד בפורט 8883 (MQTT over TLS).
- חובה לוודא שכל מכשיר מקבל Client ID ייחודי בעולם.
- מנגנון ה-ACLs מונע מתוקף שפרץ לחיישן בודד להשתלט על כל הרשת.
❓ שאלות ותשובות
מהו הפורט התקני המאובטח (TLS/SSL) של פרוטוקול MQTT?
Port 8883. פורט 8883 מוקצה על ידי IANA עבור MQTT מאובטח מעל TLS, בעוד פורט 1883 מיועד לתקשורת פתוחה ללא הצפנה.
מה יקרה כאשר לקוח חדש מתחבר לברוקר עם Client ID שכבר נמצא בשימוש על ידי לקוח פעיל אחר?
הברוקר ינתק מיד את החיבור של הלקוח הקיים ויחבר את החדש. תקן MQTT 3.1.1 קובע כי חיבור לקוח בעל מזהה זהה גורם לניתוק מיידי (Steal connection) של הלקוח הקודם, מה שעלול לגרום למעגל התנתקויות אינסופי אם שני המכשירים מנסים להתחבר שוב ושוב.
מדוע חשוב להגדיר בקרת הרשאות (ACLs) בברוקר?
כדי להגביל מכשירי קצה כך שיוכלו לפרסם ולקרוא אך ורק מטופיקים המורשים להם. רשימות ACL (Access Control Lists) מבטיחות שגם אם מכשיר IoT נפרץ, התוקף לא יוכל להאזין לנושאים רגישים של מכשירים אחרים או לפרסם פקודות זדוניות.
→ יחידה קודמת: הודעות שמורות (Retained) וצוואה אחרונה (LWT) · יחידה הבאה: מעבדת אינטגרציה מעשית ומימוש קוד ←