Использование 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