Iptables и пассивный режим FTP.
Небольшая заметка о том, как настроить iptables на сервере так, чтобы разрешить подключаться к нему в пассивном режиме FTP. На эту тему в интернете написано немало статей, но описанный вариант, с моей точки зрения, является наиболее правильным и оптимальным.
Для начала необходимо настроить сервер FTP. Будем настраивать сервер на использование фиксированного диапазона верхних портов, например 49152—65535. Эти порты согласно спецификации IANA являются динамическими или частными. Конфигурация каждого конкретного FTP сервера будет выглядеть по своему.
Для vsftpd, например необходимо отредактировать файл /etc/vsftpd/vsftpd.conf (в зависимости от операционной системы путь может отличаться) и внести (или изменить) следующие строки:
pasv_min_port=49152 pasv_max_port=65534
Для proftpd в файле /etc/proftpd.conf (путь, опять таки, может отличаться в зависимости от операционной системы или от способа установки) в секции Global нужно внести следующие изменения:
<Global> ...... PassivePorts 49152 65534 </Global>
И аналогично для всех остальных FTP серверов.
После внесения изменений, соответственно, сервер нужно перезапустить.
Теперь необходимо загрузить модуль ip_conntrack_ftp для iptables. В RedHat/CentOS достаточно в файл /etc/sysconfig/iptables-config добавить ссылку на загрузку модуля ip_conntrack_ftp:
IPTABLES_MODULES="ip_conntrack_ftp"
и отредактировать /etc/sysconfig/iptables, добавив в него строку, разрешающую входящие соединения на порт 21. Пример конфига Iptables, добавленная строка — номер 8.
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
Теперь нужно перезапустить файервол:
service iptables restart
Можно проверить правильность диапазона портов через lsmod:
lsmod | grep conntrack_ftp
В результате система ответит чем-то вроде этого:
nf_conntrack_ftp 41361 1 nf_nat_ftp nf_conntrack 65661 8 nf_nat_ftp,nf_conntrack_ftp,ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
С этого момента пассивный режим FTP можно использовать.
Небольшое дополнение: Если ваш сервер находится за NAT, возможно придётся загрузить ещё один модуль — ip_nat_ftp.
Комментов пока нет