Как настроить vsftpd для работы в пассивном режиме


49

Всякий раз , когда я устанавливаю vsftpdна centos, я только настройки острог среда для пользователей и остального является конфигурацией по умолчанию vsftpd. Я создаю пользователя и пытаюсь установить соединение с filezilaFTP-клиентом, но не могу подключиться в пассивном режиме. Я всегда переключаю в transfer settingsактивный режим, чтобы успешно подключиться, в ftp serverпротивном случае я получаю

 Error: Failed to retrieve directory listing

Так есть ли способ изменить какую-либо директиву в vsftp.confфайле, и мы можем подключиться к серверу в пассивном режиме?

Ответы:


86

Чтобы настроить пассивный режим для vsftpd, вам нужно установить некоторые параметры в vsftpd.conf.

pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090

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

iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT

Если после тестирования все это работает, сохраните состояние брандмауэра с помощью

service iptables save

который обновит /etc/sysconfig/iptablesфайл.

Для этого CentOS 7 вы должны использовать новый firewalld, а не iptables:

Найдите свою зону:

# firewall-cmd --get-active-zones
public
  interfaces: eth0

Моя зона 'public', поэтому я установил свою зону на public, добавил диапазон портов, и после этого мы перезагрузили:

# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload

Что происходит, когда вы делаете соединение

  • Ваш клиент устанавливает соединение с сервером vsftpd через порт 21.

  • Сервер отвечает клиенту, сообщая ему, к какому порту подключаться из диапазона, указанного выше.

  • Клиент устанавливает соединение для передачи данных на указанном порту, и сеанс продолжается.

Здесь есть отличное объяснение различных режимов ftp .


Интересно, почему вы ставите maxпорт после min... но что более важно, если вы открываете порты с 10090 по 10100, это 11 портов, а не 10, как вы говорите.
Алексис Вилке

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

3
Это не работает для меня без pasv_address.
Fbmd

Мне понадобилось много времени, чтобы найти это, ни одно из руководств vsftpd не перечислило это ... блестяще
Пит

Замечательно - эта конфигурация vsftp решила все мои проблемы с FTP-брандмауэром :)
BurninLeo

24

Чтобы включить пассивный режим, установите следующие параметры конфигурации в вашем vsftp.conf:

pasv_enable=YES
pasv_min_port=41361
pasv_max_port=65534
pasv_address=xxx.xxx.xxx.xxx

Разумеется, вы можете изменить начальный и конечный порт и заменить xxx на общедоступный IP-адрес вашего сервера.

Кроме того, вы должны открыть диапазон портов пассивного режима в брандмауэре. В centos вы можете загрузить ip_conntrack_ftpмодуль для обработки соединений ftp в вашем брандмауэре. Отредактируйте /etc/sysconfig/iptables-configи добавьте ip_conntrack_ftp в параметр IPTABLES_MODULES. После этого перезапустите iptables:

/sbin/service iptables restart

3
pasv_addressэто то, что делает трюк, когда все остальное было настроено, и это все еще не работает.
Fbmd

1
@fbmd, прежде чем пытаться использовать pasv_address, следует также проверить, что и pasv_max, и min_port находятся в правильном порядке. Мне случилось, что я настроил максимальное значение в pasv_min_port, и vsftpd просто игнорирует это. Это известная тихая ошибка / ошибка, которая визуально заставляет вас думать, что порты pasv настроены правильно, но это не так. Это случилось со мной и решило мою проблему.
Педро Соуза

Если вы хотите указать DNS-адрес в pasv_address, вы должны добавить pasv_addr_resolve=YES(по умолчанию NO)
Pierre-Damien

6

Кроме того pasv_enable=YES, укажите диапазон портов, в котором VSFTP будет работать в режиме PASV:

pasv_min_port=50000
pasv_max_port=50999
port_enable=YES

Не забудьте настроить iptables, разрешающий передачу пакетов по этим портам:

iptables -I INPUT -p tcp --dport 50000:50999 -j ACCEPT

В стандартной системе CentOS существует общий DROP, который приводит iptables -A INPUT ... к игнорированию добавленных правил
user9517 поддерживает GoFundMonica

Убедитесь, что вы включили pasv_addressв файл vsftpd.conf.
Педро Мадрид

3

Обычно не FTP-сервер, vsftpd, а брандмауэр, такой как iptable, предотвращает использование пассивного режима (блокирование tcp-соединения, необходимого для передачи данных).


На самом деле, vsftpd может быть достаточно умным, чтобы открыть порт в брандмауэре ... но из ответов, которые я вижу здесь, не похоже, что он способен на такой подвиг.
Алексис Вилке

3
@Alexsis. Брандмауэр не имеет смысла, если приложения все равно игнорируют правила и открывают порты.
ekerner
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.