שאלה טיפים לאבטחת שרת LAMP


זה קנוניקל שאלה על אבטחת מחסנית LAMP

מהם ההנחיות המוחלטות לאבטחת שרת LAMP?


91
2017-12-14 01:52






תשובות:


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

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

L
יש הרבה מדריכים טובים זמין כדי לעזור לך. רשימה זו עשויה או לא יכולה לעזור לך בהתאם ההפצה שלך.

א
אפאצ 'י יכול להיות כיף לאבטח. אני מוצא את זה יותר קל להקשיח את מערכת ההפעלה ולשמור על שימושיות יותר מאשר Apache או PHP.

M

P
זה פועל בראש לתוך כל הרעיון של שיטות תכנות מאובטח, שהוא משמעת שלמה משלה. SANS ו OWASP יש כמות מגוחכת של מידע בנושא, אז אני לא אנסה לשכפל את זה כאן. אני יתמקד תצורת זמן ריצה ולתת המפתחים לדאוג לגבי השאר. לפעמים 'P' ב LAMP מתייחס Perl, אבל בדרך כלל PHP. אני מניח את זה האחרון.


105
2017-12-14 14:50



אני רוצה לעלות להצביע תשובה זו לפחות 10 פעמים. - user58859
N שקט עם או IPTables או חומת אש חיצונית, לחסום חיבורי רשת רק את מה שדרוש לציבור לגשת. - Matt
זה צריך להיות ויקי קהילה - Brian Adkins
זה כל כך קל לשכוח את חומת האש. שמעתי על מישהו שבנה שרת אינטרנט עבור אתר ואפילו הרחיק לכת עד כדי פריצה מחסנית TCP / IP כדי לזרוק את התנועה כי לא היה נמל 80. דבר נוסף מקבל להתעלם היא שירותים מיותרים - אם זה לא צריך להיות מופעל, לכבות אותו. - Aaron Mason
@AaronMason: מזל טוב! יש לך אנקדוטה מוצלחת. הבה נזכור שהמצב הספציפי שלך הסתדר היטב, אך נקווה שהקוראים בעתיד יבחינו בסביבה יוצאת הדופן שלך. במקרה הכללי זה עצה מסוכן למדי. - Scott Pack


אתה כבר שאל שאלה היא, בכנות, ראוי למספר ספרים בנושא. אבל יש כמה עקרונות בסיסיים כלליים שפועלים היטב:

  1. שמור מעודכן. משמעות הדבר היא מערכת ההפעלה, כל השירותים, ובמיוחד כל webapps אתה מפעיל.
  2. השבת כל שירותים לא נחוצים, הגבל את אלה הנחוצים לחשיפה המינימלית (אם אינך מחובר מרחוק ל- MySQL, אז אל תקשיב לה ב- TCP), והפעל חומת אש מבוססת מארח. (אם זה בהחלט LAMP, אתה צריך להיות טוב עם 80 ו - 443, אבל אולי SSH גם עבור הממשל.))
  3. השתמש בסיסמאות חזקות. יתרה מכך, אם אתה משתמש SSH, השתמש רק auth מפתח.
  4. ודא שאינך מתחבר לשורש. התחבר כמשתמש ולהשתמש su & sudo.
  5. אמנם זה לא עושה דברים בטוחים יותר, אתה צריך להפעיל כלים כמו logwatch אז אתה מודע למה שקורה בשרת שלך.

מקווה שעוזר לך להתחיל.


13
2017-12-14 02:23



אני ממליץ לקרוא "מדריך תצורה מאובטחת של Red Hat Enterprise Linux 5" נכתב על ידי NSA - ALex_hha
מאוחר למסיבה, אבל קראתי לאחרונה כי "לא להיכנס כמו שורש" הוא כבר לא כזה עניין גדול, במיוחד אם אתה משתמש SSH auth מבוסס על המפתחות ציבוריים / פרטיים. - the0ther


הנה רשימה טובה אני אוהב להתחיל עם.

חומת אש

  • גישה נחמדה היא לא לאפשר כל תנועה מלכתחילה, אם כן רק לפתוח את מה שאתה צריך, כפי שאתה צריך את זה. התוצאה היא פתיחת מינימום יציאות / ips לעשות דברים לעבוד וזה ממזער חשיפה.
  • עבור שרת LAMP ייתכן שתצטרך רק לפתוח יציאות עבור http / https לעולם ו ssh עבור sysadmins.
  • ודא דברים כמו תנועה ipv6 נעול למטה אם לא משתמש בו
  • AWS מספקת קבוצות אבטחה, לינוקס יש iptables, כמו גם שפע של חבילות לבחור מ.

SSH & משתמשים

  • אין סיסמא עבור גישה ssh (השתמש מפתח פרטי)
  • אל תתן שורש ל- ssh (המשתמשים המתאימים צריכים ssh, ואז su או sudo)
  • השתמש sudo עבור משתמשים כל כך פקודות נרשמות
  • התחבר ניסיונות כניסה לא מורשים (ולשקול תוכנה לחסום / לאסור משתמשים שמנסים לגשת לשרת שלך פעמים רבות מדי, כמו fail2ban)
  • ssh על יציאת לא סטנדרטית (זה יכול להיות שימושי כדי לוודא שאתה לא פירות תלויים נמוך, ולשמור על הרבה תנועה מטרידה משם, אבל לא יעשה הרבה עבור הביטחון, במיוחד על ידי עצמו)
  • לנעול ssh רק את טווח ה- IP שלך דורשים (טווח גדול יותר מאשר לא טווח)

מאגר מידע

  • לסנן נתוני משתמש
  • פרמטרי שאילתות
  • שקול הפשטת DB זה מכונה של עצמו. הפרדה זו עלולה להקשות על התוקף להגיע לערימת האינטרנט שלך ולהיפך.
  • כמו כל תוכנה מעודכן חשוב.
  • משתמש לכל מטרה. בעת יצירת משתמשים להתחיל ללא הרשאות ולהוסיף רק את אלה שהם צריכים כדי preform את תפקידם. אם משתמשים נפרדים עבור יישומים שונים (או בחלקים שונים של יישומים) יסייעו לצמצם את התועלת שיש לתוקף, אם הם יפגעו בכל חשבון אחד. גם להיזהר עם הרשאות מיוחדות כמו מענק אשר לא צריך להיות מוקצה קלות.
  • מדיניות שיש לשנות סיסמאות מעת לעת היא רעיון טוב. אם אתה מודאג לגבי כמות המאמץ הנדרש לזכור פחות תכופים הוא טוב יותר מאשר לעולם.
  • הבן את הצפנת הסיסמאות. סיסמאות מלח. אל תשתמש md5!

תוכנה

  • שמור על עדכניות התוכנה (OS, שרת אינטרנט, שפת scripting, CMS). אנשים רבים שם בחוץ יסרקו נקודות תורפה מוכרות בגירסאות ישנות (לא מסופקות)
  • הסר כל תוכנה שאתה לא צריך (באופן אידיאלי לא לשמור על החבילה הדרושה כדי לקמפל תוכנה על שרתי הייצור, עדיף מראש לקמפל תוכנה ולהפוך אותו זמין כחבילה מכונות הייצור שלך)
  • ודא את הקובץ ההרשאות נעולות (במיוחד עבור דברים כמו העלאות משתמש וקובצי הגדרות)
  • סיסמה להגן על האזור מנהל עבור CMS ברמת שרת האינטרנט (אימות HTTP יכול לשבת בחזית של CMS פגיע ולסייע לחסום גישה, שהיא דרך טובה כדי למנוע התקפות)
  • השתמש ב- SSL עבור האזור של מנהל ונתונים רגישים אחרים
  • הפוך אוטומטית את הניהול של השרתים והתשתיות שלך (משהו כמו בובה, שף או מלח.) אם גם באמצעות AWS CloudFormation). זה יעזור לך לתקן דברים על פני הרבה שרתים, וכן לצמצם תרחישים כמו תיקון הרשאות בשרת א אבל שוכח לעשות את זה על שרת B
  • איפה אפשר לא לתת את הגרסה הספציפית של CMS שלך, PHP או WebServer. למרות הסתרת מידע זה לא אבטחה יש הרבה אנשים שם scaning עבור גרסאות מסוימות של תוכנות שונות פחות מידע אתה בחופשיות לתת את התוקף יותר צריך לעבוד. זוהי דרך טובה כדי לוודא שאתה לא אחד פירות תלויים נמוך. כמובן שזה לא יעשה דבר למי שרוצה להשקיע קצת יותר מאמץ להיכנס
  • הגבל את האנשים שיש להם גישה לשרת

7
2017-08-10 08:08





הוספת מה דיוויד מציע, יותר מודולרי ההתקנה שלך, כי אני מתכוון להגביל את הגישה למשתמשים מסוימים / קבוצות שנוצרו במיוחד עבור משימה אחת ולהגביל את היקפן, יותר מאובטחת שלך LAMP מחסנית: דוגמה לכך היא שיש למשתמש Apache עבור קבצים Apache / תיקיות עם הרשאות שנקבעו בהתאם ולא בכל קבוצות שיכולים לגשת לקבצים / תיקיות מערכת קריטיים. משתמש שיכול לגשת לטבלאות MySql המשויכות לאתרים שלך, כי אתה הולך לשרת ורק טבלאות אלה. בנוסף, ניתן להגביל את הגישה שלהם כדי לתת את כמות המינימום של גישה משיחת PHP. כמו כן, ודא כי שם המשתמש MySQL המשמש / נחשף באמצעות קובץ PHP אינו שם המשתמש או הסיסמה אותו משתמש אחר.

מה זה אומר: אם משתמש Apache או המשתמש MySql נפגעו, הם לא יכולים לעשות שום נזק מחוץ להיקף של Apache תיקיות יש גישה (במקרה של המשתמש Apache) ומחוץ לטבלה ( s) / באתר (ים) (במקרה של המשתמש עבור מסד הנתונים MySQL).

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

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

זמן דוגמה! אני עומד לתת דוגמה למערכת כדי לפשט את הרעיון.

אומרים שיש לך משתמשים במערכת שלך (השורש צריך להיות מושבת על אבטחה באמצעות משהו כמו umod -l או passwd-ll, וכו '): ג'ון, ברני, טרנס וליסה.

אתה יכול ליצור משתמש ב- MySQL עם השם של bigbird (ודא שאתה משתמש סיסמה hashed). Bigbird רק יש הרשאות לבחור וזכויות העדכון, אבל לא ירידה או ליצור, ובוודאי לא . בנוסף, אתה יוצר עוד משתמש MySQL מינהלי עם שם garfield לעבוד על מסד הנתונים MySQL ואתה מוחק את המשתמש השורש ממסד הנתונים MySQL, כך שזה לא יכול להיות comprimised. גרפילד הוענק . הרשאות ברחבי MySQL (למעשה, זה פשוט שינוי שם שורש).

עכשיו, אתה יוצר או קבוצה אפאצ 'י או משתמש ואנו קוראים לזה apweb2. Appweb2 אינו חבר בקבוצות אחרות, וכל הקבצים / תיקיות עבור Apache מאוחסנים ב / home / apweb2 /. כל מארח וירטואלי היה תיקיית משנה משלו וכל אחד המארחים האלה יש מסמך שורש להגדיר לאותו תיקיית משנה. הסימניות יושבתו כדי לא לספק בטעות גישה לשאר המערכת.

כמו כן, ניתן להגביל את הגישה ssh למשתמשים מסוימים בלבד (או קבוצות מסוימות, אני אוהב לשים אותם בקבוצה ssh, ולהפוך את הדבר היחיד מסוגל להשתמש ssh).

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

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


4
2017-07-30 04:49





מצאתי מסמך זה מ- SANS.org מועיל באמת http://www.sans.org/score/checklists/linuxchecklist.pdf


2
2017-08-10 11:50



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


בשלב זה, אל תזניח וירטואליזציה של מכולה, כלומר, Docker, systemd-nspawn והמנגנונים של וירטואליזציית מכולות שעליה הם בנויים (מרחבי שמות, cgroups). שימוש בווירטואליזציה של מכולה מאפשר לך לבודד תהליכים, לדוגמה, אם אחד מהשירותים נפגע, תוקף לא יקבל גישה לשירותים אחרים.

במקרה של LAMP, ניתן להשתמש, למשל, בארבעה מכולות של Docker עם שרת SSH, Apache, MySQL, PHP-FPM / Python / Perl / etc.


0
2017-07-27 20:00