Перейти к содержанию

Использование FTP proxy#

Протокол FTP (File Transfer Protocol) является одним из старейших прикладных протоколов и предназначен для передачи файлов между сервером и клиентом. Данный протокол для работы поверх IP был описан в RFC 765 и RFC 959 и в дальнейшем дополнялся различными стандартами. Для фильтрации данного протокола в Numa Edge присутствует функционал ftpproxy, который позволяет осуществлять фильтрацию команд прикладного уровня протокола. В данном документе описано использование функционала ftpproxy.

Описание работы протокола FTP#

Типичным сценарием использования протокола FTP является установления соединение клиента с сервером с последующей загрузкой файлов с сервера либо на сервер. Установления соединения может осуществляться после ввода клиентом идентификационных данных либо без них (на сервере может быть разрешен анонимный режим работы). Протокол FTP использует два параллельных TCP-соединения:

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

Для управляющего соединения используется порт 21/TCP, к которому подключается клиент. Это соединение, в отличие от соединения данных, активно на протяжении работы с FTP-сервером и передачи информации.

Используемый порт для соединения данных изменяется в зависимости от режима работы FTP-сервера:

  • в активном режиме – клиент передает серверу номер порта, который он открывает для подключения сервера. Исходящий порт сервера 20/TCP;
  • в пассивном режиме – в этом случае сервер сам назначает порт для соединения данных из предварительного настроенного диапазона (по умолчанию 1024-65535). Данный режим, после изменения диапазона портов пассивного режима, принято использовать при прохождении FTP-соединения через NAT.

Возможности фильтрации протокола FTP с использованием FTP Proxy#

FTP-прокси, как и любой другой прокси-сервер, использует промежуточное устройство посредника для сокрытия реального IP адреса. Применимо к FTP-прокси, возможно расположение FTP-сервера внутри защищенного периметра и настройка на Numa Edge службы ftpproxy для сокрытия реального IP-адреса сервера. Другой особенностью данной службы является разбор передаваемых сообщений внутри управляющего соединения, с последующим принятием решения о разрешении или запрете их передачи в зависимости от IP-адресов отправителя и получателя, а также имени пользователя.

Правила фильтрации разделены на две группы:

  • auth-rules: правила аутентификации, которые выполняются на этапе подключения к прокси-серверу и регламентируют возможность данного подключения;
  • command-rules: правила команд, которые работают только после успешной аутентификации и регламентируют возможность выполнения команд.

Функционал Numa Edge позволяет фильтровать следующие команды протокола:

  • APPE – добавить новый файл;
  • CDUP – перейти в родительский каталог;
  • CWD – перейти в директорию;
  • DELE – удалить файл;
  • LIST – получить содержимое каталога;
  • MDTM – вернуть время последнего изменения указанного файла;
  • MKD – создать директорию;
  • NLST – вернуть список имен файлов в указанном каталоге;
  • RETR – скачать файл;
  • RMD – удалить директорию;
  • RNFR – выбрать файл для переименования;
  • RNTO – переименовать файл;
  • SIZE – вернуть размер файла;
  • STAT – вернуть информацию о состоянии сервера, включая состояние текущего соединения;
  • STOR – загрузить файл;
  • STOU – хранить файл уникальным образом;
  • XCUP – перейти к родительскому элементу текущего рабочего каталога;
  • XCWD – перейти в директорию;
  • XMKD – создать директорию;
  • XRMD – удалить директорию.

Обратите внимание, что некоторые команды могут повторять смысл друг друга. Это объясняется различными стандартами RFC, в которых данные команды были описаны.

Примечание

Поддерживается работа (фильтрация) только для 1 FTP-сервера, на который служба ftpproxy перенаправляет соединения. В случае использования парольной аутентификации, имя пользователя и пароль передаются в открытом виде как при установлении соединения от клиента к ftpproxy на Numa Edge, так и от Numa Edge к FTP-серверу. Разбор соединений, зашифрованных TLS (FTPS) службой ftpproxy, не поддерживается.

Пример настройки FTP Proxy#

Настройка правил FTP proxy#

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

ftp1

Схема сети с FTP-сервером

В данной схеме Numa Edge выступает в роли FTP-прокси-сервера, и перенаправляет сообщения протокола FTP между клиентом и сервером. Настройка FTP-server и FTP-client в данном примере не рассматривается. В этом примере FTP-server находится во внутренней сети 192.168.1.0/24, а клиенты подключаются из внешней сети Интернет. На Numa Edge настроен адрес из внешней сети на интерфейсе eth1 – 203.0.113.1/24.

Примечание

В этом примере подразумевается, что внутренняя сеть находится за NAT, но поскольку ftpproxy будет настроен на прослушивание адреса из внешней сети 203.0.113.1, то настройка проброса портов для FTP-сервера не потребуется.

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

Пример – Настройка ftpproxy#
  1. Настройка адреса, на котором ftpproxy будет ожидать соединения. По умолчанию используется порт 21/TCP:
    [edit]
    admin@edge# set service ftpproxy internal address '203.0.113.1'
    
  2. Настройка адреса FTP-сервера, на который ftpproxy будет перенаправлять соединения:
    [edit]
    admin@edge# set service ftpproxy remote-server '192.168.1.100'
    
  3. Настройка действия по умолчанию, которое безусловно разрешает все команды для любых пользователей с любых IP-адресов:
    [edit]
    admin@edge# set service ftpproxy default-action 'permit'
    
  4. Настройка правила 10, ограничивающее удаление каталогов для пользователя ftpuser:
    1
    2
    3
    4
    5
    6
    [edit]
    admin@edge# set service ftpproxy command-rules 10 command 'RMD'
    [edit]
    admin@edge# set service ftpproxy command-rules 10 user 'ftpuser'
    [edit]
    admin@edge# set service ftpproxy command-rules 10 action 'deny'
    
  5. Настройка правила 20, ограничивающее удаление файлов для пользователя ftpuser:
    1
    2
    3
    4
    5
    6
    [edit]
    admin@edge# set service ftpproxy command-rules 20 command 'DELE' 
    [edit]
    admin@edge# set service ftpproxy command-rules 20 user 'ftpuser' 
    [edit]
    admin@edge# set service ftpproxy command-rules 20 action 'deny'
    
  6. Настройка правила 30, ограничивающее удаление каталогов альтернативной командой FTP для пользователя ftpuser:
    1
    2
    3
    4
    5
    6
    [edit]
    admin@edge# set service ftpproxy command-rules 30 command 'XRMD'
    [edit]
    admin@edge# set service ftpproxy command-rules 30 user 'ftpuser'
    [edit]
    admin@edge# set service ftpproxy command-rules 30 action deny
    
  7. Применение изменений:
    [edit]
    admin@edge# commit
    
  8. Просмотр полученной конфигурации:
    [edit]
    admin@edge# show service ftpproxy  
      command-rules 10 { 
          action deny
          command RMD 
          user ftpuser 
      } 
      command-rules 20 { 
          action deny
          command DELE 
          user ftpuser 
      } 
      command-rules 30 {
          action deny
          command XRMD
          user ftpuser
      }
      default-action permit 
      internal { 
          address 203.0.113.1 
      } 
      remote-server 192.168.1.100
    

Запрет доступа к FTP-серверу для определенного пользователя#

Предположим, что необходимо запретить определенному пользователю доступ на FTP-сервер. Для этого необходимо создать запрещающее правило auth-rule, в котором будет указано имя данного пользователя. В следующем примере описано как произвести данную настройку.

Пример – Запрет доступа на FTP-сервер определенному пользователю#
  1. Создание правила доступа, в котором указывает имя пользователя baduser:
    [edit]
    admin@edge# set service ftpproxy auth-rules 10 user baduser
    
  2. Запрет доступа к FTP-серверу для данного пользователя:
    [edit]
    admin@edge# set service ftpproxy auth-rules 10 action deny
    
  3. Применение изменений:
    [edit]
    admin@edge# commit
    
  4. Просмотр получившейся конфигурации службы ftpproxy:
    [edit]
    admin@edge-no-dm# show service ftpproxy  
      auth-rules 10 {
          action deny
          user baduser
      }
      command-rules 10 {
          action deny
          command RMD
          user ftpuser
      }
      command-rules 20 {
          action deny
          command DELE
          user ftpuser
      }
      command-rules 30 {
          action deny
          command XRMD
          user ftpuser
      }
      default-action permit
      internal {
          address 203.0.113.1
      }
      remote-server 192.168.1.100
    

Настройка правил МЭ для разрешения только FTP-трафика#

В качестве следующего примера будет произведена настройка правил межсетевого экранирования на Numa Edge. Поскольку служба ftpproxy работает на самом Numa Edge, правила будут применяться для входящего локального трафика (направление local) для внешнего интерфейса, к которому подключаются клиенты (eth2 согласно схеме на рисунке выше). Команды, приведенные в данном примере, ограничивают весь трафик, кроме явно разрешенного. Для этого будет создано правило фильтрации трафика, которое будет добавлено в политику межсетевого экранирования. В случае если в реальном использовании у вас уже существует политика межсетевого экранирование, вы можете добавить в нее новое правило по аналогии с представленным примером.

Для разрешения входящих соединений только для FTP-трафика выполните следующие действия:

Пример – Настройка политик межсетевого экранирования, разрешающих только входящий FTP-трафик#
  1. Создание фильтра FTP, в правиле под номером 10 которого указывается, что необходимо помечать трафик с портом назначения 21/TCP:
    1
    2
    3
    4
    [edit]
    admin@edge# set filter FTP rule 10 destination port '21'
    [edit]
    admin@edge# set filter FTP rule 10 protocol 'tcp'
    
  2. В этот же фильтр добавляются установленные (established) и ссылающиеся на установленные соединения (related). Последние используются для разрешения соединения данных. Данный механизм подходит как для активного, так и для пассивного режима работы FTP-сервера:
    1
    2
    3
    4
    [edit]
    admin@edge# set filter FTP rule 20 state established 'enable'
    [edit]
    admin@edge# set filter FTP rule 20 state related 'enable'
    
  3. Фиксация изменений политики фильтрации:
    [edit]
    admin@edge# commit
    
  4. Просмотр изменений:
    [edit] 
    admin@edge-no-dm# show filter FTP  
      rule 10 { 
          destination { 
              port 21 
          } 
          protocol tcp 
      } 
      rule 20 { 
          state { 
              established enable 
              related enable 
          } 
      } 
    
  5. Создание политики межсетевого экранирования с именем FTP-only. Правило 10 разрешает трафик, попавший под ранее настроенную политику фильтрации FTP:
    1
    2
    3
    4
    [edit]
    admin@edge# set policy firewall FTP-only rule 10 action 'accept'
    [edit]
    admin@edge# set policy firewall FTP-only rule 10 match filter 'FTP'
    
  6. Действие по умолчанию отбрасывает весь трафик, не попавший под настроенные правила:
    [edit]
    admin@edge# set policy firewall FTP-only default-action 'drop'
    
  7. Фиксация изменений политики межсетевого экранирования:
    [edit]
    admin@edge# commit
    
  8. Просмотр получившихся изменений:
    [edit] 
    admin@edge# show policy firewall FTP-only  
      default-action drop 
      enable-default-log 
      rule 10 { 
          action accept 
          match { 
              filter FTP 
          } 
      } 
    

Настройка правил NAT для работы FTP proxy в прозрачном режиме#

Предположим, необходимо настроить FTP proxy таким образом, чтобы клиенты FTP не подозревали о его существовании. Данный метод реализуется с помощью так называемого «прозрачного режима». Для его реализации необходимо настроить правила NAT, перенаправляющие FTP-трафик, адресом назначения которого является FTP-сервер на FTP proxy.

Примечание. Для настройки данного метода используется IP-адресация как в примере выше с тем лишь условием, что у устройств FTP-server и FTP-client есть маршруты до подсетей друг друга.

Для настройки FTP proxy в прозрачном режиме выполните следующие действия:

Пример – Настройка правил NAT для работы в «прозрачном режиме»#
  1. Создание правила NAT, с номером 10 в режиме преобразования адреса получателя (DNAT):
    [edit]
    admin@edge# set service nat ipv4 rule 10 type destination 
    
  2. Данное правило будет срабатывать для трафика, адресом назначения которого является 192.168.1.100 и портом назначения 21:
    1
    2
    3
    4
    [edit]
    admin@edge# set service nat ipv4 rule 10 destination address 192.168.1.100
    [edit]
    admin@edge# set service nat ipv4 rule 10 destination port 21
    
  3. При указании специфического порта обязательным условием является задание протокола, в данном случае TCP:
    [edit]
    admin@edge# set service nat ipv4 rule 10  protocol tcp
    
  4. Для применения правил фильтрации данный трафик должен поступать на порт eth2:
    [edit]
    admin@edge# set service nat ipv4 rule 10 inbound-interface eth2
    
  5. Данное правило фильтрации перенаправляет трафик, попавший под описание, на адрес 203.0.113.1 и порт 21. Этот адрес и порт прослушивает служба ftpproxy согласно настройкам в примере выше:
    1
    2
    3
    4
    [edit]
    admin@edge# set service nat ipv4 rule 10 inside-address address 203.0.113.1
    [edit]
    admin@edge# set service nat ipv4 rule 10 inside-address port 21