Аудит безопасности | Enterprise
Документация на русском языке
поддерживается сообществом
Аудит безопасности

Аудит безопасности

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

Шифрование внешнего трафика iproto

Tarantool Enterprise uses the iproto binary protocol for replicating data between instances and also in the connector libraries.

Since version 2.10.0, Tarantool Enterprise has the built-in support for using SSL to encrypt the client-server communications over binary connections. For details on enabling SSL encryption, see the Криптографическая защита трафика section of this document.

In case the built-in encryption is not enabled, we recommend to use VPN to secure data exchange between data centers.

Закрытые порты iproto

Если в кластере Tarantool Enterprise не используется iproto для внешних запросов, подключение к портам iproto должно разрешаться только между экземплярами Tarantool.

Подробнее о настройке портов для iproto см. в разделе advertise_uri в документации Cartridge.

Механизм HTTPS termination

Экземпляр Tarantool Enterprise может принимать HTTP-подключения от внешних источников или при доступе к веб-интерфейсу администратора. Все такие подключения должны проходить через веб-сервер с HTTPS, работающий на том же хосте (например, nginx). Это требование относится как к виртуальным, так и к физическим хостам. Проведение HTTP-трафика через несколько отдельных хостов с механизмом HTTPS termination недостаточно безопасно.

Закрытые HTTP-порты

Tarantool Enterprise принимает HTTP-соединения по определенному порту. Его номер указывается в конфигурации экземпляров Cartridge: http_port: <число>. Порт должен быть доступен только на этом хосте для подключения nginx.

Убедитесь, что настроенный HTTP-порт закрыт, а HTTPS-порт ( по умолчанию 443) открыт.

Ограниченный доступ к административной консоли

Модуль console дает возможность подключиться к рабочему экземпляру и запускать пользовательский код Lua. Это полезная возможность для разработчиков и администраторов. В следующих примерах показано, как открыть соединение по TCP-порту и на UNIX-сокете.

console.listen(<port number>)
console.listen('/var/lib/tarantool/socket_name.sock')

Открывать административную консоль через TCP-порт всегда небезопасно. Убедитесь, что в коде нет вызовов формата console.listen(<port_number>).

При подключении через сокет требуется право write для директории /var/lib/tarantool. Убедитесь, что оно выдано только пользователю tarantool.

Ограничения для пользователя guest

Подключение к экземпляру с помощью tarantoolctl connect без учетных данных (под пользователем guest) необходимо отключить.

Есть два способа проверить эту уязвимость:

  • Убедитесь, что в исходном коде не предоставляются права доступа пользователю guest. Этот участок кода может выглядеть так:

    box.schema.user.grant('guest',
        'read,write',
        'universe',
        nil, { if_not_exists = true }
    )
    

    Помимо сооветствующего фрагмента кода, ищите все вхождения значения 'universe'.

  • Попытайтесь подключиться с помощью tarantoolctl connect к каждому из узлов Tarantool Enterprise.

Подробнее см. в разделе документации Управление доступом.

Авторизация в веб-интерфейсе

Для входа в веб-интерфейс должны требоваться имя пользователя и пароль. Подробнее см. в разделе документации Реализация авторизации в веб-интерфейсе.

Запуск под пользователем tarantool

Все экземпляры Tarantool Enterprise должны работать под пользователем tarantool.

Ограничение доступа для пользователя tarantool

Пользователь tarantool не должен иметь права sudo. Кроме того, у него не должно быть пароля, чтобы не допустить входа через SSH или su.

Хранение двух и более снимков данных

Для надежности резервного копирования в экземпляре Tarantool Enterprise должны храниться минимум два последних снимка данных. Не забудьте проверить каждый экземпляр.

Значение snapshot_count определяет количество сохраненных снимков данных. Такие параметры задаются в основном в файлах конфигурации, но их могут замещать переменные окружения и аргументы в командной строке. Так что рекомендуется проверить через консоль как значения в файлах конфигурации, так и фактические значения:

tarantool> box.cfg.checkpoint_count
---
- 2

Включен журнал упреждающей записи (WAL)

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

Безопасные значения wal_modewrite и fsync:

tarantool> box.cfg.wal_mode
---
- write

Исключением может быть ситуация, когда экземпляр обрабатывает данные, которые можно удалять: к примеру, когда Tarantool Enterprise используется для кэширования. В этом случае WAL можно отключить, чтобы снизить нагрузку на ввод/вывод.

Подробнее см. в разделе справки по wal_mode.

Уровень ведения журнала: INFO или выше

Уровень ведения журнала должен быть 5 (INFO), 6 (VERBOSE) или 7 (DEBUG). Тогда в случае нарушения безопасности в журналах приложения будет достаточно информации для расследования инцидента.

tarantool> box.cfg.log_level
---
- 5

Полный список существующих уровней см. в разделе справки по log_level.

Ведение журнала с помощью journald

В Tarantool Enterprise для ведения журнала следует использовать journald.

Нашли ответ на свой вопрос?
Обратная связь