ИнфоАптека ®

Автоматизация аптек и аптечных сетей

Инструменты пользователя

Инструменты сайта


user:vmsirenko:ftp_сервер

Собственный FTP сервер

Чтобы не быть зависимым в обмене информацией с аптеками от Аптека-Холдинг, настроил собственный программный FTP сервер. Через этот же FTP сервер происходит обмен информацией с некоторыми поставщиками.

Собственный FTP сервер разумеется логичнее располагать в ЦО или у хостинг-провайдера, где перебоев с интернетом быть не должно.

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

В штатном режиме подключение одного провайдера используется для выхода в интернет, а подключение второго провайдера больше используется для входящих соединений (FTP, RDP, WWW).

Так, как пока большинство наших компьютеров работают под управлением ОС MS Windows1), можно воспользоваться встроенным FTP сервером.

Brute Force

Встроенный в MS Windows FTP сервер не обладает защитой от перебора паролей злоумышленниками. Для решения этой задачи на IIS 7.5 я написал командный файл, который обрабатывает файл журнала FTP сервера, находит там не менее 10 попыток неправильного ввода пары пользователь-пароль и заносит в список ограничений по IPv4 и напротив, если имя пользователя и пароль были успешно введены, заносит адрес в список разрешений.

forceFTP.cmd
@echo off
c:
cd %~dp0

::Путь к файлу журнала
set ftplog=C:\inetpub\logs\LogFiles\FTPSVC1
::Имя FTP сервера в списке сайтов IIS
set ftpname=ftp
 
echo %date% %time% Start>>%~dpn0.log
set log=ex%date:~-2%%date:~3,2%%date:~0,2%.log
echo %date% %time% %ftplog%\%log%>>%~dpn0.log
if exist %~dpn0.tmp del %~dpn0.tmp
 
call :list
 
find "PASS *** 530" %ftplog%\%log%>%~dpn0.tmp
for /f "tokens=3" %%a in (%~dpn0.tmp) do call :ip %%a
 
find "PASS *** 230" %ftplog%\%log%>%~dpn0.tmp
for /f "tokens=3" %%a in (%~dpn0.tmp) do call :ipallow %%a
 
echo %date% %time% Stop>>%~dpn0.log
exit
 
:ipallow
find "%1" %~dpn0.xml && goto :eof
echo %date% %time% Allow_IP %1>>%~dpn0.log
%windir%\System32\inetsrv\appcmd.exe set config "%ftpname%" -section:system.ftpServer/security/ipSecurity /+"[ipAddress='%1',allowed='True']" /commit:apphost>>%~dpn0.log
call :list
goto :eof
 
:ip
find "%1" %~dpn0.xml && goto :eof
 
if defined %1 goto :eof
set %1=%1
 
for /f "tokens=3" %%a in ('find /c "%1" %~dpn0.tmp') do call :max %%a %1
goto :eof
 
:max
set max=%1
if not defined max set max=1
if %1 LSS 10 echo %date% %time% Skip_IP %2 = %max%>>%~dpn0.log
if %1 GEQ 10 echo %date% %time% Block_IP %2 = %max%>>%~dpn0.log
if %1 GEQ 10 %windir%\System32\inetsrv\appcmd.exe set config "%ftpname%" -section:system.ftpServer/security/ipSecurity /+"[ipAddress='%2',allowed='False']" /commit:apphost>>%~dpn0.log
if %1 GEQ call :list
goto :eof
 
:list
%windir%\System32\inetsrv\appcmd.exe list config "%ftpname%" -section:system.ftpServer/security/ipSecurity />%~dpn0.xml
goto :eof

Опрос

ftp
Каким FTP сервером вы пользуетесь для обмена документами с аптеками?
1)
о санкциях стараемся не думать
Только авторизованные участники могут оставлять комментарии.
user/vmsirenko/ftp_сервер.txt · Последние изменения: 2017/02/21 13:56 — Владимир Сиренко