Разрыв сессии при неактивности пользователя
Автор Denis Prokopyev, Last modified by Denis Prokopyev на 02 сентября 2025 04:44 PM

Продукты:  Indeed PAM

Затрагиваемые компоненты: RDP Proxy, SSH Proxy, PAM Gateway


Описание проблемы: При отсутствии активности со стороны пользователя сессия прерывается, что сопровождается одним из следующих событий:

1. 3116, причина -- DurationExceeded: The session has been terminated due to user inactivity:



2. 3116, причина -- ErrorOccurred: Время сессии истекло:



3. 1018, Пользователь завершил сессию, инициатор не обязательно сам пользователь:


Причины возникновения: 

1. Активирована опция "Прерывать сессию при отсутствии пользовательской активности" в применяемой политике РАМ, активность со стороны пользователя отсутствовала дольше указанного периода:



2. Не связано с активностью пользователя, за время его неактивности сессия достигла ограничения на максимальную длительность в применяемой политике РАМ:


3. Сессия была прервана внешним, относительно РАМ, инициатором, например, балансировщиком нагрузки или межсетевым экраном.
Их настройки всегда будут приоритетнее настроек РАМ, т.к. они управляют непосредственно сетевым трафиком.
РАМ не имеет возможности определить внешнюю причину прерывания сессии, даже если пользователь собственноручно сессию не прерывал.

Варианты решения: 

Для случаев 1 и 2 решением является изменение соответствующих настроек в политиках РАМ, т.к. причина кроется именно в них.

Для 3-го случая всё зависит от конфигурации инфраструктуры и варианта развёртывания самого РАМ.
В случае с HAProxy (в дистрибутиве РАМ используется именно это ПО, в остальных случаях будут аналогичные настройки), на это влияют 2 параметра:

timeout client -- указывает время, после которого сессия будет разорвана при отсутствии сетевого трафика между пользователем и балансировщиком.
timeout server -- указывает время, после которого сессия будет разорвана при отсутствии сетевого трафика между балансировщиком и сервером доступа.

Они берутся из секции defaults, таймаут сервера может быть указан для конкретного бэкэнда:



Время может быть указано в следующих единицах измерения:

- us : микросекунда. 1us = 1/1000ms
- ms : миллисекунда. -- используется по умолчанию, если единица измерения не указана.
- s : секунда. 1s = 1000ms
- m : минута. 1m = 60s = 60000ms
- h : час. 1h = 60m = 3600s = 3600000ms
- d : день. 1d = 24h = 1440m = 86400s = 86400000ms

Так как трафик сессии идёт по цепочке пользователь -> балансировщик -> сервер доступа, на прерывание влияют оба параметра.
Например, для обеих ситуаций:

timeout client 3h
timeout server 10m

timeout client 10m
timeout server 3h


Сессия будет прервана после 10 минут бездействия. 

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


Если используется HAProxy из дистрибутива РАМ, на серверах будут соответствующие контейнеры:




Файл конфигурации находится по пути /etc/indeed/indeed-pam/haproxy.
Для применения внесённых в него изменений необходимо выполнить перезапуск командой:

bash /etc/indeed/indeed-pam/scripts/run-pam.sh


Для компонента Indeed PAM Gateway, работающего на основе RDS, все настройки сервера RDS приоритетнее настроек РАМ.
Если сессия через Indeed PAM Gateway прерывается по бездействию пользователя, на это может влиять следующая настройка в его политиках:

Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Службы удаленных рабочих столов → Узел сеансов удаленных рабочих столов



Если разрыв вызван политикой RDS выше, его причину можно увидеть в журнале событий:

Журналы приложений и служб → Microsoft → Windows → TerminalServices-SessionBroker → Admin




Как и в случае с настройками в политиках РАМ, сессия может быть прервана не из-за бездействия пользователя, а из-за достижения максимальной длительности за время его бездействия, если соответствующие настройки выполнены со стороны RDS:





Нюансы keepalive в SSH Proxy: 

Настройка KeepAlive позволяет не прерывать сессию из-за отсутствия трафика, обеспечивая периодическую отправку пакетов в рамках соединения.
Для RDP подключений характерен периодический обмен трафика даже при отсутствии активности пользователя, что позволяет игнорировать значения настроек таймаутов на промежуточном узле в большинстве случаев.
Поэтому со стороны РАМ такая настройка есть только у компонента SSH Proxy:

/etc/indeed/indeed-pam/ssh-proxy/appsettings.json



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

timeout client 3h
timeout server 10m

KeepAlive позволит проигнорировать только таймаут сервера. Сессия будет прервана через 3 часа бездействия, так как между клиентом SSH и балансировщиком пакетов KeepAlive  не будет, если они настроены только со стороны SSH Proxy.
Решением будет настройка KeepAlive со стороны клиента SSH.
Пример окна настроек для клиента PuTTY:
Picture background

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

(0 голос(а))
Эта статья полезна
Эта статья бесполезна

Портал технической поддержки компании Индид