Настройка vsftpd, висит на команде list
Я установил vsftpd и настроил его. Когда я пытаюсь подключиться к серверу ftp с помощью Transmit, ему удается подключиться, но зависает в листинге "/"
Затем я получаю сообщение: "Не удалось получить список файлов для" / ". Тайм-аут соединения управления
Это как-то связано с моими iptables? Мои правила перечислены ниже:
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
# Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
4 ответа
Конфигурация iptables вашего сервера не является (напрямую) проблемой. Скорее всего, FTP-соединение с сервером блокируется от доступа к вашему клиентскому компьютеру. По умолчанию FTP использует так называемый "активный" режим, при котором сервер фактически пытается открыть соединение для передачи данных обратно клиенту. Потребительские маршрутизаторы NAT обычно блокируют это, что приводит к превышению времени ожидания соединения, которое вы отметили
Настройте FTP-клиент на использование "пассивного" режима, и он должен работать. Если это не так, убедитесь, что nf_conntrack_ftp
модуль ядра (старые ядра называют его ip_conntrack_ftp
) загружается на сервер:
sudo lsmod | grep conntrack_ftp
Если приведенная выше команда ничего не возвращает, то модуль не загружен, и вам нужно загрузить его, как показано ниже:
sudo modprobe nf_conntrack_ftp
Кроме того, вы хотите убедиться, что модуль загружается во время загрузки, поставив nf_conntrack_ftp
в /etc/modules
,
nf_conntrack_ftp
Модуль ядра отслеживает состояние FTP-соединений на сервере. Это позволит соединению "пассивного" режима с вашего клиентского компьютера быть принятым правилом СООТВЕТСТВУЮЩЕГО в вашей цепочке ВХОДОВ.
Во-первых, убедитесь, что vsftpd заблокирован для уникальных портов как в активном, так и в пассивном режиме:
ftp_data_port=20
listen_port=21
pasv_min_port=64000
pasv_max_port=64321
Теперь измените ваши iptables, чтобы убедиться, что эти порты могут проходить через правила, и вы должны быть установлены. По умолчанию пассивные порты являются случайными; Установив вышеперечисленное и исправив свои iptables, вы решите "проблему двойного брандмауэра", чтобы клиенты могли работать откуда угодно.
Я не делаю iptables, но из набора правил, который вы показываете, ясно, что вам нужно немного больше узнать о том, как работает FTP.
FTP является "странным" сервисом, так как имеет порт управления и порт данных. Недостаточно открыть только порт 21, то есть только порт управления. Порты данных зависят от того, используете ли вы активную или пассивную передачу FTP.
Я не знаю, как работает iptables, но вам нужно улучшить набор правил, чтобы он также мог принимать трафик на порт 20 для передачи данных ftp (если вы хотите использовать стандартные передачи портов ftp)
В противном случае вам необходимо настроить фильтр пакетов для работы с пассивной передачей данных и попросить вашего клиента также использовать эту форму обмена данными / передачи данных.
Вы найдете этот сайт полезным: http://www.mdjnet.dk/ftp.html
Без правила на выходе для ESTABLISHED,RELATED он не позволит порту 20 ftp-data вернуть вам данные.
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT