Назад | Перейти на главную страницу

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

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

 Error: Failed to retrieve directory listing

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

Чтобы настроить пассивный режим для 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

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

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

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

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

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

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

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

Чтобы включить пассивный режим, установите следующие параметры конфигурации в 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

За 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

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

Мне пришлось сделать следующие шаги, чтобы пассивный режим vsftp работал на CentOS 8:

Включить пассивный режим в конфигурации vsftpd /etc/vsftpd/vsftpd.config:

pasv_enable=Yes
pasv_min_port=50000
pasv_max_port=50999

Включите службу ftp в firewalld:

firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload

Как упоминалось в другом Почта вам необходимо загрузить модуль ядра "nf_conntrack_ftp" (что уже было в CentOS 8) и включите "nf_conntrack_helper" в настройках ядра:

echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

Добавьте эту строку в /etc/sysctl.conf (или /etc/sysctl.d/10-nf_conntrack_helper.conf когда /etc/sysctl.d/ присутствует) для постоянной перезагрузки:

net.netfilter.nf_conntrack_helper=1

При включенном отслеживании соединений нет необходимости дополнительно настраивать пассивные порты в локальном брандмауэре.