При настройке сетевой инфраструктуры чаще всего основной задачей является установка и настройка приложений. Однако настройка приложений без обеспечения корректных мер безопасности может иметь разрушительные последствия для вашей инфраструктуры в долгосрочной перспективе.
В этой статье мы поговорим о некоторых базовых мерах безопасности, которые лучше всего применять до или во время настройки ваших приложений.
SSH ключи представляют собой пару криптографических ключей, используемых для аутентификации на SSH-сервере вместо входа на сервер с помощью логина и пароля. Секретный и публичный ключи создаются заранее. Секретный ключ держится пользователем в секрете, публичный ключ может быть передан кому угодно.
Для настройки аутентификации по SSH ключу вам необходимо поместить публичный ключ пользователя в специальную директорию сервера. Когда пользователь будет заходить на сервер, сервер будет запрашивать подтверждение того, что у клиента есть парный секретный ключ. SSH-клиент будет предоставлять секретный ключ серверу особым образом, однозначно подтверждающим владение секретным ключом. После этого сервер будет позволять пользователю осуществлять соединение без пароля. Для того, чтобы узнать больше о работе SSH ключей, рекомендуем обратиться к этой нашей статье.
С использованием SSH любой вид аутентификации, включая аутентификацию по паролю, является полностью зашифрованным. Тем не менее, в случае, когда вход на сервер с использованием пароля разрешён, злоумышленники могут попытаться подобрать пароль для входа на сервер перебором. С использованием современных средств автоматизации вполне возможно подобрать пароль к серверу простым перебором возможных вариантов пароля, до тех пор, пока не будет найден верный пароль.
Установка аутентификации по SSH позволяет вам отключить аутентификацию по паролю. SSH ключи обычно имеют большую длину, чем пароли, что делает их значительно более устойчивыми к перебору различных комбинаций. Многие алгоритмы генерации SSH ключей считаются невзламываемыми с помощью современных компьютеров, поскольку для перебора потребуется слишком много времени.
SSH ключи легко настраиваются и являются рекомендуемым способом входа на любой удалённый Linux или Unix сервер. Вы можете сгенерировать пару SSH ключей на вашей машине и в считанные минуты перенести публичный ключ на ваш сервер.
Для того, чтобы узнать, как создавать SSH ключи, ознакомьтесь с этой статьёй. Если вам по-прежнему необходимо иметь возможность входить на сервер по паролю, рекомендуем использовать на вашем сервере, например, fail2ban для ограничения количества попыток подбора пароля.
Файрвол представляет собой программное (или аппаратное) средство для контроля того, какие сервисы имеют доступ в сеть. Это означает блокирование или ограничение доступа на всех портах, за исключением тех, которые должны быть публично доступны.
На обычном сервере по умолчанию может быть запущено несколько сервисов. Они могут быть разделены на следующие категории:
Файрволы могут гарантировать, что доступ к вашему программному обеспечению ограничен согласно одной из категорий, описанных ваше. Публичные сервисы могут быть оставлены доступными для доступа любым пользователям, а частные сервисы могут иметь ограничения доступа, согласно заданным критериям. Внутренние сервисы могут быть полностью изолированы от внешнего мира. Доступ к неиспользуемым портам может быть полностью заблокирован.
Файрволы являются ключевой частью любой серверной конфигурации. Даже если ваши сервисы предоставляют возможности по настройке средств безопасности, файрвол является дополнительным слоем, повышающим безопасность в целом.
Правильно настроенный файрвол будет ограничивать доступ ко всему, за исключением именно тех сервисов, которые должны быть доступны извне. Ограничение количества доступных извне сервисов значительно снижает вероятность взлома.
Существует множество файрволов, доступных для Linux, некоторые из них проще в изучении, некоторые - сложнее. В общем случае настройка файрвола занимается всего несколько минут и обычно выполняется при начальной настройке вашего сервера, а также при добавлении и удалении сервисов.
Самый простой выбор - файрвол UFW. Вы также можете использовать iptables или файрвол CSF.
Частные сети - это сети, доступные только для определённых серверов или пользователей. Например, в DigitalOcean частные сети доступны в некоторых регионах в масштабах дата-центра.
VPN, или виртуальная частная сеть, представляет собой способ создания безопасного соединения между удалёнными компьютерами, при этом компьютеры видят друг друга так, как если бы они находились в одной локальной частной сети. Это позволяет конфигурировать сервера, как если бы они находились в частной сети, организуя при этом их взаимодействие посредством защищённого соединения.
Использование частных сетей вместо публичных для взаимодействия серверов почти всегда является предпочтительным выбором. Однако, поскольку другие пользователи дата-центра имеют доступ к этой же самой сети, вам необходимо предпринимать дополнительные меры для обеспечения защищённого соединения между вашими серверами.
Использование VPN представляет собой способ организации частной сети, доступ к которой имеют только ваши сервера. Их взаимодействие при этом будет полностью приватным и защищённым. Другие приложения могут быть сконфигурированы для передачи данных через виртуальные интерфейсы, предоставляемые VPN. Таким образом из Интернета будут доступны только те сервисы, которым необходимо предоставлять данные своим непосредственным клиентам.
Использование частных сетей в дата-центрах, предоставляющих такую возможность, чаще всего возможно прямо из интерфейса создания сервера. При этом вам необходимо настроить ваши приложения и файрвол для использования частной сети. Не забывайте, что частные сети дата-центров находятся в одном пространстве с другими серверами сети.
Что касается VPN, их начальная настройка чуть сложнее, но предоставляемые преимущества в отношении повышенной безопасности стоят того. Каждый сервер в VPN должен иметь общие настройки безопасности, необходимые для установки и настройки защищённого соединения. После установки и настройки VPN приложения должны быть сконфигурированы для использования VPN-туннеля. Для того, чтобы узнать больше про использование VPN, рекомендуем ознакомиться с нашим руководством по OpenVPN.
Инфраструктура открытых ключей (ИОК, англ. Public Key Infrastructure, PKI) - это система, предназначенная для создания, управления и подтверждения сертификатов, используемых для идентификации пользователей и шифрования сетевого взаимодействия. Сертификаты SSL и TLS могут быть использованы для аутентификации различных сущностей. После аутентификации эти сертификаты могут использоваться для установки защищённого сетевого взаимодействия.
Создание удостоверяющего центра (certificate authority) и управление сертификатами ваших серверов позволяет любому компоненту вашей сетевой инфраструктуры осуществлять проверку подлинности других членов инфраструктуры, а также шифровать свои сообщения. Это позволяет избегать атак посредника (man in the middle), при которых атакующий имитирует сервер внутри вашей сетевой инфраструктуры для перехвата сообщений.
Каждый сервер может быть настроен доверять централизованному удостоверяющему центру. После этого, любой сертификат, подписанный этим удостоверяющим центром, будет считаться доверенным. Если используемые вами приложения и протоколы коммуникации поддерживают SSL/TLS шифрование, это позволит вам осуществлять шифрованное взаимодействие внутри вашей сети без создания VPN-туннеля (который тоже зачастую использует SSL).
Настройка удостоверяющего центра и создание других компонентов инфраструктуры открытый ключей может потребовать значительных усилий на начальном этапе. Более того, управление сертификатами может создать дополнительную административную нагрузку при выпуске, подписи и отзыве сертификатов.
Для многих пользователей использование полноценной инфраструктуры открытых ключей имеет смысл при росте сетевой инфраструктуры. Обеспечение безопасности сетевого взаимодействия с использованием VPN может быть хорошей промежуточной мерой до момента, когда использование ИОК становится стоящим дополнительных административных усилий.
До этого момента мы обсуждали некоторые технологии, которые вы можете использовать для повышения безопасности вашей системы. Однако значительную роль в обеспечении безопасности также играют анализ ваших систем, понимание механизмов возможных атак, а также изоляция компонентов вашей инфраструктуры.
Аудит сервисов представляет собой процесс проверки того, какие сервисы запущены на серверах вашей инфраструктуры. Зачастую операционные системы сконфигурированы запускать определённые сервисы по умолчанию. Установка дополнительного программного обеспечения также может приводить к автоматическому запуску некоторых сервисов, от которых зависит устанавливаемое ПО.
.
Аудит сервисов позволяет выяснить, какие сервисы запущены на вашей системе, какие порты используются для коммуникации, а также какие протоколы используются. Вся эта информация поможет вам правильно настроить свой файрвол.
Серверы запускают множество внутренних процессов для обслуживания внешних клиентов. Каждый из этих процессов потенциально представляет собой точку входа для атаки злоумышленников. Чем больше сервисов запущено на вашем сервере, тем больше вероятность того, что в вашем программном обеспечении существует уязвимость.
После того, как вы выясните, какие сервисы запущены на вашей машине, вы можете начать анализировать их. Вот некоторые вопросы, которые вы хотите задать применительно к каждому из запущенных сервисов:
Такой подход к аудиту сервисов должен быть стандартной практикой при настройки любого нового сервера в вашей инфраструктуре.
Проведение базового аудита сервисов невероятно просто. Вы можете определить, какие сервисы слушают какие порты с использованием команды 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
, это означает, что сервис принимает соединения на всех интерфейсах.
Аудит файлов представляет собой процесс сравнения текущего состояния системы со списком файлов и настроек системы для заранее известного “хорошего” состояния системы. Аудит файлов используется для отслеживания неавторизованных изменений в системе.
Система обнаружения вторжения (intrusion detection system, IDS) представляет собой программное обеспечение для мониторинга системы или сети на предмет неавторизованной активности. Большая часть реализаций IDS используют аудит файлов для проверки того, были ли внесены какие-либо изменения в систему.
Если вы серьёзно относитесь к безопасности системы, помимо упомянутого ранее аудита сервисов вам необходимо осуществлять и аудит файлов. Это может осуществляться либо системным администратором с определённой периодичностью, либо как часть автоматизированного процесса в IDS.
Эти мероприятия являются едва ли не единственным способом быть абсолютно уверенным в том, что ваша файловая система не была изменена каким-либо пользователем или процессом. Злоумышленники зачастую пытаются замаскировать свою активность, чтобы продолжать использовать свой доступ к серверу в течение длительного времени. Они могут подменять бинарные файлы модифицированными версиями. Регулярный аудит файловой системы позволяет вам своевременно обнаруживать изменённые файлы.
Настройка системы IDS или проведение аудита файлов может быть довольно непростым занятием. Начальная настройка включает указание системе аудита любых нестандартных изменений, которые вы сделали на сервере, а также указание файловых путей, которые должны быть исключены при создании референтного образца файловой системы для последующего сравнения.
Аудит файлов также несколько усложняет проведение ежедневных рутинных операций. Вам необходимо проверять систему на целостность перед внесением изменений в систему, а затем, после внесения изменений, выполнять создание нового образца файловой системы для последующих сравнений. Вам также необходимо выгружать отчёты о проведении аудита в место, не доступное злоумышленникам, чтобы они не могли изменить эти отчёты и скрыть следы своего пребывания в системе.
Несмотря на то, что процесс администрирования системы с аудитом файлов значительно усложняется, аудит файлов является едва ли не единственным способом быть уверенным в том, что ваша система не была изменена без вашего ведома. Некоторые популярные решения для аудита файлов и обнаружения вторжений - Tripwire и Aide.
Изолирование среды исполнения (Isolating execution environments) представляет собой метод защиты, при котором каждый компонент системы запускается в своей собственной изолированной среде исполнения.
Изолирование может означать разнесение отдельных компонент вашего приложения по разным серверам, или же настройку ваших серверов на использование сред chroot
или контейнеров. Уровень изоляции сильно зависит от требований вашего приложения, а также от особенностей вашей инфраструктуры.
Изолирование ваших процессов по разным средам исполнения повышает возможность изоляции и потенциальных проблем безопасности. По аналогии с тем, как переборки помогают изолировать урон от пробоин на корабле, разделение отдельных компонент системы повышает её устойчивость к атакам извне.
В зависимости от того, какой способ вы выберете, изолирование компонент может быть довольно простым. Упаковка различных компонент системы в Docker-контейнеры позволяет быстро достичь определённого уровня изоляции, однако, обращаем внимание на то, что создатели Docker не считают контейнеризацию мерой безопасности.
Настройка среды chroot
также позволяет добиться определённого уровня изоляции компонент системы, однако, это также не является стопроцентно надёжным способом защиты, поскольку существуют различные способы доступа к chroot
средам. Перенесение компонент системы на разные физические машины является наилучшим (и, зачастую, самым простым) способом изоляции, однако это дорогое решение за счёт увеличения количества используемых машин.
Выше перечислены лишь некоторые стратегии, позволяющие повысить безопасность ваших систем. Важно понимать, что, несмотря на то, что поздно - это лучше, чем никогда, меры безопасности становятся менее эффективными, когда их внедрение происходит скорее позже, чем раньше. Вопросами безопасности лучше всего заниматься с самого начала проектирования ваших сервисов и инфраструктуры.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.