Использование FTP в LVS кластере

FTP (Протокол передачи файлов) является достаточно старым и сложным многопортовым протоколом, реализация которого в кластере вызывает определенные сложности. Для понимания характера этих сложностей, вы сначала должны получить некоторые базовые понятия о работе FTP.

Как работает FTP

В большинстве случаев взаимодействие клиента с сервером происходит следующим образом: клиентский компьютер устанавливает соединение с определенным портом на сервере и сервер отвечает клиенту с этого порта. Когда FTP-клиент подключается к FTP-серверу он устанавливает соединение с портом управления FTP (21). Затем клиент сообщает FTP серверу какой тип соединения: активный или пассивный будет использоваться. Тип соединения, выбранного клиентом, определяет то, как сервер будет отвечать и на каких портах будут выполняться транзакции.

Существуют два типа соединений для передачи данных:

Активные соединения

Когда установлено активное соединение, server устанавливает подключение с порта 20 на порт с большим номером, открытым на клиентской машине. Все данные передаются с сервера через это подключение.

Пассивные соединения

Когда установлено пассивное соединение, клиент просит FTP сервер указать порт для пассивного соединения, при этом номер порт должен быть больше 10000. Затем сервер связывает этот номер с этим конкретным сеансом и пересылает номер порта клиенту. Клиент открывает соединение с новым полученным портом для передачи данных. Каждый запрос данных со стороны клиента, приводит к установлению отдельного соединения для передачи этих данных. Большинство современных FTP клиентов поддерживают пассивные подключения к FTP серверам.

Необходимо учесть два замечания, касающихся работы протокола в кластере:

  1. Клиент, а не сервер определяет тип соединения. Это значит, что для эффективного использования FTP в кластере, вы должны настроить LVS маршрутизаторы на поддержку и активных и пассивных подключений.

  2. Во время связи между FTP сервером и клиентом может быть открыто большое количество портов, о которых не узнают Piranha Configuration Tool и IPVS.

Как это влияет на LVS маршрутизацию

IPVS маршрутизация пакетов разрешает устанавливать входящие и исходящих соединения анализируя номер порта и метку межсетевого экрана. Если клиент из внешней сети пытается открыть порт, неизвестный для IPVS, соединение обрывается. Также если реальный сервер устанавливает обратное соединение с интернет, с портом, о котором не знает IPVS, соединение не будет установлено. Это означает что все подключения FTP-клиентов из интернет должны иметь одну назначенную им метку межсетевого экрана, и все соединения, исходящие от FTP сервера должны корректно перенаправляться в интернет, используя правила сетевых фильтров.

Создание правил сетевого пакетного фильтра

До определения каких-либо iptables или ipchains правил для службы FTP, обратитесь к информации в разделе Назначение меток межсетевого экрана об использовании многопортовых служб и определении установленных правил фильтрации сетевых пакетов.

ЗамечаниеЗамечание
 

Вы должны войти в систему как root и загрузить либо iptables либо ipchains перед первым определением правил.

Ниже приведены правила, назначающие одну метку межсетевого экрана, 21, FTP трафику. Чтобы эти правила работали корректно, вы также должны в подразделе VIRTUAL SERVER программы Piranha Configuration Tool установить виртуальному серверу для порта 21 значение 21 в поле Firewall Mark. За дополнительной информацией обратитесь к разделу ВИРТУАЛЬНЫЙ СЕРВЕР в главе 9.

Правила для активных соединений

Правила для активных соединений указывают ядру принимать и перенаправлять соединения, приходящие на внутренний плавающий IP адрес с порта 20 — порт данных FTP.

iptables
/sbin/iptables -t nat -A POSTROUTING -p tcp \
               -s n.n.n.0/24 --sport 20 -j MASQUERADE
ipchains
/sbin/ipchains -A forward  -p tcp -s n.n.n.0/24 20 -j MASQ

В приведенных выше командах сетевого пакетного фильтра n.n.n необходимо заменить первыми тремя байтами плавающего IP для внутреннего сетевого интерфейса NAT, определенного в разделе GLOBAL SETTINGS программы Piranha Configuration Tool. Эти команды позволяют LVS маршрутизатору обрабатывать исходящие от реальных серверов подключения, о которых не знает IPVS.

Правила для пассивных соединений

Правила для пассивных соединений назначают соответствующую метку межсетевого экрана соединениям входящим из интернет на плавающий IP адрес службы в широком диапазоне портов - от 10000 до 20000.

ПредупреждениеПредупреждение
 

Если вы ограничиваете диапазон портов для пассивных соединений, вы также должны настроить FTP сервер на использование соответствующего диапазона. В Red Hat Linux это выполняется добавлением следующей строки в конец файла /etc/ftpaccess:

passive ports 0.0.0.0/0 10000 20000

Для настройки других FTP серверов обратитесь к документации.

Диапазон должен быть достаточно широким для большинства ситуаций; если вам понадобится увеличить его до диапазона всех незащищенных портов, смените 10000:20000 в приведенных командах на 1024:65535.

iptables
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32  \
               --dport 21 -j MARK --set-mark 21
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32 \ 
               --dport 10000:20000 -j MARK --set-mark 21
ipchains
/sbin/ipchains -A input -p tcp -d n.n.n.n/32 21 -m 21
/sbin/ipchains -A input -p tcp -d n.n.n.n/32 \
               10000:20000 -m 21

В приведенных выше командах сетевого фильтра, n.n.n.n необходимо заменить плавающим IP адресом виртуального FTP сервера, определенного в разделе VIRTUAL SERVER программы Piranha Configuration Tool. Эти команды указывают фильтру назначить всем входящим пакетам адресованным плавающему IP адресу на соответствующие порты метку межсетевого экрана 21, которая распознается IPVS и позволяет выполнить соответствующую маршрутизацию.

ПредупреждениеПредупреждение
 

Команды, приведенные выше, вступают в силу сразу, но не будут действовать после перезагрузки системы. Чтобы настроить сохранение конфигурации фильтра сетевых пакетов, обратитесь к разделу Сохранение настроек сетевого фильтра

Наконец, убедитесь в том, что для соответствующих служб установлены корректные уровни выполнения. За дополнительной информацией об этом обратитесь к разделу Настройка служб на LVS маршрутизаторах в Главе 7.