Как защитить сервер от DoS-атак

Изучаем основные инструменты и настраиваем CSF
6 минут24030

Здравствуйте. Это снова Антон Чигарёв, и мы продолжаем серию заметок начинающего системного администратора. В прошлый раз я рассказывал о создании интернет-радио, а сегодня поделюсь советами, как защитить сервер от DoS-атак.

Эта угроза, к сожалению, актуальна для любых интернет-ресурсов: никогда не знаешь, что может стать причиной недоброжелательства и вандализма. Мой проект, посвящённый играм для слепых людей, много раз подвергался атакам, из-за чего я занялся укреплением «обороны» и на этом пути перепробовал множество вариантов. Ниже я расскажу о базовых и малозатратных способах оградить небольшой проект от активности хакеров-самоучек.

Эта статья – обзор механизмов защиты, с каждым из которых вы можете ближе познакомиться в материалах по приведённым мною ссылкам. Поскольку большинство серверов работает под управлением Linux, в тексте я ориентируюсь именно на эти системы.

Речь пойдёт прежде всего о бесплатных инструментах. Многие хостинг-провайдеры предлагают защиту от DoS как услугу. За 100-300 рублей в месяц они проверяют пакеты «на подступах» к вашему серверу и отсекают нежелательный трафик. Для коммерческого проекта такие затраты оправданы, а если сайт пока не приносит прибыли – попробуйте сначала защититься методами, о которых я расскажу ниже.

Сам я уже около года использую межсетевой экран ConfigServer Security Firewall (CSF), который успешно выявляет и пресекает нежелательную активность пользователей.

Способы защиты

Ключевая задача при построении обороны – своевременно обнаружить и блокировать злоумышленника. И здесь есть несколько механик, которые можно использовать как вместе, так и по отдельности:

  1. Вы оставляете открытыми только нужные порты, а остальные закрываете. Это делается, чтобы злой хакер не проник в систему после простого сканирования портов.
  2. Файервол следит за открытыми портами по указанным протоколам и блокирует отправителей, которые присылают серверу больше пакетов, чем вы позволили при конфигурации. Вы можете настроить время блокировки, но учтите, что по истечении этого периода преступник снова сможет присылать лишние пакеты.
  3. При обнаружении нежелательной активности вы, администратор, получаете электронное письмо с уведомлением о происшествии и IP-адресом злоумышленника.

Да, я в своём уме и прекрасно понимаю, что существуют статические и динамические IP-адреса, так что попытка атаки может длиться вечно. Но хватит ли ресурсов нападающего навечно – вопрос открытый. Если учесть, что мы будем блокировать все источники, которые перегружают сервер пакетами, атакующему придётся часто перезагружаться и менять айпишник.

Инструменты

Выше я обрисовал, что можно сделать, а теперь предлагаю посмотреть, каким образом и с помощью каких программ всё это реализовать. В качестве основного компонента защиты предлагаю использовать встроенный в ядро Linux межсетевой экран IPTables. Он позволяет обрабатывать трафик, управлять портами и решать множество задач, связанных с настройкой сети. Например, вы можете создать «белый список» IP-адресов и полностью запретить любые другие подключения к нужной машине. 

Сам по себе встроенный межсетевой экран сложен в настройке, но зато мы можем использовать его в связке с более понятными дополнительными файерволами. Один из них – CSF. У этого решения множество параметров, которые легко «подкрутить» как вам нужно в файле csf.conf. Либо вы можете поставить APF-firewall и к нему – скрипт DoS-deflate. Есть и другие аналогичные решения.

IPTables

Как можно догадаться из названия (буквально – «Таблицы IP»), данный инструмент фильтрует весь трафик при помощи специальных таблиц, которые вы можете добавлять по мере необходимости.

Каждая таблица содержит цепочки правил, определяющих, что делать с пакетом в той или иной ситуации. Стандартные варианты реагирования:

  • ACCEPT – принять пакет и пропустить дальше.
  • DROP – отбросить пакет и не пропускать.

Подробное и понятное русскоязычное руководство по IPTables вы найдёте на сайте ITproffi.

При работе с этим софтом нужно быть внимательным, понимать, что и для чего вы делаете. Иначе легко закрыть доступ к серверу вообще всем и даже самому себе. В этом случае сервер придётся перезагружать через панель управления.

Важно! IPTables хранит правила только до перезагрузки системы. Чтобы сохранить правила насовсем, нужно установить одну из дополнительных утилит. В сети на этот счёт есть готовые инструкции.

Пока вы только начали осваивать утилиту, настоятельно рекомендую НЕ сохранять правила, чтобы в случае ошибки не пришлось переустанавливать систему.

Знакомимся с CSF 

Это готовый конфигуратор правил, который позволяет управлять трафиком, перенаправлять порты и контролировать сеть. Проще говоря, если у вас не получается или нет на времени разобраться с IPTables, конфигуратор сделает это за вас. Нужно лишь правильно заполнить текстовый файл конфигурации – прописать в нём необходимые вам порты и адреса. Дальше файервол приступит к работе.

По личному опыту могу сказать, что CSF действительно избавляет администратора от лишней возни и проблем с IPTables. Главное – быть внимательным и проверять, что вы вносите в конфиг.

Не забудьте добавить в исключения своих администраторов и активных пользователей, которые частенько заливают файлы по FTP и имеют право что-то настраивать. Если этого не сделать, файервол может внезапно забанить и их, когда они пришлют чуть больше пакетов, чем указано в конфиге. 

Ставим серверный файервол 

Перед установкой межсетевого экрана необходимо установить два компонента, без которых ничего работать не будет. Это интерпретатор Perl и библиотека Library World Wide Web, сокращённо – libwww.

apt-get install -y libwww-perl

Теперь можно браться за ConfigServer Security Firewall. В официальном репозитории он отсутствует, поэтому скачиваем его по ссылке. Или сразу грузим архив к себе на сервер:

cd /usr/src

wget https://download.configserver.com/csf.tgz

Теперь распаковываем архив и перемещаемся в папку, где хранятся файлы нашего защитника, чтобы разобраться с ними.

tar xzf csf.tgz

cd csf

Дальше запускаем установку программы и проверяем, всё ли у нас впорядке с зависимостями – на месте ли необходимые компоненты.

sh install.sh

perl /usr/local/csf/bin/csftest.pl

В результате мы должны получить следующее: 

Это значит, что всё хорошо. Если у вас на данном этапе возникли какие-то ошибки, не игнорируйте их, а запрягайте поисковик, чтобы найти доступное объяснение проблемы и её решение.

Настройка

После установки утилиты можно сразу переходить к настройке защиты. Файл конфигурации лежит здесь: /etc/csf/csf.conf. Откройте его.

По умолчанию наш охранник работает в тестовом режиме, то есть честно защищает вас в течение пяти минут, после чего отключается. Сделано это, чтобы вы могли удаляться из списка заблокированных, пока будете учиться и экспериментировать.

Перевести CSF в рабочий режим очень просто  – надо в тексте конфига изменить значение флага TESTING на 0.

Описание всех параметров конфига заняло бы слишком много времени, и оно уже есть в сети, поэтому скажу только о том, что стоит изменить. Хотя, если у вас возникнут вопросы, задавайте – постараюсь помочь.

Для начала пропишем входящие порты. Указывать их надо в кавычках и через запятую:

TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,10333,127015"

Теперь – исходящие:

TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995,10333"

Если вы хотите задать диапазон портов, границы диапазона обозначайте при помощи  двоеточия. Например: 40000:55000,10335.

В блоке «EMAIL_ALERT» файла конфигурации вы можете настроить почтовые оповещения. Например, давайте установим оповещение о том, что кто-то подключился к ssh: 

LF_SSH_EMAIL_ALERT = "1"

Теперь, если кто-нибудь подключится к ssh, мы получим уведомление на почту. Кстати о почте! CSF – мощный и крутой защитник, но он не волшебник и не знает вашего электронного адреса, пока вы не укажете его в блоке «LF_ALERT_TO».

Пора сохранить все изменения и написать в терминале следующее:

systemctl restart {csf,lfd}

csf -r

Обратите внимание на команды csf -r и csf -f. Нужны они, чтобы перезагружать и останавливать выполнение правил. А когда вам нужно просмотреть цепочку правил, используйте команду csf -l.

Если вы решили прислушаться к моему совету и добавить в исключения всех, кто имеет право на доступ к серверу, можете это сделать следующей командой:

csf -a 192.168.0.6

Когда нужно запретить подключение к серверу кому-то конкретно, можно воспользоваться командой: 

csf -d 192.168.0.7

А удалить все правила, связанные с заданным IP, можно с помощью команды:

csf -ar 192.168.0.6

Удалить все запрещающие правила, связанные с конкретным адресом, можно вот так:

csf -dr 192.168.0.7

Заключение 

Собственно, мы установили CSF и немного настроили его. Если у вас будет желание детальнее разобрать параметры инструмента, внимательно просмотрите файл конфигурации – там вы найдёте подробные комментарии на английском языке. Каким из возможных вариантов настройки пользоваться – решать вам. Главное, что у вас есть выбор.

А я пока прощаюсь с вами до следующей статьи, жду ваших комментариев и вопросов. 

Хотите свободно работать с Debian и другими дистрибутивами Linux? Приходите учиться на профессию «системный администратор», и через 9 месяцев вы не только освоите Linux, но и сможете обеспечивать бесперебойную работу компьютерной техники и ПО в любой организации! А если вас интересует защита IT-систем — приглашаем на факультет информационной безопасности!

программированиеsecurity
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!