
Надеюсь, кто-нибудь сможет указать мне правильное направление.
Запуск proftpd (с поддержкой tls) на публичном IP-адресе.
FTP-клиент подключается, но не может сделать листинг каталога. Когда я меняю политику "INPUT" в iptables на ACCEPT, это работает.
Ниже приведены мои соответствующие правила iptables:
$IPTABLES -A INPUT -i eno1 -s 0/0 -d x.x.x.x -p tcp --sport 1024:65535 -m multiport --dports 20,21,989,990 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d x.x.x.x --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
У меня включены модули connection_tracking.
server ~ # lsmod | grep nf_conntra
nf_conntrack_ftp 24576 3
nf_conntrack 176128 8 xt_conntrack,nf_nat,xt_state,xt_nat,xt_helper,nf_conntrack_ftp,xt_CT,xt_MASQUERADE
nf_defrag_ipv6 24576 1 nf_conntrack
nf_defrag_ipv4 16384 1 nf_conntrack
libcrc32c 16384 2 nf_conntrack,nf_nat
У меня также включен nf_conntrack_helper в /proc
server ~ # cat /proc/sys/net/netfilter/nf_conntrack_helper
1
решение1
proftpd (с поддержкой tls)
Вероятно, виновата поддержка TLS.
Обычно в интеллектуальном брандмауэре, когда вы разрешаете FTP, вам нужно открыть порт для управляющего соединения, TCP 21, а затем, в открытом текстовом протоколе FTP, модули conntrack могут сканировать и обнаруживать ответ PORT
. Затем модуль поддержки FTP conntrack автоматически откроет номер порта, который назначается FTP-сервером этому конкретному клиенту, как связанный, что позволяет осуществлять гранулярный контроль доступа.
Когда соединение зашифровано с помощью TLS, брандмауэр больше не может обнаружить ответ PORT и, следовательно, не может автоматически открыть назначенный порт. Решение для этого:
исправить диапазон портов, которые FTP-сервер будет использовать для пассивных подключений, на небольшой диапазон
PassivePorts min-pasv-port max-pasv-port
в вашем брандмауэре откройте как порт 21, так и фиксированный диапазон портов для подключений к данным