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

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

This document will help you audit the security of a Tarantool cluster. It explains certain security aspects, their rationale, and the ways to check them. For details on how to configure Tarantool Enterprise Edition and its infrastructure for each aspect, refer to the security hardening guide.

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

Since version 2.10.0, the Enterprise Edition 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 using VPN to secure data exchange between data centers.

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

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

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

Tarantool принимает 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.

Connecting to the instance with tt connect or tarantoolctl connect without user credentials (under the guest user) must be disabled.

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

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

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

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

  • Try connecting with tt connect to each Tarantool node.

For more details, refer to the documentation on access control.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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