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

Используете 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

Вам необходимо явно разрешить доступ к 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.

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

Добавьте строку ниже в /etc/sysconfig/iptables

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

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