−25%

על Windows בתשלום שנתי, עד 31.10. לחבילות

EQVPS
התחלה

איך להגדיר VPS עם Alpine Linux: apk, doas, OpenRC וחומת אש

הצעדים הראשונים ב-VPS חדש עם Alpine Linux 3.21: עדכון ואתחול, יצירת משתמש doas שבאמת יכול להתחבר, ביטול כניסת SSH של root ועם סיסמה, התקנת ufw, הפעלת cron ועדכונים יומיים. כולל את פורט ה-Docker ש-ufw לא חוסם.

Alpine Linux הוא האימג' הקטן ביותר שאנחנו מציעים. בשרתים שלנו Alpine 3.21 חדש צרך במנוחה 55 MB זיכרון ו-153 MB דיסק, לעומת 313 MB ו-2.7 GB ב-Ubuntu 24.04. המחיר הוא ויתור על הכלים המוכרים. Alpine משתמש ב-apk במקום apt, ב-doas במקום sudo, ב-OpenRC במקום systemd וב-musl במקום glibc.

הצעדים שלהלן הם אותן עשר דקות ראשונות כמו ב-Debian או ב-Ubuntu, מותאמות ל-Alpine. הרצנו כל פקודה על אימג' ה-Alpine 3.21 שלנו לפני הפרסום, ושתיים מהן הפילו אותנו בפעם הראשונה. התחברו כ-root עם הסיסמה מלוח הבקרה.

1. עדכנו ואתחלו פעם אחת

apk update && apk upgrade
uname -r
ls /lib/modules

השרת כבר התקין את העדכונים הזמינים באתחול הראשון, כך ש-apk upgrade בדרך כלל כמעט לא עושה כלום. הסתכלו דווקא על שתי השורות האחרונות. אם העדכון הראשון הביא ליבה חדשה, לליבה שרצה (uname -r) כבר אין מודולים על הדיסק. כל מה שטוען מודול ייכשל עד האתחול. בשרת הבדיקה שלנו התקנת חומת האש הדפיסה ERROR: Couldn't determine iptables version. אם שתי הגרסאות שונות, אתחלו עכשיו:

reboot

שרת הבדיקה שלנו חזר תוך פחות מדקה.

2. צרו משתמש שיכול להתחבר

adduser -D deploy
passwd deploy
adduser deploy wheel

אל תדלגו על passwd. adduser -D יוצר את החשבון בלי סיסמה, Alpine מסמן אותו כנעול, ו-sshd דוחה חשבון נעול גם עם המפתח הנכון. בבדיקה שלנו הרמז היחיד היה השורה הזו ב-/var/log/messages:

User deploy not allowed because account is locked

הסיסמה חשובה גם בהמשך: אותה doas יבקש.

אם הוספתם מפתח SSH כשהזמנתם את השרת, הוא נמצא ב-authorized_keys של root. העתיקו אותו למשתמש החדש:

install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys

עוד אין לכם מפתח? צרו אחד במחשב שלכם והדביקו את החלק הציבורי ב-/home/deploy/.ssh/authorized_keys.

3. גרמו ל-doas לבקש סיסמה

Alpine משתמש ב-doas במקום sudo, והאימג' שלנו כבר מתיר אותו לקבוצה wheel. הכלל ב-/etc/doas.d/wheel.conf הוא permit nopass :wheel, כלומר כל חבר ב-wheel הופך ל-root בלי להקליד דבר. גרמו לו לבקש סיסמה ולזכור אותה לכמה דקות:

echo 'permit persist :wheel' > /etc/doas.d/wheel.conf

מעכשיו doas apk add nano עובד כמו sudo apt install nano ב-Ubuntu.

4. SSH: מפתחות בלבד, בלי root

sshd קורא את הקבצים ב-/etc/ssh/sshd_config.d/ לפי סדר השמות ושומר לכל הגדרה את הערך הראשון שהוא מוצא. באימג' שלנו הקובץ הראשון הוא 00-eqvps.conf, שמתיר root וסיסמאות כדי שתוכלו להיכנס ביום הראשון. החליפו את התוכן שלו:

cat > /etc/ssh/sshd_config.d/00-eqvps.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && rc-service sshd restart
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '

השורה השלישית חשובה ב-Alpine. האימג' מריץ את גרסת OpenSSH עם PAM, ועם שתי השורות הראשונות בלבד שרת הבדיקה שלנו עדיין הציע כניסת keyboard-interactive. עם שלושתן, ניסיון כניסה בלי מפתח מקבל:

Permission denied (publickey).

השאירו את סשן ה-root פתוח. בטרמינל שני בדקו ש-ssh deploy@YOUR.SERVER.IP עובד (בחבילת NAT הוסיפו -p ואת הפורט האישי מלוח הבקרה) וש-doas id מקבל את הסיסמה.

5. חומת אש: ufw

ufw נמצא במאגר community, שכבר פעיל באימג' שלנו:

apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status

limit מאפשר SSH אבל מאט את מי שפותח הרבה חיבורים ברצף. rc-update חשוב כאן, כי OpenRC לא מפעיל את חומת האש אחרי אתחול אם לא הוספתם אותה ל-runlevel. אחרי אתחול השרת שלנו חזר עם Status: active. בחבילת NAT השאירו את SSH על פורט 22: הפורט החיצוני האישי שלכם מועבר ל-22 בתוך השרת. בחבילה עם IPv4 משלה פתחו פורטים לאתר כשתצטרכו אותם (ufw allow 80/tcp, ufw allow 443/tcp). השאר נמצא במדריך ufw.

6. הפעילו cron ועדכונים יומיים

שרת Alpine חדש לא מריץ cron בכלל. הפעילו אותו:

rc-update add crond default
rc-service crond start

ה-crontab של root ב-Alpine כבר מריץ כל מה שנמצא ב-/etc/periodic/daily בשעה 02:00. שימו שם סקריפט עדכון:

cat > /etc/periodic/daily/apk-upgrade <<'EOF'
#!/bin/sh
apk upgrade --update-cache --no-progress >> /var/log/apk-auto.log 2>&1
EOF
chmod +x /etc/periodic/daily/apk-upgrade
run-parts --test /etc/periodic/daily

הפקודה האחרונה מציגה את הסקריפטים ש-cron יריץ, והסקריפט שלכם צריך להופיע ברשימה. כך תקבלו את התיקונים של 3.21. מעבר לגרסת Alpine הבאה הוא צעד נפרד וידני. עדכוני ליבה עדיין דורשים אתחול: חזרו מדי פעם על הבדיקה uname -r / ls /lib/modules מצעד 1.

7. OpenRC בטבלה אחת

אם אתם מכירים systemd, זה רוב מה שמשתנה:

משימהsystemdAlpine (OpenRC)
הפעלת שירותsystemctl start nginxrc-service nginx start
הפעלה באתחולsystemctl enable nginxrc-update add nginx default
מצבsystemctl status nginxrc-service nginx status
מה רץsystemctl list-unitsrc-status
יומן המערכתjournalctl/var/log/messages

8. Docker, והפורט ש-ufw לא חוסם

Alpine הוא מארח טוב ל-Docker, כי המערכת עצמה כמעט לא מפריעה:

apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world

בשרת שלנו זה לקח 12 שניות כולל ההורדה. כשהשירות של Docker רץ, הזיכרון בשימוש עלה מ-57 MB ל-124 MB.

מלכודת שלא ייחודית ל-Alpine: Docker כותב חוקי חומת אש משלו. כש-ufw התיר רק SSH, הפעלנו nginx עם -p 8080:80 והגענו אליו מחוץ לשרת בפורט 8080. ufw לא חסם. אם קונטיינר צריך להיות נגיש רק דרך reverse proxy על אותו שרת, פרסמו אותו על localhost:

docker run -d -p 127.0.0.1:8080:80 nginx:alpine

איזו חבילה

Alpine משאיר כמעט את כל הזיכרון לתוכנה שלכם. חבילת Nano (2 vCPU, 1 GB, 15 GB, $3 לחודש) מספיקה לשירות קטן או לכמה קונטיינרים. זו חבילת NAT, ולכן SSH מגיע דרך פורט אישי. אם פורטים 80 ו-443 צריכים להיות פתוחים לאינטרנט, ל-Nano-IP יש IPv4 משלה ב-$8 לחודש. לערימות Docker כבדות יותר, Micro נותנת 2 GB ב-$5 לחודש.

Alpine 3.21 נמצא בדף Alpine VPS וזמין בכל חבילות ה-Linux במדור VPS. התשלום ב-USDT, USDC או ETH ברשתות Base, Ethereum או Polygon, בלי תעודה מזהה וכרטיס.

שאלות נפוצות

למה Alpine קטן כל כך בהשוואה ל-Ubuntu או ל-Debian?

הוא משתמש ב-musl במקום glibc, ב-BusyBox לפקודות הבסיס וב-OpenRC במקום systemd. בשרתים שלנו Alpine 3.21 חדש צרך במנוחה 55 MB זיכרון ו-153 MB דיסק. Ubuntu 24.04 צרך 313 MB ו-2.7 GB.

למה המשתמש החדש מקבל "account is locked" למרות שהמפתח נכון?

adduser -D יוצר את החשבון בלי סיסמה, Alpine מסמן אותו כנעול, ו-sshd דוחה את המשתמש גם עם מפתח תקין. השורה ביומן היא "User deploy not allowed because account is locked". הגדירו למשתמש סיסמה עם passwd והכניסה במפתח תעבוד.

למה מנהרת SSH לא עובדת ב-Alpine?

קובץ /etc/ssh/sshd_config שמגיע עם Alpine קובע AllowTcpForwarding no, ולכן העברות ssh -L נדחות. אם אתם צריכים מנהרות, שנו את הערך ל-yes באותו קובץ והריצו rc-service sshd restart.

האם התוכנה שלי תרוץ על Alpine?

כל מה שמגיע ממאגרי Alpine ירוץ, וכך גם קונטיינרים של Docker על כל אימג' בסיס. קבצי הרצה מוכנים ל-Linux שנבנו ל-glibc לעיתים קרובות לא עולים על musl. חפשו גרסה ל-Alpine או ל-musl, או הריצו את התוכנה בתוך Docker. החבילה gcompat עוזרת עם חלק מקבצי glibc פשוטים.

איזו חבילה מספיקה ל-Alpine?

חבילת Nano עם 1 GB ב-$3 לחודש משאירה הרבה מקום: המערכת עצמה צורכת כ-55 MB. אם פורטים 80 ו-443 צריכים להיות פתוחים לאינטרנט, קחו את Nano-IP ב-$8 לחודש, עם IPv4 משלה.

תגובות

אין עדיין תגובות. היו הראשונים.

השאירו תגובה

התגובות עוברות מודרציה לפני שהן מופיעות.