Всякий раз, когда я устанавливаю 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
При включенном отслеживании соединений нет необходимости дополнительно настраивать пассивные порты в локальном брандмауэре.