Ftp linux passive mode

настройка пассивного режима vsftpd

Доброго всем времени суток! Есть ftp-сервер vsftpd на debian 8, крутящийся в VMWare Workstation на винде, в винде нужный диапазон портов открыт (61000-62000), в настройках NAT вмвари порты прокинуты (61000-61029), vsftpd.conf содержит такие настройки

С чего вы взяли, что по рандомным?

Entering Passive Mode (192,168,247,130,238,80)

Это и есть 61008

а что означают последние 2 значения в скобках?

Арифметику 2-й класс. 238*256+80

я этого не знал, спасибо)) Тем не менее, проблема актуальна, не могу подключиться ниоткуда

А знаете ли вы что (c) в гугле на запрос «пассивный режим ftp файрвол» вам выдадет миллон ссылок, но я не одной не видел правильной? Меня это так бесит, что спать не могу. Скорее всего, если вас посетило такое дурацкое желание ограничить порты, то вы и наткнулись на эту проблему.

Какой вопрос — такой ответ. Не обессудьте. Нет данных для другого ответа.

Посмотрите на клиенте что возвращает на ответ PASV. Я не знаток VMWare Workstation но не исключаю что не умеет nat-ть ftp сервер.

ТС и привел лог клиента. Ему коннектиться надо к указанному адресу:порту и выплёвывать полученный листинг файлов на вывод.

нет, это как раз лог сервера при попытке на стороне клиента передать файл или сменить директорию или просмотреть список файлов выдаётся ошибка «500 Illegal PORT command» с любого клиента

И всетаки я повторю свой вопрос со стороны клиента что? Поясню сервер передает 192,168,247,130 это серый адрес если клиент его получает таким же то конечно работать не будет.

А вообще зачем вам ftp в 2017-м году, да и еще с таким извратом? Есть же sftp

Источник

Доступ к FTP-серверу за NAT

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

В зависимости от способа установления соединения для передачи данных различают активный и пассивный режимы работы FTP. В активном режиме сервер сам устанавливает соединение передачи данных к клиенту, в пассивном наоборот.

Активный режим

В активном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PORT , в которой указывает свой адрес и порт для передачи данных. Получив данную команду, сервер устанавливает соединение с 20 порта на указанный в команде порт клиента.

Тут сразу виден недостаток данного метода: для работы в активном режиме клиенту требуется выделенный IP-адрес. Также определенные сложности будут возникать при нахождении клиента за брандмауэром или NAT-ом.

Пассивный режим

В пассивном режиме клиент устанавливает управляющее соединение на порт 21 сервера и передает специальную команду PASV . В ответ сервер передает адрес и порт, на который следует устанавливать соединение для передачи данных. Получив эту информацию, клиент устанавливает подключение к серверу и начинает передачу данных.

Как видим, в пассивном режиме все соединения инициирует клиент и поэтому к нему нет никаких требований, он может находиться за NAT и брандмауэром, а также не иметь выделенного IP-адреса. Поэтому на сегодняшний день основным режимом работы FTP является пассивный.

FTP сервер за NAT

У меня дома компьютер с установленной Windows 10 и VirtualBox. Давайте создадим несколько виртуальных машин: router , pc-1 , pc-2 , ftp-server и web-server (будет играть роль FTP-клиента). У виртуальной машины router два сетевых интерфейса:

  • enp0s3 (сетевой мост) — смотрит в домашнюю сеть, получает ip-адрес 192.168.110.8 от роутера Keenetic Air
  • enp0s8 (виртуальная сеть) — смотрит в одну сеть с виртуальными машинами pc-1 , pc-2 и ftp-server

Виртуальная машина router обеспечивает выход в интренет для pc-1 , pc-2 и ftp-server . Все это более подробно можно прочитать здесь. А если совсем коротко, то тогда так

Давайте установим на виртуальную машину ftp-server FTP-сервер vsftpd :

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

  • pasv_enable=NO — используется только активный режим
  • pasv_enable=YES — можно использовать пассивный режим
  • pasv_address=XXX.XXX.XXX.XXX — этот ip-адрес сервер будет передавать клиенту вместо своего в ответ на PASV
  • pasv_min_port и pasv_max_port — сервер будет отправлять клиенту порт из этого диапазона в ответ на PASV

Теперь на виртуальной машине router настроим перенаправление пакетов, которые приходят на внешней интерфейс enp0s3 , порт 21 — это управляющее соединение от клиента к серверу:

И будем перенаправлять пакеты, которые приходят на внешней интерфейс enp0s3 , порт 60000-60100 , при работе в пассивном режиме — это соединение от клиента к серверу для передачи данных:

Читайте также:  Отключение режима энергосбережения linux

Сохраняем новые правила, чтобы они применились после перезагрузки:

Активный режим

В реальной ситуации FTP-клиент и маршрутизатор должны иметь белые ip-адреса. Но мы здесь моделируем ситуацию, как будто бы у них белые ip-адреса. Просто потому, что у нас маршртузатор и FTP-клиент находятся в одной сети 192.168.110.0/24 и видят друг друга. Когда FTP-клиент устанавливает управляющее соединение с FTP-сервером — он отправляет пакеты на внешний интерфейс маршрутизатора, на порт 21. А маршрутизатор отправляет эти пакеты внутрь сети 192.168.30.0/24 — на ip-адрес 192.168.30.254 FTP-сервера (DNAT, первое правило).

Вроде все готово для испытаний, файл конфигурации FTP-сервера разрешает использовать только активный режим. Пробуем из сети 192.168.110.0/24 подключиться к FTP-серверу за NAT с виртуальной машины web-server (ip-адрес 192.168.110.12 ).

Сервер получил от клиента команду PORT и успешно ее обработал — PORT command successful . Сервер устанавливает соединение с 20 порта на указанный в команде PORT ip-адрес и порт клиента и отправляет листинг директории. Адрес клиента — это 192.168.110.12 , сервер отправит данные в шлюз 192.168.30.1 (по дефолтному маршруту), маршрутизатор перебросит пакеты с интерфейса enp0s8 на enp0s3 и отправит дальше — FTP-клиенту web-server .

Пассивный режим

Теперь изменим настройки сервера, чтобы разрешить работу в пассивном режиме:

Пробуем подключиться к серверу

После команды passive ( PASV , пассивный режим), сервер сообщает клиенту ip-адрес 192.168.110.8 из директивы pasv_address (вместо своего 192.168.30.254 ) и порт — 60053 (порт вычисляется как 234*256+149=60053 ). А клиент устанавливает еще одно соединение с сервером — уже для передачи данных.

Тут важно то, что FTP-сервер сообщает FTP-клиенту не свой серый ip-адрес, а белый ip-адрес внешнего интерфейса шлюза (который на самом деле серый, но мы только моделируем реальную ситуацию). И сообщает порт из диапазона 60000-60100, который мы задали в настройках FTP-сервера. FTP-клиент отправляет пакеты с данными на белый ip-адрес маршрутизатора (который на самом деле серый), на порт 60053 . А маршрутизатор отправляет эти пакеты внутрь сети 192.168.30.0/24 — на ip-адрес 192.168.30.254 FTP-сервера (DNAT, второе правило).

Источник

Основные FTP команды в Linux

FTP (File Transfer Protocol — протокол передачи файлов) — это популярный сетевой протокол, который используется для копирования файлов с одного компьютера на другой в локальной сети, либо в сети Интернет. FTP является одним из старейших прикладных протоколов, появившимся задолго до HTTP, и даже до TCP/IP, в 1971 году.

Протокол FTP уязвим, то есть FTP не может зашифровать свой трафик, все передачи — открытый текст, поэтому имена пользователей, пароли, команды и данные могут быть прочитаны кем угодно, способным перехватить пакет по сети. Для безопасной передачи данных, используется протокол SFTP (Secure File Transfer Protocol). В отличие от стандартного FTP он шифрует и команды, и данные, защищая пароли и конфиденциальную информацию от открытой передачи через сеть. По функциональности SFTP похож на FTP, но так как он использует другой протокол, клиенты стандартного FTP не могут связаться с SFTP-сервером и наоборот. Далее рассмотрим основные команды для работы с FTP программой.

FTP соединение

FTP клиент входит в большинство дистрибутивов Linux. Начнем с запуска программы и ftp соединением и, конечно, рассмотрим основные команды для скачивания с фтп-сервера и загрузки на фтп, создание директорий, удаление файлов и т.п. В этой статье опишем лишь основные команды, а в конце статьи приведем хелп и мануал из консоли — Вы всегда можете узнать о назначении команды и ее синтаксисе, а также обо всех доступных командах на конкретном ftp-сервере.

Для начала фтп соединения достаточно ввести команду ftp например:

После нажатия клавиши enter вывод команды будет следующим:

Другой способ для соединения — это запуск ftp из консоли, а после этого соединение с ftp-сервером с помощью команды open :

Кроме того, возможно соединиться и по ip:

Или с таким обращением ftp user@ftp.site.com , то есть:

Далее необходимо ввести логин и пароль ftp-соединения.

После успешной авторизации будет сообщение такого вида:

Из сообщения видно, что для передачи файлов используется двоичный (бинарный) тип передачи. Двоичный режим передачи файлов — это передача файлов в том виде, в котором они хранятся на FTP сервере. Режим Ascii (текстовый) используется для передачи только текстовых файлов. Вы можете вводить команды ascii или binary для переключения между режимами передачи. Бинарный режим (binary) необходимо использовать для всех нетекстовых типов файлов — изображения, архивы, программы и т.д.

Команды для навигации

Итак, перейдем к командам для навигации и перехода по каталогам ftp-сервера:

pwd — команда покажет текущую директорию на ftp-сервере:

ls — команда покажет список файлов и каталогов в текущей директории:

cd – команда для перехода в нужную директорию:

Проверяем командой pwd :

mkdir — создание новой директории (каталога):

rmdir — удаление директории (каталога):

Удаление файлов на ftp сервере

delete — удаляет файл на удаленном ftp сервере:

Скачивание файлов с ftp

get — скачать файл на локальную машину. get fileName или get fileName newFileName

Скачиваем file.zip на локальную машину как file2.zip:

Читайте также:  Ошибка при загрузке windows inaccessible boot device

С помощью команды get с удаленного ftp сервера файлы копируются в текущую локальную директорию. Чтобы изменить текущую локальную директорию нужно использовать команду lcd :

lcd – изменить текущую директорию на локальной машине:

Чтобы скачать несколько файлов с удаленного ftp сервера на локальную машину можно использовать команду mget :

Скачивание каждого файла необходимо подтверждать (да / нет) y/n .

Еще один вариант скачивания mget :

Загрузка файлов на ftp сервер

put — команда для загрузки одного файла на ftp сервер:

Для загрузки нескольких файлов сразу можно использовать команду mput :

Загрузку каждого файла необходимо подтверждать y / n (да / нет).

Еще один вариант команды mput :

Если на фтп загружаются файлы большого размера, то неплохо было бы наблюдать за ходом загрузки. Для этого можно использоваться команды hash и tick .

hash — команда после которой ftp будет печатать символ «#» каждые 1024 байт данных:

tick — команда будет отображать счетчик байтов:

Вот и весь базовый набор команд для работы с ftp в консоле. Для просмотра списка доступных команл на данном FTP сервере можно использовать команду help :

Также, можно получить короткую справку по каждой команде help :

И в завершение, две команды, которые выше quit или bye для закрытия ftp-сессии и выхода:

Подробную информацию с описанием команд можно получить с помощью man ftp в командной строке:

Источник

Ftp linux passive mode

Команда ftp предназначена для задействования одноименной утилиты, представляющей собой FTP-клиент с интерфейсом командной строки.

Протокол FTP (File Transfer Protocol), как несложно догадаться из его названия, предназначен для передачи файлов между компьютерами. Ввиду того, что он предусматривает передачу паролей без шифрования, он является одним из самых небезопасных сетевых протоколов наряду с протоколом Telnet и не должен использоваться в случае поддержки сервером таких более безопасных протоколов для передачи файлов, как sftp и ftps. Помимо утилиты ftp в Linux для работы с серверами FTP могут также использоваться утилиты с графическим интерфейсом, такие, как Filezilla или Nautilus. FTP-серверы принимают соединения на порту 21; для передачи данных используются другие порты, что затрудняет использование межсетевых экранов.

Базовый синтаксис команды выглядит следующим образом:

$ ftp [параметры] [узел[:порт]]

Утилита работает в интерактивном режиме и поддерживает ограниченное количество параметров. Наиболее важными параметрами являются параметры -4 и -6, позволяющие использовать для связи с сервером лишь протокол IPv4 и IPv6 соответственно, параметр -p, позволяющий активировать пассивный режим (упрощающий работу в системах с межсетевыми экранами, защищающими от соединений извне), параметр -i, позволяющий не выводить запросы при передаче множества файлов в интерактивном режиме, параметр -n, запрещающий читать данные для входа на сервер из файла .netrc в домашней директории и осуществлять автоматический вход, параметр -e, деактивирующий поддержку механизма истории в рамках интерактивной сессии и параметр -g, деактивирующий поддержку механизма шаблонов имен файлов.

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

bye

exit

quit

close

disconnect

dir [имя удаленной директории] [имя локального файла]

ls [имя удаленной директории] [имя локального файла]

get [имя локального файла]

recv [имя локального файла]

help [команда]

? [команда]

mdir [имена директорий] [имя локального файла]

mls [имена директорий] [имя локального файла]

nlist [имена директорий] [имя локального файла]

put [имя удаленного файла]

send [имя удаленного файла]

Команда Назначение
! [команда] Выполнить команду в локальной системе
ascii Активировать текстовый режим передачи данных (ASCII). Он используется по умолчанию.
bell Использовать звуковой сигнал для индикации окончания передач файлов.
binary Активировать бинарный режим передачи данных.
Завершить работу утилиты.
cd Изменить рабочую директорию на удаленной системе.
chmod Изменить права доступа к файлу на удаленной системе.
Завершить сессию FTP с удаленным сервером и вернуться в интерактивный режим.
cr Переключить режим обработки переходов на новые строки. При активации их обработки будет удаляться символ возврата каретки для совместимости с UNIX-системами.
delete Удалить файл на удаленной системе.
debug [уровень отладки] Активировать режим отладки с заданным уровнем. В этом режиме утилита будет выводить все отправляемые серверу команды и ответы на них.
Вывести список содержимого директории на удаленной системе или записать его в файл на локальной системе в случае указания имени этого файла.
Получить файл с удаленной системы и сохранить его под заданным именем в локальной системе.
hash Выводить символ решетки для индикации передачи каждого 1024-байтового блока.
Вывести информацию о команде.
idle [секунды] Установить длительность периода ожидания перед автоматическим разрывом соединения с сервером.
ipany Использовать IP-адрес любого типа после разрешения имени сервера.
ipv4 Использовать адрес IPv4 после разрешения имени сервера.
ipv6 Использовать адрес IPv6 после разрешения имени сервера.
lcd [имя директории] Изменить рабочую директорию в локальной системе.
mdelete Удалить множество перечисленных файлов на удаленной системе.
Вывести список содержимого множества перечисленных директорий на удаленной системе или записать его в файл на локальной системе в случае указания имени этого файла.
mget [имена удаленных файлов] Получить множество перечисленных файлов с удаленной системы и сохранить его в локальной системе.
mkdir Создать директорию с заданным именем на удаленной системе.
modtime Показать время последней модификации файла на удаленной системе.
mput Загрузить множество перечисленных локальных файлов на удаленную систему.
newer [имя локального файла] Загрузить указанный файл с удаленной системы лишь в том случае, если он был изменен позднее указанного файла с локальной системы.
open [порт] Установить соединение с сервером с заданным адресом и портом.
passive Включить/выключить пассивный режим.
prompt Переключить режим вывода подтверждений при передаче множества файлов.
Загрузить указанный локальный файл на удаленную систему под заданным именем.
pwd Вывести имя текущей директории на удаленной системе.
reget [имя локального файла] Продолжить загрузку файла с заданным именем с удаленной системы с сохранением этого файла под заданным именем на локальной системе.
rename [имя файла] [новое имя файла] Сменить имя файла на удаленной системе.
rmdir Удалить директорию на удаленной системе.
size Вывести размер файла на удаленной системе.
system Вывести информацию об операционной системе сервера.
umask Установить значение маски прав доступа для загружаемых на сервер файлов.
user [пароль] Представиться серверу.

Установка утилиты

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

Команда для Linux Mint и Ubuntu:

$ sudo apt-get install ftp

Команда для Fedora Workstation:

$ sudo dnf install ftp

Примеры использования

Загрузка файлов на сервер

Для начала нужно соединиться с сервером. В данном случае используется анонимный сервер TELE2, поэтому в качестве имени пользователя вводится anonymous, а в качестве пароля — пустая строка (для ее ввода достаточно просто нажать на клавишу Enter).

$ ftp speedtest.tele2.net
Connected to speedtest.tele2.net.
220 (vsFTPd 2.3.5)
Name (speedtest.tele2.net:alexu): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

Сервер позволяет загружать файлы лишь в директорию upload, поэтому следует перейти в нее.

ftp> cd upload
250 Directory successfully changed.

Для корректной загрузки нужно активировать пассивный режим:

ftp> passive
Passive mode on.

Теперь можно перейти в директорию с загружаемыми файлами на локальной системе и использовать команду mput для загрузки файлов. Команда поддерживает шаблоны имен файлов и именно с помощью такого шаблона на сервер загружаются три файла изображения:

ftp> lcd nolf228/
Local directory now /home/alexu/nolf228
ftp> mput *.jpg
mput nolf228.jpg? y
227 Entering Passive Mode (90,130,70,73,97,210).
150 Ok to send data.
226 Transfer complete.
190576 bytes sent in 0.16 secs (1.1299 MB/s)
mput splash1024.jpg? y
227 Entering Passive Mode (90,130,70,73,86,152).
150 Ok to send data.
226 Transfer complete.
270176 bytes sent in 0.21 secs (1.2126 MB/s)
mput splash1280.jpg? y
227 Entering Passive Mode (90,130,70,73,84,122).
150 Ok to send data.
226 Transfer complete.
385734 bytes sent in 0.40 secs (943.9138 kB/s)

Для завершения работы утилиты достаточно ввести команду quit:

ftp> quit
221 Goodbye.

Загрузка файлов с сервера

Как и в случае загрузки файлов на сервер, в первую очередь нужно соединиться с ним. В случае анонимного сервера TELE2 используется имя пользователя anonymous и пустой пароль (ввод которого осуществляется путем простого нажатия на клавишу Enter):

$ ftp speedtest.tele2.net
Connected to speedtest.tele2.net.
220 (vsFTPd 2.3.5)
Name (speedtest.tele2.net:alexd): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

Для корректной загрузки файлов необходимо активировать пассивный режим:

ftp> passive
Passive mode on.

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

ftp> ls
227 Entering Passive Mode (90,130,70,73,94,9).
150 Here comes the directory listing.
-rw-r—r— 1 0 0 1073741824000 Feb 19 2016 1000GB.zip
-rw-r—r— 1 0 0 107374182400 Feb 19 2016 100GB.zip
-rw-r—r— 1 0 0 102400 Feb 19 2016 100KB.zip
-rw-r—r— 1 0 0 104857600 Feb 19 2016 100MB.zip
-rw-r—r— 1 0 0 10737418240 Feb 19 2016 10GB.zip
-rw-r—r— 1 0 0 10485760 Feb 19 2016 10MB.zip
-rw-r—r— 1 0 0 1073741824 Feb 19 2016 1GB.zip
-rw-r—r— 1 0 0 1024 Feb 19 2016 1KB.zip
-rw-r—r— 1 0 0 1048576 Feb 19 2016 1MB.zip
-rw-r—r— 1 0 0 209715200 Feb 19 2016 200MB.zip
-rw-r—r— 1 0 0 20971520 Feb 19 2016 20MB.zip
-rw-r—r— 1 0 0 2097152 Feb 19 2016 2MB.zip
-rw-r—r— 1 0 0 3145728 Feb 19 2016 3MB.zip
-rw-r—r— 1 0 0 524288000 Feb 19 2016 500MB.zip
-rw-r—r— 1 0 0 53687091200 Jul 24 2014 50GB.zip
-rw-r—r— 1 0 0 52428800 Feb 19 2016 50MB.zip
-rw-r—r— 1 0 0 524288 Feb 19 2016 512KB.zip
-rw-r—r— 1 0 0 5242880 Feb 19 2016 5MB.zip
drwxr-xr-x 2 106 109 69632 Apr 01 13:41 upload
226 Directory send OK.

Для загрузки отдельного файла используется команда get:

ftp> get 1MB.zip
local: 1MB.zip remote: 1MB.zip
227 Entering Passive Mode (90,130,70,73,99,63).
150 Opening BINARY mode data connection for 1MB.zip (1048576 bytes).
226 Transfer complete.
1048576 bytes received in 4.15 secs (247.0279 kB/s)

И, как обычно, работа с утилитой заканчивается вводом команды quit:

Источник

Читайте также:  Файл где windows пользователи
Оцените статью