Я использую 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