הקמת שרת פרוקסי (Squid)

אבינועם לבקוביץ

Avinoam_AT_Rambam.health.gov.il

היסטוריית גירסאות
גירסה 1.0 2007 ליטל ברהום
הומר לפורמאט ויקי
גירסה 1.0 2004 אבינועם לבקוביץ
גירסא ראשונה

מבוא

למי המדריך מיועד ?

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

  1. האצת מהירות הגלישה תוך חיסכון של כ- 40% בניצול רוחב פס האינטרנט, על ידי ביצוע Caching לאתרים בהם ביקרו המשתמשים.
  2. מנגנון המאפשר שליטה וניתור הגישה לאינטרנט.
  3. מנגנון לחסימת תחנות, משתמשים, אתרים ספציפיים ואתרים המכילים מילות מפתח שנקבעו מראש.
  4. מערכת הפקת דוחות מפורטים על האתרים שביקרו בהם המשתמשים עבור כל מחשב, עבור הארגון כולו ועבור כל אתר בו ביקרו משתמשים.
  5. מערכת ניתור ביצועי השרת והפקת דוחות המסכמים את נתוני הגלישה.

תפקיד שרת פרוקסי

שרת הפרוקסי משמש כמתווך בין המשתמשים לאינטרנט, כל בקשות הגלישה של המשתמשים מנותבות אליו והוא עונה לבקשות בהתאם למדיניות שנקבעה. במידה והבקשה מאושרת השרת בודק בטבלת קבצי ה- Cache האם האובייקט המבוקש נמצא בספריית ה –.Cache במידה וכן, השרת בודק את זמן התפוגה של אותו אובייקט (Expiration Time), במידה והאובייקט עדיין בר-תוקף השרת משתמש בו.
במידה והאובייקט אינו נמצא בספריית ה- Cache או שפג תוקפו, השרת מוריד אותו מהאינטרנט, מאחסן אותו בספריית ה – Cache ועונה לבקשת הלקוח. כפי שציינתי הבקשות מאושרות או נדחות בהתאם למדיניות שנקבעה. שרת פרוקסי שיוצג במדריך זה מאפשר גמישות רבה בקביעת המדיניות, ניתן לחסום אתרים על ידי שימוש במילות מפתח (כגון : Sex, MP3), ניתן לחסום את הגישה לאינטרנט בהתבסס על שמות Host או כתובות IP. ניתן לאפשר גישה לאתרים מסוימים רק לחלק מהתחנות ולחסום את הגישה לשאר.
כפי שניתן להבין האפשרויות רבות ומאפשרות כמעט כל קומבינציה בין אתרים, קבצים ותחנות המשתמשים.

Squid

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

זכויות יוצרים

כל הזכויות שמורות (C)

[2004] [אבינועם לבקוביץ] המדריך נכתב על ידי אבינועם לבקוביץ Avinoam_AT_Rambam.health.gov.il

הערת המחבר

אשמח לקבל משוב ולשמוע את דעתך על המדריך בכתובת Avinoam_AT_Rambam.health.gov.il

חומרה :

להלן מספר דגשים בנוגע לחומרה הדרושה להקמת שרת פרוקסי משובח:

דיסק קשיח:

הדיסק הקשיח נושא ברוב העומס, כל תהליך ה – Caching מתבצע על הדיסק הקשיח וכתוצאה מכך ביצועי השרת מושפעים ישירות מביצועי הדיסק. אחד הפרמטרים החשובים הינו מהירות הגישה של הדיסק (Disk random seek time ),פרמטר זה מייצג את מהירות שליפת הנתונים מהדיסק וכפי שכבר ציינתי כל תהליך ה –caching מבוצע על הדיסק כך שלפרמטר זה יש השפעה ישירה על מהירות התגובה של השרת לבקשות המופנות אליו. כיום לדיסקים מסוג IDE יש ביצועים טובים כך שניתן לבנות שרת פרוקסי מצוין בעזרת דיסקים IDE, מה שמוזיל מאוד את עלויות השרת. מומלץ להקצות דיסק נפרד לשימוש ה –Cache ולהשתמש בדיסק נוסף לשאר המחיצות של מערכת ההפעלה. גודל הדיסק לשימוש ה –Cache משתנה בהתאם לצרכי הארגון, גודלו וכמות התעבורה של המשתמשים. מכיוון שעלות דיסקים מסוג IDE הינה נמוכה מאוד רצוי להשתמש בדיסק גדול ( 40GB נחשב גדול ) ובכך להבטיח אפשרות גידול עתידי של המערכת.

זיכרון(RAM):

על מנת ששרת הפרוקסי יוכל לבדוק במהירות מרבית האם האובייקט המבוקש נמצא ב - Cache שלו, שרת הפרוקסי מתחזק בזיכרון הראשי את טבלת האובייקטים המאוחסנים בספריית ה –Cache . נתון זה הינו קריטי לביצועי השרת, במידה ולא מתאפשרת גישה מהירה לטבלה הנ”ל (במידה וחלק מהטבלה נמצא ב- swap file ) אנו נהיה עדים לירידה דראסטית בביצועי השרת, מכיוון שהזמן שייקח לשרת לשלוף את הנתונים מה- swap file הינו גדול מאוד ביחס לזמן שליפת הנתונים המאוחסנים בזיכרון הראשי (RAM).
קצת מספרים: על מנת לחשב את גודל הזכרון שהמערכת זקוקה לו יש לקחת בחשבון את הנתונים הבאים:

  • הגודל הממוצע של אובייקט ב- Cache הינו 17K.
  • כל אובייקט ב- Cache דורש כ- 100 Byte בזיכרון הראשי (RAM).
  • מערכת עם Cache בגודל 12GB יכולה לאחסן כ- 700K אובייקטים.

המסקנה : גודל הזיכרון (RAM) הדרוש למערכת עם Cache בגודל 12GB הינו מינימום.128MB מומלץ להשקיע בזיכרון לפי העיקרון של יותר זיכרון - יותר טוב, הדבר בהחלט יורגש בביצועי השרת.

מעבד (CPU):

שרת הפרוקסי אינו זקוק למעבד חזק, עיקר השימוש במעבד הינו לשליפת אובייקטים. מה – Cache ובבניית טבלת האובייקטים בזיכרון בזמן האתחול (פעולה המאמצת את המעבד אך לזמן קצר בלבד) מעבד Pentium 200MHZ אמור לספק את המערכת , אך בעידן של מעבדים מהירים רצוי להשתמש במעבד חזק יותר.

תוכנה :

RedHat 9 : המדריך נכתב תוך שימוש ב- RedHat,אך ניתן להקים את שרת הפרוקסי (Squid)
עם כל הפצה אחרת, במקרה כזה יש לשנות את המסלול לקבצים השונים המתוארים במדריך זה כך שיתאים להפצה בה הינך משתמש. בכל שאר החלקים ההתקנה זהה.
המלצה: מכיוון ששרת הפרוקסי זקוק לרכיבים בסיסיים בלבד של מערכת לינוקס מיותר להתקין התקנה מלאה אשר תגזול משאבי מערכת. מומלץ להסתפק בהתקנה מותאמת (custom installation) של שרת הלינוקס.
הערה: על מנת להשיג ביצועים מרביים רצוי להקצות דיסק נפרד עבור המחיצה שתאחסן את ספרית ה- Cache. במדריך זה אני אשתמש בברירת המחדל של המערכת המגדירה את ספריית ה -Cache במסלול /var/spool/squid/ , ולכן המחיצה var/ תמוקם בדיסק נפרד.
Apache: שרת האינטרנט המגיע בחבילת ההתקנה של RedHat 9
Squid: שרת הפרוקסי המגיע בחבילת ההתקנה של RedHat 9
Calamarisx: חבילת תוכנה זו מנתחת את קבצי הלוג של שרת הפרוקסי ומייצרת דוחות פרטניים של ביצועי השרת וסיכומים בנוגע לצורות הגישה, שעות שיא וכ”ו.
Sarg : חבילה זו מספקת מערכת הפקת דוחות מפורטים בנוגע להרגלי הגלישה של המשתמשים תוך דגש על פירוט האתרים אליהם גלשו המשתמשים, רשימת האתרים הפופולאריים ביותר ועוד.. המערכת מספקת דוחות יומיים שבועיים וחודשיים בפורמטHTML.

התקנה

מערכת ההפעלה :

בסיום התקנת Redhat, יש לוודא את ההגדרות במספר קבצים בסיסיים.
הקובץ etc/hosts/: הקובץ etc/hosts/ מכיל מיפוי של שמות host לכתובות IP. קובץ hosts לדוגמא :

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1           localhost.localdomain       localhost
192.168.1.4       S-Proxy.My-Domain       S-Proxy

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

< Server IP Address> < Server Host name> < Server name>

הקובץ etc/resolv.conf/: קובץ זה מכיל את כתובות ה – IP של שרתי ה – DNS שישמשו את שרת הפרוקסי. קובץ etc/resolv.conf/ לדוגמא :

search
nameserver 192.168.1.48
nameserver 212.150.48.168

עבור כל שרת DNS יש להגדיר שורה חדשה בקובץ בפורמט :

nameserver < DNS server IP >

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

# rpm -qa | grep squid

במידה ושרת הפרוקסי הותקן במערכת אנו נקבל פלט בסגנון : squid-2.5.STABLE1-2 במידה ולא התקבל פלט. שרת הפרוקסי אינו מותקן במערכת ועלינו להתקין אותו מתקליטור ההתקנה הראשון של RedHat.

קובץ ההגדרות squid.conf

הקובץ etc/squid/squid.conf/ : זהו קובץ ההגדרות הראשי של שירות squid. הקובץ הינו גדול ומורכב ומכיל כ – 140 הגדרות שונות והסברים מפורטים לגבי כל הגדרה. עבור רוב ההגדרות בקובץ קיימת אפשרות ברירת מחדל שתתאים בערך ב- 92.9% מהמקרים. כך שעל מנת שהשרת יפעל בתצורה הבסיסית יש צורך לשנות רק מספר קטן של הגדרות. לאחר ביצוע שינויים בקובץ יש לאתחל את שירות squid על מנת שהשינויים שביצענו יכנסו לתוקף.
המלצה :רצוי לעבוד עם הקובץ squid.conf במשנה זהירות. תוך ביצוע מספר שינויים קטן ואתחול השירות squid על מנת לבדוק את השינויים הללו. במידה ומבוצעים בקובץ שינויים רבים יתכן שאתחול שירות squid לא יצליח וקשה יהיה לדעת מה מהשינויים שביצענו גורם לבעיה. בכול מקרה מומלץ בחום לגבות את הקובץ המקורי לפני ביצוע השינויים הבאים.
גיבוי קובץ ההגדרות המקורי: מומלץ לגבות את קובץ ההגדרות המקורי לפני ביצוע השינויים, כך שבמידה והעניינים מסתבכים נוכל תמיד לחזור לנקודת ההתחלה. לביצוע הגיבוי יש להריץ את הפקודה הבאה :

cp /etc/squid/squid.conf /etc/squid/squid.conf.orig

לאחר ביצוע הגיבוי יש לפתוח את הקובץ etc/squid/squid.conf/ בעורך האהוב עליך. וקדימה, בואו נתחיל לעבוד.
הגדרת הפורט אליו יאזין שירות squid :
TAG: http_port הגדרה זו קובעת לאיזה פורט יאזין שרת הפרוקסי. ניתן לבחור כל פורט פנוי מעל 1024,כך שיש אפשרות לבחור מספר יותר ידידותי לסביבה מברירת המחדל 3218,ההגדרה השכיחה הינה 8080 מטעמי נוחות מובנים. שרת squid יכול להאזין למספר פורטים במקביל כך שניתן להשאיר את ברירת המחדל ולהוסיף את פורט 8080. במקרה כזה יש לשנות את הגדרת ברירת המחדל:

#Default:
# http_port 3128

ולהוסיף את פורט 8080

#Default:
http_port 3128 8080

תחלופת האובייקטים ב- Cache.
TAG: cache_swap_low (percent, 0-100)l
TAG: cache_swap_high (percent, 0-100)l
פרמטרים אלו מסמנים ל squid את נפח הדיסק באחוזים שספריית ה- Cache יכולה למלא לפני ש -squid יתחיל לבצע תחלופה של אובייקטים, הגדרת ברירת המחדל הינה:

#Default:
 # cache_swap_low 90 
# cache_swap_high 95

ההגדרה הזו קובעת שספריית ה- Cache יכולה למלא כ- 90% מהנפח שהוגדר לה, לפני ש squid יתחיל לבצע תחלופה של אובייקטים. קצב התחלופה הולך וגובר ככל שהנפח מתקרב ל- 95%.
חשוב לזכור שבמידה וגודל ספריית ה- Cache שהוגדרה הינו 18GB אז 5% הינם כמה מאות מגה,במקרה כזה רצוי לשנות את ברירת המחדל ולציין ערכים יותר קרובים. אנו נשנה את ברירת המחדל הנ”ל לערכים הבאים:

#Default: cache_swap_low 94 cache_swap_high 95

הגדרת ספריית ה- Cache :
TAG: cache_dir הגדרה זו קובעת את המבנה, המיקום והנפח של ספריית ה- Cache, הגדרת ברירת המחדל :

 
# cache_dir ufs /var/spool/squid 100 16 256

מבנה ההגדרה: cache_dir ufs Directory-Name Mbytes L1 L2 ufs : הינה שיטת אחסון נתונים אשר תשמש את שירות ה- squid באחסון דפי האינטרנט בספרייה.
Directory-Name : המסלול לספריית ה- Cache שבה יאוחסנו דפי האינטרנט.
Mbytes : הגודל המוקצה לספריית ה –Cache .
L1 : מגדיר את מספר הספריות ברמה הראשונה של ספריית ה- Cache.
L2 : מגדיר את מספר הספריות ברמה השנייה של ספריית ה –Cache.
אנו נשנה את הגדרת ברירת המחדל ונחליף אותה בשורה הבאה:

 
cache_dir ufs /var/spool/squid 7500 16 256

הנתון 7500 מקצה 7.5GB עבור ספריית ה- Cache. מומלץ לשנות נתון זה כך שישקף 75% מנפח מחיצת /var בשרת שלך.
בקרת גישה בסיסית (ACL): מערכת בקרת גישה (ACL) מאפשרת הגדרת מדיניות ושליטה על גישה לאינטרנט. הנושא יוסבר בהרחבה בסעיף 8. הגדרת ברירת המחדל בקובץsquid.conf מונעת את הגישה לספריית ה- Cache,על מנת לאפשר עבודה תקינה של השרת יש לשנות את הגדרת ברירת המחדל ולאפשר את הגישה.יש לחפש את השורה הבאה:

 
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

מתחת לשורה הנ”ל יש להגדיר את השורות הבאות אשר יאפשרו גישה ל –Cache , יש לשנות את ההגדרה My_Lan_1 לכתובת הרשת שלך.

 
acl     My_Lan_1     src      192.168.1.0/255.255.255.0
acl     all                 src       0.0.0.0/0.0.0.0
http_access            allow    My_Lan_1
http_access           deny     all

שורות אלו הינם מערכת ACL בסיסית, בהמשך יינתן הסבר מפורט על מערכת ACL והאפשרויות הגלומות בה.
השורה הראשונה מגדירה משתנה (My_Lan_1) המכיל את טווח כתובות ה- IP של הרשת שבה מחובר שרת ה- squid.
השורה השניה מגדירה משתנה (all) המכיל את כל טווח כתובות ה-IP האפשריות. משתנה זה מייצג את “שאר העולם”.
השורה השלישית מאפשרת גישה לאינטרנט בפרוטוקול http לכתובות המיוצגות על ידי המשתנה My_Lan_1.
השורה הרביעית חוסמת את הגישה לאינטרנט לטווח הכתובות שמיוצג על ידי המשתנה all.
על מנת שההגדרות הנ”ל יכנסו לתוקף יש לאתחל את שירות squid על ידי הפקודה הבאה:

 
# service squid restart

לאחר אתחול השירות, המערכת מוכנה לעבודה. כל שנותר הוא להגדיר את שרת הפרוקסי במחשבי המשתמשים. הערה : מערכת ה- ACL הנ”ל הינה המערכת הבסיסית ביותר שניתן ליישם, מומלץ בחום ואהבה לקרוא את סעיף 8, ולבנות מערכת ACL אישית שתחליף את המערכת הבסיסית הנ”ל.

הגדרת שרת הפרוקסי במחשבי המשתמשים:

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

  1. יש לבחור את תפריט Edit
  2. לבחור Preferences
  3. להגדיל את אפשרות Advanced .
  4. לבחור במסך Advanced את האפשרות Proxies.
  5. לבחור את האפשרות - Manual proxy configuration
  6. עבור כל אחד מהאפשרויות : FTP Proxy, Gopher Proxy, HTTP Proxy, Security Proxy יש להגדיר את כתובת ה - IP או Hostname של שרת הפרוקסי. מספר הפורט עבור השירותים הללו הינו 3218.

במידה ויש לך שרת אינטראנט בארגון, תוכל להכניס את כתובתו לשדה : No proxy for.

IE 4.x, 5.x, 6.x:

  1. יש לבחור את תפריט : Tools
  2. לבחור : Internet options
  3. יש לבחור בכרטיסיה : Connections
  4. ללחוץ על הכפתור : LAN Settings
  5. יש לסמן את האפשרות: Use a proxy server ,ולכתוב בשדה את כתובת שרת הפרוקסי ואת הפורט שהשרת מאזין לו (3218).

בדיקת שרת הפרוקסי:

הבדיקה הבסיסית ביותר היא להיכנס לאתר http://www.squid-cache.org משני מחשבים שונים ולבחון את הרשומות שנרשמו בקובץ הלוג. שרת Squid מתעד את כל הבקשות שהופנו אליו בקובץ var/log/squid/access.log/ (הקובץ access.log יוסבר בפירוט בסעיף 7). על מנת לנתר את קובץ הלוג בצורה מקוונת, יש להריץ את הפקודה:

tail -f /var/log/squid/access.log

לאחר שהמחשב הראשון נכנס לאתר http://www.squid-cache.org נרשמה הרשומה הבאה בקובץ access.log.

1064382844.789    157   192.168.1.2     TCP_MISS/200  20847 GET http://www.squid-cache.com/ - DIRECT/www.squid-cache.com text/html

מכיוון שהאובייקט המבוקש לא נמצא ב- Cache הרשומה הוגדרה כ- TCP_MISS.
לאחר שהמחשב השני נכנס לאתר http://www.squid-cache.org נרשמה הרשומה הבאה בקובץ access.log.

1064391233.226     28    192.168.1.55   TCP_HIT/200    20869  GET http://www.squid-cache.com/ - NONE/- text/html

שרת ה- Squid מצא את הדף המבוקש בספריית ה- Cache ולכן רשומה זו הוגדרה כ- TCP_HIT.
במידה והרשומות שהתקבלו שונות מהשורות הנ”ל יש לנסות אתר אחר ולבדוק שוב את ההגדרות המפורטות בסעיף 4.

הקובץ access.log :

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

1064382844.789    157   192.168.1.2     TCP_MISS/200  20847 GET http://www.squid-cache.com/ - DIRECT/www.squid-cache.com text/html

הרשומה בנויה משדות המופרדים ברווחים ,כל שדה שאין מידע עבורו מיוצג על ידי התו ”-”.// השדות החשובים ברשומה הנ”ל הינם :

  • שדה 2 : <157> שדה זה מייצג את הזמן (ב - milliseconds ) שלקח לשרת הפרוקסי לענות לבקשה, בדוגמא הנ”ל השרת ענה לבקשה תוך 157ms לענות .
  • שדה 3 : <192.168.1.2> מייצג את כתובת ה- IP של התחנה ששלחה את הבקשה לשרת.
  • שדה 4 : <TCP_MISS> מציין את אופן הטיפול בבקשה, שדה זה חשוב במיוחד, מכיוון שהוא מספק מידע על תפקוד ספריית ה- Cache. הערכים האפשריים בשדה זה :
    • TCP_HIT : האובייקט המבוקש נמצא ב- Cache. ונשלח ללקוח.
    • TCP_MISS : האובייקט המבוקש לא נמצא ב- Cache. השרת מוריד את האובייקט, מאחסן אותו בספריית ה- Cache ושולח אותו ללקוח.
    • TCP_REFRESH_HIT : האובייקט המבוקש נמצא ב- Cache, אך הזמן התפוגה שלו הגיע (expired). שרת הפרוקסי בדק האם האובייקט השתנה והתשובה שהתקבלה הייתה שלילית. שרת הפרוקסי מספק את האובייקט למשתמש ומעדכן את זמן התפוגה של האובייקט ב- Cache.
    • TCP_REFRESH_MISS : כמו הסעיף הקודם, רק שכאן התשובה הייתה חיובית. השרת מוריד עותק רענן של האובייקט, מעדכן את ה- Cache ושולח את האובייקט ללקוח.
    • TCP_CLIENT_REFRESH : הלקוח שלח בקשה לרענון (Reload) האובייקט, המקרה כזה שרת הפרוקסי מתעלם מה- Cache.
    • TCP_IMS_HIT : בקשה לרענון הדף מגיעה מהלקוח ( תוכנת הגלישה מרעננת את האובייקט), השרת מצא עותק בר-תוקף ב- Cache, והעביר אותו ללקוח.
    • TCP_IMS_MISS : כמו הקודם רק שכאן השרת לא מצא את האובייקט ב- Cache או לחילופין השרת מצא עותק שפג תוקפו.
    • TCP_SWAP_FAIL : בטבלאות ה- Cache היה רשום שהאובייקט נמצא ב- Cache. אך לא הייתה גישה לאובייקט (לא נמצא).
    • TCP_DENIED : הבקשה נדחית
  • שדה 6 : <GET> מציין את השיטה בה השתמש השרת להבאת האובייקט ( GET, POST, PUT, etc)
  • שדה 7: <http://www.squid-cache.com> כתובת ה- URL של האובייקט המבוקש.
  • שדה 9 : <DIRECT/www.squid-cache.com text/html > מציין איך השרת הביא את האובייקט (DIRECT, NONE),
    שדה זה מתפצל לעוד 2 שדות המציינים מהיכן השרת הביא את האובייקט ואת סוג האובייט
    (html,text, gif, etc)

הגדרת רשימות בקרת גישה ( Access Control List ):

הקדמה

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

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

מערכת ACL מורכבת מ- 2 חלקים : מחלקות: המחלקות הינם רשימות. הרשימות הנ”ל יכולות להכיל אוסף שמות אתרים, כתובות IP, מילות מפתח וכ”ו. צריך לראות את המחלקות כמעין משתנים המשמשים את מערכת ה- ACL לבקרת הגישה לאינטרנט. המחלקות מוגדרות בפורמט הבא:
acl ACL-Name ACL-Type Value
ACL-Name: שם המחלקה, ניתן לבחור כל שם שרוצים. מומלץ לבחור שם בעל משמעות.
ACL-Type: פרמטר זה מגדיר את סוג הערך שאותה מחלקה תייצג, סוגי הערכים הפופולאריים הינם:

  • src - מקור הבקשה, כלומר כתובת הלקוח.
  • dst - יעד הבקשה, כלומר כתובת השרת.
  • srcdomain - מקור הבקשה, שם הדומיין של הלקוח.
  • dstdomain - יעד הבקשה, כלומר שם הדומיין של השרת.
  • time - זמן, נתון זה יכול להכיל ימים בשבוע או שעות ביום.
  • url_regex - רשימת ביטויים או מחרוזות.

Value: משתנה זה מכיל את הערך של המחלקה.
חשוב: כל מחלקה יכולה לקבל את הערכים שלה מתוך קובץ על ידי הגדרת Value כמסלול לקובץ. השימוש בקובץ מקל על ניהול המחלקה, במידה ורוצים להוסיף או לגרוע ערכים מהרשימה יש לשנות רק את הקובץ.
כמה דוגמאות להגדרת מחלקות:
acl My-Net src 192.168.1.0/255.255.255.0 :
הגדרת מחלקה בשם My-Net המכילה את טווח הכתובות 192.168.1.0→192.168.1.255
acl Client-A-B src 192.168.1.44 192.168.1.47 :
הגדרת מחלקה בשם Client-A-B אשר מייצגת את הכתובות:192.168.1.44 ,192.168.1.47.
acl Porn-Sites url_regex /etc/squid/Acl-Files/Porn-Sites :
הגדרת מחלקה בשם Porn-Sites אשר מכילה את תוכן הקובץ Porn-Sites, כפי שהשם מרמז הקובץ הנ”ל יכיל רשימה של מילות מפתח, ביטויים, וכתובות אתרים הקשורים לאתרי סקס שאותם ניתן לחסום (למה??). על ידי ניהול הרשימה בקובץ, ניתן להוסיף בקלות ביטויים או אתרים חדשים.
acl My-Users src /etc/squid/Acl-Files/NET-Users :
הגדרת מחלקה בשם My-Users אשר מכילה את כל כתובות ה- IP ושמות ה- Host המצוינים בקובץ NET-Users
פעולות - ACL:
רכיב הפעולות קובע האם אנו מאפשרים או מונעים את הגישה למחלקה לפי סוג הבקשה, לדוגמא בקשות הנוגעות לפרוטוקול http ינוהלו על ידי http_access ,בקשות הנוגעות ל -snmp ינוהלו על ידי snmp_access.
דוגמאות לפעולות-ACL :
http_access allow My_Net :
פעולה זו מאפשרת את בקשות הגלישה (http) מלקוחות המוגדרים במחלקה My_Net.
icp_access deny Client-A-B: חסימת בקשות ICP למחלקה Client-A-B.
http_access deny Porn-Sites :
חסימת הבקשות הגלישה לכתובות אינטרנט המכילות את אחד הביטויים, מילות המפתח או האתרים שמכילה המחלקה Porn-Sites.

דוגמא ל -ACL :

1. acl     My_Lan_1    src     192.168.1.0/255.255.255.0
2. acl     My_Lan_2    src     192.168.2.0/255.255.255.0
3. acl     All                src     0.0.0.0/0.0.0.0

4. http_access    allow    My_Lan_1
5. http_access    allow    My_Lan_2
6. http_access    deny    All

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

  • שורה 1-2 : שורות אלו מגדירות את המחלקות .My_Lan_2 , My_Lan_1 כל אחת מהמחלקות מייצגת טווח כתובות IP.
  • שורה 3: בשורה זו מוגדרת מחלקה המכילה את שאר העולם. המחלקה ALL מכילה את כל טווח הכתובות האפשרי. הכתובת 0.0.0.0/0.0.0.0 מכילה בתוכה את כל כתובות האינטרנט הקיימות, מחלקה זו תאפשר לנו להגדיר חוק סופי אשר יחסום את הבקשות שלא התאימו לאף אחד מהחוקים שקדמו לו.

הגדרת פעולות – ACL :
כל אחת מהשורות 4,5,6 מגדירה פעולת- ACL המשתלבות יחדיו למנגנון אחד. יש חשיבות רבה לסדר, שירות squid מתייחס לחוקים הללו לפי סדר כתיבתם.

  • שורה 4: במידה וכתובת ה- IP של המחשב ממנו הגיעה הבקשה נכללת במחלקה My_Lan_1, המערכת מאשרת את הבקשה ומחזירה כתשובה את הדף המבוקש, במידה ולא המערכת ממשיכה לחוק הבא (שורה 5).
  • שורה 5: במידה וכתובת ה- IP של המחשב ממנו הגיעה הבקשה נכללת במחלקה My_Lan_2, המערכת מאשרת את הבקשה ומחזירה כתשובה את הדף המבוקש, במידה ולא המערכת ממשיכה לחוק הבא (שורה 6).
  • שורה 6: בשורה זו אנו מסיימים את הגדרת מערכת ה- ACL, חוק זה מונע את הגישה לאינטרנט מכל כתובות ה- IP האפשריות, כך שבמידה שהכתובת ממנה נשלחה הבקשה לשרת לא התאימה לאף אחד מהחוקים שקדמו לה, המערכת תדחה את הבקשה ותשלח הודעת חסימה ללקוח. חוק מסוג זה תמיד יופיע בסוף מערכת ה – ACL, והוא למעשה נותן תוקף לחוקים המופיעים לפניו.

דוגמא למערכת ACL מורכבת :

# Define the files with the Web Address
1. acl   deny-Sites    url_regex   -i   "/etc/squid/Acl-Files/Deny-Sites"
2. acl   allow_Sites   url_regex   -i   "/etc/squid/Acl-Files/Allow-sites"
3. acl   Open_4_all   url_regex  -i   "/etc/squid/Acl-Files/Open4all-Sites"

# Define the clients lists
4. acl   My_Net_1   src 192.168.1.0/255.255.255.0
5. acl   Deny-Users   src "/etc/squid/Acl-Files/Deny-Users"
6. acl   all   src 0.0.0.0/0.0.0.0

# ACL Rules
7. http_access   allow   Open_4_all
8. http_access   deny   Deny-Users
9. http_access   allow   Allow-Sites   My_Net_1
10. http_access   deny   Deny-Sites
11. http_access   allow   My_Net_1
12. http_access   deny   all 

הערה: מספור השורות הינו לצרכי ההסבר ולא נכלל בהגדרת ה- ACL.
שורות 1-6 : שורות אלו מגדירות מחלקות המכילות רשימות אתרים, מילות מפתח או כתובות IP. את הרשימות הנ”ל המערכת תקרא מתוך קבצים (המסלול אל הקובץ מוגדר בהמשך הגדרת המחלקה). הגדרת הרשימות בקבצים מאפשרת ניהול פשוט של הרשימות ניתן להוסיף או לגרוע אובייקטים מהרשימה ללא צורך בשינויים בקבצי ההגדרות של squid.

  • שורה- 1 : שורה זו מגדירה את המחלקה Deny-Sites אשר תכיל את כתובות אינטרנט ומילות המפתח שיכתבו לקובץ “etc/squid/Acl-Files/Deny-Sites/” . כפי ששם המחלקה מרמז, הכתובות ומילות המפתח הללו יחסמו לגישה. דוגמא של הקובץ הנ”ל ניתן למצוא בהמשך.
  • שורה- 2 : מגדירה את המחלקה allow_Sites אשר תכיל את כתובות אינטרנט ומילות המפתח שיכתבו לקובץ “etc/squid/Acl-Files/Allow-Sites/”. למחלקה זו אני מייעד תפקיד מעניין אותו אסביר בהמשך. דוגמא של הקובץ הנ”ל ניתן למצוא בהמשך.
  • שורה 3: שורה זו מגדירה את המחלקה Open_4_all, מחלקה זו תכיל את כתובות האתרים שיוגדרו בקובץ : “etc/squid/Acl-Files/Open4all-Sites/”. וזו תהיה רשימת האתרים שאני מעוניין לאפשר את הגלישה אליהם מכל המחשבים בארגון. דוגמא של הקובץ הנ”ל ניתן למצוא בהמשך.
  • שורה 4 : הגדרת המחלקה My_Net_1 המכילה את טווח הכתובות 192.168.1.255 ⇐ 192.168.1.0 .
  • שורה 5 : כפי שהשם מרמז מחלקה זו תכיל את רשימת כתובות IP ושמות Host-name מהקובץ “etc/squid/Acl-Files/Deny-Users/” . הרשימה תכיל את המחשבים שאני מעוניין לחסום מהם את הגישה לאינטרנט. דוגמא של הקובץ הנ”ל ניתן למצוא בהמשך.
  • שורה 6 : הגדרה זו מגדירה מחלקה בשם all המכילה את כל טווח כתובות ה- IP האפשריות. חשוב: ברוב המקרים המחלקה הזו כבר מוגדרת על ידי המערכת, במידה ובזמן אתחול השירות המערכת מציינת שהמחלקה all כבר מוגדרת יש לוותר על השורה הנ”ל. המערכת לא תאפשר כפילות של הגדרת מחלקה.

שורות 7-12: שורות אלו מגדירות את פעולות ה- ACL, תוך שימוש במחלקות שהוגדרו בשורות 1-6. חשוב להדגיש את חשיבות סדר החוקים. המערכת קוראת את החוקים אחד אחרי השני מלמעלה למטה, במידה והמערכת מגיעה לחוק אשר מספק את התשובה לשאלת מליון הדולר, האם לחסום? או לא?. המערכת תממש את החוק הנ”ל ולא תמשיך הלאה לשאר השורות. כך שיש להקדיש מחשבה בזמן בניית מערכת החוקים. המערכת הנ”ל תוכננה לפעול בצורה הבאה:

  • שורה 7: המערכת בודקת האם האתר המבוקש נכלל במחלקה Open_4_all (מחלקה זו מכילה את רשימת האתרים שאני מעוניין לאפשר את הגלישה אליהם מכל המחשבים בארגון), במידה וכן המערכת מפסיקה את התהליך ומחזירה כתשובה את האתר המבוקש. במידה והאתר הנ”ל אינו נכלל במחלקה המערכת ממשיכה לחוק הבא (שורה 8).
  • שורה 8: המערכת בודקת האם המשתמש נכלל במחלקה Deny-Users (מחלקה זו מכילה את רשימת המחשבים שאני מעוניין לחסום מהם את הגישה לאינטרנט), במידה וכן המשתמש מקבל הודעת חסימה והמערכת מפסיקה את התהליך, במידה והמשתמש לא נכלל במחלקה זו המערכת ממשיכה לחוק הבא (שורה 9).
  • שורה 9: שורה זו מכילה שילוב של שני בדיקות אשר רק במידה ושניהם מתקיימות המערכת מאפשרת את הגלישה לאתר. המערכת בודקת האם כתובת האתר המבוקש נכללת במחלקה Allow-Sites, במידה וכן המערכת בודקת האם כתובת ה- IP של המחשב ששלח את הבקשה נכללת במחלקה My_Net_1. במידה ושני החוקים מתקיימים המערכת מפסיקה את התהליך ומחזירה כתשובה את האתר המבוקש. במידה ואחד מהחוקים או שניהם לא מתקיימים המערכת ממשיכה לחוק הבא.

הערה : חוק זה עושה שימוש במחלקה Allow-Sites, מחלקה זו תכיל בתוכה את כל האתרים אשר יחסמו שלא בצדק על ידי מילות המפתח שהוגדרו במחלקה Deny-Sites. לדוגמא נניח שהגדרנו את המילה SEX כאחת ממילות המפתח במחלקה Deny-Sites, כל האתרים שהמילה SEX תופיע בכתובת שלהם יחסמו על ידי החוק שמוגדר בשורה 10 (עוד נגיע אליו), המצב הזה עלול ליצור בעיות מכיוון שיש אתרים תמימים לחלוטין (שאותם אין אנו רוצים לחסום) המכילים את המילה SEX בכתובת שלהם, על מנת לאפשר את הגלישה לאתרים אלו אנו נכניס את האתרים התמימים הללו למחלקה Allow-Sites. ונאפשר את הגלישה אליהם לפני ביצוע החסימה של המחלקה Deny-Sites ( החסימה הנ”ל מתבצעת בשורה 10)

  • שורה 10: המערכת בודקת האם כתובתו של האתר המבוקש נכללת במחלקה Deny-Sites או לחילופין האם הכתובת מכילה את אחת ממילות המפתח המוגדרות במחלקה Deny-Sites, במידה וכן האתר נחסם והודעת חסימה נשלחת ללקוח, במידה ולא המערכת ממשיכה לחוק הבא.
  • שורה 11: המערכת בודקת האם כתובת ה- IP של התחנה ששלחה את הבקשה נכלל בטווח הכתובות המצוין על ידי המחלקה My_Net_1. במידה וכן המערכת שולחת את הדף המבוקש למחשב ומפסיקה את התהליך, במידה ולא המערכת ממשיכה לחוק הבא.
  • שורה 12 : שורה זו מסיימת את מערכת החוקים, למעשה מבצעת חסימה כוללת לכל הבקשות שלא אושרו בחוקים הקודמים לה. חוק זה יהיה קיים בכל מערכת ACL כחוק שסוגר את המערכת וחוסם את כל מה שלא אופשר ובכך נותן תוקף לחוקים הקודמים לו.

הקובץ etc/squid/Acl-Files/Deny-Sites/ : להלן דוגמא לקובץ “etc/squid/Acl-Files/Deny-Sites/” , המחלקה Deny-Sites תכיל את רשימת האתרים המוגדרים בקובץ הנ”ל. הרשימה יכולה להכיל מילות מפתח כגון Sex, MP3 , שמות אתרים, סיומות של כתובות, שמות דומיין, ועוד. כאשר כל אחד מהם כתוב בשורה נפרדת. לאחר ביצוע שינויים בקובץ יש לאתחל את שירות squid על מנת שהשינויים יכנסו לתוקף.

Sex
Xxx
Mp3
Xpics
xxx-movies
www.koko1234.com
.zooozoo.com
http://12398.org.il
Sexy-Babes.net

הקובץ etc/squid/Acl-Files/Allow-Sites/: להלן דוגמא לקובץ “etc/squid/Acl-Files/Allow-Sites/”, קובץ זה יכיל בתוכו את כל האתרים אשר יחסמו שלא בצדק על ידי מילות המפתח שהוגדרו במחלקה Deny-Sites. לדוגמא נניח שהגדרנו את המילה SEX כאחת ממילות המפתח במחלקה Deny-Sites, כל האתרים שהמילה SEX תופיע בכתובת שלהם יחסמו, המצב הזה עלול ליצור בעיות מכיוון שיש אתרים תמימים לחלוטין (שאותם אין אנו רוצים לחסום) המכילים את המילה SEX בכתובת שלהם, על מנת לאפשר את הגלישה לאתרים אלו אנו נכניס את האתרים התמימים הללו לקובץ הנ”ל, ונבנה חוק ACL אשר יאפשר את הגישה לאתרים אלו. לאחר ביצוע שינויים בקובץ יש לאתחל את שירות squid על מנת שהשינויים יכנסו לתוקף.

www.sex-medicin.org.il www.sex-disease.ac.il

הקובץ etc/squid/Acl-Files/Open4all-Sites/ : להלן דוגמא לקובץ : “etc/squid/Acl-Files/Open4all-Sites/”, קובץ זה יאחסן את רשימת האתרים שאני מעוניין לאפשר אליהם גישה לכל המחשבים בארגון. בדוגמא שלפנינו אני מעוניין לאפשר את הגישה לאתר האינטראנט של הארגון ולכל אתרי האוניברסיטאות בישראל

www.my-domain.co.il .ac.il goodsite.com very.good-site.co.il

הקובץ etc/squid/Acl-Files/Deny-Users/ : להלן דוגמא לקובץ “etc/squid/Acl-Files/Deny-Users/” , בקובץ זה יש לציין את המחשבים שאנו מעוניינים לחסום.ניתן להשתמש בכתובות IP, שמות Host או טווח שלם של כתובות IP ( בשורה האחרונה).

192.168.1.55/255.255.255.255
koko14.my-domain.co.il
shila_l.my-domain.com
192.168.2.0/255.255.255.0

טיפים למערכות ACL:

  • באתר : http://www.squidblock.com ניתן לקבל רשימות אתרים ומילות מפתח לפי קטגוריות, לשימוש במנגנון ACL ( רשימת אתרי סקס, אתרי קניות, חדשות וכ”ו ).
  • מנגנון ה- ACL נפוץ במערכות קוד פתוח וניתן לפגוש אותו גם בשרתי : Apache, Proftp, ועוד. כך שהבנתו תעזור במימוש המנגנון במערכות השונות.

הפקת דוחות

תהליך הפקת הדוחות מתבצע תוך שימוש בשני התוכנות הבאות:

Calamaris

אתר הבית : http://cord.de/tools/squid/calamaris/Welcome.html.en חבילה זו הינה תוספת חשובה לשרת הפרוקסי. Calamaris מנתחת את הלוגים של שרת הפרוקסי ומספקת דוחות מפורטים על ביצועי השרת וסיכומים בנוגע לצורות הגישה, שעות שיא וכ”ו.
ניתן להוריד את החבילה (RPM) באתר הבית.בזמן כתיבת המדריך הגרסא העדכנית הינה 2.57, הפקודות המפורטות בסעיף זה מותאמות לגרסא זו ויתכן שלא יעבדו כנדרש בגרסאות מתקדמות יותר. על מנת לקבל דוח מלא על ביצועי השרת, בפורמט HTML יש להריץ את הפקודה הבא :

#  cat  /var/log/squid/access.log | calamaris -a -F 'html' -f squid-old > /etc/squid/calamaris.html

הפקודה מייצרת את הקובץ ”/etc/squid/calamaris.html/” שהינו דוח מפורט של ביצועי השרת. ניתן להפיק מגוון רחב של דוחות חלקיים, מומלץ לקרוא את דף ה - man של הפקודה calamaris על מנת ליצור את הדוחות המתאימים לך.

SARG

אתר הבית : http://web.onda.com.br/orso/sarg.html חבילה זו מספקת מערכת הפקת דוחות מפורטים בנוגע להרגלי הגלישה של המשתמשים תוך דגש על פירוט האתרים אליהם גלשו המשתמשים, רשימת האתרים הפופולאריים ביותר ועוד.. המערכת מספקת דוחות יומיים שבועיים וחודשיים בפורמטHTML . לאחר ההתקנה ניתן למצוא סקריפטים מוכנים אשר מייצרים דוחות יומיים שבועיים וחודשיים בכתובת : http://ptt.mcl.ru/orso

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

מדריכים/הקמת_שרת_פרוקסי_squid.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0