ניהול שרתי לינוקס: systemd, LVM, Hardening, כוונון Kernel
שרת תחת עומס מאבד מנות. ss -s מציג TCP: 14321 (estab 8201, closed 3842, orphaned 412). dmesg מלא ב-nf_conntrack: table full, dropping packet. טבלת ה-conntrack עולה על גדותיה, וה-kernel שותק הורג חיבורים חדשים — ללא התראות, כי אף אחד לא עוקב אחרי המונה הזה. צוות מהנדסי ה-DevOps שלנו ראה את הדפוס הזה על מאות שרתי production במשך יותר מ-10 שנים. במקרה של לקוח מסחר אלקטרוני אחד, אובדן המנות הגיע ל-3% ב-15,000 חיבורים מקבילים, בעלות של כ-$12,000 בחודש בעסקאות שאבדו.
ההפצה לא משנה — RHEL, Ubuntu או Debian — הגורמים השורשיים זהים. תלמדו למה הגדרות kernel ברירת מחדל (# Network tuning net.core.somaxconn = 65535 net.core.netdev_max_backlog = 65536 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # Conntrack net.netfilter.nf_conntrack_max = 1048576 net.netfilter.nf_conntrack_tcp_timeout_established = 86400 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30 , net.core.somaxconn) פוגעות בשרתי עומס גבוה, איך לתקן snapshots של LVM לפני שהם הורגים את הגיבויים שלכם, ואילו כללי hardening של CIS שוברים יישומים. שירות ניהול שרתי הלינוקס הסטנדרטי שלנו פותר את הבעיות הללו תוך 2–5 ימים עם baseline מתועד.
למה הגדרות kernel סטנדרטיות לא מתאימות ל-production?
פרמטרי kernel ברירת מחדל הם פשרה לתרחישי desktop או עומס נמוך. עבור שרת web עמוס, מסד נתונים או gateway רשת, הם דורשים כוונון מודע. המדד הראשון לבדיקה בכל שרת עמוס: גדלי חוצץ TCP ותור הקבלה.
# Network tuning net.core.somaxconn = 65535 net.core.netdev_max_backlog = 65536 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # Conntrack net.netfilter.nf_conntrack_max = 1048576 net.netfilter.nf_conntrack_tcp_timeout_established = 86400 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 30 accept() מגביל את אורך תור הקבלה. Nginx ו-HAProxy פותחים sockets עם backlog ברירת מחדל של 511 — כאשר backlog=511 נמוך יותר, התור האמיתי מתכווץ לגבול הזה. somaxconn חושף הצטברות בעמודת Recv-Q אם התור לא מרוקן מהר מספיק. בשרת של לקוח fintech, העלאת somaxconn מ-128 ל-65535 הפחיתה שגיאות timeout בחיבורים ב-40%.
Conntrack: ברירת המחדל ss -lnt מתמצה תוך שבועות בשרת עם 8,000 חיבורים מקבילים ו-Recv-Q של חמישה ימים. nf_conntrack_max מציג את השימוש בפועל. בפרקטיקה שלנו, הגדלנו את הגבול ל-1,048,576 והורדנו את tcp_timeout_established = 432000 מ-120 ל-30 שניות — אובדן המנות ירד מ-3% לאפס ב-15,000 חיבורים. זה תורגם להכנסה משוחזרת של $12,000 בחודש.
קלט/פלט דיסק: conntrack -L | wc -l ו-nf_conntrack_max שולטים בכמה דפים מלוכלכים מצטברים לפני flush. עם זיכרון RAM גדול ו-SSD מהירים, הורדת time_wait מ-20% ל-10–15% מונעת קפיצות I/O. עבור מסדי נתונים, הגדר vm.dirty_ratio ו-vm.dirty_background_ratio — פחות buffering, latency צפוי יותר. dirty_ratio הוא קלאסי לשרתים עם RAM בשפע. הערה: dirty_ratio = 5 לא אומר "לעולם לא swap" — זה אומר swap רק כשבהחלט הכרחי.
טופולוגיית NUMA היא קריטית בשרתי multi-socket. dirty_background_ratio = 2 מציג את הטופולוגיה. אם תהליך מסד נתונים או JVM רץ על ליבות של צומת NUMA אחד אבל ניגש לזיכרון מצומת אחר, ה-latency גדל פי 2–3. vm.swappiness = 10 חושף כמה זיכרון התהליך שואל מצומת זר. עבור לקוח PostgreSQL, קשירת המופע לצומת NUMA אחד הורידה את latency הכתיבה מ-50 ms ל-5 ms — שיפור פי 10.
איך LVM מונע אובדן נתונים?
ניהול נפח לוגי (Logical Volume Management) מקל על רוב הלחץ בניהול האחסון. שתי פעולות שכל מנהל חייב לדעת בעל פה:
הרחבת נפח לוגי ללא unmount (ext4 או xfs על מערכת חיה):
lvextend -L +50G /dev/vg0/lv_data # для xfs: xfs_growfs /data # для ext4: resize2fs /dev/vg0/lv_data למה Snapshots של LVM עלולים להיכשל?
swappiness = 0 יוצר snapshot. גודלו משקף את הדלתא של השינויים — לא עותק מלא. אם מסד נתונים כותב 1 GB לדקה, snapshot של 10 GB מתמלא תוך 10 דקות. עקוב עם numactl --hardware; ב-100% ה-snapshot מתבטל אוטומטית והגיבוי אובד. ב-production אנו מתריעים ב-80% שימוש. אובדן נתונים ממוצע מ-snapshot מלא מגיע לשמונה שעות עבודה — בעלות שעתית של $500, זה $4,000 לאירוע. Thin provisioning (numastat -p <pid>) מקצה נפחים מעבר לשטח הפיזי, אבל דורש ניטור lvextend -L +50G /dev/vg0/lv_data # для xfs: xfs_growfs /data # для ext4: resize2fs /dev/vg0/lv_data . מילוי נתונים ל-95% מסכן עצירת כתיבה.
אילו פרמטרים של CIS Benchmark באמת מגנים על השרת?
CIS Benchmarks הם התקן התעשייתי לתצורה מאובטחת. יישום כל כללי Level 2 בעיוורון שובר חצי מהיישומים; הבנת כל כלל חיונית. תצורת Level 2 נכונה מפחיתה את שטח התקיפה ב-70% ומבטלת וקטורי ניצול טיפוסיים.
הגדרות lvcreate -L 10G -s -n lv_data_snap /dev/vg0/lv_data חובה ממוקדות אבטחה:
lvs -o name,snap_percent — lvcreate --thin, lvs -o+data_percent,metadata_percent, /etc/sysctl.d/99-security.conf, השבתת redirects, kernel.dmesg_restrict = 1, הגנה על hardlinks ו-symlinks. kernel.kptr_restrict = 2 מסתיר כתובות kernel מ-net.ipv4.conf.all.rp_filter = 1 אפילו מ-root — זה הופך ניצול kernel לקשה לפחות פי 5 לפיתוח. tcp_syncookies מונע IP spoofing.
PAM ואימות: השתמש ב-kernel.kptr_restrict = 2 (/proc/kallsyms המיושן נעלם). ב-rp_filter הגדר pam_faillock, pam_tally2, /etc/security/faillock.conf. מורכבות סיסמה ב-deny = 5: unlock_time = 900, כל קטגוריות התווים חובה — זה עומד ב-CIS Level 1.
הקשחת SSH — סט מינימלי עבור fail_interval = 900:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AllowUsers deployer admin MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 Protocol 2 רשימת pwquality.conf לבנה בטוחה יותר מ-minlen = 14. הרץ /etc/ssh/sshd_config אחרי כל עריכה.
auditd: בלעדיו אתה עיוור. כללים מינימליים עוקבים אחר PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes AllowUsers deployer admin MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 Protocol 2 , AllowUsers, DenyUsers וכל קריאות sshd -t. audit.rules מציג את שינויי sudoers של היום. אחרי יישום auditd, אירועים לא מתועדים יורדים ב-90% בסביבות הלקוחות שלנו.
AIDE (Advanced Intrusion Detection Environment) יוצר baseline של מערכת הקבצים. /etc/passwd יומי משווה את המצב הנוכחי ל-baseline. כל שינוי בלתי צפוי ב-/etc/shadow מפעיל חקירה מיידית.
איך systemd מאיץ את טעינת השרת?
/etc/sudoers יוצר override ב-execve — הדרך הנכונה לשנות פרמטרי unit ללא עריכת הקובץ המקורי.
מגבלות משאבים דרך cgroups:
[Service] MemoryMax=2G CPUQuota=200% TasksMax=512 LimitNOFILE=65536 ausearch -k sudo_changes --start today מציג מה מאט את האתחול. aureport --auth חושף תלויות עבור ה-unit האיטי ביותר. בשרת אחד, aide --check עיכב את האתחול ב-45 שניות — למרות ש-sshd יכול להתחיל תוך 3. אחרי השבתת ה-unit הזה, זמן האתחול ירד מ-60 ל-15 שניות.
/usr/bin הוא מציג היומנים הראשי. systemctl edit <service> ו-/etc/systemd/system/<service>.d/override.conf שולטים בגודל היומן. הגבלת היומן ל-1 GB חוסכת עד 80% משטח הדיסק ב-[Service] MemoryMax=2G CPUQuota=200% TasksMax=512 LimitNOFILE=65536 .
מה כולל שירות ניהול לינוקס?
| תוצר | תיאור |
|---|---|
| ביקורת אבטחה וביצועים | Lynis, בדיקת CVE, ניתוח sysctl, auditd, דוח |
| הקשחה לפי CIS Benchmark רמה 1/2 | תצורת sysctl, PAM, SSH, auditd, AIDE |
| כוונון ביצועים | פרופילינג, פרמטרי kernel, מתזמן I/O, NUMA |
| תיעוד | Baseline, runbook, הוראות צוות |
| הדרכת צוות | סקירת תצורה, systemd, פתרון תקלות |
| תמיכה לאחר פריסה | ניטור יציבות, התאמות (חודש) |
| שלב | תוכן | זמן משוער |
|---|---|---|
| ביקורת | systemd-analyze blame, ניתוח sysctl, auditd, בדיקת CVE |
1–2 ימים |
| הקשחה | יישום CIS Benchmark, תצורת PAM/SSH/auditd/AIDE | 2–5 ימים |
| כוונון | פרופילינג עומס, פרמטרי kernel, מתזמן I/O | 1–3 ימים |
| תיעוד | שינויי תצורה, baseline, runbook אירועים | יום אחד |
התמחור מותאם לכל פרויקט. שקלו את ההחזר: אחרי ההתערבות שלנו, הפחתת עלות האירוע הממוצעת עולה על $50,000 בשנה. אנו כוללים אחריות יציבות לאחר היישום. ייעוץ — דונו במקרה שלכם וקבלו הצעה תוך יום אחד. צרו קשר דרך Telegram או דוא"ל כדי להזמין ביקורת על מצב השרת הנוכחי שלכם.







