SSH Tunneling – החור שלך ב Firewall

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

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

מה זה בכלל SSH?

SSH, או בשמו המלא Secure SHell, הוא פרוטוקול לתקשורת מוצפנת בין שני מחשבים. הוא בא לשכלל את החיבור שהיה מקובל לפניו, Telnet, על ידי הצפנת התוכן המועבר שהוא במקרים רבים סיסמאות. החיבור נעשה אל פורט 22 במחשב המרוחק.

כדי להשתמש בSSH דרושה התקנת והפעלת תוכנת שרת SSH במחשב המרוחק ותוכנת לקוח SSH במחשב המקומי.

מימושים נפוצים

השימוש ב-SSH רווח בעיקר במערכות מבוססות Linux או UNIX. המימוש הנפוץ ביותר למערכות אלה הוא OpenSSH, שפותח כחלק ממערכת ההפעלה OpenBSD הידועה באבטחת המידע ההדוקה שלה. OpenSSH כוללת גם תוכנת שרת וגם תוכנת לקוח.

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

אני אתמקד בהדגמת OpenSSH על לינוקס אך העקרונות זהים בכל התוכנות. ל PuTTY יש ממשק גרפי אך היא מקבלת גם ארגומנטים משורת הפקודה.

הרצת פקודות

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

ssh username@serverAdress

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

העתקת קבצים

לעתים לצורך עבודה על שרת אני זקוק לקובץ שנמצא במחשב שלי. לצורך זה קיימת תוכנה נוספת שנקראת SCP או בשמה המלא Secure Copy. היא מאפשרת להעביר קבצים בשני הכיוונים. גם מהשרת ללקוח וגם מהלקוח לשרת. אין צורך לדעת זאת אך למען השלמות נציין שהיא משתמשת בפרוטוקול RCP להעתקה ובפרוטוקול SSH להצפנה.

מבנה הפקודה הוא:

scp source destination

כאשר source ו- destination מורכבים בצורה הבאה כאשר מה שמוקף בסוגריים מרובעות הוא אופציונלי:

[[username@]serverAddress:]path

או בקיצור, כדי להעתיק מהשרת את הקובץ etc/rc.conf/ לתיקיית הבית של המשתמש user במחשב המקומי כותבים:

scp username@serverAddress:/etc/rc.conf /home/user/

וכדי להעתיק את הקובץ hello.cpp מתקיית הבית של המשתמש user במחשב המקומי אל תיקיית הבית של משתמש user בשרת כותבים:

scp /home/user/hello.cpp user@serverAddress:/home/user/

גלישה דרך מחשב מרוחק

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

הביצוע של זה פשוט עד גיחוך. SSH מספקת לנו שירות שנקרא Dynamic port firwarding. כל מה שצריך לעשות הוא להריץ את הפקודה:

ssh -D portNumber username@serverAddress

כאשר portNumber הוא מספר הגדול או שווה ל-1024.

לאחר הקשת סיסמה יפתח חיבור הנראה זהה לחיבור הרגיל אלא שקרה משהו ברקע. נפתח חיבור לשרת SOCKS Proxy שניתן לגשת אליו בפורט portNumber במחשב המקומי.

כל שנשאר הוא להגדיר את הדפדפן שיתחבר דרך החיבור שיצרנו. הנה דוגמה של הגדרת Firefox ב – Preferences -> Advanced -> Network -> Settings כאשר portNumber הוא 9999:

חיבור דרך מחשב ביניים

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

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

ssh -L portNumber1:remoteAddress:22 username@middleAddress

remote זהו המחשב המרוחק ו-middle זהו מחשב הביניים. הפקודה מחברת את פורט 22 של המחשב המרוחק (כזכור, 22 זהו הפורט של SSH) אל פורט portNumber1 במחשב המקומי דרך מחשב הביניים. לאחר הרצת הפקודה נוכל לראות שכל פקודה התחברות שנריץ על localhost בפורט portNumber1 תנותב למחשב המרוחק. אנו ננצל זאת כדי לנתב דרכו את הגלישה לצורך ההדגמה.

בחלון טרמינל אחר נריץ:

ssh -D portNumber2 username@localhost -p portNumber1

יש לשים לב שכאן username זהו שם המשתמש במחשב המרוחק ולא במחשב הביניים. עכשיו נשאר רק להפנות את הדפדפן אל localhost בפורט portNumber2 ולגלוש דרך המחשב המרוחק. מי שמשתמש ב-PuTTY צריך לכתוב את הדגל של ציון פורט עם P גדולה.

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

קטגוריות: אבטחת מידע
תגיות: , , ,
פורסם בתאריך 19th מאי 2011 ע"י SoleSoul