המעבר למכונת ווינדוז וירטואלית

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

אבל כשזה מגיע לעסקים קצת יותר גדולים, שיש שם CTO, ומנכ"ל, ומנהל IT וכמה אנשי IT שכל אחד יש לו רעיונות משלו ודעות משלו… פה זה כבר נהיה הרבה יותר מסובך, אך לא מסובך טכנית (תתפלאו כמה מהר ניתן לסגור עניינים טכניים), אלא מסובך מבחינה מנהלתית או בעברית: חוזים.

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

כאיש לינוקס, חשבתי שאני פשוט אעבוד עם Open Office עם שמירת מסמכים לוורד וכך אוכל לעבור עם הלקוח על חוזים, אך מה לעשות, מה ש-Open Office מייצא לוורד נראה זוועה (לטענתם של הלקוחות), אז הרמתי מכונה וירטואלית עם Windows בבית (אין כמו VirtualBox!) עם אופיס 2003 ועם זה עבדתי מול אותם לקוחות, חשבתי שפתרתי את הבעיה.

עד שהגעתי לישיבה עם לקוח גדול ובאמצע הישיבה הוא ביקש ממני "חץ, תן לי בבקשה את החוזה 2 גירסאות אחורה, כתבתי שם משהו חשוב שלא התייחסנו אליו".

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

עכשיו מגיע החלק הטכני המעניין.

יש לי מס' מכונות בבית, כולם מריצים Fedora או CentOS, וכדי להתחבר למכונה הוירטואלית עם RDP, צריך תוכנה טובה. אני מכיר את rdesktop וכל התוכנות שנסמכות עליו וניסיתי להתחבר איתם, והצלחתי, אך עם בעיה אחת: המכונה הוירטואלית מריצה Windows 7 Enterprise עם RDP גירסה 7 ו-rdesktop תומך עד RDP 5.1. מה ההבדל? שבגירסאות RDP יותר מאוחרות, אפשר לקבל מרחוק רק את החלון של האפליקציה לדוגמא, הדחיסה הרבה יותר טובה, והפונטים נראים הרבה יותר טוב. עם rdesktop הפונטים פשוט נראו זוועה.

יום שלם ביליתי בחיפושים אחר תוכנת RDP ללינוקס, חופשית או מסחרית, שתתן לי תמיכה ב-RDP מעבר למה ש-rdesktop נותנת (rdesktop כבר שנתיים לא מפותחת, אגב). מצאתי את FreeRDP, שאומרים שהם fork ל-rdesktop והם ממשיכים בפיתוח, אך כרגע אין בו תמיכה ל-RDP מעבר למה שיש ב-rdesktop כלומר אין תמיכה ב-RDP 6 ומעלה.

לאחר מס' שעות מצאתי משהו מעניין: מישהו פישפש בקוד של rdesktop ומצא כי אם שולחים פרמטר שונה ממה שכתוב, אפשר לקבל Font smoothing, שזה בדיוק הדבר שאני מחפש. הפוסט עצמו אומר שצריך לשנות בקוד משהו, אבל ניסיתי בלי לשנות בקוד לשלוח פרמטר בהפעלת rdesktop: הפרמטר הוא: 0x80 בפונקציית x-:

rdesktop -g 1024×768 -x 0x80 -a 32 -z mywinmachine.com

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

אם מישהו מכיר תוכנת RDP שתומכת ב-RDP 6 ומעלה, בבקשה תיידעו אותי. תודה.

(אגב, פוסט זה נכתב עם Windows Live Writer 2011 על המכונה הוירטואלית שנמצאת בחווה סמיילי)

טיפים לאבטחת אתרים (חלק 2 מתוך 2)

בחלק זה (החלק השני) אני אדבר יותר על שרתים. חלק זה מיועד לאנשי סיסטם שמכירים מעט ענייני אבטחה וגם לאלו שמכירים טוב סיסטם אך אינם בקיאים בכל עניין אבטחה. שימו לב: מדובר על אבטחת שרתים שנמצאים מחוץ למשרדי החברה (Hosting, Co-Location, VPS וכו'). אלו המעוניינים במידע בסיסי עבור אבטחה כלקוח שיש לו שרת באחסון משותף, כדאי להסתכל בחלק הראשון, כאן.

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

אתחיל מנקודה מעניינת שרבים מאנשי הסיסטם בחברות טועים בה: ההסתמכות על חומת האש של ספק האחסון. מדוע טועים? מכיוון שאין לכם כלקוחות שום שליטה או בקרה על חומת האש של ספק האחסון ותצטרכו לקחת את מילתו בנושא. אם חומת האש תיפול בין אם בצורה יזומה (תחזוקה לדוגמא) או בצורה מפתיעה (פריצה), במקרים רבים אתם לא תדעו על כך מהסיבה הפשוטה שספקי אחסון לא ששים לספר על כך ונדיר מאוד שחברות מוציאות הודעה מסודרת על כך. למען האמת, ב-20 שנה שאני נותן שרותי סיסטם, עוד לא יצא לי אפילו פעם אחת לקבל הודעה מספק אחסון שחומת האש שלו תהיה למטה או שחומת האש למטה מכל סיבה כלשהי. לכן, כששוכרים שרת או ששמים שרת אצל חברת אחסון, חובה להתקין חומת אש משלך, בין אם זה שרת וירטואלי או שרת פיזי. אם יש מס' שרתים אצל ספק האחסון, כדאי לדאוג לחומת אש אחת (לפחות) שתגן על השרתים. איזו חומת אש? פה כבר נכנסים שיקולים של עלות (האם לרכוש חומת אש כמו של צ'ק פוינט לדוגמא), שימוש במוצר מבוסס קוד פתוח (האם לבנות חומש אש על iptables של לינוקס, או להשתמש ב-pfsense מבוסס FreeBSD והאפשרויות רבות) וכו'. כל אחד ושיקוליו, אך חשוב לבנות חומת אש עם מינימום הכרחי של חוקים ולסגור את השאר. למהדרין כדאי להוסיף logging לחומת האש (לוג של תעבורה) ושהלוג ישלח יומית לאיש הסיסטם/אבטחה בחברה.

גישה לשרתים:

אם אלו שרתי לינוקס, מומלץ לשנות את פורט ה-SSH מ-22 לכל דבר אחר, ולא לאפשר כניסה ישירה של משתמש root מרחוק. כדאי להשתמש בתוכנת nmap על מנת לסרוק מקומית את השרת החדש ולבדוק ששרותים לא הכרחיים לא רצים. רבים לדוגמא לא מודעים שהתקנת ברירת מחדל של CentOS או RedHat מתקינה שרות X גרפי, שרות מדפסות CUPS, בלוטות' ושאר מרעין בישין שאותם מומלץ לבטל (ב-CentOS/RedHat לדוגמא, עצירת השרות מתבצעת עם פקודת service וביטול השרות מתבצע עם chkconfig) גם את המצב הגרפי מומלץ לבטל (אפשר לתקן זאת בקובץ etc/inittab/ בשורת ה-id לעבור מ-5 ל-3). יש לוודא כי אך ורק השרותים שאנו זקוקים להם רצים, וכך נחסוך בזבוז משאבים מיותר וסכנות אבטחה פוטנציאליות.

אם מדובר בשרת Windows וצריך שליטה על השרת ברמת RDP, כדאי להשתמש בהצפנה. המאמר כאן מ-Technet של מיקרוסופט מסביר כיצד לבצע זאת. אני הייתי ממליץ לשנות את הפורט של RDP מ-3389 לפורט אחר ואפשר לראות איך עושים זאת כאן.

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

הרשאות:

אחת מנקודות התורפה שפורצים רבים משתמשים בהם זו נקודת ההרשאות וסיסמאות. לעיתים עושים דברים מבלי לתכנן מקודם ואז יוצרים בשרתים משתמשים חדשים עם הרשאות יותר ממה שצריך, או שקובעים הרשאות ל-DB הרבה יותר ממה שצריך או שהסיסמאות קלות (יחסית) לפריצה: סיסמאות קצרות וצפויות ([email protected]#$, qwerasdfzxcv, 1q2w3e4r, ושאר סיסמאות צפויות). סיסמאות צריכות להיות מורכבות לפחות מ-8 אותיות ומספרים ועדיף גם סימנים. אפשר לכתוב סקריפט שיצור סיסמאות או שאפשר להשתמש בשרות הזה לדוגמא, על מנת לקבוע סיסמאות. במקרים כמו SSH מומלץ לחשוב לעבור משימוש בסיסמאות לשימוש במפתחות ולמהדרין אפשר להשתמש גם עם כרטיסים חכמים. חשוב גם להשתמש בסיסמאות מסובכות בכל הקשור ל-SQL, FTP וכו' ולצערי ראיתי מקרים שפרצו לאנשים בגלל סיסמאות צפויות.

מעקב:

הנה נקודה שהרבה אנשים שחדשים בתחום הסיסטם לא מבצעים: מעקב אחר השרתים. עם לינוקס החיים יותר קליים, יש דבר כמו logwatch המדווח לך מדי יום מה קרה ב-24 שעות בשרתים שלך. מעקב יותר רציני אפשר לעשות עם כלים כמו TripWire ואחרים המאפשרים ניטור לראות אם המערכת שונתה ומי שינה מה (מבחינת כתובת IP וכו'). סוג כלים נוסף שחשוב להכיר ולהשתמש בו הוא סוג ה-IDS (ר"ת: Intrusion Detection System), ובו אפשר למצוא כלים כמו Snort, Saint וכו'. אלו כלים המאפשרים לך לסרוק את השרתים שלך מבחינת פריצות ידועות ולראות האם השרתים שלך ניתנים לפריצה ומה כדאי לשנות/להקשיח. חשוב לזכור: מעקב רציף, "נסיונות פריצה" יזומים ע"י בעל השרת הם חלק מאוד חשוב שמאפשר להגן ביתר יעילות על השרת שלך ועל התוכן שברשותך ובכך לחסוך נזק ואובדן פרודקטיביות.

קוד:

לא חשוב כמה חומות אש יש, כמה הסיסמאות מעולות, וכמה מנטרים את השרתים, עדיין יש נקודה אחת מאוד חשובה שלצערי רבים מגלים אותה בדיעבד, והיא נקודת הקוד, אותו קוד של האפליקציה או הפלטפורמה שעליה רצות האפליקציות בשרת. זו אחת הנקודות הקריטיות שיש צורך בטיפול מתמיד בה: יש לבדוק שגירסת הפלטפורמה היא האחרונה, ו"להלביש" על הפלטפורמה טלאי אבטחה שיצאו, אם יצאו. יש לבדוק היטב את הקוד שרץ על הפלטפורמה, ואם צריך, לא להתבייש ליצור קשר עם צד ג' ולשכור אותם (תחת NDA) ע"מ לבדוק את הקוד מבחינת אבטחה ולסגור פרצות.

סיכום:

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

החלקת פונטים ב-RDP

יש מצבים שיש צורך לפעמים להתחבר לשרת Windows 2003 או אפילו הביתה למכונת XP. עד כאן הכל טוב ויפה, אבל אם יש משהו אחד שממש עיצבן אותי, זה פונטים. מיקרוסופט עשו "דווקא" עד VISTA כדי לא לאפשר למשתמשים שמתחברים ל-XP לקבל החלקת פונטים (Anti Alias), מה שכמובן הראה פונטים מכוערים בטירוף וכשזה מתפרס על משהו עם המון טקסט, זה נראה זוועה במקרים רבים.

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

מתברר שכן, אם התקנת Service Pack 3 ושאר העדכונים מאז, אז מצבך טוב. כל מה שעליך לעשות הוא די פשוט:

  1. להתחבר למכונת ה-XP, לא חשוב איך תתחבר, כל עוד אתה עם משתמש שיכול לשנות Registry של המכונה.
  2. גש למחיצה הבאה (קחו אויר): [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStations]
  3. הוסף ערך DWORD חדש בשם "AllowFontAntiAlias" ותן לו ערך 1
  4. הפעל את מכונת ה-XP מחדש

זהו. לאחר מכן תוכל להתחבר עם כל תוכנת RDP נורמלית ולקבל תצוגה חלקה למישעי בלי תצרוכת משאבים חייתית לא בשרת ולא ב-Client. רק כדי לוודא שזה עובד, אני מתחבר כרגע ממחשב נייד עם פנטיום 300 מגהרץ שמריץ Windows 98 ומחובר בגירסת RDP ענתיקה – וזה עובד מצוין.

ותודה ל-DAN DAR 3 על הפוסט האינפורמטיבי 🙂