У меня возникла проблема с настройкой vsftpd. Мне удалось заставить активный FTPS работать нормально, но пассивный - упорство. Я думаю, проблема в том, как iptables управляет портами. Когда я пытаюсь использовать пассивный ftps в filezilla, все подключается, но список каталогов не работает с EHOSTUNREACH
. Вот обмен между клиентом и сервером, настраивающий пассивный режим
Command: PASV
Response: 227 Entering Passive Mode (192,168,0,10,169,39).
Command: LIST
Error: The data connection could not be established: EHOSTUNREACH - No route to host
Вот соответствующий раздел моего vsftpd.conf
:
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
Вот результат iptables -L
:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere ctstate NEW tcp dpt:ftp
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp ctstate NEW,ESTABLISHED /* Allow ftp connections on port 21 */
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data ctstate RELATED,ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT tcp -- anywhere anywhere tcp spts:safetynetp:50000 dpts:safetynetp:50000 ctstate ESTABLISHED /* Allow passive ftp inbound connections */
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp ctstate NEW,ESTABLISHED /* Allow ftp connections on port 21 */
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp-data ctstate ESTABLISHED /* Allow ftp connections on port 20 */
ACCEPT tcp -- anywhere anywhere tcp spts:safetynetp:50000 dpts:safetynetp:50000 ctstate RELATED,ESTABLISHED /* Allow passive ftp inbound connections */
Вот команда, которую я использовал для установки правила вывода. Входной очень похож, но я могу предоставить его, если он нужен.
iptables -A OUTPUT -p tcp -m tcp --sport 40000:50000 --dport 40000:50000 -m conntrack -- ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive ftp inbound connections"
Я не могу найти информацию о safetynetp
часть правил пассивного iptables в сети, и я думаю, проблема в том, что это противоречит диапазону портов (40 000–50 000), который я установил, поскольку похоже, что он просто принимает порт 50 000.
Возможно, iptables вовсе не проблема, я не знаю. Если потребуется дополнительная информация, я, конечно, могу ее предоставить.
РЕДАКТИРОВАТЬ:
Вот правила клиента iptables:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Я видел проблемы с тем, что ftp-сервер выдает NAT-адрес, когда публичный адрес FTP-сервера - это тот, который должен быть настроен. Это вызывает проблемы с пассивным подключением, поскольку клиент ожидает другой адрес. Первоначальное соединение обычно работает в этом сценарии, но пассивный режим не работает.
Взгляните на свою конфигурацию vsftpd или поделитесь ею.
FTP-сервер, к которому вы подключаетесь, находится на другой стороне маршрутизатора NAT? Я вижу 192.168. в вашем IP-адресе, значит, задействована частная сеть. У вас довольно открытая настройка iptables, поэтому я не думаю, что проблема (хотя вы можете попробовать очистить таблицы и посмотреть, имеет ли это значение).
Пассивный FTP требует, чтобы FTP-сервер установил новое соединение с вашим FTP-клиентом (см. здесь более подробное описание пассивного FTP), поэтому это новое обратное соединение, скорее всего, не сможет вернуться через маршрутизатор NAT. Существует модуль FTP для IPTables, который, как мне кажется, справляется с этим, но если задействован NAT, я бы просто использовал активный FTP (или, как говорится в другом комментарии, по возможности использовал бы что-то еще).
Показанные вами IPTables - это ваш FTP-клиент, а не какой-то маршрутизатор, верно?