Создавая инфраструктуру для обслуживания приложения, нужно обязательно учитывать вопросы безопасности.
В этой статье вы найдете советы и рекомендации по защите серверов.
1: SSH-ключи
Пара криптографических SSH-ключей обеспечивает беспарольную аутентификацию. Открытый и закрытый ключ нужно создать заранее. Закрытый ключ следует хранить в тайне, а открытый можно разглашать.
Чтобы настроить аутентификацию на основе SSH-ключей, поместите открытый ключ пользователя на сервер в специальном каталоге. Когда пользователь подключается к серверу, сервер запрашивает закрытый ключ, связанный с имеющимся открытым ключом. Клиент SSH должен предоставить закрытый ключ, чтобы пройти аутентификацию. Если предоставленный закрытый ключ прошел проверку, клиент сможет подключиться без пароля.
Читайте также: Как настроить SSH-ключи
Влияние SSH-ключей на безопасность
SSH-ключи шифруют любую аутентификацию, в том числе и парольную. Однако если сервер поддерживает парольную аутентификацию, злоумышленники могут попытаться подобрать пароль и получить доступ к серверу. Благодаря современным вычислительным технологиям можно автоматизировать подбор паролей.
Аутентификация на основе SSH-ключей позволяет отказаться от парольной аутентификации. Ключи SSH обычно содержат гораздо больше битов данных, чем пароли, а это значит, существует значительно большее количество возможных комбинаций, которые должен подобрать злоумышленник. Считается, что многие алгоритмы SSH-ключей невозможно взломать просто потому, что на поиск возможных комбинаций потребуется слишком много времени.
Реализация SSH-ключей
SSH-ключи очень просты в реализации. Кроме того, этот метод аутентификации является рекомендуемым для удаленного доступа к серверам Linux и Unix. Вы можете сгенерировать пару ключей SSH на своей локальной машине, а затем переместить открытый ключ на сервер.
Больше информации об SSH-ключах можно найти здесь:
- Как настроить SSH-ключи
- Создание центра сертификации SSH для аутентификации хостов и клиентов на сервере Ubuntu
- Настройка многофакторной аутентификации SSH на Ubuntu 16.04
2: Брандмауэр
Брандмауэр – это программное (иногда аппаратное) обеспечение, которое управляет доступом к сети и фильтрует трафик сервера. Брандмауэр блокирует или ограничивает доступ ко всем портам, кроме некоторых исключений.
На любом среднестатистическом сервере есть сервисы, которые запускаются по умолчанию. Их можно разделить на три группы:
- Открытые сервисы, к которым могут обращаться любые пользователи интернета, включая анонимных. Хорошим примером открытого сервиса является веб-сервер, который обеспечивает доступ к сайту.
- Закрытые сервисы, доступ к которым есть только из определенных мест и у отдельных групп авторизованных пользователей (например, таким сервисом является панель управления базой данных).
- Внутренние сервисы, которые должны быть доступны только с самого сервера, без доступа к сети. Таким сервисом является база данных, которая принимает только локальные соединения.
Брандмауэры ограничивают доступ в соответствии с приведенными выше категориями. Открытые сервисы могут оставаться доступными для всех, а закрытые могут быть заблокированы на основе разных критериев. Доступ к портам, которые не используются ни одним приложением, в большинстве случаев блокируется полностью.
Влияние брандмауэров на безопасность
Брандмауэр – неотъемлемая часть настройки любого сервера. Даже если используемые сервисы предоставляют встроенные функции безопасности, брандмауэр послужит дополнительным уровнем защиты.
Разумно настроенный брандмауэр ограничит доступ ко всем сервисам, кроме тех, которые вы добавите в исключения. Такой подход позволяет снизить чувствительность сервера к атакам и устранить общие уязвимости.
Реализация брандмауэра
Для систем Linux разработано много брандмауэров. Чаще всего настройка брандмауэра занимает всего несколько минут; это необходимо сделать во время начальной настройки сервера или при добавлении новых сервисов.
Читайте также:
- Основы UFW: общие правила и команды фаервола
- Как работает фаервол IPTables
- Настройка брандмауэра FirewallD в CentOS 7
3: VPN, или виртуальные частные сети
Частные сети – это сети, доступные только определенным серверам или пользователям.
VPN, или виртуальная частная сеть, обеспечивает поддержку защищенных соединений между удаленными компьютерами, как если бы они находились в локальной сети.
Влияние VPN на безопасность
Между частной и общей сетью всегда рекомендуется выбирать первую. Но имейте в виду: поскольку другие пользователи в центре обработки данных имеют доступ к одной и той же сети, необходимо принять дополнительные меры для обеспечения безопасной связи между серверами.
VPN – это, по сути, способ построить частную сеть, которую могут видеть только ваши серверы. Взаимодействие серверов будет полностью конфиденциальным и безопасным. Другие приложения можно настроить для передачи трафика через виртуальный интерфейс VPN. Таким образом, клиенты смогут получить доступ только к тем сервисам, которые настроены для поддержки соединений из интернета.
Реализация VPN
Реализовать частную сеть в ЦОД с поддержкой таких сетей довольно просто.
Имейте в виду, что частные сети в рамках одного центра обработки данных совместно используют пространство с другими серверами.
Начальная настройка VPN немного сложна, но результат стоит того. Все серверы в VPN должны использовать общие конфигурации и данные безопасности, необходимые для установления безопасного подключения. После запуска VPN приложения нужно настроить для использования туннеля VPN.
Читайте также: Установка и настройка сервера OpenVPN на CentOS 6
4: Шифрование SSL/TLS
Инфраструктура открытых ключей – это система, которая предназначена для создания, управления и проверки сертификатов для идентификации пользователей и шифрования связи. Сертификаты SSL или TLS можно использовать для аутентификации разных объектов. После аутентификации сертификаты также могут обеспечить шифрование связи.
Влияние SSL/TLS на безопасность
Создание центра сертификации и управление сертификатами серверов позволяет каждому объекту инфраструктуры проверять идентичность пользователей и шифровать их трафик. Это может предотвратить атаки man-in-the-middle, во время которых злоумышленник имитирует сервер в инфраструктуре для перехвата трафика.
Все серверы инфраструктуры могут доверять тому или иному центру сертификации.
Реализация TLS/SSL
Настройка центра сертификации и инфраструктуры открытых ключей может включать в себя довольно много различных этапов. Управление сертификатами требует отдельного внимания: сертификаты необходимо своевременно создавать, подписывать и отзывать.
В большинстве случаев полноценную инфраструктуру открытых ключей лучше внедрять по мере роста приложения. Возможно, на более ранних этапах производства достаточно ограничиться VPN.
5: Аудит сервисов
Ранее мы рассмотрели несколько технологий для повышения безопасности. Однако безопасность во многом зависит от анализа системы, понимания её уязвимостей и своевременного устранения ошибок.
Аудит сервисов – это процесс, который позволяет выявить сервисы, запущенные на серверах инфраструктуры. Часто операционная система запускает некоторые сервисы по умолчанию. Дополнительное программное обеспечение может иметь ряд зависимостей, которые также запускаются автоматически.
Аудит сервисов позволяет узнать, какие сервисы работают в системе, какие порты и протоколы они используют. Эта информация может помочь настроить брандмауэр.
Влияние на безопасность
Серверы запускают много сервисов для внутренних целей и обработки внешних клиентов. Каждый такой сервис может подвергнуться атаке злоумышленника. Чем больше сервисов используется, тем больше уязвимостей присутствует на сервере.
Ознакомившись с сервисами, вы можете проанализировать их. Для этого подойдет такой список вопросов:
- Должен ли быть запущен этот сервис?
- Работает ли он на интерфейсах, которые ему не нужны?
- Привязан ли он к одному 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 значит, что сервис принимает соединения на всех интерфейсах.
6: Аудит файлов и системы обнаружения вторжений
Аудит файлов – это процесс сравнения текущей системы с записями и характеристиками файлов системы в исправном состоянии. Аудит позволяет обнаружить изменения в системе, для которых требуется авторизация.
Система обнаружения вторжений (или IDS) – это программное обеспечение, которое отслеживает несанкционированные операции в системе или сети. Во многих реализациях систем обнаружения вторжений на основе хоста аудит файлов используется для обнаружения изменений в системе.
Влияние IDS и аудита файлов на безопасность
Как и предыдущий метод, аудит файлов может значительно повысить защиту сервера. Аудит нужно проводить регулярно. Это может делать системный администратор или автоматизированная система обнаружения вторжений.
Это позволяет вам убедиться в том, что файловая система не была изменена одним из процессов или пользователей.
Злоумышленники часто скрывают свое пребывание в системе, чтобы иметь возможность использовать сервер в течение длительного периода времени. Также они могут заменить бинарные файлы их поврежденными версиями. Своевременный аудит файловой системы обнаруживает все изменения в файлах, что позволяет убедиться в целостности серверной среды.
Реализация аудита файлов и IDS
Реализация IDS или проведение аудита файлов – процесс весьма трудоемкий. Первоначальная конфигурация подразумевает определение любых нестандартных изменений на сервере и путей, которые следует исключить.
Кроме того, это повлияет на рутинную работу сервера. Реализация этого метода усложнит процесс обновления: каждое изменение нужно подтвердить, а после обновления настроить систему обнаружения вторжений согласно новым условиям.
Также нужно загрузить отчеты в другое место, чтобы злоумышленник не мог изменить аудит и скрыть свои действия.
Этот метод может значительно увеличить нагрузку на системное администрирование, однако он может гарантировать, что файлы не были изменены без вашего ведома.
Читайте также:
7: Изолированная среда
Изолированная среда выполнения позволяет запускать компоненты в индивидуальных выделенных пространствах.
Этот метод позволяет распределить компоненты приложения между индивидуальными серверами или настроить сервисы в среде chroot или контейнерах.
Уровень изоляции зависит от требований приложения и возможностей инфраструктуры.
Влияние изолированной среды выполнения на безопасность
Изолируя процессы в отдельных средах, вы также изолируете и их потенциальные ошибки и угрозы безопасности. Разделение компонентов приложения может ограничить доступ злоумышленника к остальной системе.
Реализация изолированной среды выполнения
Создание собственной изолированной среды достаточно просто (во многом это зависит от выбранного типа изоляции). Распределив компоненты приложения по контейнерам, вы можете быстро достичь необходимого уровня изоляции. Но помните: контейнеризация Docker в первую очередь используется не как средство повышения безопасности.
Настройка среды chroot для каждого компонента также может обеспечить некоторый уровень изоляции; к сожалению, это также не является самым надежным методом изоляции, поскольку среду chroot можно обойти. Перемещение компонентов на отдельные машины – лучший метод изоляции, и во многих случаях он может оказаться самым простым, хотя стоит гораздо дороже.
Заключение
Описанные в статье стратегии – это лишь некоторые из базовых улучшений, которые вы можете внедрить для повышения безопасности своего сервера.
Следует отметить, что чем раньше вы реализуете то или иное средство безопасности, тем продуктивнее оно будет. Обеспечение безопасности сервера нельзя откладывать на потом.