דילוג לתוכן
Secret Knock

Port knocking מוסבר

Port knocking משאיר שירות בלתי נראה עד שמישהו מוכיח שהוא מכיר סוד. המדריך מסביר איך זה עובד, את שני המימושים הנפוצים — knockd ו-fwknop — ואת הסיבות שדפיקות נכשלות בפועל.

איך port knocking עובד

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

התבנית היא הדפיקה. עם knockd זהו רצף של ניסיונות חיבור ליציאות מסוימות, בסדר מסוים ובתוך מגבלת זמן. עם fwknop זו מנה מוצפנת אחת.

knockd: רצפי דפיקות

knockd מאזין בממשק ומתאים ניסיונות חיבור לרצפים שב-/etc/knockd.conf. רצף יכול לשלב יציאות TCP ו-UDP. כאשר יש התאמה, knockd מריץ פקודה — בדרך כלל כלל iptables או nftables עבור הכתובת הדופקת (%IP%).

דוגמה זו פותחת SSH עבור הכתובת הדופקת וסוגרת אותו שוב לאחר 10 שניות. הפעלות SSH קיימות ממשיכות לפעול אם חומת האש שלכם מקבלת חיבורים קיימים.

[options]
    UseSyslog

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout   = 10
    stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf — פתיחת SSH ל-10 שניות

בחרו יציאות משלכם; לעולם אל תמחזרו יציאות מדוגמאות שפורסמו. tcpflags = syn גורם ל-knockd לספור רק מנות עם דגל SYN — המנה הראשונה בניסיון חיבור.

fwknop: Single Packet Authorization

fwknop מחליף את הרצף במנת UDP אחת שמוצפנת באמצעות AES ומאומתת באמצעות HMAC. השרת, fwknopd, לוכד אותה באופן פסיבי, מאמת אותה, מוודא שלא מדובר בשידור חוזר ופותח את היציאה המבוקשת עבור הכתובת שבתוך המנה.

צרו מפתחות עם fwknop --key-gen והציבו אותם ב-access.conf של השרת. Secret Knock מייבא את צד הלקוח מתוך .fwknoprc שלכם.

SOURCE              ANY
OPEN_PORTS          tcp/22
KEY_BASE64          <output of fwknop --key-gen>
HMAC_KEY_BASE64     <output of fwknop --key-gen>
FW_ACCESS_TIMEOUT   30
/etc/fwknop/access.conf — אפשרו SSH עם מפתח SPA

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

למה דפיקות נכשלות

  • IPv4 לעומת IPv6: הדפיקה יצאה דרך משפחת כתובות אחת ו-SSH מתחבר דרך האחרת. חומת האש פתחה את הדלת עבור כתובת שאינכם משתמשים בה.
  • כתובת ציבורית שונה: בנתונים סלולריים, מאחורי NAT של מפעיל סלולרי או VPN, השרת רואה IP שונה מזה שאתם מצפים לו. בדקו את הכתובת שממנה אתם דופקים.
  • SYN שנשלחו מחדש: אם דפיקת TCP אינה נענית, מערכת ההפעלה של הלקוח שולחת את אותו SYN שוב. בבדיקות שלנו, knockd 0.8 איפס את הרצף בעת SYN חוזר כזה, לכן לקוח צריך לשלוח כל דפיקה פעם אחת ולהפסיק את הניסיון במהירות.
  • תזמון: דפיקות שמגיעות מחוץ ל-seq_timeout, או בסדר שגוי, מתחילות את הרצף מחדש.
  • רכיבי ביניים ברשת: רשתות מסוימות חוסמות או משכתבות תעבורה ליציאות לא שגרתיות, לכן דפיקה שפועלת בבית יכולה להיכשל ברשת של מלון או משרד.

האם זה מאובטח?

רצף knockd נשלח ללא הצפנה; כל מי שיכול לצפות בתעבורה שלכם יכול לשלוח אותו שוב. השתמשו בו כדי להסתיר שירות מסורקים, לפני מפתחות SSH — ולא במקומם. SPA של fwknop סוגר את הפער בעזרת הצפנה, HMAC והגנה מפני שידור חוזר, והוא הבחירה הטובה יותר כאשר ייתכן שהתעבורה שלכם נצפית.

דפיקה מ-iPhone, Mac ו-Apple Watch

Secret Knock שולח רצפי knockd ומנות SPA של fwknop מ-iPhone, iPad ו-Mac, בודק שהיציאה מגיבה ופותח את יישום ה-SSH שלכם. Apple Watch דופק דרך ה-iPhone המקושר, מפני ש-watchOS אינו מאפשר ליישומים לשלוח מנות TCP או UDP גולמיות; כאשר הוא רחוק מה-iPhone, הוא יכול לשלוח SPA דרך HTTP לשרתים שמאפשרים זאת.

מדריכים להגדרה שלך

שמרו את הדלת סגורה. קחו איתכם את הדפיקה.

Secret Knock מגיע בקרוב ל-App Store עבור iPhone, iPad, Mac ו-Apple Watch.

Secret Knock →