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

Невозможно установить правило iptables для FTP (чистый 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

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