Аудит безопасности¶
В этом документе рассказано, как провести аудит безопасности кластера 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¶
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 Enterprise node.
Подробнее см. в разделе документации Управление доступом.
Авторизация в веб-интерфейсе¶
Для входа в веб-интерфейс должны требоваться имя пользователя и пароль. Подробнее см. в разделе документации Реализация авторизации в веб-интерфейсе.
Запуск под пользователем 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_mode
– write
и 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
.