Клиент-банк СБ РФ: вечное “начало отправки файла” или NAT, FTP и прочие чудеса
И опять – проблемы с клиент-банком СБ РФ. Зависаем на “начале отправки файла”, и висим вечно. Разберёмся с этой проблемой и решим её.
Клиент СБ РФ и сетевые соединения
О вариантах настройки Амикон ФПСУ IP/Клиента уже писал не раз. Наиболее симпатичен мне последний реализованный вариант – с выделенными ФПСУ-маршрутизаторами (решение сервер-центристское, и даёт нам возможность иметь несколько одновременно поднятых каналов к нескольким ФПСУ).
В этой статье затрагивать Амикон ФПСУ не буду, речь пойдёт об одной из проблем самого клиента wCLNT.exe.
wCLNT, FTP и NAT
Не ранее, чем сегодня с утра начались чудеса – все клиент-банки СБ РФ (у нас несколько организаций) при попытке соединения с сервером банка зависали на стадии “Начало отправки файла…” (картина маслом справа).
С клиент-банком СБ РФ не первый год дело имею, посему знаю, что “файлы” он отправляет на ftp сервер банка. Запускаем Network Monitor, выставляем capture filter: FTP. (да, просто FTP. Будем контролировать весь FTP трафик). И запускаем наш монитор. P.S. Напомню, в моём случае Амикон клиент установлен на другом хосте, поэтому никто и ничто мне не мешает контролировать реальный трафик самого клиента, ещё не обёрнутый в UDP-87.
Вижу следующую ftp сессию:
24 20:33:54.863 FTP:Response to Port 1482, '220 Microsoft FTP Service' 25 20:33:54.863 FTP:Request from Port 1482,'USER client18' 26 20:33:54.863 FTP:Response to Port 1482, '331 Password required for client18.' 27 20:33:54.863 FTP:Request from Port 1482,'PASS fenix' 28 20:33:54.878 FTP:Response to Port 1482, '230 User client18 logged in.' 29 20:33:54.878 FTP:Request from Port 1482, 'FEAT' 30 20:33:54.878 FTP:Response to Port 1482, '211 -FEAT' 31 20:33:55.003 FTP:Response to Port 1482,'211 END' 32 20:33:55.003 FTP:Request from Port 1482,'TYPE I' 33 20:33:55.003 FTP:Response to Port 1482, '200 Type set to I.' 34 20:33:55.003 FTP:Request from Port 1482, 'SYST' 35 20:33:55.003 FTP:Response to Port 1482, '215 Windows_NT' 36 20:33:55.003 FTP:Request from Port 1482,'CWD /' 37 20:33:55.003 FTP:Response to Port 1482, '250 CWD command successful.' 38 20:33:55.003 FTP:Request from Port 1482,'CWD SPB/client18.012' 39 20:33:55.003 FTP:Response to Port 1482, '250 CWD command successful.' 40 20:33:55.644 FTP:Request from Port 1482,'PORT 172,31,3,119,5,203' 41 20:33:55.644 FTP:Response to Port 1482, '200 PORT command successful.' 42 20:33:55.644 FTP:Request from Port 1482,'APPE 07AFSZ90C.012' 43 20:33:55.644 FTP:Response to Port 1482, '150 Opening BINARY mode data connection for 07AFSZ90C.012.' 44 20:33:56.534 FTP:Response to Port 1482, '425 Can't open data connection.'
Клиент получил “отлуп” от сервера банка, но при этом продолжает “висеть” и чего-то ещё ждать.
Однако, красиво. Клиент, разработанный в первую очередь для корпоративных сред, в которых NAT (а то – и не один) в порядке вещей, пытается установить активное ftp соединение! Этот вариант будет работать в корпоративной среде через “свисток” (USB-модем) или любой другой модем с белым ip. Используй клиент пассивный ftp режим (дальше приведу пример успешной сессии уже в пассивном режиме) – и никаких проблем вообще ни для кого!
Итак, проблема локализована. Необходимо заставить wCLNT.exe использовать пассивный ftp (PASV вместо PORT). P.S. До сих пор не наткнулся на эту проблему из-за особенностей реализации ФПСУ канала – использовал вариант с установкой на ISA хост. На ISA работает успешно ftp-фильтр, который и обеспечивал работоспособность активного ftp через NAT, а без этого фильтра – проблема всплыла.
Уже традиционно, консультации с техподдержкой банка к решению проблемы не привели. Специалисты техподдержки увидели “файлы нулевой длины”, из чего сделали вывод, что у нас проблемы с файрволом или антивирусом. На самом же деле файл на ftp сервере банка создаётся по команде APPE, а соединение (в ответ на PORT) с сервера банка на сервер клиента ещё не установлено, и не будет установлено. В результате – файл есть, контента в нём нет. А причина – в активном режиме ftp соединения на клиенте.
Поиски в интернете натолкнули на хитрые записи в реестре клиента:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\SBRF\WCLNT\client18\Оператор] "Passive"=dword:00000001
Выше приведено уже “правильное” значение, при установке в реестре будет 00000000. Именно этот параметр отвечает за режим ftp соединения клиента wCLNT. Беда только в том, что указанный параметр Passive придётся изменять / создавать для каждого пользователя (он не в HKLM, а в HKCU), каждого клиент-банка (для каждого clientXXXX), и для каждой учётной записи в клиент-банке (операторXXXX, администратор и так далее). И GPO здесь не особо помогут, к сожалению…
Ложка дёгтя – указанный параметр имеет силу далеко не на всех версиях клиента! Мы использовали рекомендованную нашим отделением СБ РФ 7.12.5.2225.А именно в этой версии указанный параметр не влияет на поведение клиента! Исправлена проблема начиная с версии 7.12.7, я же обновил клиента сразу до версии 7.15.2.2240. И в указанной версии изменение значения параметра Passive в реестре уже имеет силу. В результате имеем сессию:
3 21:48:45.542 FTP:Response to Port 1577, '220 Microsoft FTP Service' 4 21:48:45.542 FTP:Request from Port 1577,'USER client18' 5 21:48:45.542 FTP:Response to Port 1577, '331 Password required for client18.' 6 21:48:45.542 FTP:Request from Port 1577,'PASS fenix' 7 21:48:45.557 FTP:Response to Port 1577, '230 User client18 logged in.' 8 21:48:45.557 FTP:Request from Port 1577, 'FEAT' 9 21:48:45.557 FTP:Response to Port 1577, '211 -FEAT' 10 21:48:45.682 FTP:Response to Port 1577,'211 END' 11 21:48:45.682 FTP:Request from Port 1577,'TYPE I' 12 21:48:45.682 FTP:Response to Port 1577, '200 Type set to I.' 13 21:48:45.682 FTP:Request from Port 1577, 'SYST' 14 21:48:45.682 FTP:Response to Port 1577, '215 Windows_NT' 15 21:48:45.682 FTP:Request from Port 1577,'CWD /' 16 21:48:45.714 FTP:Response to Port 1577, '250 CWD command successful.' 17 21:48:45.714 FTP:Request from Port 1577,'CWD SPB/client18.012' 18 21:48:45.714 FTP:Response to Port 1577, '250 CWD command successful.' 19 21:48:45.714 FTP:Request from Port 1577, 'PASV' 20 21:48:45.729 FTP:Response to Port 1577, '227 Entering Passive Mode (213,148,164,75,17,207).' 21 21:48:45.729 FTP:Request from Port 1577,'APPE 07AFSZ90C.012' 22 21:48:45.729 FTP:Response to Port 1577, '125 Data connection already open; Transfer starting.' 23 21:48:45.901 FTP:Response to Port 1577, '226 Transfer complete.' 24 21:48:49.167 FTP:Request from Port 1577,'CWD /' 25 21:48:49.167 FTP:Response to Port 1577, '250 CWD command successful.' 26 21:48:49.167 FTP:Request from Port 1577,'CWD SPB/client18.012' 27 21:48:49.167 FTP:Response to Port 1577, '250 CWD command successful.' 28 21:48:49.167 FTP:Request from Port 1577, 'PASV' 29 21:48:49.182 FTP:Response to Port 1577, '227 Entering Passive Mode (213,148,164,75,17,208).' 30 21:48:49.182 FTP:Request from Port 1577,'APPE 07B0SZ90C.012' 31 21:48:49.198 FTP:Response to Port 1577, '125 Data connection already open; Transfer starting.' 32 21:48:49.401 FTP:Response to Port 1577, '226 Transfer complete.' 33 21:48:51.354 FTP:Request from Port 1577,'CWD /' 34 21:48:51.354 FTP:Response to Port 1577, '250 CWD command successful.' 35 21:48:51.354 FTP:Request from Port 1577,'CWD SPB/client18.012' 36 21:48:51.354 FTP:Response to Port 1577, '250 CWD command successful.' 37 21:48:51.354 FTP:Request from Port 1577, 'PASV' 38 21:48:51.354 FTP:Response to Port 1577, '227 Entering Passive Mode (213,148,164,75,17,209).' 39 21:48:51.354 FTP:Request from Port 1577,'APPE 07B1SZ90C.012' 40 21:48:51.370 FTP:Response to Port 1577, '125 Data connection already open; Transfer starting.' 41 21:48:51.589 FTP:Response to Port 1577, '226 Transfer complete.' 42 21:49:04.932 FTP:Request from Port 1577,'CWD /' 43 21:49:04.932 FTP:Response to Port 1577, '250 CWD command successful.' 44 21:49:04.932 FTP:Request from Port 1577,'CWD SPB/client18.012' 45 21:49:04.932 FTP:Response to Port 1577, '250 CWD command successful.' 46 21:49:04.932 FTP:Request from Port 1577, 'PASV' 47 21:49:04.948 FTP:Response to Port 1577, '227 Entering Passive Mode (213,148,164,75,17,211).' 48 21:49:04.948 FTP:Request from Port 1577,'RETR 16FF0120.RB90' 49 21:49:04.948 FTP:Response to Port 1577, '125 Data connection already open; Transfer starting.' 50 21:49:05.151 FTP:Response to Port 1577, '226 Transfer complete.' 51 21:49:06.839 FTP:Request from Port 1577,'CWD /' 52 21:49:06.839 FTP:Response to Port 1577, '250 CWD command successful.' 53 21:49:06.839 FTP:Request from Port 1577,'CWD SPB/client18.012' 54 21:49:06.839 FTP:Response to Port 1577, '250 CWD command successful.' 55 21:49:06.839 FTP:Request from Port 1577, 'PASV' 56 21:49:06.870 FTP:Response to Port 1577, '227 Entering Passive Mode (213,148,164,75,17,212).' 57 21:49:06.886 FTP:Request from Port 1577,'RETR 17000120.RB90' 58 21:49:06.886 FTP:Response to Port 1577, '125 Data connection already open; Transfer starting.' 59 21:49:07.011 FTP:Response to Port 1577, '226 Transfer complete.' 60 21:49:08.761 FTP:Request from Port 1577,'CWD /' 61 21:49:08.761 FTP:Response to Port 1577, '250 CWD command successful.' 62 21:49:08.761 FTP:Request from Port 1577,'CWD SPB/client18.012' 63 21:49:08.761 FTP:Response to Port 1577, '250 CWD command successful.' 64 21:49:08.776 FTP:Request from Port 1577, 'PASV' 65 21:49:08.776 FTP:Response to Port 1577, '227 Entering Passive Mode (213,148,164,75,17,213).' 66 21:49:08.776 FTP:Request from Port 1577,'RETR 17010120.RB90' 67 21:49:08.776 FTP:Response to Port 1577, '125 Data connection already open; Transfer starting.' 68 21:49:08.979 FTP:Response to Port 1577, '226 Transfer complete.'
Вместо PORT видим PASV, то есть имеем пассивный режим ftp, который будет совместим с любым NAT. Итого – проблема решена.
Итоги
Итак, описанная проблема возникнет:
- если у Вас серые IP и NAT без ftp фильтра;
- даже если у Вас NAT с ftp фильтром (скажем – ISA/TMG), но соединение с банком – через Амикон ФПСУ IP/клиент (потому как ftp фильтр на NAT в этом случае бессилен);
- и даже если у Вас “свисток” или иной модем, но с серым IP.
И решается проблема:
- либо исключением NAT (белый ip, настройка файрвола под ftp);
- либо ftp фильтром на NAT (но до ФПСУ ip клиента!);
- либо установкой параметра Passive в реестре, как показано выше, и обновлением версии клиента.
Огромная просьба к разработчикам клиент-банка СБ РФ:
- исключите полностью возможность использования активного ftp соединения (пассивный ftp ни у кого проблем не создаст);
- ну или в крайнем случае обеспечьте поддержку и приоритетность параметра Passive в ключе HKLM\Policies\Software\SBRF\WCLNT (именно в этом ключе, а не “глубже”, в крайнем случае — HKCU\Policies\Software\SBRF\WCLNT) над прочими параметрами Passive в HKCU (в этом случае хотя бы будет возможность через GPO установить данный параметр для всех инстанций клиент-банка, сейчас же – придётся работать руками).
Коллеги, если кто знает иной способ заставить клиента использовать всегда пассивный режим ftp – буду благодарен за Ваши комментарии. Пока же решение крайне неудобное для корпоративной среды.
Отзывы » (3)
RSS комментарии
Обратная ссылка
Проблема «вскрылась» только при использовании версии 4.3. Амикон ФПСУ ip клиента, предыдущие версии фильтра успешно проксировали активное ftp соединение клиент-банка. Тот факт, что клиент ФПСУ должен проксировать активные ftp соединения до его хостов (в терминологии ФПСУ), подтверждён высказываниями разработчиков http://amicon.ru/forum/viewtopic.php?f=3&t=1520&p=7534#p7534. Однако с версией 4.3 фильтра этот фокус не прошёл. Пока внятного ответа от разработчиков не получил, по их информации всё должно работать и сейчас.
P.S. Есть, конечно, предположение, что играет не последнюю роль очерёдность установки Амикон ФПСУ IP клиента и NAT на Amicon интерфейсе ФПСУ маршрутизатора, ещё буду тестировать. Буду благодарен Вам за любые наблюдения в части проксирования активных ftp соединений клиент-банка со стороны ФПСУ клиента 4.3.
В форуме неофициальной поддержки СБ РФ коллега ZhooChee подсказал WSH сценарий для правки реестра. Пока склоняюсь к следующему решению: заменяю ярлык на запуск клиент-банка, в ярлыке запускаю powershell сценарий, в котором как раз и проделываю все необходимы операции в реестре текущего пользователя, после чего уже запускаю сам клиент-банк. Такой вариант мне кажется пока оптимальным.
Дойдут руки — напишу.
Пока здесь следы оставлю — неплохой на первый взгляд рецепт для хранения подписей: http://www.sbforum.ru/showthread.php?t=7298.
И ещё вариант — http://www.sbforum.ru/showthread.php?t=6745 — через subst.