כיצד להשתמש ב-Port Knocking ב-Linux (ולמה אתה לא צריך)

יד דופקת על דלת סגורה.

Photographee.eu/Shutterstock

דפיקת יציאות היא דרך לאבטח שרת על ידי סגירת יציאות חומת אש - אפילו אלה שאתה יודע שישמשו. יציאות אלו נפתחות לפי דרישה אם - ורק אם - בקשת החיבור מספקת את הדפיקה הסודית.

דפיקת נמל היא נקישה סודית

בשנות ה-20, מתי איסור היה בעיצומו, אם רצית להיכנס ל-a ספייסי, היית צריך לדעת את הדפיקה הסודית ולהקיש אותה בצורה נכונה כדי להיכנס פנימה.





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

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



פרסומת

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

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

קָשׁוּר: כיצד ליצור ולהתקין מפתחות SSH מתוך מעטפת לינוקס



מתקין את knockd

כדי להדגים דפיקות יציאה, אנו הולכים להשתמש בה כדי לשלוט ביציאה 22, שהיא יציאת SSH. אנחנו נשתמש כלי שנקרא knockd . השתמש ב-|_+_| להתקין חבילה זו על המערכת שלך אם אתה משתמש באובונטו או בהפצה אחרת מבוססת דביאן. בהפצות לינוקס אחרות, השתמש בכלי ניהול החבילות של הפצת לינוקס שלך, במקום זאת.

הקלד את הדברים הבאים:

apt-get

כנראה שכבר יש לך את חומת האש של iptables מותקן במערכת שלך, אך ייתכן שיהיה עליך להתקין את |_+_| חֲבִילָה. הוא מטפל בטעינה אוטומטית של |_+_| שנשמר כללים.

הקלד את הדברים הבאים כדי להתקין אותו:

iptables-persistent

כאשר מופיע מסך תצורת IPV4, הקש על מקש הרווח כדי לקבל את האפשרות כן.

הקש על מקש הרווח כדי לקבל את

לחץ שוב על מקש הרווח במסך תצורת IPv6 כדי לקבל את האפשרות כן ולהמשיך הלאה.

הקש על מקש הרווח כדי לקבל את

פרסומת

הפקודה הבאה אומרת |_+_| כדי לאפשר המשך חיבורים מבוססים ומתמשכים. כעת נוציא פקודה נוספת לסגירת יציאת SSH.

אם מישהו מחובר באמצעות SSH כאשר אנו מוציאים את הפקודה הזו, איננו רוצים שהוא ינותק:

iptable

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

    -ל: הוסף את הכלל לטבלת חוקי חומת האש. כלומר, הוסף אותו לתחתית. קֶלֶט: זהו כלל לגבי חיבורים נכנסים. -m conntrack: כללי חומת אש פועלים על תעבורת רשת (מנות) התואמות לקריטריונים בכלל. ה- |_+_| פרמטר גורם |_+_| להשתמש במודולים נוספים של התאמת מנות - במקרה זה, זה שנקרא |_+_| עובד עם יכולות המעקב אחר חיבורי הרשת של הקרנל. -מדינה הוקמה, קשורה: זה מציין את סוג החיבור עליו יחול הכלל, כלומר חיבורים ESTABLISHED ו-RELATED. חיבור שנוצר הוא חיבור שכבר נמצא בתהליך. חיבור קשור הוא חיבור שנוצר עקב פעולה מחיבור שנוצר. אולי מישהו שמחובר רוצה להוריד קובץ; זה עלול לקרות בחיבור חדש שיזם המארח. -י קבל: אם התעבורה תואמת את הכלל, קפוץ ליעד ACCEPT בחומת האש. במילים אחרות, התעבורה מתקבלת ומותר לעבור דרך חומת האש.

כעת אנו יכולים להוציא את הפקודה לסגירת היציאה:

iptables

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

    -ל: הוסף את הכלל לטבלת חוקי חומת האש, כלומר הוסף אותו לתחתית. קֶלֶט: כלל זה מתייחס לחיבורים נכנסים. -p tcp: כלל זה חל על תעבורה המשתמשת בפרוטוקול בקרת שידור. -dport 22: כלל זה חל באופן ספציפי על תעבורת TCP המכוונת ליציאה 22 (יציאת SSH). -j דחה: אם התעבורה תואמת את הכלל, קפוץ אל יעד ה-REJECT בחומת האש. לכן, אם התעבורה נדחתה, היא אינה מותרת דרך חומת האש.

עלינו להתחיל את |_+_| דמון. אנחנו יכולים לעשות זאת עם הפקודה הזו:

-m

אנחנו רוצים |_+_| ללכת דרך מחזור שמירה וטעינה מחדש, כך שהוא טוען ושולט ב-|_+_| כללים.

הקלד את הפקודות הבאות:

iptables

conntrack

פרסומת

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

הגדרת knockd

ישנם שני קבצים שאתה עורך כדי להגדיר |_+_|. הראשון הוא הבא |_+_| קובץ תצורה:

netfilter-persistent

ה- |_+_| עורך נפתח עם הסמל |_+_| קובץ התצורה נטען.

קובץ התצורה knockd בעורך gedit.

אנו נערוך את הקובץ הזה כדי שיתאים לצרכים שלנו. הקטעים שבהם אנו מעוניינים הם openSSH ו-closeSSH. ארבעת הערכים הבאים נמצאים בכל חלק:

    סדר פעולות: רצף היציאות שמישהו חייב לגשת כדי לפתוח או לסגור את יציאה 22. יציאות ברירת המחדל הן 7000, 8000 ו-9000 כדי לפתוח אותה, ו-9000, 8000 ו-7000 כדי לסגור אותה. אתה יכול לשנות את אלה או להוסיף יציאות נוספות לרשימה. למטרותינו, נישאר עם ברירות המחדל. seq_timeout: פרק הזמן שבו מישהו צריך לגשת ליציאות כדי להפעיל אותו לפתיחה או סגירה. פקודה: הפקודה שנשלחה אל |_+_| חומת אש כאשר פעולת הפתיחה או הסגירה מופעלת. פקודות אלו מוסיפות כלל לחומת האש (כדי לפתוח את היציאה) או להוציא אותה (כדי לסגור את היציאה). tcpflags: סוג החבילה שכל יציאה חייבת לקבל ברצף הסודי. חבילת SYN (סנכרון) היא הראשונה ב-a TCP בקשת חיבור, הנקראת א לחיצת יד משולשת .

ניתן לקרוא את סעיף openSSH כשאלת חיבור TCP חייבת להתבצע ליציאות 7000, 8000 ו-9000 - בסדר זה ותוך 5 שניות - כדי שהפקודה לפתיחת יציאה 22 תישלח לחומת האש.

פרסומת

ניתן לקרוא את סעיף closeSSH כשאלת חיבור TCP חייבת להתבצע ליציאות 9000, 8000 ו-7000 - בסדר זה ותוך 5 שניות - כדי שהפקודה לסגירת יציאה 22 תישלח לחומת האש.

כללי חומת האש

ערכי הפקודה במקטעי openSSH ו-closeSSH נשארים זהים, למעט פרמטר אחד. כך הם מורכבים:

    -ל: הוסף את הכלל לתחתית רשימת חוקי חומת האש (עבור הפקודה openSSH). -ד: מחק את הפקודה מרשימת חוקי חומת האש (עבור הפקודה closeSSH). קֶלֶט: כלל זה עוסק בתעבורת רשת נכנסת. -לגימה%: כתובת ה-IP של המכשיר המבקש חיבור. -עמ': פרוטוקול רשת; במקרה זה, זה TCP. -dport: נמל היעד; בדוגמה שלנו, זה יציאה 22. -י קבל: קפוץ אל יעד הקבל בתוך חומת האש. במילים אחרות, תן לחבילה לעבור דרך שאר הכללים מבלי לפעול לפיה.

ה-knockd עריכות קובץ תצורה

העריכות שנבצע בקובץ מסומנות באדום למטה:

קובץ התצורה knockd בעורך gedit עם העריכות מסומנות.

אנו מאריכים את seq_timeout ל-15 שניות. זה נדיב, אבל אם מישהו יורה ידנית בבקשות חיבור, הוא עשוי להזדקק להרבה זמן.

בקטע openSSH, אנו משנים את |_+_| אפשרות (הוסף) בפקודה ל-|_+_| (לְהַכנִיס). פקודה זו מכניסה כלל חומת אש חדש ב- חלק עליון של רשימת חוקי חומת האש. אם תעזוב את |_+_| אפשרות, זה מוסיף רשימת חוקי חומת האש ומציבה אותה ב- תַחתִית .

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

הפקודה סגור מסירה את הכלל שנוסף על ידי openSSH מכללי חומת האש. תעבורת SSH מטופלת שוב על ידי הכלל הקיים של יציאה 22 סגורה.

לאחר שתבצע את העריכות הללו, שמור את קובץ התצורה.

קָשׁוּר: כיצד לערוך קבצי טקסט בצורה גרפית בלינוקס עם gedit

עריכות קבצי הבקרה

ה- |_+_| קובץ הבקרה פשוט יותר לגמרי. עם זאת, לפני שאנו צוללים פנימה ועורכים את זה, עלינו לדעת את השם הפנימי של חיבור הרשת שלנו; כדי למצוא אותו, הקלד את הפקודה הזו:

netfilter-persistent

פרסומת

החיבור שבו משתמשת מכונה זו כדי לחקור מאמר זה נקרא |_+_|. רשום את שם החיבור שלך.

הפקודה הבאה עורכת את |_+_| קובץ בקרה:

iptable

הנה |_+_| קובץ ב-|_+_|.

קובץ הבקרה של knockd ב-gedit.

מעט העריכות שעלינו לבצע מודגשות באדום:

קובץ הבקרה של knockd ב-gedit עם העריכות מסומנות.

שינינו את הערך START_KNOCKD= ל-0 ל-1.

הסרנו גם את ה-hash |_+_| מתחילת הערך KNOCKD_OPTS=, והחליפו את eth1 בשם חיבור הרשת שלנו, |_+_|. כמובן, אם חיבור הרשת שלך הוא |_+_|, לא תשנה אותו.

ההוכחה נמצאת בפודינג

הגיע הזמן לראות אם זה עובד. נתחיל את |_+_| daemon עם הפקודה הזו:

knockd

פרסומת

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

השתמש בפקודה הבאה כדי לשלוח את רצף בקשות החיבור הסודי שלך ליציאות במחשב המארח הדופק יציאות עם כתובת ה-IP 192.168.4.24:

knockd

זה אומר |_+_| למקד את המחשב לכתובת IP 192.168.4.24 ולירות בקשת חיבור ליציאות 7000, 8000 ו-9000, בתורו, עם |_+_| (השהיה) של 500 מילישניות ביניהם.

משתמש בשם dave מבצע בקשת SSH ל-192.168.4.24:

gedit

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

knockd

שורת הפקודה שלו חוזרת למחשב המקומי שלו. הוא משתמש ב-|_+_| פעם נוספת, והפעם, הוא מכוון ליציאות בסדר הפוך כדי לסגור את יציאת SSH במחשב המרוחק.

iptables

פרסומת

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

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

-A

  • אתה רואה שלושה ערכי openSSH. אלה מועלים כאשר כל יציאה ממוקדת על ידי כלי השירות לדפוק מרחוק.
  • כאשר כל שלושת השלבים של רצף ההדק מתקיימים, ערך שאומר סומסום היפתח, רשום
  • הפקודה להכנסת הכלל לתוך |_+_| רשימת הכללים נשלחת. היא מאפשרת גישה דרך SSH ביציאה 22 מכתובת ה-IP הספציפית של המחשב האישי שנתנה את הדפיקה הסודית הנכונה (192.168.4.23).
  • המשתמש דייב מתחבר לכמה שניות בלבד, ואז מתנתק.
  • אתה רואה שלוש ערכי closeSSH. אלה מועלים כאשר כל יציאה ממוקדת על ידי תוכנית השירות לדפיקה מרחוק - היא אומרת למארח הדופק ביציאה לסגור את יציאה 22.
  • לאחר שכל שלושת השלבים מופעלים, נקבל שוב את הודעת OPEN SESAME. הפקודה נשלחת לחומת האש כדי להסיר את הכלל. (למה לא לסגור את שומשום כשהוא סוגר את הנמל? מי יודע?)

עכשיו הכלל היחיד ב-|_+_| רשימת הכללים לגבי יציאה 22 היא זו שהקלדנו בהתחלה כדי לסגור את היציאה הזו. אז, יציאה 22 סגורה כעת שוב.

לדפוק את זה על הראש

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

קרא את הבא תמונת פרופיל עבור דייב מקיי דייב מקיי
דייב מקיי השתמש לראשונה במחשבים כשסרט נייר מחורר היה באופנה, ומאז הוא מתכנת. לאחר למעלה מ-30 שנה בתעשיית ה-IT, הוא כעת עיתונאי טכנולוגיה במשרה מלאה. במהלך הקריירה שלו, הוא עבד כמתכנת עצמאי, מנהל צוות פיתוח תוכנה בינלאומי, מנהל פרויקטים של שירותי IT, ולאחרונה כמנהל הגנת מידע. הכתיבה שלו פורסמה על ידי howtogeek.com, cloudsavvyit.com, itenterpriser.com ו-opensource.com. דייב הוא אוונגליסט של לינוקס ותומך בקוד פתוח.
קרא את הביוגרפיה המלאה

מאמרים מעניינים