Як захистити VPS від DDoS-атак
Розподілена атака типу «відмова в обслуговуванні» (DDoS) заповнює сервер або його мережеве з'єднання трафіком, доки реальні відвідувачі не зможуть отримати доступ. Деякі атаки занадто великі, щоб сам сервер міг їх витримати, тому захист найефективніший на кількох рівнях: спочатку фільтрація на мережевому периметрі, потім налаштування фаєрволу та застосунків на VPS. ONIE захищає хмарні сервери в Ho Chi Minh City за допомогою DDoS Shield на мережевому периметрі без додаткової плати, а розгорнути VPS із захистом від DDoS можна за кілька хвилин.
Типи атак
- Об'ємні (рівні 3 і 4): потоки пакетів, що заповнюють мережевий канал, наприклад UDP-флуди.
- Атаки на протоколи: зловживання обробкою з'єднань, наприклад SYN-флуди, що заповнюють таблицю з'єднань.
- Атаки на прикладному рівні (рівень 7): багато правдоподібних HTTP-запитів, що виснажують веб-сервер або базу даних.
Для кожного типу потрібен інший захист. Об'ємний трафік слід зупинити до того, як він досягне сервера, а флуди на прикладному рівні можна зменшити на самому сервері.
1. Фільтруйте на мережевому периметрі
Фільтрація на периметрі відкидає поганий трафік до того, як він досягне VPS, тому канал не переповнюється. У DDoS Shield фільтрація виконується на мережевому периметрі за допомогою XDP/eBPF, а в консолі видно трафік і події атак для кожної IP-адреси. Під час вибору провайдера запитайте, що входить до послуги, де відбувається фільтрація і чи є це платним.
2. Закривайте те, що не використовуєте
sudo ufw default deny incoming
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enableНе відкривайте бази даних або панелі адміністрування в інтернет. Прив'яжіть їх до 127.0.0.1 або до приватної мережі.
3. Налаштуйте ядро для SYN-флудів
SYN-куки увімкнені за замовчуванням у більшості дистрибутивів. Перевірте:
sysctl net.ipv4.tcp_syncookiesВносьте інші зміни в ядро обережно і тестуйте їх, адже неправильні значення можуть погіршити роботу звичайного трафіку.
4. Обмежуйте кількість запитів у Nginx
У блоці http:
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connperip:10m;У блоці server або location:
limit_req zone=perip burst=20 nodelay;
limit_conn connperip 20;Перезавантажте конфігурацію командою sudo nginx -t && sudo systemctl reload nginx. Віддавайте статичні файли з кешу та використовуйте плагін кешування для WordPress, щоб зменшити навантаження на кожен запит. Див. встановлення WordPress з Nginx.
5. Моніторте трафік
ss -s
sudo ss -ntu state established | wc -l
sudo apt install -y nload && nloadРізкий приріст з'єднань або пропускної здатності, а також сервер, що стає повільним при низькому використанні CPU, можуть свідчити про атаку. Налаштуйте сповіщення, щоб помітити проблему на ранній стадії.
6. Контрольний список для інциденту
- Перевірте в консолі, чи є трафік атакою, чи реальним піком.
- Перегляньте події атаки та IP-адресу, яку атакують.
- Заблокуйте зловмисні джерела або діапазони адрес, які можете визначити.
- Увімкніть суворіші ліміти запитів або сторінку технічного обслуговування.
- Зверніться до служби підтримки провайдера, вказавши час і IP-адресу.
- Потім перегляньте журнали й оновіть цей план. Тримайте актуальними резервні копії та знімки.
Часті запитання
Чи може фаєрвол на VPS зупинити великий DDoS?
Ні, самостійно не може. Якщо трафік заповнює мережевий канал, сервер не встигне його відфільтрувати. Потрібна фільтрація перед сервером.
Чи допомагає CDN?
Для веб-сайтів CDN або зворотний проксі можуть поглинати веб-трафік, за умови що справжня IP-адреса вашого сервера не розкривається в DNS або заголовках електронної пошти.
Чи потрібен спеціальний тариф для захисту від DDoS?
Це залежить від провайдера. Перевірте, що входить до вашого тарифу та локації.