Использование FTPS (FTP через явный TLS/SSL) с активным FTP?

Я использую vsftpd с активным FTP. У меня есть модуль "ip_conntrack_ftp" (в / etc / sysconfig / iptables-config), и порт 21 открыт. Соединение с FTP работает, а FTPS - нет. Я могу войти в систему, но не могу получить листинг:

227 Entering Passive Mode
LIST -a

При остановке брандмауэра он работает (я имею в виду iptables на самом ftp-сервере). Я прочитал в http://www.experts-exchange.com/Software/Server_Software/File_Servers/FTP/Q_22418222.html, что невозможно использовать FTPS с активным FTP. Это правда?

Моя конфигурация iptables:

*filter
:INPUT DROP [15:2752]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [132:159725]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/255.0.0.0 -i ! lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-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
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 990 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 989 -j ACCEPT
COMMIT

3 ответа

Решение

Я столкнулся с этой проблемой. Похоже, вам нужно открыть диапазон портов передачи данных ftp при использовании FTP с явным TLS/SSL. Попробуйте следующее:

iptables -A INPUT -p tcp --sport 1024: --dport 64000:65535 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 64000:65535 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

Вам необходимо явно разрешить доступ к диапазону входящего порта ftp-данных. Ответ Nic рекомендует статически открывать полный диапазон, но он может быть слишком открытым. Кроме того, RELATED в этом случае бесполезен, поскольку модуль conntrack_ftp не может отследить зашифрованное управляющее соединение.

Я рекомендую использовать недавний матч. Попробуйте следующее:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -j in_new
iptables -A in_new -p tcp --sport 1024: --syn --dport 64000:65535 -m recent --name ftpdata --update --seconds 1800 --reap -j ACCEPT
iptables -A in_new -p tcp               --syn --dport ftp         -m recent --name ftpdata --set -j ACCEPT

--setПравило будет соответствовать контрольному соединению и добавит исходный IP к ftpdata недавний список. --update Правило сделает большую часть интересной работы:

  • Будет соответствовать, если адрес источника пакета находится в ftpdata список (--update) и адрес источника был замечен в течение последних 1800 секунд (--seconds 1800).
  • Если совпадает, "последняя увиденная" временная метка адреса источника будет обновлена ​​(--update).
  • Записи в ftpdata список не виден в последние 1800 будет удален (--reap).

Итак, после контрольного соединения ACCEPTЭд, у вас есть 1800 секунд, чтобы начать подключение к данным. По истечении этого времени вам нужно будет снова открыть управляющее соединение, чтобы адрес источника был снова добавлен в ftpdata список.

Неудобство этого решения, если эти ftp-клиенты не смогут инициировать подключения к данным через 1800 секунд после их последнего времени установления контрольного подключения. Если хотите, вы можете использовать 24 часа, в любом случае, он будет открыт меньше, чем при постоянном открытии полного диапазона портов. Вы также можете иметь такую ​​последовательность:

iptables -A INPUT -m state --state ESTABLISHED -p tcp --dport ftp -m recent --set
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

обновлять адрес источника всякий раз, когда приходит установленный пакет управляющего соединения, но я предпочитаю иметь --state RELATED,ESTABLISHED править в верхней части.

Проверьте также accept_timeout, data_connection_timeout а также idle_session_timeout параметры vsftpd.conf.

Добавьте следующую строку в /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p 
                                            tcp --dport 64000:65535 -j ACCEPT

Перезапустите iptables

Другие вопросы по тегам