Site icon 8HOST.COM

Основы безопасности веб-сервера

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

В этой статье мы сосредоточимся на защите сервера. Здесь мы собрали основные понятия и разделили их на две главы: ключевые термины и методы обеспечения безопасности; работа с командной строкой (включает подразделы для инструментов безопасности).

Читайте также:

Что такое безопасность?

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

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

При работе на сервере нужно знать, какой IP используется: IPv4 (32-битный цифровой) или IPv6 (128-битный буквенно-цифровой). Мы рекомендуем перейти на IPv6.

После настройки сервер будет задействован в инфраструктуре открытых ключей (Public Key Infrastructure) для управления сертификатами, идентификации и шифрования связи. Шифрование TLS/SSL обеспечивает дополнительный уровень безопасности, в основном это делается путем предоставления сертификата от центра сертификации (certificate authority) для перехода с HTTP на HTTPS сервер.

TLS-рукопожатие

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

Протокол TLS использует метод шифрования с открытым и закрытым ключом (асимметричное шифрование). В этом процессе используется пара ключей.

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

В качестве центра сертификации для получения бесплатных сертификатов TLS/SSL можно использовать Let’s Encrypt. Также можно генерировать самоподписанные сертификаты. Но самоподписанный сертификат не подтвердит подлинность сервера для пользователей, поэтому лучше установить SSL-сертификат, полученный в доверенном ЦС.

Далее рассмотрим основные принципы подключения к серверу через SSH, работу VPN, брандмауэров и мониторинг безопасности сети.

Подключение по SSH

Предположим, у нас есть пара ключей (ЕСли вам нужно сгенерировать их, обратитесь к статье Установка SSH-ключей в Ubuntu 20.04). В этой паре ключей применяется метод асимметричного шифрования, при котором генерируется закрытый и открытый ключ. С помощью этой пары ключей мы получили доступ к серверу как не-root пользователь.

Частые вопросы по SSH:

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

Для этого необходимо с помощью брандмауэра настроить SSH-доступ.

Использование брандмауэров

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

К популярным брандмауэрам относятся Uncomplicated Firewall (UFW) и firewalld, которые действуют как высокоуровневые интерфейсы для iptables или nftables. Скорее всего, в дистрибутивах Ubuntu или Debian вы будете использовать UFW, поскольку он уже встроен в систему. В CentOS или Rocky Linux встроен firewalld. 

Читайте также:  Основы Iptables: общие правила и команды брандмауэра

При настройке брандмауэра можно использовать IPv4 или IPv6, но для IPv6 может потребоваться более современная версия брандмауэра. Например UFW по умолчанию управляет только IPv4, а для IPv6 его необходимо настраивать вручную.

Зачем нужен VPN?

VPN создает зашифрованный туннель, через который можно подключиться к сети, что может быть полезно для разработчиков и других пользователей. Разработчикам VPN позволяет получить доступ к собственной инфраструктуре из разных мест, чтобы не оставлять открытым важный порт. Потребителям VPN позволяет безопасно подключаться к сети, даже если сеть ненадежная (например, Wi-Fi в кафе или библиотеке).

Разница между VPC и VPN

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

VPN (Virtual Private Network) имитирует частную сеть между удаленными компьютерами, как если бы они находились в локальной частной сети. VPN предоставляет безопасный доступ к общей сетевой информации. WireGuard и OpenVPN — популярные VPN. 

Управление сетевой безопасностью

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

Чтобы поддерживать сервер Ubuntu в актуальном состоянии, можно обновить файл конфигурации systemd или запланировать задачу cron для автоматической перезагрузки. Также можно настроить менеджер пакетов на автоматическое обновление с помощью службы unattended-upgrades, которой можно управлять с помощью systemctl. 

Чтобы исправить ошибки и уязвимости в системе, иногда может потребоваться запустить обновления на уровне ядра. В таком случае можно запустить инструмент unattended-upgrades для apt, но это может привести к простою системы. Если вам нужно обеспечить постоянное время работы, то с помощью балансировщика нагрузки можно перенаправлять трафик на рабочие серверы, пока другие заняты обновлением ядра. Для работы в фоновом режиме можно использовать сервисы типа Canonical Livepatch Service или Kernelcare.

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

Подключение к серверу и управление им часто осуществляется через командную строку.

Работа с командной строкой

Наверняка вы уже работали с командной строкой Linux, настроили сервер, управляли базой данных, а может, даже настроили контейнеры.

Основные команды для обеспечения безопасности:

Основные субкоманды ip для настройки сетевых интерфейсов:

При запуске службы canonical-livepatch для обновлений на уровне ядра на сервере Ubuntu мы выполняли такие субкоманды от имени пользователя sudo:

С помощью оператора pipe (|) можно объединить несколько команд в цепочку.

Запуск UFW из командной строки

При начальной настройке сервера рекомендуется включить базовый брандмауэр с помощью Uncomplicated Firewall.

Основные субкоманды:

Запуск VPN из командной строки

Помимо настройки брандмауэров мы управляли двумя разными инструментами: WireGuard и OpenVPN.

Основные команды при настройке WireGuard VPN (как на сервере WireGuard, так и на его равноправном сервере):

При настройке сервера OpenVPN мы запустили ряд модифицированных скриптов на OpenVPN и CA сервере, который проверяет сертификаты для улучшения криптографической связи путем установки директивы конфигурации (например tls-crypt).

Что дальше?

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

Эти туториалы помогут вам безопасно передавать файлы: