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

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

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

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

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

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

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

  • Шифрование — это процесс кодирования информации посредством алгоритмического преобразования, которая затем может быть безопасно передана или сохранена. В зависимости от потребностей можно применять симметричное или асимметричное шифрование.
  • SSH (Secure Shell Protocol) — протокол, который позволяет безопасно администрировать удаленные серверы через криптографически защищенные соединения. 
  • Брандмауэр — контролирует соединения сервера двумя основными способами: определяет входящий и исходящий трафик серверов; определяет доступность серверов в сети.

При работе на сервере нужно знать, какой 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:

  • Где обычно хранятся ключи SSH? – В папке ~/.ssh/authorized_keys.
  • На каких портах обычно работают SSH, HTTP и HTTPS? – SSH обычно работает на порту 22, а HTTP/HTTPS на портах 80 и 443 соответственно.
  • Как изменить доступ к порту по умолчанию? – Чтобы обновить доступ к порту SSH, нужно изменить спецификацию порта 22 в файле сервера sshd_config. Вы выбираете любой свободный порт, после чего необходимо перезапустить демон 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, настроили сервер, управляли базой данных, а может, даже настроили контейнеры.

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

  • add-apt-repository от пользователя с sudo – добавить информацию о репозитории программного обеспечения на сервер.
  • cat – вывод содержимого файла в терминал.
  • chmod – изменение прав доступа к файлам.
  • cp – копировать файлы на один сервер; scp – копировать файлы между серверами.
  • cut – удалить раздел файла (с опцией -c вырезает указанную строку).
  • date – вывод метки времени (опции +%s%N выводят секунды (%s) и минуты (%N))
  • grep – поиск текста и строк в указанном файле.
  • jq – чтение и фильтрация записей в соответствии с синтаксисом команды.
  • kill от пользователя sudo – посылает сигнал процессу остановить службу.
  • ln с опцией -s – создать симлинк между файлами.
  • printf – вывод заданной строки.
  • sha1sum – вывод и проверка контрольной суммы.
  • ss – вывод списка всех используемых портов TCP/UDP (с опцией -plunt для получения дополнительной информации).
  • sysctl от пользователя sudo – настройка параметров ядра и загрузка новых значений для сеанса терминала.
  • systemctl – управление службами, включая OpenVPN как службу systemd и Suricata как пакет мониторинга сети.
  • resolvectl dns – определение используемых сервером DNS-резолверов.
  • tail – вывод строки из файла, указанного с помощью опции -f.
  • tee от пользователя sudo – перенаправит вывод в новый файл.

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

  • ip addr – поиск сетевых интерфейсов. Вывод с командой ufw allow – разрешить входящий трафик через выбранный сетевой интерфейс.
  • ip address show – поиск внешнего IP системы.
  • ip route – поиск внешнего сетевого интерфейса.

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

  • canonical-livepatch enable your-key – включает инструмент.
  • canonical-livepatch status – проверка состояния фоновой службы.

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

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

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

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

  • ufw default deny incoming – запретить все входящие соединения (состояние по умолчанию).
  • ufw default allow outgoing – разрешить все исходящие соединения (состояние по умолчанию).
  • ufw allow ssh – разрешить входящие соединения SSH через порт 22, например для управления удаленным сервером.
  • ufw allow port_number – указать порт для входящих соединений.
  • ufw enable – включить брандмауэр.
  • ufw status – проверка состояния брандмауэра и ufw status verbose – просмотр всех установленных правил.
  • ufw allow http или ufw allow 80 –  разрешить входящие соединения с незашифрованных серверов через HTTP.
  • ufw allow https или ufw allow 443 – разрешить входящие подключения с незашифрованных серверов по HTTP.
  • ufw allow port_number:port_number/tcp и ufw allow port_number:port_number/udp – разрешает диапазон портов с указанными протоколами TCP/UDP.
  • ufw allow from your_ip_address – разрешить подключения с указанного IP. Можно добавить к любому порту port_number, чтобы направить IP на определенный порт.
  • ufw deny http – запрет HTTP-соединений и ufw deny from your_ip_address – запрет всех соединений с определенного IP.
  • ufw status numbered – создать пронумерованный список правил брандмауэра.
  • ufw delete – удалить правила с помощью пронумерованного списка или правила allow (например, ufw delete allow http).
  • ufw disable – деактивация всех созданных правил.
  • ufw reset – отключить UFW и удалить все созданные правила.

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

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

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

  • wg – управление сервером WireGuard.
  • wg genkey и wg pubkey – создать пару закрытого и открытого ключей для сервера WireGuard.
  • wg set с параметром allowed-ips и списком указанных IP —  управление доступом к WireGuard VPN.
  • wg-quick – установить VPN-соединение вручную, с аргументом up – запустить туннель, с аргументом down – отключиться от VPN.

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

Что дальше?

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

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

Tags: , , , ,

Добавить комментарий