כיצד לבצע התקנת Redis מאובטחת על Linux

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

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

קרא וחסוך לעצמך את הכאבי ראש מתיקוני שגיאות התקנת Redis!

דרישות מוקדמות

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

  • מחשב Ubuntu 20.04 LTS – מדריך זה משתמש ב-Ubuntu 20.04 LTS, אך ההוראות דומות לרוב ההפצות של Linux.

התקנת Redis עם מנהל החבילות APT

ישנם כמה דרכים להתקין את Redis על Ubuntu, אך במדריך זה תבחר במנהל החבילות APT כדי להתקין את Redis.

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

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

פתח את הטרמינל שלך והפעל את הפקודה apt update למטה כדי לוודא שיש לך את רשימות החבילות העדכניות ביותר.

sudo apt update -y
Updating the Linux system

עכשיו, הפעל את הפקודה apt install למטה כדי להתקין את Redis על המכשיר שלך.

הפקודה למטה משתמשת במנהל החבילות apt כדי להוריד ולהתקין את חבילת השרת של Redis ממאגרי המידע של Ubuntu למכשיר שלך. הדגל -y אומר ל-apt לקבל פניות במהלך התהליך התקנה באופן אוטומטי.

sudo apt install redis-server -y
Installing Redis on your machine

קביעת הגדרות בקובץ Redis.conf כדי להפעיל את Redis כשירות

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

קובץ התצורה redis.conf כלול עם חבילת ה-Redis שהתקנת ומאוחסן בתיקיית /etc/redis/ כברירת מחדל. קובץ זה מכיל את כל אפשרויות התצורה עבור Redis.

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

1. הרץ את הפקודה הבאה של systemctl כדי ל-עצור את שירות ה-redis-server. העצירת השירות של Redis היא פרקטיקה מומלצת כאשר אתה מתחיל לעבוד עם Redis לראשונה.

sudo systemctl stop redis.service

2. לאחר מכן, פתח את קובץ ה-/etc/redis/redis.conf בעורך הטקסט המועדף עליך.

מצא את ההוראה supervised, והגדר אותה ל-systemd, כפי שמוצג למטה, ושמור את השינויים. בכך תודיע למערכת ההפעלה להפעיל את Redis כשירות.

Setting up the systemd directive

3. כעת, הפעל את הפקודה systemctl restart למטה כדי לאתחל את שירות ה־Redis (redis.service), מאחר שהשירות אינו מודע לשינויים עדיין.

sudo systemctl restart redis.service

4. לבסוף, הפעל את הפקודה systemctl status למטה כדי לראות האם ה־Redis פועל.

sudo systemctl status redis.service

כפי שניתן לראות למטה, הפלט מראה שהשירות Redis פועל.

Checking if Redis Service is Running

בדיקת פעולת השרת של Redis

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

1. הפעל את הפקודה redis-cli למטה כדי להתחבר לשרת Redis. redis-cli היא ממשק השורת פקודה של Redis, המאפשרת לך לשלוח פקודות לשרת ולבדוק את מצבו.

redis-cli

כפי שניתן לראות למטה, תוכל לראות שאתה במערכת השרת של Redis (127.0.0.1:6379>). הפקודה redis-cli מנסה להתחבר לשרת Redis בכתובת 127.0.0.1:6379 כברירת מחדל.

Connecting to the Redis Server

2. לאחר מכן, הפעל את הפקודה ping למטה כדי לבדוק האם השרת של Redis נגיש.

ping

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

Pinging the Redis server

אולי עדיין אתה מהוסס; הרץ את הפקודה set למטה. הפקודה set היא פקודת Redis שמגדירה זוג מפתח-ערך במסד נתונים.

set test "This is a test"

כפי שאתה יכול לראות, הפקודה set מחזירה "OK", מה שמציין כי שירות ה-Redis פועל כהלכה.

Testing the Redis server

3. הרץ את הפקודה exit למטה כדי לצאת מה-redis-cli. בכך, אתה סוגר את החיבור לשרת ה-Redis.

exit

קישור של שרת ה-Redis ל־localhost

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

קישור של שרת ה-Redis ל־localhost מגדיר התנהגות שרק המחשב שבו התקנת את Redis יכול לגשת לשרת ה-Redis.

1. פתח את הקובץ /etc/redis/redis.conf בעורך הטקסט שלך.

2. אתר את השורה שאומרת bind 127.0.0.1 ::1 ובטל את ההערה על השורה על ידי מחיקת סימן המספר (#) בתחילת השורה.

Uncommenting the bind 127.0.0.1 ::1 line

3. כעת, הרץ את הפקודה למטה כדי לאתחל את שירות ה־redis-server.

sudo systemctl restart redis-server

4. לבסוף, הרץ את הפקודה הבאה כדי לבדוק האם השרת שלך מחובר ל־localhost. הפקודה netstat -lnp מפרטת את כל חיבורי הרשת הפעילים, והחלק grep redis מסנן את הפלט לשורות שמכילות "redis".

-lnp מתייחס לתקשורת של פרוטוקול שם מקומי, פרוטוקול תקשורת המשמש במערכות בדומה ל-UNIX כדי לפתור שמות מאחסנים לכתובות IP.

sudo netstat -lnp | grep redis

ניתן לראות למטה שהשרת Redis מאזין כעת רק בממשק המקומי (127.0.0.1:6379). משקף את השינוי בקובץ התצורה, ניתן לראות כי רק ממשק המקומי מופיע בתחתית רשימת החיבורים האינטרנטיים הפעילים שלך (tcp).

כעת, אף תקן אחר ברשת שלך לא יכול להתחבר לשרת Redis שלך.

Listing all active network connections

אבטחת חיבור שרת Redis בעזרת סיסמה

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

כיצד להגן על שרת ה-Redis שלך? הגדר סיסמה כדי לדרוש מהמשתמשים אימות בעת התחברות לשרת ה-Redis שלך.

1. פתח מחדש את קובץ התצורה redis.conf בעורך טקסט/קוד שלך.

2. לאחר מכן, הגדר סיסמה חזקה עם ההוראות הבאות:

  • חפש requirepass foobared תחת הקטע SECURITY
  • מחק את סימן המספר (#) בתחילת השורה
  • החלף את foobared בסיסמה חזקה שבחרת ושמור את השינויים
Providing a secure password

3. הרץ את הפקודות הבאות כדי לאתחל ולהתחבר מחדש לשרת ה-Redis שלך.

sudo systemctl restart redis-server
redis-cli

4. כעת, הרץ את הפקודה ping כדי לראות אם תקבל תגובה מהשרת.

ping

שלמטה, ניתן לראות הודעת שגיאה שאומרת NOAUTH נדרש אימות. ההודעה מציינת שנדרשת סיסמת אימות כדי לגשת לשרת Redis שלך מרחוק.

Testing connection with the server

5. הפעל את הפקודה auth למען האימות, ואז הזן את הסיסמה שלך כדי לאמת את החיבור לשרת Redis שלך.

auth Qae9p_fY:YjdtJ7k

תקבל תשובת OK כאשר האימות הצליח, כמו בדוגמה למטה.

Authenticating Redis Server Connection

6. לבסוף, הפעל מחדש את הפקודה ping כדי לבדוק אם התבצע האימות של חיבורך לשרת Redis.

ping

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

Pinging the Redis server

ביטול פקודות מסוכנות להגנה על שרת Redis שלך

הגדרת סיסמה לאימות החיבור לשרת Redis שלך אינה אומרת שיש לו 100% הגנה. באופן ברירת מחדל, Redis כולל מספר פקודות מסוכנות שמאפשרות למשתמשים לשנות את הנתונים במסד הנתונים שלך.

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

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

FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF
BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL

כדי לחזק את שרת Redis שלך נוסף, שנה את שמות הפקודות המסוכנות אלו בקובץ redis.conf:

1. פתח את קובץ redis.conf בעורך הטקסט שלך וחפש את קטע Command renaming.

שנה את הפקודות למחרוזת ריקה כדי להשבית אותן לפי התחביר הבא. החלף הפקודה בפקודה המדויקת להשבתה.

rename-command the-command ""

לדוגמה, כדי להשבית את הפקודה CONFIG צריך לשנות את שמה למחרוזת ריקה, כפי שמוצג למטה, ולשמור את השינויים. הגרשיים הכפולים (“”) מציינים מחרוזת ריקה שמציינת השבתת פקודה.

Renaming the CONFIG command

2. צא מעורך הטקסט והפעל את הפקודה למטה כדי לאתחל מחדש את שרת ה-Redis.

sudo systemctl restart redis-server

3. כעת הפעל את הפקודות הבאות כדי להתחבר לשרת ה-Redis שלך.

redis-cli
auth Qae9p_fY:YjdtJ7k

4. לבסוף, הפעל את הפקודה config get כדי לבדוק שהפקודה CONFIG מושבתת.

config get requirepass

תקבל תגובת ERR unknown command config, כפי שמוצג למטה, המציינת שהפקודה CONFIG מושבתת.

Checking the CONFIG command

אם הפקודה config get requirepass עוברת בהצלחה, היא מבקשת את סיסמת ה-Redis שלך כדי לאמת את החיבור לשרת ה-Redis שלך.

כעת ששינית בהצלחה את שם הפקודה המסוכנת בכדי להגן על שרת ה-Redis שלך. כעת המשך להשבית פקודות מסוכנות נוספות בקובץ redis.conf.

חסימת בקשת חיבור לשרת ה-Redis עם חומת אש

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

לדוגמה, אם אתה מפעיל את Redis על השרת שלך בפורט 6379, אז הפורט הזה הוא מה שעליך לפתוח. אם תצטרך להרשות גישה מכתובת IP ספציפית או טווח של כתובות, תוכל להוסיף את הכתובות האלה לחוקי הגישה של הגישה.

כדי להגדיר חומת אש, תתקין תחילה כלי תצורת חומת אש. בדוגמה זו אנו משתמשים ב־UFW, כלי תצורת חומת אש נפוץ ב־Linux. אך תוכל גם להשתמש בכלי אחר, כמו iptables, להגדרת חומת אש.

1. הרץ את הפקודה הבאה כדי להתקין את UFW על המכונה שלך.

sudo apt install ufw -y

2. לאחר מכן, הרץ את הפקודה למטה כדי להפעיל את UFW.

sudo ufw enable

הקלד 'Y' כאשר תקבל את הערה המופיעה למטה כדי להמשיך להריץ את הפקודה.

Enabling UFW

3. הרץ את הפקודה ufw להוספת כלל, שמאפשר (allow) תעבורה בפורט 6379 עבור שרת ה־Redis שלך. החלף את כתובת ה־IP 11.22.33.44 בכתובות ה־IP של המשתמשים הרצויים.

sudo ufw allow from 11.22.33.44 to any port 6379
Adding a firewall rule to allow traffic on port 6379

4. לבסוף, הרץ את הפקודה למטה כדי לוודא שהוספת את כלל החומת האש בהצלחה. הפקודה בודקת את status החומת האש שלך.

sudo ufw status

ניתן לראות בפלט למטה כי החומת האש פעילה וכי יש לה כלל להרשאת תעבורה בפורט 6379 עבור Redis מכתובת ה־IP 11.22.33.44.

Checking the UFW rules

עכשיו, משתמשים כלשהם עם כתובת ה-IP 11.22.33.44 יכולים להתחבר ל-Redis דרך פתח ה-6379 ויהיו צריכים לאמת עם סיסמה. ניתן להוסיף פורטים נוספים עבור שירותים נוספים בדרך דומה.

סיכום

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

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

רוצה ללמוד עוד? למה לא להתחיל עם איך לאבטח שרת Redis ב-Kubernetes?

Source:
https://adamtheautomator.com/redis-install/