Ситуация: есть сервер, на котором крутится ProFTPd, а iptables
настроен так, чтобы не разрешать лишних соединений (политика по умолчанию — DROP). При этом есть желание, чтобы FTP-сервер работал по протоколу FTPS и поддерживал пассивные соединения.
Использование модуля ip_conntrack_ftp
в данном случае не поможет — управляющее соединение зашифровано, и ip_conntrack_ftp
просто не сможет узнать, на какой порт идёт пассивное соединение.
Предположим, что имеются такие правила:
View Code Bash modprobe ip_conntrack modprobe ip_conntrack_ftp # Политика по умолчанию: отброс соединения iptables -P INPUT DROP # Отбрасываем соединения с неверным состоянием iptables -A INPUT -m conntrack --ctstate INVALID -j DROP iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP # Разрешаем установленные и относящиеся к ним соединения iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешаем FTP-соединения iptables -A INPUT -m conntrack --ctstate NEW -p tcp --sport 1024:65535 --dport 20:21 -j ACCEPT
Данный сценарий разрешает как активные, так и пассивные (благодаря ip_conntrack_ftp
) FTP-соединения без шифрования. Для поддержки шифрования нужно сделать две вещи:
- Явно задать в конфигурации ProFTPd список портов, которые могут быть использованы для пассивных соединений, например:
PassivePorts 49000 49500
и перезапустить демон; - Открыть перечисленные порты в
iptables
:iptables -A INPUT -p tcp --sport 1024:65535 --dport 49000:49500 -j ACCEPT
После этого пассивные FTPS-соединения будут работать.
Источник http://blog.sjinks.pro/linux/790-proftpd-ftps-iptables/