Не могу установить правило iptables для FTPS (чистый ftpd с TLS)
Я использую pure-ftpd с поддержкой TLS, все работает нормально, пока не включен iptables. С работающим iptables я могу подключиться к ftp, но не могу получить список файлов.
ip_conntrack_ftp
модуль включен, и это мои правила, установленные для ftps:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 989 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 990 -j ACCEPT
1 ответ
FTP в пассивном режиме подразумевает, что клиент устанавливает второе соединение для передачи данных с сервером по номеру порта, указанному в контрольном соединении на порте 21. Модуль conntrack обнаруживает контрольное соединение и определяет номер порта информационного соединения, а затем обрабатывает входящие Передача данных как СВЯЗАННАЯ, что обычно принимается по этому правилу:
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Однако, когда управляющее соединение зашифровано, модуль conntrack не может определить номер порта и поэтому входящее соединение не принимается. Решение состоит в том, чтобы настроить ваш FTP-сервер с диапазоном портов для использования в пассивном режиме (PassivePortRange
как упомянуто @cyberx86) и настройте брандмауэр на прием всех входящих подключений в этом диапазоне, например:
iptables --append INPUT --protocol tcp --dport 10000:10100 --jump ACCEPT