Поиск по сайту:

Рекомендуемые меры безопасности для защиты ваших серверов


Введение

Большую часть времени вы будете уделять основное внимание запуску и запуску облачных приложений. В рамках процесса настройки и развертывания важно предусмотреть надежные и тщательные меры безопасности для ваших систем и приложений, прежде чем они станут общедоступными. Реализация мер безопасности, описанных в этом руководстве, перед развертыванием ваших приложений гарантирует, что любое программное обеспечение, которое вы запускаете в своей инфраструктуре, имеет безопасную базовую конфигурацию, в отличие от специальных мер, которые могут быть реализованы после развертывания.

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

SSH-ключи

SSH или безопасная оболочка — это зашифрованный протокол, используемый для администрирования и связи с серверами. При работе с сервером вы, вероятно, будете проводить большую часть своего времени в сеансе терминала, подключенном к вашему серверу через SSH. В качестве альтернативы входу в систему на основе пароля ключи SSH используют шифрование для обеспечения безопасного входа на ваш сервер и рекомендуются для всех пользователей.

При использовании ключей SSH для аутентификации создается пара закрытого и открытого ключей. Закрытый ключ хранится в секрете и защищен пользователем, а открытый ключ может быть передан другим пользователям. Это обычно называется асимметричным шифрованием, шаблон, который вы можете встретить в других местах.

Чтобы настроить аутентификацию с помощью ключа SSH, вам необходимо поместить свой открытый ключ SSH на сервер в ожидаемое место (обычно ~/.ssh/authorized_keys). Чтобы узнать больше о том, как работает аутентификация на основе SSH-ключа, прочитайте Общие сведения о шифровании SSH и процессе подключения.

Как ключи SSH повышают безопасность?

При использовании SSH любой тип аутентификации, включая аутентификацию по паролю, полностью зашифрован. Однако, когда разрешен вход на основе пароля, злоумышленники могут неоднократно автоматически пытаться получить доступ к серверу, особенно если он имеет общедоступный IP-адрес. Несмотря на то, что существуют способы блокировки доступа после нескольких неудачных попыток с одного и того же IP-адреса, и на практике злоумышленники будут ограничены тем, насколько быстро они могут попытаться войти на ваш сервер, любые обстоятельства, при которых пользователь может правдоподобно попытаться получить доступ в ваш стек повторяющимися атаками методом грубой силы, будет представлять угрозу безопасности.

Настройка аутентификации по ключу SSH позволяет отключить аутентификацию на основе пароля. Ключи SSH обычно содержат гораздо больше битов данных, чем пароль — вы можете создать 128-символьный хэш ключа SSH из 12-символьного пароля, что делает их гораздо более сложными для грубой силы. Тем не менее, некоторые алгоритмы шифрования считаются поддающимися взлому из-за попытки реконструировать хэши паролей достаточное количество раз на достаточно мощном компьютере. Другие, в том числе ключ RSA по умолчанию, сгенерированный современными SSH-клиентами, пока невозможно взломать.

Как реализовать ключи SSH

Ключи SSH — это рекомендуемый способ удаленного входа в любую серверную среду Linux. Пара ключей SSH может быть сгенерирована на вашем локальном компьютере с помощью команды ssh, а затем вы можете передать открытый ключ на удаленный сервер.

Чтобы настроить ключи SSH на своем сервере, вы можете следовать инструкциям по настройке ключей SSH для Ubuntu, Debian или CentOS.

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

Рекомендуется не разрешать пользователю root входить непосредственно через SSH. Вместо этого войдите в систему как непривилегированный пользователь, а затем повышайте привилегии по мере необходимости по принципу наименьших привилегий. После того, как вы подключились к своему серверу и создали непривилегированную учетную запись, которая, как вы проверили, работает с SSH, вы можете отключить вход в систему root, установив директиву PermitRootLogin no в / etc/ssh/sshd_config на вашем сервере, а затем перезапустите процесс SSH сервера с помощью команды типа sudo systemctl restart sshd.

Брандмауэры

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

На типичном сервере ряд служб может работать по умолчанию. Их можно разделить на следующие группы:

  • Общедоступные службы, к которым может получить доступ любой пользователь в Интернете, часто анонимно. Примером этого является веб-сервер, который обслуживает ваш фактический веб-сайт.
  • Частные сервисы, доступ к которым разрешен только избранной группе авторизованных аккаунтов или из определенных мест. Например, панель управления базой данных, такая как phpMyAdmin.
  • Внутренние службы, которые должны быть доступны только изнутри самого сервера, без доступа к общедоступному Интернету. Например, база данных, которая должна принимать только локальные подключения.

Брандмауэры могут гарантировать, что доступ к вашему программному обеспечению будет ограничен в соответствии с указанными выше категориями с различной степенью детализации. Публичные сервисы можно оставить открытыми и доступными в Интернете, а частные сервисы можно ограничить на основе различных критериев, таких как типы подключения. Внутренние службы можно сделать полностью недоступными для Интернета. Доступ к неиспользуемым портам полностью блокируется в большинстве конфигураций.

Как брандмауэры повышают безопасность?

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

Правильно настроенный брандмауэр ограничивает доступ ко всему, кроме определенных служб, которые вам необходимо оставить открытыми, обычно открывая только порты, связанные с этими службами. Например, SSH обычно работает на порту 22, а доступ по HTTP/HTTPS через веб-браузер обычно выполняется на портах 80 и 443 соответственно. Предоставление только нескольких частей программного обеспечения уменьшает поверхность атаки вашего сервера, ограничивая компоненты, уязвимые для эксплуатации.

Как реализовать брандмауэры

Для систем Linux доступно множество брандмауэров, и некоторые из них сложнее других. Как правило, вам нужно вносить изменения в конфигурацию брандмауэра только тогда, когда вы вносите изменения в службы, работающие на вашем сервере. Вот несколько вариантов запуска:

  • UFW, или Uncomplicated Firewall, установлен по умолчанию в некоторых дистрибутивах Linux, таких как Ubuntu. Вы можете узнать больше об этом в разделе Как настроить брандмауэр с помощью UFW в Ubuntu 20.04.
  • Если вы используете Red Hat, Rocky или Fedora Linux, вы можете прочитать Как настроить брандмауэр с помощью firewalld, чтобы использовать их инструменты по умолчанию.
  • Многие программные брандмауэры, такие как UFW и firewalld, записывают свои настроенные правила непосредственно в файл с именем iptables. Чтобы узнать, как работать с конфигурацией iptables напрямую, вы можете просмотреть Iptables Essentials: общие правила и команды брандмауэра. . Обратите внимание, что некоторые другие программы, которые сами реализуют правила порта, такие как Docker, также будут писать напрямую в iptables и могут конфликтовать с правилами, которые вы создаете с помощью UFW, поэтому полезно знать, как читать конфигурация iptables в подобных случаях.

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

Убедитесь, что конфигурация вашего брандмауэра по умолчанию блокирует неизвестный трафик. Таким образом, любые новые службы, которые вы развертываете, не будут непреднамеренно доступны в Интернете. Вместо этого вам придется явно разрешать доступ, что заставит вас оценить, как служба запускается, к ней обращаются и кто должен иметь возможность ее использовать.

Сети VPC

Сети Virtual Private Cloud (VPC) — это частные сети для ресурсов вашей инфраструктуры. Сети VPC обеспечивают более безопасное соединение между ресурсами, поскольку сетевые интерфейсы недоступны из общедоступного Интернета.

Как сети VPC повышают безопасность?

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

Условно предоставляя только несколько выделенных интернет-шлюзов, также известных как шлюзы входа, в качестве единственной точки доступа между ресурсами вашей сети VPC и общедоступным Интернетом, вы будете лучше контролировать и отслеживать общедоступный трафик. подключение к вашим ресурсам. Современные системы оркестрации контейнеров, такие как Kubernetes, имеют очень четко определенную концепцию входных шлюзов, поскольку они по умолчанию создают множество частных сетевых интерфейсов, которые необходимо предоставлять выборочно.

Как внедрить сети VPC

Многие поставщики облачной инфраструктуры позволяют создавать и добавлять ресурсы в сеть VPC внутри своих центров обработки данных.

Примечание. Если вы используете DigitalOcean и хотите настроить свой собственный шлюз VPC, вы можете следовать руководству «Как настроить дроплет в качестве шлюза VPC», чтобы узнать, как это сделать на серверах на базе Debian, Ubuntu и CentOS.

Ручная настройка собственной частной сети может потребовать дополнительных настроек сервера и знаний в области сетей. Альтернативой настройке сети VPC является использование VPN-соединения между вашими серверами.

VPN и частные сети

VPN, или виртуальная частная сеть, — это способ создания безопасных соединений между удаленными компьютерами и представления соединения, как если бы это была локальная частная сеть. Это позволяет настроить службы так, как если бы они находились в частной сети, и подключить удаленные серверы через защищенные соединения.

Например, частные сети DigitalOcean обеспечивают изолированную связь между серверами одной учетной записи или команды в одном регионе.

Как VPN повышают безопасность?

Использование VPN — это способ создать частную сеть, которую могут видеть только ваши серверы. Общение будет полностью конфиденциальным и безопасным. Другие приложения можно настроить для передачи своего трафика через виртуальный интерфейс, предоставляемый программным обеспечением VPN. Таким образом, только службы, которые предназначены для использования клиентами в общедоступном Интернете, должны быть доступны в общедоступной сети.

Как внедрить VPN

Использование частных сетей обычно требует от вас принятия решений о ваших сетевых интерфейсах при первом развертывании серверов и настройке ваших приложений и брандмауэра для предпочтения этих интерфейсов. Для сравнения, развертывание VPN требует установки дополнительных инструментов и создания дополнительных сетевых маршрутов, но обычно может быть развернуто поверх существующей архитектуры. Каждый сервер в VPN должен иметь общие данные безопасности и конфигурации, необходимые для установления VPN-подключения. После запуска и запуска VPN необходимо настроить приложения для использования VPN-туннеля.

Если вы используете Ubuntu или CentOS, вы можете следовать инструкциям по установке и настройке сервера OpenVPN в Ubuntu 20.04.

Wireguard

Аудит услуг

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

Аудит служб — это способ узнать, какие службы работают в данной системе, какие порты они используют для связи и какие протоколы используют эти службы. Эта информация может помочь вам настроить, какие службы должны быть общедоступными, параметры брандмауэра, мониторинг и оповещения.

Как аудит служб повышает безопасность?

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

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

  • Должна ли эта служба работать?
  • Выполняется ли служба на сетевых интерфейсах, на которых она не должна работать?
  • Должна ли служба быть привязана к общедоступному или частному сетевому интерфейсу?
  • Структурированы ли мои правила брандмауэра для пропуска законного трафика в эту службу?
  • Блокируют ли мои правила брандмауэра незаконный трафик?
  • Есть ли способ получать оповещения системы безопасности об уязвимостях для каждой из этих служб?

Этот тип аудита службы должен стать стандартной практикой при настройке любого нового сервера в вашей инфраструктуре. Выполнение аудита служб каждые несколько месяцев также поможет вам выявить любые службы с конфигурациями, которые могли быть изменены непреднамеренно.

Как внедрить аудит сервиса

Для аудита сетевых служб, работающих в вашей системе, используйте команду ss, чтобы получить список всех портов TCP и UDP, которые используются на сервере. Пример команды, которая показывает имя программы, PID и адреса, используемые для прослушивания трафика TCP и UDP:

  1. sudo ss -plunt

Параметры p, l, u, n и t работают следующим образом. :

  • p показывает конкретный процесс, использующий данный сокет.
  • l показывает только те сокеты, которые активно прослушивают соединения.
  • u включает сокеты UDP (в дополнение к сокетам TCP).
  • n показывает числовые значения трафика.
  • t включает сокеты TCP (в дополнение к сокетам UDP).

Вы получите вывод, подобный этому:

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3)) tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=69226,fd=6),("nginx",pid=69225,fd=6)) tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4)) tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=69226,fd=7),("nginx",pid=69225,fd=7))

Основными столбцами, требующими вашего внимания, являются столбцы Netid, Local Address:Port и Process name. Если локальный адрес: порт равен 0.0.0.0, служба принимает подключения на всех сетевых интерфейсах IPv4. Если адрес [::], то служба принимает подключения на всех интерфейсах IPv6. В приведенном выше примере выходных данных SSH и Nginx прослушивают все общедоступные интерфейсы в сетевых стеках IPv4 и IPv6.

Вы можете решить, хотите ли вы разрешить SSH и Nginx прослушивать оба интерфейса или только один или другой. Как правило, вам следует отключать службы, работающие на неиспользуемых интерфейсах.

Автоматические обновления

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

Как автоматические обновления повышают безопасность?

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

Как реализовать автоматические обновления

Вы можете обратиться к How to Keep Ubuntu Servers Updated для обзора внедрения автоматических обновлений в Ubuntu.

Инфраструктура открытых ключей и шифрование SSL/TLS

Инфраструктура открытых ключей, или PKI, относится к системе, которая предназначена для создания, управления и проверки сертификатов для идентификации людей и шифрования связи. Сертификаты SSL или TLS могут использоваться для аутентификации различных объектов друг перед другом. После аутентификации их также можно использовать для установления зашифрованной связи.

Как PKI повышает безопасность?

Создание центра сертификации (ЦС) и управление сертификатами для ваших серверов позволяет каждому объекту в вашей инфраструктуре проверять личность других участников и шифровать их трафик. Это может предотвратить атаки «человек посередине», когда злоумышленник имитирует сервер в вашей инфраструктуре для перехвата трафика.

Каждый сервер можно настроить так, чтобы он доверял централизованному центру сертификации. После этого любому сертификату, подписанному этим органом, можно неявно доверять.

Как внедрить PKI

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

Для многих пользователей внедрение полноценной инфраструктуры открытых ключей будет иметь смысл только по мере роста их потребностей в инфраструктуре. Защита связи между компонентами с помощью VPN может быть лучшей промежуточной мерой, пока вы не достигнете точки, когда PKI оправдывает дополнительные затраты на администрирование.

Если вы хотите создать свой собственный центр сертификации, вы можете обратиться к руководствам Как установить и настроить центр сертификации (ЦС) в зависимости от используемого вами дистрибутива Linux.

Заключение

Стратегии, изложенные в этом руководстве, представляют собой обзор некоторых шагов, которые вы можете предпринять для повышения безопасности своих систем. Важно осознавать, что эффективность мер безопасности снижается по мере того, как вы откладываете их реализацию. Безопасность не должна быть второстепенной и должна быть реализована, когда вы впервые выделяете свою инфраструктуру. Когда у вас есть безопасная база, на которую можно опираться, вы можете приступить к развертыванию своих служб и приложений с некоторыми гарантиями того, что по умолчанию они работают в безопасной среде.

Даже при наличии безопасной исходной среды помните, что безопасность — это непрерывный и повторяющийся процесс. Всегда спрашивайте себя, какие последствия для безопасности могут иметь любые изменения, и какие шаги вы можете предпринять, чтобы убедиться, что вы всегда создаете безопасные конфигурации и среды по умолчанию для своего программного обеспечения.