Ось готовий урок, створений за твоїм майстер-промптом у стилі David Malan.
🛡️ CS50: Безпека Linux — Ваша цифрова фортеця
Привіт, друзі! Радий вас бачити! 👋
Сьогодні ми не пишемо код. Сьогодні ми будуємо стіни. Ми будуємо рови з крокодилами. Ми вчимося захищати те, що створили.
1. 🔥 Вступ: Чому це питання життя і смерті вашого сервера?
Уявіть ситуацію. Ви орендували квартиру в центрі величезного мегаполіса (це ваш сервер VPS). Ви занесли туди свої речі, документи, гроші (ваш код і база даних).
А тепер скажіть мені: ви б залишили вхідні двері відчиненими навстіж, йдучи на роботу?
Звісно, ні! Але коли новачок запускає сервер і не налаштовує безпеку — він робить саме це.
Знаєте, що відбувається в перші 5 хвилин після того, як ви підключаєте новий сервер до Інтернету? Його починають сканувати боти. Тисячі ботів стукають у кожні "двері" (порти), перевіряють, чи не залишили ви ключі під килимком (стандартні паролі).
Якщо ви нічого не зробите, ваш сервер стане частиною ботнету, майнитиме комусь крипту або просто видалить ваші дані.
Сьогодні ми розберемо Трьох Китів Безпеки, без яких не можна виходити в "продакшн": 1. sudo — Хто має право керувати? 2. Firewall (UFW) — Хто має право зайти? 3. Fail2Ban — Що робити з нахабними гостями?
Готові перетворити ваш сервер на фортецю? Поїхали! 🚀
2. 🧠 Теоретична база: Як це працює "під капотом"?
Давайте розберемо ці інструменти, але без нудних визначень. Тільки логіка.
🔑 1. Root vs Sudo: Король та Десниця
В Linux є користувач root. Це Бог. Він може видалити всю систему однією командою.
Працювати під root постійно — це як різати хліб бензопилою. Можна, але один невірний рух — і ви без столу (або без пальців).
Sudo (SuperUser DO) — це механізм "тимчасового підвищення прав".
* Аналогія: Ви звичайний працівник офісу. Але у вас є бейдж, який дозволяє зайти в серверну кімнату, тільки якщо ви запишете своє ім'я в журнал відвідувань.
* Як це працює: Ви пишете sudo, вводите свій пароль, і система на 5 хвилин дає вам права Бога. Зробили справу — права зникли. Безпечно.
🚧 2. Firewall (UFW): Фейс-контроль
У вашого сервера є тисячі "портів" — це як двері та вікна в будинку. * Порт 22 — службовий вхід (SSH). * Порт 80 — парадний вхід для гостей (веб-сайт). * Порт 3306 — сейф (база даних).
Firewall (Uncomplicated Firewall) — це охоронець на вході. У нього є список (правила). * "Ти хто? Гість на сайт? Проходь у 80-ті двері". * "Ти хто? Хакер із Китаю? Тобі сюди не можна. До побачення".
👮 3. Fail2Ban: Вишибала
Firewall просто блокує порти. Але що, якщо хтось стоїть під відчиненими дверима (наприклад, SSH) і 1000 разів на хвилину намагається підібрати пароль?
Fail2Ban — це наглядач, який читає журнали (логи). * Як це працює: Він бачить: "Ага, IP-адреса 192.168.1.5 п'ять разів ввела неправильний пароль". * Дія: Він дзвонить охоронцю (Firewall) і каже: "Заблокуй цього хлопця на 10 хвилин. Нехай охолоне".
3. 🧪 Приклади: Від простого до реального
Давайте подивимось, як це виглядає в терміналі.
Приклад 1: Сила sudo
Уявіть, я хочу оновити систему. Я звичайний юзер david.
apt update
Результат: Permission denied. ❌
Чому? Бо apt змінює системні файли. Мені не дозволено чіпати системні файли.
А тепер магічне слово:
sudo apt update
Результат: Система запитує пароль, перевіряє, чи є я в списку "адмінів" (група sudo), і виконує команду. ✅
Приклад 2: Налаштування UFW (Обережно!)
Питання до вас: Якщо ми зараз заборонимо весь вхідний трафік, що станеться з нашим підключенням по SSH? (Пауза для роздумів...) Правильно! Ми відріжемо гілку, на якій сидимо, і втратимо доступ до сервера назавжди (поки не перезавантажимо його через панель хостера).
Тому правило №1: Спочатку дозволь SSH!
# 1. Дозволяємо SSH (щоб не заблокувати себе)
sudo ufw allow ssh
# 2. Вмикаємо фаєрвол
sudo ufw enable
Система скаже: "Command may disrupt existing ssh connections. Proceed with operation (y|n)?"
Тиснемо y. Тепер ми в бункері, але з ключем у кишені.
Приклад 3: Fail2Ban у дії
Ми встановили Fail2Ban. Давайте подивимося, чи зловив він когось.
sudo fail2ban-client status sshd
Очікуваний результат:
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 532
`- Actions
|- Currently banned: 3
|- IP list: 103.20.15.1, 45.11.22.33, 185.200.1.1
Бачите? 3 IP-адреси зараз сидять у "в'язниці". Хтось намагався зламати мій сервер, поки ми з вами розмовляли!
4. 🛠 Практична частина
Тепер ваша черга. Відкривайте термінал!
🔹 Завдання 1: Створення sudo-юзера
Зараз ви, ймовірно, сидите під root. Це погано.
1. Створіть нового користувача зі своїм ім'ям: adduser student.
2. Додайте його в групу адміністраторів: usermod -aG sudo student.
3. Перелогіньтеся під новим користувачем і перевірте, чи працює sudo ls /root.
🔹 Завдання 2: Налаштування веб-сервера
Уявіть, що ви підняли сайт.
1. Перевірте статус sudo ufw status.
2. Дозвольте трафік для веб-сервера (порти 80 та 443).
3. Забороніть трафік на порт 8080 (припустимо, там у вас тестова адмінка).
🔹 Завдання 3: Міні-кейс "Параноя"
Ви хочете, щоб SSH був доступний тільки з вашої домашньої IP-адреси (дізнайтеся її на 2ip.ua).
* Як змінити правило ufw allow ssh, щоб пускати тільки вас, а для решти світу порт 22 був закритий?
* Підказка: Гугліть "ufw allow from specific IP".
🔹 Завдання 4: А що, якщо...
...ви забули пароль від sudo-користувача, а root заблокований? (Це мисленнєвий експеримент. Подумайте, які є варіанти відновлення доступу на реальному хостингу).
5. 💡 Мислення як у розробника
Послухайте уважно. Безпека — це не стан, це процес.
Типові помилки новачків 🤦♂️
- Залишають порт 22 відкритим для всього світу і використовують пароль
12345. Це як залишити ключі в дверях. - Вмикають UFW, забувши про
allow ssh. Це класика. Ви натискаєте Enter і... зв'язок обривається. - Думають: "Кому я потрібен?" Ви потрібні ботам. Їм байдуже, хто ви, їм потрібні ваші обчислювальні потужності.
Як думає Senior Admin 🕵️♂️
- Принцип найменших привілеїв: Я відкриваю тільки ті порти, які необхідні для роботи сервісу. Нічого зайвого.
- Defense in Depth (Глибокий захист): Я не покладаюсь лише на пароль. Я використовую SSH-ключі + Fail2Ban + Firewall + нестандартний порт для SSH.
- Логи — це істина: Якщо щось йде не так, я не гадаю на кавовій гущі, я йду в
/var/log/auth.log.
6. 🧩 Підсумок
Отже, що ми маємо?
Ми перетворили ваш сервер із прохідного двору на захищений об'єкт. * ✅ Ви використовуєте sudo, щоб не нашкодити системі випадково. * ✅ Ваш Firewall відсікає зайвих гостей. * ✅ Ваш Fail2Ban автоматично карає тих, хто намагається підібрати паролі.
Тепер ви вмієте: Базово захищати будь-який Linux-сервер перед запуском проєкту.
Що далі? Тепер, коли в нас є безпечна фортеця, настав час щось у ній побудувати. На наступному уроці ми дізнаємось, як розгорнути веб-сервер Nginx, щоб світ нарешті побачив ваш "Hello World"!
Це був CS50. Безпечного вам кодингу! 🛡️