В прошлый раз мы рассказывали о том, как выбрать серверы и как установить их в офисе своими руками.
Теперь пришло время позаботиться о следующем шаге — наладить ИТ-инфрастуктру, чтобы работать с приложениями, веб-сервисами и базами данных. Это непростая задача, но без должной защиты вся инфраструктура окажется под угрозой.
В этот раз поговорим об основных мерах защиты, которые стоит предпринять перед тем, как вы начнете пользоваться вашими серверами.
SSH-ключи
В основе технологии — пара криптографических ключей, которые используют для проверки подлинности в качестве альтернативы аутентификации с помощью пароля. Система входа использует закрытый и открытый ключи, которые создают до аутентификации. Закрытый ключ хранится в тайне надежным пользователем, в то время как открытый ключ может раздаваться с любого сервера SHH, к которому нужно подключиться.
Чтобы настроить аутентификацию через SSH-ключи, вы должны поместить открытый ключ пользователя в специальной директории на сервере. Когда пользователь подключается к серверу, SSH увидит запрос соединения. Далее он использует открытый ключ, чтобы создать и отправить вызов. Вызов — зашифрованное сообщение, на которое нужен соответствующий ответ, чтобы получить доступ к серверу. Корректно ответить на сообщение сможет только держатель закрытого ключа. То есть только он может принять вызов и создать соответствующий ответ. Открытый же ключ используется для зашифровки сообщения, но это же самое сообщение расшифровать не может.
Вызов и ответ проходят незаметно для пользователя. Пока у вас есть закрытый ключ, который обычно хранится в зашифрованном виде в ~/.ssh/, ваш клиент SSH сможет отправить правильный ответ серверу.
Как SSH-ключ повышает безопасность?
С помощью SSH любой вид аутентификации полностью зашифрован. Однако, если разрешена аутентификация на основе пароля, злоумышленники могут добраться до данных сервера. С помощью современных вычислительных мощностей можно получить доступ к серверу за счёт автоматизации попыток взлома, вводя комбинацию за комбинацией, пока правильный пароль не будет найдет.
Установив аутентификацию по SSH-ключам, вы сможете позабыть о паролях. Ключи имеют гораздо больше битов данных, чем пароли, что означает значительно большее число комбинаций, которые должны подобрать взломщики. Многие алгоритмы SSH-ключей считаются невзламываемыми современной вычислительной техникой просто потому, что они требуют слишком много времени для подбора совпадений.
Насколько сложно реализовать SSH?
SSH-ключи довольно легко настроить. Часто их применяют как способ удаленного входа в серверные среды Linux и Unix. Пара ключей генерируется на вашем компьютере, затем вы можете передать открытый ключ на серверы в течение нескольких минут.
Вот основные шаги по настройке ключей:
1. Чтобы сгенерировать пару ключей на вашем компьютере, нужно ввести команду:
ssh-keygen -t rsa
2. Как только вы ввели команду генерации ключей, вам предстоит ответить на пару вопросов, например, где сохранить файл и какую ключевую фразу выбрать. В целом результат будет выглядеть так:
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
| .oo. |
| . o.E |
| + . o |
| . = = . |
| = S = . |
| o + = + |
| . o + o . |
| . o |
| |
+----------------------------+
3. Как только у вас будут ключи, разместите открытый ключ на виртуальный сервер, который собираетесь использовать. Получится что-то похожее на это:
The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
user@12.34.56.78's password:
Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in:
~/.ssh/authorized_keys
Если чувствуете, что вам всё ещё нужен пароль аутентификации на ваших серверах, присмотритесь к решениям типа Fail2ban, которые ограничивают число попыток ввода пароля.
Фаерволы
Брандмауэр — часть программного или программно-аппаратного обеспечения, которая фильтрует сетевой трафик и контролирует доступ к сети. Это означает блокирование или ограничение доступа к каждому открытому порту, кроме исключений.
На типичном сервере ряд компонентов фаервола запущен по умолчанию. Их можно разделить на группы:
— Открытые службы, к которым может подключиться каждый в интернете, часто анонимно. Хороший пример — веб-сервер, который разрешает доступ к вашему сайту.
— Закрытые службы, которые доступны только из определенных мест или авторизованным пользователям. Пример — панель управления сайтом или базой данных.
— Внутренние службы, доступные внутри самого сервера, без доступа к внешним источникам. Например, база данных, которая принимает только локальные соединения.
Применение брандмауэра гарантирует, что доступ к программному обеспечению и данным будет ограничен в соответствии с вышеуказанными категориями. Закрытые службы могут настраиваться по множеству параметров, что дает гибкость в построении защиты. Для не использующихся портов можно настроить блокировку в большинстве конфигураций.
Как фаервол повышает безопасность?
Брандмауэры — неотъемлемая часть любой конфигурации сервера. Даже если ваше программное обеспечение имеет внутренний защитный функционал, фаервол обеспечит дополнительный уровень защиты.
Тщательно настроенный брандмауэр будет блокировать доступ ко всему, для чего вы сами не назначите исключение. Уязвимые для атаки компоненты, прикрытые фаерволом, уменьшат поверхность атаки на сервер.
Насколько сложно реализовать фаервол?
Есть много брандмауэров, доступных на LAMP-серверах. В целом установка фаервола займет всего несколько минут и нужна в двух случаях: при первоначальной настройке сервера и при изменении конкретных служб уже работающего сервера.
В этой статье мы не будем рекомендовать конкретные фаерволы, это тема отдельного разговора.
VPN и Private networking
VPN (виртуальная частная сеть) — способ создать защищенное соединение между удаленными компьютерами и текущим соединением. Дает возможность настроить свою работу с сервером таким образом, словно вы используете защищенную локальную сеть.
Как VPN повышает безопасность?
Если выбирать между частной и общей сетью, первый вариант всегда предпочтительнее. При этом стоит помнить, что пользователи дата-центра связаны одной сетью, вы должны максимально избавить себя от рисков, приняв дополнительные меры для безопасной связи между серверами.
Использование VPN, по сути, способ создать частную сеть, которую могут видеть только ваши серверы. Связь будет полностью приватной и безопасной. Кроме этого, VPN можно настроить для отдельных приложений и служб, чтобы их трафик проходил через виртуальный интерфейс. Таким образом, можно обезопасить процессы внутри компании, открыв общественный доступ только для клиентской стороны, а внутреннею часть работы сервера скрыть VPN.
Насколько сложно реализовать VPN?
Частные сети дата-центров, как услуга — это просто. Сложность ограничена только параметрами вашего сервера, его интерфейсом, фаерволом и приложениями, с которыми вы работаете. Имейте в виду, что в дата-центрах используются большие частные сети, которые объединяют множество серверов, не только ваших.
Что касается VPN, начальная установка немного сложнее, но повышенная безопасность стоит затраченных средств в большинстве случаев. Каждый сервер на VPN необходимо установить и настроить, используя общие данные и конфигурации безопасности, необходимые для защищенного соединения. После того, как вы запустите VPN, нужно настроить программное обеспечение на использование VPN-туннеля.
PKI и SSL/TLS шифрование
Инфраструктура открытых ключей (PKI) — совокупность систем, которые предназначены для создания, управления и проверки сертификатов для идентификации лиц и шифрования передаваемых данных. После аутентификации, они также могут быть использованы для шифрованной связи.
Как SSL повышает безопасность?
Создание центра сертификации и управления сертификатами для серверов позволяет каждому в пределах серверной инфраструктуры шифровать свой трафик и использовать проверки идентичности других пользователей. PKI поможет предотвратить атаки посредника (man-in-the-middle), когда злоумышленник имитирует поведение сервера в вашей инфраструктуре, чтобы перехватить трафик или подменить сообщение.
Каждый сервер можно настроить таким образом, чтобы все участники проходили аутентификацию через удостоверяющий центр, который создает пару ключей: открытый и закрытый. УЦ может раздавать открытые ключи всем участникам, у которых низкий уровень доверия друг к другу, но высокий к УЦ. Только последний может подтвердить принадлежность открытого ключа к его владельцу.
Если вы используете приложения и протоколы, которые поддерживают TLS/SSL шифрование, то это способ снизить расходы на VPN (в которых часто используют SSL).
Насколько сложно реализовать SSL?
Настройка центра сертификации и остальной части инфраструктуры может потребовать от вас много первоначальных усилий. Кроме того, управление сертификатами — дополнительная нагрузка на администрирование: новые сертификаты надо создавать, подписывать и аннулировать при необходимости.
Для многих пользователей внедрение полноценной инфраструктуры открытых ключей имеет больше смысла только при значительном росте инфраструктуры. Связь через VPN может быть хорошей мерой защиты серверов, пока компания не достигнет точки, где без PKI и дополнительных вложений в администрирование не обойтись.
Услуги аудита
До сих пор мы говорили о технологиях, повышающих защиту серверов. Однако, большая часть безопасности лежит на анализе вашей системы. Понимание доступных поверхностей атак и того, какие компоненты системы нужно блокировать, дадут вам лучший результат защиты.
Аудит — процесс, который показывает, какие службы работают в вашей серверной инфраструктуре. Часто операционная система по умолчанию настроена на загрузку и запуск определенных компонентов при включении.
Аудит поможет вам проанализировать какие порты использует система, какие принимаются протоколы. Эта информация может помочь настроить ваш брандмауэр.
Как аудит повышает безопасность?
Серверы запускают много процессов для внутренних целей и для обработки внешних данных. Каждый процесс — потенциальная угроза атаки на сервер.
После того, как вы получите представление о том, как именно работает ваша инфраструктура, приступайте к анализу. Для каждого процесса есть несколько проверочных вопросов:
— Должен ли сервис запускаться без разрешения?
— Запущен ли сервис в интерфейсе, в котором нет необходимости? Должен ли он быть привязан к одному IP?
— Правильно ли структурирована работа файрвола, если пропускает трафик этого процесса?
— Не пропускает ли ваш файрвол нежелательный трафик, исходящий от конкретного процесса?
— Есть ли у вас способ получать уведомления безопасности в случае уязвимости для каждой из служб?
Аудит такого типа — обязательная практика настройки любого нового сервера.
Насколько сложно реализовать аудит?
Базовый аудит очень прост. Вы можете узнать какая служба прослушивается на каждом интерфейсе используя команду netstat. Простой пример, который показывает имя программы, идентификатор процесса (PID), адреса для прослушивания TCP и UDP трафика:
sudo netstat -plunt
Вы уведите примерно следующий результат:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 887/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 919/nginx
tcp6 0 0 :::22 :::* LISTEN 887/sshd
tcp6 0 0 :::80 :::* LISTEN 919/nginx
Обратите внимание на столбцы Proto, Local Address и PID/Program name. Если там значится 0.0.0.0, тогда служба принимает соединения на всех интерфейсах.
Аудит файлов и система обнаружения вторжений
Аудит файлов — процесс сравнения состояния текущей системы с записями файлов и характеристиками вашей системы, когда она находится в исправном состоянии. Метод применяется для обнаружения изменений при которых нужна авторизация.
Система обнаружения вторжений (IDS) — часть программного обеспечения, которая контролирует систему или сеть на несанкционированные действия. Многие хостинговые IDS используют аудит файлов как метод проверки на изменения в системе.
Как аудит файлов повышает безопасность?
Подобно аудиту обслуживания серверов из примера выше, это очень полезный метод повышения защиты. Периодически проводить аудит файлов может сетевой администратор или это можно делать автоматически с помощью IDS.
Аудит файлов — один из немногих способов увериться в том, что ваша файловую систему не изменена кем-либо из пользователей или процессом. По многим причинам, взломщики часто хотят остаться незамеченными, чтобы использовать сервер в течение долгого времени. Они могут заменить файлы во взломанной версии. Ведение файлового аудита подскажет вам, какие файлы были изменены, это позволит быть уверенным в целостности вашей серверной среды.
Насколько сложно реализовать аудит файлов?
Внедрение IDS или проверка файлов может оказаться сложным процессом. Начальная настройка включает описание всех нестандартных изменений, которые вы сделали на сервере и всех путей, которые нужно исключить.
Проведение аудита делает повседневное управление серверами более трудоемким. Это усложняет процедуры обновления, так как вам нужно будет повторно проверять систему до запуска обновлений и после их установки, чтобы поймать изменения в версии программного обеспечения. Кроме этого, вам придется загружать отчеты в хорошо защищенное место, чтобы документы аудита не смог изменить злоумышленник.
С одной стороны аудит — это нагрузка на администрирование, с другой — это надежный способ защитить ваши данные от изменений.
Изолированная среда выполнения
Способ запуска компонентов системы в их собственном выделенном пространстве.
С помощью песочницы можно отделить ваши дискретные компоненты приложений на отдельные серверы. Уровень изоляции в значительной степени зависит от системных требований приложений и их места в вашей инфраструктуре.
Как изолированная среда выполнения повышает безопасность?
Разделяя ваши процессы в отдельные среды выполнения, вы повышаете способность быстро изолировать любые возможные угрозы. Подобно отсекам в кораблях, которые сдерживают бреши в корпусе и не дают судну утонуть, разделенные компоненты серверной инфраструктуры помогут отрезать взломщику доступ к другим частям системы.
Насколько сложно реализовать изолированную среду?
В зависимости от вида оболочки, которую вы выберите, изоляция может оказаться простой процедурой. Упаковывая ваши компоненты в контейнеры, вы сможете быстро достичь хороших показателей изоляции.
Настройка среды chroot для каждой части дает определенный уровень изоляции, но не полный. Лучший вариант — перемещение компонентов на выделенные машины, это значительно проще, но более затратно.
В заключении
Технологии и меры, описанные выше — лишь некоторые усовершенствования, которые вы можете сделать, чтобы обезопасить ваши серверы. Важно отметить, что внедрение подобных способов защиты очень важно и чем раньше тем лучше, потому что чем дольше вы ждете, тем менее эффективны средства безопасности.
В данной статье мы рассматриваем вопрос защиты сервера с теоретической точки зрения. Будем рады дополнениям от практиков. Давайте составим полезный мануал вместе!
Расскажите, какие меры защиты используете вы в своей практике и почему считаете их эффективными?
Комментарии (11)
Temmokan
08.11.2016 07:05+1Как-то малоинформативно. При упоминании IDS я уже ожидал хотя бы беглого упоминания всех этих rkhunter, aide, snort и им подобных. И так далее, по пунктам.
Valeriy_Squadra
08.11.2016 11:26-3Возможно в дальнейшем и рассмотрим что-то более подробно. Это был «беглый» взгляд, без особого углубления в детали.
k2m30
08.11.2016 17:48+6Здесь же Хабр, а не детский сад. «беглый взгляд, без особого углубления в детали» это в журнал «Юный сисадмин поволжья»
Valeriy_Squadra
09.11.2016 13:04-1Согласен с вами, у нас есть определённые зоны роста в администрировании. Также отмечу, что мы учимся, стараемся вникнуть в суть каждой темы и сделать эти знания доступными широкому кругу лиц. Ведь среди нас не только матёрые профессионалы своего дела, но и начинающие молодые специалисты. Давайте поможем им вместе. Какие меры по защите сети применяются у вас?
bravo-ej
08.11.2016 17:56+1Беда в том, что не получится рассмотреть все аспекты этой темы в таком ключе. Требуется создавать модели, в которой будут описаны все уровни и их слои, где может произойти нечто. Тем самым вы не говорите что-то типа «вот мы подготовили для вас 7 пунктов безопасности на этой неделе», а дали бы пользователю план, по которому ему надо подготовиться к выполнению задачи аудита безопасности. Но даже в таком случае остаётся вопрос — насколько глубоко нужно уточнять модель, или до какой степени её упростить, что бы не потерять более или менее предметного указания, но и не говорить о проблемах настолько широко, что не опытный читатель не сможет подробить эту абстракцию на составляющие сам.
merlin-vrn
09.11.2016 08:38О, напишите лучше статью про безопасность вы! (Я совершеённо серьёзно и без негативных подтекстов.)
bravo-ej
09.11.2016 11:43Дело в том, что даже если бы я был уверен в своих силах хоть кого нибудь по этой теме проконсультировать, то это был бы абсолютный слив моих знаний в этой области. А я параноик и всё такое...)
Ну что бы никто не строил догадок — я на самом деле действительно мало кому (ну по крайней мере я надеюсь) смогу помочь своими знаниями по безопасности на тему сетей ПД. Просто конкретно я этим не занимаюсь и это делают другие инженеры в нашей компании.
Может быть я мог бы на тему безопасности телефонных узлов коммутации что то написать, но это слишком — но во-первых это слишком специфично для здешней аудитории, а во-вторых — здесь придётся много думать, что бы не слить собственную топологию :D
ildarz
Как вы ловко от физической установки железа сразу к SSH и прочему перескочили. :D Защита инфрастуктуры без самой инфраструктуры…
merlin-vrn
Ага, и без модели угроз. По принципу: другим, говорят, вот это помогает, давайте сделаем, чтобы выглядело так же — авось и нам тоже поможет. От чего, почему? Не слышал.
Valeriy_Squadra
Что вы имеете ввиду под выражением «защита инфраструктуры без самой инфраструктуры», отсутствие практических примеров защиты сервера, сетевой архитектуры или что-то ещё?
ildarz
Я имею в виду вот это — «В прошлый раз мы рассказывали о том, как выбрать серверы и как установить их в офисе своими руками.» Предыдущая ваша статья закончилась на том, что сервер распаковали, поставили в стойку и воткнули в него какие-то провода. В связи с чем возникает вопрос, а к чему и зачем вы подключаетесь по SSH, и т.д., и т.п… И вот как раз без рассмотрения этого «что и зачем» вопрос «как защищать» практически бессмысленен.