از ایران، «خراب است» و «از اینجا باز نمیشود» از پشت مرورگر یک شکل دارند، و تازه کردن صفحه هیچوقت جدایشان نمیکند. دستوری که جدایشان میکند curl -I https://badban.example/ است. سطر وضعیت یعنی سرویس جواب داده است و مشکل جای دیگری است؛ باز نشدنِ اتصال یعنی چیزی سرِ راه نشسته و سرویس ممکن است همین حالا سالم باشد.
کسی که این صفحه را باز میکند معمولا از جایی وارد این کار شده که در متنهای انگلیسی ایستگاه دوم یا سوم است: یک سرور مجازی اجارهای که برای دسترسی خریده شده، نه برای یاد گرفتن. اولین لینوکسی که دستش آمده از راه SSH بوده، روی ماشینی که خراب کردنش یعنی خوابیدن یک سرویس. این ترتیب یک چیز را گران میکند: جایی برای اشتباه کردن باقی نمیگذارد.
از هشت شاخه دانش شکل دارد، این یکی را آدمها وسط یک خرابی باز میکنند نه وسط درس خواندن، و کسی که وسط خرابی است اول جواب میخواهد و بعد مدل.
پنج تا از این هفت روی هم سوارند، و امنیت لایه ششم نیست
درخواستی که به یک سرویس میرسد از پنج تا از این هفت موضوع رد میشود، به ترتیبی ثابت، و هر کدام روی آن یکی که زیرش است مینشیند. ابر بالای همه است، چون نوع تازهای از ماشین نیست. سرور زیر آن است، یعنی پروسهای که جواب میدهد و فایلی که تصمیم گرفته چطور. شبکه زیر آن، چون سروری که کسی به آن نمیرسد خراب نیست و از خراب قابل تشخیص هم نیست. سیستمعامل زیر شبکه، چون بسته از هستهای بیرون رفته که سوکت مال اوست. کامپیوتر کف است.
امنیت لایه ششم نیست. همان پرسش است که در هر پنج لایه تکرار میشود، با این تفاوت که جواب میتواند دروغ باشد: فایروالی که درگاه ۴۴۳ را باز میگذارد هر چیزی را باز گذاشته که کسی عمدا پشت همان درگاه گذاشته، و فهرست مشتریها پشت همان درگاه است. شکلی که فقط میگوید یک لایه چه چیزی را میگیرد آگهی است؛ ستون دیگر تعیین میکند یک نفوذ چقدر بد تمام میشود.
الکترونیک هفتمی است و روی این پشته نمینشیند، از آن بیرون میزند. بردی که یک میکروکنترلر دارد و سیستمعاملی ندارد شیئی دیگر است با خرابیهای دیگر، که با مولتیمتر پیدا میشود نه با لاگ.
ابزارها هرچه پایینتر میروید جنسشان عوض میشود. بالای پشته ابزار صورتحساب است، چون خرابی در ابر معمولا چیزی است که کسی روشن گذاشته. وسط پشته ابزار متن چاپ میکند: ss -tlnp میگوید چه چیزی گوش میدهد و با کدام کاربر، و journalctl -u nginx میگوید یک سرویس پیش از خوابیدن درباره خودش چه گفته است. کف پشته چیزی چاپ نمیشود و ابزار میشود جایگزین کردن: یک منبع تغذیه سالم در دو دقیقه چیزی را حل میکند که یک هفته لاگ خواندن حل نمیکند.
ترتیبی که جواب میدهد، و ایستگاهی که از قلم میافتد
گرانترین ترتیب، شروع کردن از بالاست. کسی که پیش از خواندن ip route روی یک ماشین لینوکسی حساب ابری باز میکند ابر یاد نمیگیرد؛ کنسول یک شرکت را یاد میگیرد، و کنسول همان چیزی است که عوض میشود. جدول مسیر در یک شبکه خصوصی مجازی، جدول مسیر است. گروه امنیتی، همان قانون فایروال است با کلمه دیگری روی دکمهاش.
ایستگاهی که در ایران از قلم میافتد ایستگاه اول است: یک دستگاه که مال خودتان باشد و بشود بیدلهره پاکش کرد. وقتی اولین ماشین یک سرور اجارهای باشد که سرویسی روی آن زنده است، هیچکس آزمایش نمیکند؛ همه محتاط میشوند، و محتاط بودن یاد گرفتن نیست. یک لپتاپ قدیمی، یا یک ماشین مجازی روی همین لپتاپ، این ایستگاه را برمیگرداند و تمام هزینهاش یک بعدازظهر است.
ترتیب غلط دوم، مدرک پیش از ماشین است. Security+ و CCNA واقعیاند و کارفرما به اسم سراغشان میآید، و انتخاب کار، به دست آوردنش، و بالا رفتن در آن این وزن را دقیقتر میکند. اما کسی که یکی از این دو را بدون ماشینی برای خراب کردن بخواند، با واژگان بیرون میآید و بدون واکنش. واژگان امتحان را قبول میشود؛ واکنش آن چیزی است که وسط خرابی میگوید قدم بعدی یک دستور است نه یک راهاندازی دوباره.
تختهای که همه از رویش رد میشوند لایهای میان سختافزار و هر چیزی که اجرا میکنید است، به این گمان که بعدا هم میشود برش داشت. نمیشود: هر موضوع بالاتر جوابش را به شکل متن پس میدهد، و کسی که متن را نمیتواند فیلتر کند هر جواب را از سوراخ کلید میخواند.
ترتیب
سه ایستگاه ثابت، و بعد دوراهیای که واقعا انتخاب است
ایستگاه دوم همان است که میگذارندش برای بعد، و همان است که سهتای دیگر را ارزان میکند.
- کامپیوتریک دستگاه که مال خودتان باشد و بشود پاکش کردتنها ایستگاهی که اشتباه کردن در آن هزینهای ندارد۰۱
- ۰۲سیستمعاملخط فرمانهر ایستگاه بعدی جوابش را به شکل متن پس میدهد، و متن تنها چیزی است که میشود فیلترش کرد
- شبکهیک خرابی واقعی، آزموده از کف به بالاتعریف تا وقتی سرِ پا میماند که سهتایشان با هم روی میز نباشند۰۳
- ۰۴دوراهیسرور و ابر، یا الکترونیک، یا امنیتانتخاب است نه ترتیب، و سه ایستگاه اول هر طرف که بروید یکی است
روی این نقشه هیچ تاریخی نیست، و عمدی است. کسی که هفتهای یک خرابی واقعی دستش است خیلی زودتر از کسی که سرفصل میخواند از ایستگاه سوم رد میشود.
جایی که کار میایستد: وقتی سه واقعیت دیگر سه واقعیت نیستند
نشانی IP و DNS و HTTP هر کدام جداگانه سادهاند و جداگانه هم یاد گرفته میشوند. کار جایی میایستد که هر سه با هم روی میز باشند و یکیشان دروغ بگوید. جملهای که این وضع را لو میدهد این است: سایت بالاست، از اینجا هم بالاست، و مشتری هنوز به آن نمیرسد. پرسش دیگر این نیست که DNS چیست، بلکه این است که جوابی که این دستگاه به یک نام میدهد همان جوابی است که بقیه میگیرند یا نه.
در ایران یک لایه دیگر هم به این فهرست اضافه میشود که در متنهای انگلیسی اصلا وجود ندارد: مسیر بیرون. یک دستگاه ممکن است به یک نشانی برسد و به نشانی دیگر نرسد، برای یک نام نشانیای بگیرد که با نشانی جای دیگر فرق دارد، یا اتصالی باز کند که سرِ راه بسته میشود. همه شبیه خرابی سرویساند و هیچکدام خرابی سرویس نیستند، و کسی که این لایه را در ترتیب آزمودنش ندارد وقتش را صرف درست کردن چیزی میکند که خراب نیست. رساندن داده از یک دستگاه به دستگاه دیگر همان موضوعی است که ترتیب آزمودن این لایه را میدهد.
روی سرور فروشگاه بادبان، که یک سرور مجازی اجارهای است و سمیرا نگهش میدارد، شش دستور این کار را از کف به بالا میکنند. ip -br addr برای هر رابط یک سطر میدهد؛ 169.254 یعنی جواب DHCP هرگز نرسیده است و آزمودن هر چیز بالاتر بیفایده است. ip route میگوید مسیر پیشفرض هست یا نه و دروازه کجاست؛ نبودنش دقیقا شبیه قطع بودن اینترنت است در حالی که شبکه محلی بیعیب به نظر میرسد. ping -c 3 192.168.1.1 همان دروازه را میزند: جواب بدهد، سیم سالم است و هنوز هیچ چیز بیرونی آزموده نشده.
سه دستور بعدی از دستگاه بیرون میزنند. dig +short badban.example نشانیای را برمیگرداند که بقیه دارند از آن استفاده میکنند، و getent hosts badban.example همان را از خود دستگاه میپرسد، اول از فایل hosts، درست همانطور که برنامه میپرسد. dig از یک سرور نام میپرسد و getent از خود دستگاه، و اختلاف میان این دو، دستگاه را محکوم میکند نه شبکه را. دستور ششم curl -I است.
دو شکل خروجی، و فقط یکیشان خرابی است
خروجی این دستور دو حالت دارد که در مرورگر یک جور دیده میشوند. اگر سطری با کد وضعیت برگردد، طرف مقابل جواب داده است؛ حتی ۵۰۳ هم یعنی چیزی آنجا زنده است و دارد خبر میدهد، و از آن لحظه مسئله پیکربندی سرویس است. اگر اتصال در مرحله باز شدن به مهلت برسد، هیچکس جواب نداده، و این جمله درباره این دستگاه و این مسیر است نه درباره سرویس.
ترتیب آزمودن
شش دستور روی سرور بادبان، کار شده از کف به بالا
هر جواب لایههای زیر خودش را تمیز میکند و درباره لایههای بالاتر هیچ نمیگوید.
- کامپیوترip -br addrبرای هر رابط یک سطر. نشانی 169.254 یعنی اجاره هرگز نرسیده، و هیچ چیز بالاتری ارزش آزمودن ندارد.
- سیستمعاملip routeنبودن مسیر پیشفرض دقیقا شبیه قطع بودن اینترنت است، و شبکه محلی تا وقتی که هست بیعیب به نظر میرسد.
- شبکهping -c 3 192.168.1.1همان دروازهای که سطر قبل نشانش داد. جواب بدهد یعنی سیم زنده است و هنوز هیچ چیز بیرونی آزموده نشده.
- شبکهdig +short badban.exampleاز یک سرور نام میپرسد و نشانیای را برمیگرداند که بقیه دارند از آن استفاده میکنند.
- سیستمعاملgetent hosts badban.exampleاز خود دستگاه میپرسد، اول از فایل hosts، همانطور که برنامه میپرسد. اختلاف اینجا دستگاه را محکوم میکند.
- سرورcurl -I https://badban.example/یا سطر وضعیت برمیگردد یا اتصال اصلا باز نمیشود، و فرق این دو، فرق خرابی است با بسته بودن راه.
زمان را نمیگوید. هر شش دستور در یک ثانیه جواب میدهند، پس خرابیای که هر چند ساعت یک بار پیدا میشود از هر ششتا سالم رد میشود و چیزی میخواهد که وقتی کسی نگاه نمیکند ضبط کند.
چه چیزهایی امروز باز میشوند، و چه چیزهایی نه
ابزارهای خط فرمان این شاخه مسئله دسترسی ندارند، چون روی خود دستگاه اجرا میشوند. تا ۲۰۲۶ ابزار پیشفرض iproute2 است که جای net-tools را گرفت، همان بستهای که ifconfig و netstat را میداد و هنوز در بیشتر آموزشهای فارسی همین دوتا نشان داده میشوند. journalctl جای دنبال کردن فایلهای داخل /var/log را گرفته و همراه systemd میآید. dig جای nslookup را گرفته و روی دبیان در bind9-dnsutils و روی فدورا در bind-utils است.
داکر جای فرستادن یک ایمیج ماشین همراه یک صفحه دستور نصب را گرفت و شکل فرستادن نرمافزار را عوض کرد. اینجا باید صریح بود: کشیدن ایمیج از داکرهاب از ایران مستقیم جواب نمیدهد، و کاری که تیمها میکنند تنظیم یک آینه رجیستری در /etc/docker/daemon.json است. محدودیت درباره جایی است که ایمیج از آن کشیده میشود، نه درباره خود ابزار.
سه ابر بزرگ، یعنی AWS و Azure و Google Cloud، هر سه لایه رایگان دارند، و همان لایه جایی است که یاد گرفتن اتفاق میافتد، و صورتحساب جایی است که غافلگیری از آن درمیآید. از ایران هیچکدامشان با ثبتنام مستقیم باز نمیشوند: ثبتنام کارت اعتباری بینالمللی میخواهد و کنسول هم پاسخ نمیدهد. آموزشی که با «یک حساب AWS باز کنید» شروع شود، برای این خواننده در همان سطر اول تمام شده است.
چیزی که به جایش استفاده میشود ابرهای داخلی است. ابر آروان و لیارا دو نامی هستند که تیمهای ایرانی روی آنها سرویس بالا میآورند و به ریال و با کارت بانکی داخلی صورتحساب میکنند، که همان کاری است که آن سهتای دیگر نمیپذیرند. مهمتر از انتخاب میان این دو، دانستن این است که کدام بخش از مهارت منتقل میشود: ماشین مجازی، دیسک، گروه امنیتی، جدول مسیر و صورتحساب ساعتی همهجا یک مفهوماند. آنچه منتقل نمیشود نام سرویسهای اختصاصی هر ابر و شکل کنسول آن است، و اجاره کردن زیرساخت، به جای مالک شدنش همین مرز را جدا میکند.
نشانهای که خودتان میتوانید امتحان کنید
پیشرفت در این شاخه یک آزمون دارد و احساس نیست. ماشینی را که مسئولش هستید بردارید و چهار پرسش را جواب بدهید: چه چیزی روی آن گوش میدهد، دیسک چقدر تا پر شدن فاصله دارد، آیا نسخه پشتیبان برمیگردد، و دیشب چه کسی وارد شده است. دو تای اول را یک سطر خروجی حل میکند، با ss -tlnp و df -h. دو تای دوم را هیچ دستوری امروز حل نمیکند.
در ماه اول جواب هر چهار پرسش «نمیدانم» است. در ماه سوم دو تای اول را در کمتر از یک دقیقه میدهید، و برای سومی تاریخ آخرین باری را دارید که یک نسخه پشتیبان را روی ماشینی دیگر واقعا برگرداندهاید. همین یک تاریخ فرق میان کسی است که پشتیبان میگیرد و کسی که پشتیبان دارد. برای پرسش چهارم جواب یا لاگی است که از پیش از دیشب نگه داشته میشده، یا هیچ، و اول از همه فهمیدن حملهها از همینجا شروع میشود.
نشانه
چهار پرسش، که جواب دوتایشان ماهها پیش از پرسیدن داده شده
دوتا را یک سطر خروجی حل میکند. دوتای دیگر را عادتی حل میکند که یک نفر نگه داشته، یا نداشته.
- چه چیزی روی آن گوش میدهددرگاه، پروسه پشت آن، و کاربری که با آن اجرا میشود
- دیسک چقدر تا پر شدن فاصله داردیک صفحه، و سطری که اهمیت دارد معمولا آن سطری نیست که انتظارش میرود
- آیا نسخه پشتیبان برمیگرددهیچ چیزِ روی خود ماشین نمیتواند بگوید. یک نفر باید عمدا، و همین اواخر، امتحانش کرده باشد.
- دیشب چه کسی وارد شدهفقط اگر لاگها از پیش از دیشب نگه داشته میشدند
یک ستون را بردارید، جمله بالای سرش دیگر درست نیست
نمیگوید روی یک ماشین مشخص کدام ستونها سرِ پا هستند. کشف معمول این است که دستکم یک جواب نه بله است نه خیر، و نگاه نکردن با خیر یکی نیست و کار دیگری میخواهد.
هفت موضوع، و اینکه از کدام وارد شوید
خود دستگاه، و کار نگه داشتنش جایی است که ابزار هنوز دست است نه دستور، و تنها موضوعی که خرابیاش را اغلب بیهیچ دستوری میشود دید. بعد از آن خط فرمان میآید، و پس از آن شبکه، که اگر فقط یک موضوع را کامل بخوانید همین است. ماشینهایی که به درخواستها جواب میدهند جایی است که پیکربندی جای دستور را میگیرد.
امنیت موضوع جدایی نیست و صفحههای خودش را دارد، چون آن پرسش تکرارشونده بالاخره باید جایی نوشته شود. مدار، برد، و چیزهایی که کامپیوتر نیستند از این پشته بیرون است، و کسی که از آنجا وارد شود با ابزارهایی کار میکند که هیچکدام متن چاپ نمیکنند.
پرسش بعدی که تقریبا همه به آن میرسند این نیست که کدام موضوع را اول بخوانند. این است که چیزی که ساختهاند چطور از لپتاپ بیرون میرود و بیرون زنده میماند، که موضوع بیرون بردن کد از دستگاه خودتان، و زنده نگه داشتنش است؛ و اگر آنچه بالا میآید یک سایت باشد، هر چه میان یک مرورگر و یک سرور میگذرد نیمه دیگر همین پرسش است.