В сегодняшней статье я расскажу вам про два полезных плагина для панели управления хостингом WHM/cPanel, установка и использование которых не только защитит cPanel, но и улучшит безопасность самого хостингового сервера. Я также приведу пару примеров, как с помощью этих плагинов можно отбиться от небольшой DDoS-атаки.
Защита cPanel
Сама по себе панель управления WHM/cPanel — достаточно надежный и довольно гибкий инструмент для администрирования хостингового сервера, к тому же набор стандартных функций может быть расширен сторонними плагинами разных разработчиков. Как правило, после установки cPanel я всегда устанавливаю два маст хев плагина — ConfigServer Security & Firewall (CSF) и ConfigServer eXploit Scanner (CXS).
- ConfigServer Security & Firewall — это бесплатный плагин, который повышает уровень безопасности хостингового сервера, позволяет работать с брандмауэром iptables через графический веб-интерфейс, блокировать подозрительные IP-адреса, ограничивать доступ к портам сервера и анализировать сетевую активность.
- ConfigServer eXploit Scanner — этот плагин помогает защититься от эксплоитов и прочего вредоноса, который может быть загружен на сервер через SSH, FTP или через веб-приложение. Данные плагины разрабатывает компания Way to the Web из Великобритании.
Я рекомендую сначала поставить и настроить плагин ConfigServer Security & Firewall, а потом — ConfigServer eXploit Scanner. Первый плагин быстро настраивается, и после установки он сразу же будет готов защищать сервер от всяких сетевых атак.
ConfigServer Security & Firewall (CSF)
Приступим к установке плагина ConfigServer Security & Firewall. Установка легкая и не займет много времени. Открываем консоль и от имени root выполняем следующие команды:
1 2 3 4 |
$ wget https://download.configserver.com/csf.tgz $ tar -xzf csf.tgz $ cd csf $ sh install.sh |
Скрипт все сделает сам и, что немаловажно, добавит ваш IP-адрес, с которого вы в данный момент подключены к серверу, в белый список. По умолчанию после установки плагин CSF еще не активен, перед его включением вам потребуется настроить важные параметры, а потом уже можно будет запускать. Для настройки заходим в панель WHM, а там — в раздел Home —> Plugins —> ConfigServer Security & Firewall.
В новых версиях ConfigServer Security & Firewall можно увидеть очень облегченный интерфейс, который дает возможность работать исключительно с IP-адресом. Конечно, интерфейс удобен, когда все настроено, но пока что он нам не нужен. Для перехода к обычному интерфейсу нужно нажать на кнопку Desktop View.
В обычном, классическом интерфейсе спускаемся вниз и находим раздел настроек CSF — ConfigServer Firewall. Там нас интересуют две кнопки: Firewall Configuration и Firewall Profiles.
Сначала нажимаем на кнопку Firewall Profiles и выбераем профиль работы CSF, вместе с которым будут загружены настройки. Для тех, кто незнаком с этим плагином, я очень рекомендую выбирать профиль disable_alerts, так как CSF шлет о каждом событии письмо и ваш email рискует быть переполненным.
Когда настроите CSF получше, можно будет выбирать другой профиль или обойтись без него вовсе и просто задать все нужные настройки. Ну а пока выбираем disable_alerts и нажамаем кнопку Apply Profile. Появится страница, где будет предложено перезагрузить CSF или вернуться назад. Новые параметры записаны в файл, но они еще не применены, требуется перезапуск CSF. Пока что отложим его и нажмем Return, после чего попадем на главную страницу плагина.
Теперь начнем саму настройку. Жмем на кнопку Firewall Configuration и оказываемся перед огромной панелью с большим количеством кнопок. Без паники! Ничего особенно сложного тут нет. По самому важному мы сейчас вместе пройдемся, да и почти каждый параметр имеет небольшое но понятное описание.
Первый параметр, который нас встречает, — это TESTING. Это что-то вроде предохранителя: если вы вдруг зададите такие настройки, что не сможете попасть на свой сервер, то при включенном TESTING через 5 минут все блокировки автоматически снимутся. Если вы используете выделенный IP-адрес или VPN, то вам это не надо, достаточно добавить свой IP-адрес в белый список — тогда вас не заблокирует ни при каких условиях. Если же ваш IP-адрес при каждом подключении меняется, то включение TESTING при первом знакомстве с CSF обязательно.
Теперь листайте настройки до раздела IPv4 Port Settings. Здесь необходимо будет выставить значение 20:65535 для параметров TCP_OUT и UDP_OUT. Оба они задают номера исходящих портов, с которых программам, работающим на сервере, разрешено устанавливать внешние соединения.
Что удивительно, при первом знакомстве многие не обращают внимания на эти параметры и при включении CSF оставляют их по умолчанию. В результате на сервере перестают работать почта, сайт и даже сама cPanel — просто из-за того, что не могут установить внешний коннект с браузером пользователя. При этом если у вас выделенный IP-адрес, то у вас-то все будет работать, а вот у остальных — нет.
Следующие параметры, на которые необходимо обратить внимание, — это DENY_IP_LIMIT и DENY_TEMP_IP_LIMIT. Они указывают, сколько IP-адресов может быть заблокировано вашим iptables. Если переоценить возможности своего сервера, то может получиться так, что все тормозит из-за iptables. Рекомендую начинать с небольших чисел и наблюдать, сколько IP-адресов попадает в блокировку. Прибавляйте по 128–256 адресов и наблюдайте за нагрузкой сервера. При использовании VPS рекомендую установить следующие значения:
1 2 |
DENY_IP_LIMIT = 512 DENY_TEMP_IP_LIMIT = 64 |
Если у вас выделенный сервер, то можно поставить даже побольше:
1 2 |
DENY_IP_LIMIT = 4096 DENY_TEMP_IP_LIMIT = 512 |
Как защититься от DDoS
И снова листаем и листаем. Параметров масса, но вернуться к большинству из них вы сможете в любое свободное время. Нам же нужен раздел Connection Tracking.
При правильных настройках этот раздел поможет отбиться от небольшого DDoS. Первый параметр — CT_LIMIT, в нем вы задаете ограничение на число соединений с одного IP-адреса. Если это ограничение превышено, то IP блокируется. Задавая значение этого параметра, нужно учитывать особенности работы сайта: если при открытии страниц он создает большое количество соединений с сервером (например, на странице много картинок), то значение параметра CT_LIMIT должно быть немного выше.
Если ваш сайт построен на любой современной CMS, то можно смело устанавливать значение от 128 до 300. Этого хватит для контента, но даст небольшую защиту от DDoS. Если вы увидели, что на ваш сервер идет DDoS, то можно понижать значение до 10. Обычно я понижаю с 64 и до 10 с шагом 16. При такой стратегии существенно снижается число пользователей, которые случайно столкнутся с блокировкой.
Следующий параметр — CT_INTERVAL. Он задает, с какой периодичностью CSF будет проверять число соединений сторонних IP с сервером. Стандартное значение — 30, то есть через каждые 30 секунд запускается алгоритм проверки соединений, и если при проверке находится адрес, который совершает больше коннектов, чем указано в CT_LIMIT, то такой адрес блокируется. При DDoS-атаке смело ставь CT_INTERVAL равный 10.
Параметр CT_EMAIL_ALERT лучше выставлять в ноль (Off). Читать сообщения о заблокированных адресах есть смысл только в период подбора значений параметров.
Если вы хотите, чтобы IP-адреса при блокировке попадали в постоянный бан, то выставьте значение параметра CT_PERMANENT в единицу (On). Но лучше так не делать, пусть адреса уходят в бан на время, установленное параметром CT_BLOCK_TIME (в секундах). Обычно ставят 1800 секунд, что соответствует получасу.
Может случиться так, что посетители вашего сайта находятся в одном офисе и для выхода в интернет используют один IP. Предположим, они решат зайти на ваш сайт одновременно. Число соединений с их IP начнет превышать CT_LIMIT, и будет лучше, если их адрес отправится в бан только на время. Тут стоит отметить, что подобное не будет происходить постоянно, так как нужно, чтобы совпало сразу три условия. Но не волнуйтесь: блокировка по такому сценарию больше теоретическая — в реальности маловероятно, что двое зайдут одновременно и именно в этот момент пройдет подсчет соединений по CT_INTERVAL.
Идем дальше. Лучше параметру CT_SKIP_TIME_WAIT не изменять значения 0, а CT_STATES оставить пустым. В еще одном параметре — CT_PORTS задаются номера портов подключения, у которых нужно отслеживать количество коннектов. Если этот параметр оставить пустым, то CSF будет учитывать общее число подключений одного IP к серверу.
Например, разработчик сайта может подключиться к FTP, загружать или выгружать файлы в несколько потоков, параллельно проверять сайт и еще держать открытый SSH. В такой ситуации нашего веб-дева может и забанить. Чтобы этого не случалось, и существует параметр CT_PORTS. Если вы укажите порты 80 и 443 (стандартные для веб-сервера), то CSF будет считать коннекты только на них.
Подведем итог по разделу Connection Tracking. Если сервер не подвергается активному DDoS, то ставим такие значения:
1 2 3 4 5 6 7 |
CT_LIMIT = 300 CT_INTERVAL = 30 CT_EMAIL_ALERT= 0 CT_BLOCK_TIME = 1800 CT_SKIP_TIME_WAIT = 0 CT_STATES = CT_PORTS = 80,443 |
Если сервер атакуют, то параметры следующие:
1 2 3 4 5 6 7 |
CT_LIMIT = 12 CT_INTERVAL = 10 CT_EMAIL_ALERT= 0 CT_BLOCK_TIME = 3600 CT_SKIP_TIME_WAIT = 0 CT_STATES = CT_PORTS = 80,443 |
На этом первоначальную настройку CSF можно считать завершенной, в самом конце списка настроек нажимаем на кнопку Change и затем жмем Restart csf+lfd.
После этого CSF перезагружается и начинает работать с новыми настройками.
В повседневной работе с CSF вам понадобится всего несколько кнопок. Quick Allow добавляет IP в белый список.
Search for IP позволяет найти IP в бан-листах и узнать причину бана.
Flush all Blocks очищает все бан-листы. Периодически нажимайте эту кнопку, вдруг кого-то заблокировало по ошибке.
ConfigServer eXploit Scanner
Плагин ConfigServer eXploit Scanner (CXS) в целом относится к антивирусам: его основная задача — проверять файлы, которые загружают на ваш хостинговый сервер. Этот плагин платный, сейчас его цена составляет 60 долларов на сервер. Лицензия привязывается к основному IP сервера, но при необходимости лицензию всегда можно переместить, если IP изменился или вы решили взять другой VPS.
Получается, что, оплатив этот плагин один раз, вы получаете его навсегда. К слову сказать, я покупал лицензию еще в те времена, когда мониторы были маленькими и пузатыми, а у мышек чистили шарики. Тогда я заплатил за лицензию 15 долларов и по сей день пользуюсь плагином, который продолжает обновляться.
После покупки CXS вам станет доступна небольшая инструкция по его установке. После установки вам нужно будет настроить CXS — «из коробки» он не работает. Но в этом есть и плюс — вы сразу замотивированы настроить все, как вам нужно. Управление CXS находится в том же разделе, где и CSF: Home —> Plugins —> ConfigServer eXploit Scanner.
Для настройки CXS потребуется не только веб-интерфейс: некоторые команды нужно будет отдавать через SSH. Самая первая кнопка, которая нас встречает в интерфейсе плагина, — это Documentation. Оно и не удивительно, без чтения документации настроить и запустить CXS будет сложновато. Но трудности нас не остановят!
Перейдя в раздел «Документация», в шапке вы увидите четыре кнопки, вам нужна будет install.txt. Жмите на нее и выполняйте инструкции, которые там описаны, это позволит вам запустить CXS в базовом режиме, и он уже сможет проверять файлы, загруженные через FTP и ваш сайт.
После базовой настройки снова заходим в документацию. Теперь нам потребуется два раздела: REQUIREMENTS и RECOMMENDATIONS.
В разделе «REQUIREMENTS» приводится список модулей Perl, которые должны быть установлены на вашем сервере. Если какого-то модуля не окажется в системе, то набор функций CXS будет неполным. По опыту могу сказать, что с некоторыми модулями бывают сложности во время установки, но их почти всегда легко решить. Со стороны разработчиков, конечно, некрасиво прятать информацию о зависимостях так, что до покупки ее не найти, но что поделать. Чтобы с такими трудностями не столкнулись вы, приведу здесь полный список.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Archive::Tar Archive::Zip Compress::Zlib DBI DBD::SQLite Digest::MD5 File::Basename File::Copy File::Find File::stat Getopt::Long IO::Socket::UNIX IPC::Open3 Linux::Inotify2 LWP::Protocol::https LWP::UserAgent MIME::Base64 Net::FTP Net::SMTP Storable Time::HiRes Linux::Inotify2 |
Когда разберемся с установкой модулей, перейдем к разделу RECOMMENDATIONS. Тут желательно выполнить все рекомендации, особенно важно создать папку для карантина: она будет сильно выручать в тех случаях, когда нужный файл вдруг окажется удален по ошибке.
1 |
cxs --qcreate --quarantine /home/quarantine |
Пару слов о том, как работает данный CXS. В ранних версиях он отслеживал загрузку новых файлов через FTP и веб-скрипты, то есть перехватывал файлы, проверял их и передавал дальше, если они были чисты от вирусов и эксплоитов. Для отслеживания загрузки через веб плагин использует ModSecurity версии 2 и выше. Конечно, такой метод проверки подходит только для Apache и не годится для других веб-серверов, таких как LiteSpeed и nginx. Поэтому ранние выпуски CXS могли использоваться не везде.
Было ясно, что такое положение дел не даст должного развития плагину CXS, поэтому с версии 2.00 добавился новый метод отслеживания файлов, в документации он называется CXS Watch Daemon. Плагин CXS в таком случае работает постоянно и отслеживает изменения файлов в домашних директориях пользователей сервера. Новый подход позволил избавиться от зависимости ModSecurity, и теперь CXS может работать на любых веб-серверах. В общем, можете смело включать CXS Watch Daemon.
Когда вы установите и CSF, и CXS, можно будет активировать функцию «репутация IP-адресов». Благодаря ей CSF получает от CXS список адресов, которые имеют плохую репутацию. CSF их блокирует до того, как те начнут пытаться заливать эксплоиты, подбирать пароли и делать прочие пакости. Причем ConfigServer собирает статистику с серверов, на которых были попытки атаки, и таким образом списки репутации всегда актуальны и обновляются каждые десять минут.
На первый взгляд настройка этих плагинов может показаться нетривиальной: в свое время я встречал обсуждение CSF, где утверждалось, что он только мешает и не дает нормально работать сайту. Человек жаловался на постоянные блокировки обычных пользователей и говорил, что сайт теряет посетителей. Конечно, мне понятны эти утверждения: если настроить в обоих плагинах защиту по максимуму, то на сервер можно будет уже и не попасть. Но если знать меру и хорошенько изучить настройки, то CSF и CXS станут вашими верными помощниками и будут отлично выполнять свою работу.
Бонус: отсекаем вампирный трафик
Как и обещал, рассказываю про скрипт, с помощью которого можно блокировать IP-адреса, «вампирящие» ваш сайт, истощая его ресурсы ненужными запросами и отнимая трафик. Вы наверное знаете, что есть «вампирный» тип DDoS-атак, который заставляет владельцев сайтов докупать трафик у хостинг-провайдера или брать тариф выше, так как оказывается, что сайт потребляет больше ресурсов.
Итак, наш полезный скрипт называется barf (Block Apache Request Floods). Он запускается в консоли, анализирует логи Apache и блокирует ненужные IP. Стандартный запуск выглядит так:
1 2 |
$ ./barf domain.com -n 3 -t 10 -s "GET / HTTP/1.1" $ ./barf domain.com -n 3 -t 10 -s "GET /index.php" |
Здесь domain.com — это имя сайта, для которого делается проверка, n — количество запросов к веб-серверу за время t, а s указывает, какой запрос делался.
Скрипт barf анализирует логи доступа к сайту domain.com, смотрит, было ли сделано за десять секунд три запроса GET / HTTP/1.1, и если да, то такой IP попадает в черный список. Согласитесь, нормальный человек не будет обновлять главную страницу сайта три раза или больше в течение десяти секунд.
Алгоритм ваших действий будет следующим. Сначала смотрите логи доступа к своему сайту, видите что постоянно повторяется один и тот же запрос с одного адреса либо с нескольких похожих. Это значит, что пришло время для barf.
Лог запроса может выглядеть вот так:
1 |
[22/Oct/2015:17:20:51 +0400] "GET /gallery/slideshow/category-1/ HTTP/1.1" 200 3241 "-" |
Вам нужно взять для параметра s только вот это:
1 |
"GET /gallery/slideshow/category-1/ HTTP/1.1" |
Затем переходите в директорию, где лежит скрипт barf, и запускаете его с нужными вам параметрами.
Очень часто атакующие используют стандартные запросы к сайтам: GET / HTTP/1.1, GET / HTTP/1.0, GET /index.php, GET /index.html.
А чтобы сделать использование barf удобнее, можно использовать CSF для блокировки IP-адресов.
Скрипт был написан Джоном Фелоси и свободно распространяется. Исходник вы можете скачать на GitHub, а подробности найдете в посте на форуме.
На этом все. Надеюсь статья была полезна, вы научились пользоваться плагинами CSF и CXS и теперь можете улучшить защиту Cpanel.