Hosts.allow - פקודת לינוקס

מציאת המארחים המורשים שלך

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

למעשה, זה לא לגמרי נכון. ללא כללים שהוגדרו בקובץ /etc/hosts.allow או בקובץ /etc/hosts.deny, המחשב שלך יעביר את החיבורים ליישומים שלהם. אז אם מישהו ינסה להתחבר SSH, החיבור יגיע למערכת הלינוקס שלך שם הוא יועבר ל-SSH לצורך התחברות. אם האישורים המתאימים לא יסופקו, החיבור יידחה.

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

אתה יכול לבדוק את המארחים המותרים שלך על ידי פירוט התוכן של הקובץ /etc/hosts.allow.

cat /etc/hosts.allow. 

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

גברים עובדים על מחשב במשרד
 יורי_ארקורס/Getty Images

שימוש בקובץ Hosts.allow

הקובץ /etc/hosts.allow מאפשר לך לבחור אילו מחשבים יוכלו לגשת למערכת שלך. בקובץ, אתה יכול לציין כללים פשוטים בטקסט רגיל כדי לומר למחשב שלך כיצד לטפל בחיבורים. כדי להתחיל, צור כלל המאפשר לכל מחשב לכל השירותים.

הכל הכל. 

זה כזה פשוט. לאחר מכן, אם רצית לא לכלול מחשב בעייתי, תוכל לעשות זאת גם כן.

הכל: הכל למעט 192.168.1.110. 

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

הכל: 192.168.1.0/24. 

לחלופין, תוכל להשתמש במילת המפתח "LOCAL" במקום זאת.

הכל: מקומי. 

אתה יכול גם להשתמש בשמות דומיין. לדוגמה:

הכל: .example.com. 

אתה יכול להשתמש במילת המפתח "EXCEPT" גם כאן כדי לא לכלול תת-דומיין שעלול להיות בעייתי.

הכל: .example.com למעט testing.example.com. 

אתה יכול גם לציין כללים עבור דמונים ספציפיים. לכן, אם אתה רוצה לשלוט בגישה ל-SSH, תגדיר כללים עבור 'sshd'.

sshd: מקומי. 

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

sshd, in.ftpd: LOCAL. 

שימו לב ל"פנימה". חלק ב-"in.ftpd?" זה מאפשר לך לציין תנועה נכנסת.

לאחר מכן, יש לך אפשרות לחבר את הכל ביחד.

sshd, in.ftpd: LOCAL למעט 192.168.1.110. 

אלו הן הדרכים הנפוצות ביותר שבהן אתה משתמש בקובץ /etc/hosts.allow במערכת הלינוקס שלך. לפירוט הטכני המלא של מה שאתה יכול לעשות עם הקובץ /etc/hosts.allow, המשך לסעיף הבא.

תקלה טכנית

דף מדריך זה מתאר את לינוקס כשפת בקרת גישה פשוטה המבוססת על לקוח (שם מארח/כתובת, שם משתמש) ו שרת (שם תהליך, שם מארח/כתובת) דפוסים. דוגמאות מובאות בסוף. הקורא חסר הסבלנות מוזמן לדלג למדור הדוגמאות להקדמה מהירה. גרסה מורחבת של שפת בקרת הגישה מתוארת ב- hosts_options (5) מסמך. ההרחבות מופעלות בזמן בניית התוכנית על ידי בנייה עם —DPROCESS_OPTIONS.

בטקסט הבא, דמון הוא שם התהליך של תהליך דמון רשת, ו לָקוּחַ הוא השם ו/או הכתובת של שירות המבקש מארח. שמות תהליך דמוני הרשת מצוינים בקובץ התצורה של inetd.

קבצי בקרת גישה

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

גישה תינתן כאשר זוג (דמון, לקוח) מתאים לערך ב- /etc/hosts.allowקוֹבֶץ.

אחרת, הגישה תדחה כאשר זוג (דמון, לקוח) מתאים לערך ב-/etc/hosts.deny קוֹבֶץ.

אחרת, תינתן גישה.

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

כללי בקרת גישה

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

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

מתעלמים מקווים ריקים או שורות שמתחילות בתו '#'. זה מאפשר לך להוסיף הערות ורווחים כדי שיהיה קל יותר לקרוא את הטבלאות.

כל שאר השורות צריכות לעמוד בפורמט הבא, כאשר דברים שבין [] הם אופציונליים:

daemon_list: client_list [: shell_command ]

daemon_list היא רשימה של שמות תהליך דמון אחד או יותר (ערכי argv[0]) או תווים כלליים (ראה להלן).

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

הצורות המורכבות יותר daemon@host ו user@host מוסברים בסעיפים על דפוסי נקודות קצה של שרת ועל חיפושי שם משתמש של לקוח, בהתאמה.

רכיבי רשימה צריכים להיות מופרדים על ידי ריקים ו/או פסיקים.

חוץ מ חיפושי קבוצת רשת של ₪ (YP)., כל בדיקות בקרת הגישה אינן תלויות רישיות.

דפוסים

שפת בקרת הגישה מיישמת את התבניות הבאות:

מחרוזת שמתחילה ב-`.' אופי. שם מארח מותאם אם הרכיבים האחרונים של שמו תואמים לדפוס שצוין. לדוגמה, התבנית `.tue.nl' תואמת לשם המארח `wzv.win.tue.nl'.

מחרוזת המסתיימת ב-`.' אופי. כתובת מארח מותאמת אם השדות המספריים הראשונים שלה תואמים למחרוזת הנתונה. לדוגמה, התבנית '131.155'. תואם את הכתובת של (כמעט) כל מארח ברשת אוניברסיטת איינדהובן (131.155.x.x).

מחרוזת שמתחילה בתו `@' מטופלת כשם קבוצת רשת של NIS (לשעבר YP). א שם מארח מותאם אם הוא חבר מארח בקבוצת הרשת שצוינה. התאמות Netgroup אינן נתמכות עבור שמות תהליכי דמון או עבור שמות משתמש של לקוח.

ביטוי של הצורה `n.n.n.n/m.m.m.m' מתפרש כזוג `net/mask'. כתובת מארח IPv4 מותאמת אם 'net' שווה ל-AND של הכתובת וה-'mask'. לדוגמה, דפוס הרשת/מסיכה '131.155.72.0/255.255.254.0' תואם לכל כתובת בטווח '131.155.72.0' עד '131.155.73.255'.

ביטוי של הצורה `[n: n: n: n: n: n: n: n]/m' מתפרש כזוג `[net]/prefixlen'. כתובת מארח IPv6 מותאמת אם סיביות 'prefixlen' של 'net' שוות לסיביות 'prefixlen' של הכתובת. לדוגמה, דפוס [net]/prefixlen `[3ffe: 505:2:1::]/64' תואם לכל כתובת בטווח `3ffe: 505:2:1::' עד `3ffe: 505:2: 1:ffff: ffff: ffff: ffff'.

מחרוזת שמתחילה בתו `/' מטופלת כאל שם קובץ. שם מארח או כתובת מתאימים אם הם תואמים לכל שם מארח או דפוס כתובת הרשומים בקובץ בעל השם. פורמט הקובץ הוא אפס או יותר שורות עם אפס או יותר דפוסי שם מארח או כתובת מופרדים על ידי רווח לבן. ניתן להשתמש בדפוס שם קובץ בכל מקום שבו ניתן להשתמש בשם מארח או בדפוס כתובת.

תווים כלליים `*' ו`?' ניתן להשתמש כדי להתאים שמות מארחים או כתובות IP. לא ניתן להשתמש בשיטה זו של התאמה בשילוב עם התאמת `net/mask', התאמת שם מארח מתחילה ב-`. או כתובת IP תואמת המסתיימת ב-`.'.

תווים כלליים

שפת בקרת הגישה תומכת בתווים כלליים מפורשים הכוללים:

  • 'את כל' - התו הכללי האוניברסלי, תמיד תואם.
  • 'מְקוֹמִי' - מתאים לכל מארח ששמו אינו מכיל תו נקודה.
  • 'לא ידוע' -מתאים לכל משתמש ששמו לא ידוע, ומתאים לכל מארח ששמו אוֹ כתובת לא ידועה. יש להשתמש בדפוס זה בזהירות: ייתכן ששמות מארחים לא יהיו זמינים עקב בעיות זמניות בשרת השמות. א כתובת רשת לא יהיה זמין כאשר התוכנה לא יכולה להבין לאיזה סוג רשת היא מדברת.
  • 'ידוע' -מתאים לכל משתמש ששמו ידוע, ומתאים לכל מארח ששמו ו הכתובת ידועה. יש להשתמש בדפוס זה בזהירות: ייתכן ששמות מארחים לא יהיו זמינים עקב בעיות זמניות בשרת השמות. כתובת רשת לא תהיה זמינה כאשר התוכנה לא יכולה להבין לאיזה סוג רשת היא מדברת.
  • 'פרנואיד' - מתאים לכל מארח ששמו אינו תואם לכתובת שלו. כאשר tcpd בנוי עם -DPARANOID (מצב ברירת מחדל), הוא מוריד בקשות מלקוחות כאלה עוד לפני הסתכלות על טבלאות בקרת הגישה. בנה ללא -DPARANOID כאשר אתה רוצה יותר שליטה בבקשות כאלה.

'מפעילים'

  • 'מלבד' — השימוש המיועד הוא בצורה: `list_1 EXCEPT list_2'; המבנה הזה מתאים לכל דבר שתואם רשימה_1 אלא אם כן זה תואם רשימה_2. ניתן להשתמש באופרטור EXCEPT ב-daemon_lists וב-client_lists. ניתן לקנן את האופרטור EXCEPT: אם שפת הבקרה תאפשר את השימוש בסוגריים, `a EXCEPT b EXCEPT c' ינתח בתור `(a EXCEPT (b EXCEPT c))'.
  • פקודות מעטפת -אם כלל בקרת הגישה המותאם הראשון מכיל פקודת מעטפת, פקודה זו נתונה ל-%substitutions (ראה סעיף הבא). התוצאה מבוצעת על ידי א /bin/sh תהליך ילד עם קלט, פלט ושגיאה סטנדרטיים מחוברים /dev/null. ציין '&' בסוף ה- פקודת מסוף אם אתה לא רוצה לחכות עד שזה יסתיים. פקודות מעטפת לא צריכות להסתמך על הגדרת PATH של inetd. במקום זאת, עליהם להשתמש בשמות נתיבים מוחלטים, או שהם צריכים להתחיל במשפט מפורש PATH=whatever.

ה hosts_options(5) מסמך מתאר שפה חלופית המשתמשת בשדה הפקודה של המעטפת באופן שונה ובלתי תואם.

% הרחבות

ההרחבות הבאות זמינות בתוך פקודות מעטפת:

  • %a (%A) - הלקוח (שרת) מנחה כתובת.
  • %c — פרטי לקוח: user@host, user@address, שם מארח או סתם כתובת, תלוי בכמות המידע הזמין.
  • %d - שם תהליך הדמון (ערך argv[0]).
  • %h (%H) — שם המארח של הלקוח (שרת) או כתובת, אם שם המארח אינו זמין.
  • %n (%N) - שם המארח של הלקוח (השרת) (או "לא ידוע" או "פרנואיד").
  • %p - מזהה תהליך הדמון.
  • %s — מידע שרת: daemon@host, daemon@address, או רק שם דמון, תלוי בכמות המידע הזמין.
  • %u - שם המשתמש של הלקוח (או "לא ידוע").
  • %% — מתרחב לתו '%' בודד.

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

דפוסי נקודות קצה של שרת

כדי להבחין בין לקוחות לפי כתובת הרשת שאליה הם מתחברים, השתמש בתבניות של הטופס:

process_name@host_pattern: client_list... 

ניתן להשתמש בדפוסים כאלה כאשר למכונה יש כתובות אינטרנט שונות עם שמות מארח שונים באינטרנט. ספקי שירות יכולים להשתמש במתקן זה כדי להציע ארכיוני FTP, GOPHER או WWW עם שמות אינטרנט שאולי שייכים אפילו לארגונים שונים. ראה גם את האפשרות 'טוויסט' במסמך hosts_options (5). למערכות מסוימות (Solaris, FreeBSD) יכולות להיות יותר מכתובת אינטרנט אחת בממשק פיזי אחד; עם מערכות אחרות ייתכן שיהיה עליך לפנות לממשקי פסאודו SLIP או PPP שחיים במרחב כתובות רשת ייעודי.

ה-host_pattern מציית לאותם כללי תחביר כמו שמות וכתובות מארח בהקשר של client_list. בדרך כלל, מידע על נקודות הקצה של השרת זמין רק עם שירותים מוכווני חיבור.

חיפוש שם משתמש של לקוח

כאשר מארח הלקוח תומך בפרוטוקול RFC 931 או באחד מצאצאיו (TAP, IDENT, RFC 1413) תוכניות המעטפת יכולות לאחזר מידע נוסף על הבעלים של החיבור. פרטי שם המשתמש של הלקוח, כאשר הם זמינים, מתועדים יחד עם שם המארח של הלקוח, וניתן להשתמש בהם כדי להתאים דפוסים כמו:

daemon_list:... user_pattern@host_pattern... 

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

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

לא ניתן לסמוך על פרטי שם המשתמש של הלקוח כאשר הוא נחוץ ביותר, כלומר כאשר מערכת הלקוח נפגעה. באופן כללי, ALL ו-(UN)KNOWN הם דפוסי שמות המשתמש היחידים שהגיוניים.

חיפוש שמות משתמש אפשרי רק עם שירותים מבוססי TCP, ורק כאשר מארח הלקוח מריץ דמון מתאים; בכל שאר המקרים התוצאה "לא ידועה".

ידוע UNIX באג ליבה עלול לגרום לאובדן שירות כאשר חיפושי שמות משתמש חסומים על ידי חומת אש. מסמך README המעטפת מתאר הליך כדי לגלות אם הליבה שלך מכילה באג זה.

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

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

daemon_list: @pcnetgroup ALL@ALL. 

יתאים לחברים ב-netgroup של pc מבלי לבצע חיפושי שמות משתמש, אך יבצע חיפושי שמות משתמש עם כל המערכות האחרות.

זיהוי התקפות זיוף כתובות

פגם במחולל מספרי הרצף של רבים יישומי TCP/IP מאפשר לפולשים להתחזות בקלות למארחים מהימנים ולפרוץ דרך, למשל, שירות המעטפת המרוחק. ניתן להשתמש בשירות IDENT (RFC931 וכו') כדי לזהות התקפות זיוף של כתובות מארח כאלה ואחרות.

לפני קבלת בקשת לקוח, העוטפים יכולים להשתמש בשירות IDENT כדי לגלות שהלקוח לא שלח את הבקשה כלל. כאשר מארח הלקוח מספק שירות IDENT, תוצאת חיפוש IDENT שלילית (הלקוח תואם `UNKNOWN@host') היא עדות חזקה להתקפת זיוף מארח.

תוצאת חיפוש חיובית של IDENT (הלקוח תואם את 'KNOWN@host') היא פחות אמינה. זה אפשרי לפורץ לזייף גם את חיבור הלקוח וגם את בדיקת ה-IDENT, אם כי זה הרבה יותר קשה מאשר לזייף רק חיבור לקוח. יכול להיות גם ששרת ה-IDENT של הלקוח משקר.

חיפושי IDENT לא עובדים עם שירותי UDP.

דוגמאות נוספות

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

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

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

לרוב סגור

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

מדיניות ברירת המחדל (ללא גישה) מיושמת עם קובץ דחייה טריוויאלי:

/etc/hosts.deny:

הכל הכל. 

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

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

/etc/hosts.allow:

הכל: LOCAL @some_netgroup
הכל: .foobar.edu למעט terminalserver.foobar.edu.

הכלל הראשון מאפשר גישה ממארחים ב- דומיין מקומי (ללא '.' בשם המארח) ומחברים ב- some_netgroup קבוצת רשת. הכלל השני מאפשר גישה מכל המארחים ב-foobar.edu domain (שימו לב לנקודה המובילה), למעט terminalserver.foobar.edu.

בעיקר פתוח

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

מדיניות ברירת המחדל (הגישה ניתנת) הופכת את קובץ האישור למיותר כך שניתן להשמיטו. המארחים שאינם מורשים במפורש רשומים בקובץ הדחייה. לדוגמה:

/etc/hosts.deny:

הכל: שם מסוים.מארח, דומיין מסוים
הכל: הכל מלבד in.fingerd: other.host.name, .other.domain.

הכלל הראשון שולל חלק מהמארחים והדומיינים את כל השירותים; הכלל השני עדיין מתיר בקשות אצבע ממארחים ודומיינים אחרים.

מלכודות בובי

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

/etc/hosts.allow:

in.tftpd: LOCAL, .my.domain
/etc/hosts.deny:
in.tftpd: ALL: spawn (/some/where/safe_finger -l @%h | \
/usr/ucb/mail -s %d-%h root) &

הפקודה safe_finger מגיעה עם מעטפת tcpd ויש להתקין אותה במקום מתאים. זה מגביל נזק אפשרי מנתונים שנשלחים על ידי שרת האצבע המרוחק. זה נותן הגנה טובה יותר מפקודת האצבע הרגילה.

הרחבת הרצפים %h (מארח לקוח) ו-%d (שם שירות) מתוארת בסעיף על פקודות מעטפת.

אל תלכוד את דמון האצבעות שלכם, אלא אם כן אתם מוכנים ללולאות אצבע אינסופיות.

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

ראה גם

tcpd (8) תוכנית עטיפת tcp/ip daemon.
tcpdchk (8), tcpdmatch (8), תוכניות בדיקה.

להשתמש ב איש פקודה (% איש) כדי לראות כיצד נעשה שימוש בפקודה במחשב הספציפי שלך.