11.4. FTP em um Cluster LVS

O FTP ('File Transport Protocol') é um multi-protocolo antigo e complexo que apresenta um conjunto de desafios distintos a um ambiente clusterizado. Para entender a natureza destes desafios, você deve primeiro entender algumas coisas importantes sobre o funcionamento do FTP.

11.4.1. Como Funciona o FTP

Na maioria das outras relações servidor/cliente, a máquina cliente abre uma conexão ao servidor em uma porta específica e o servidor então responde ao cliente nesta porta. Quando um cliente FTP conecta a um servidor FTP, abre uma conexão para a porta 21 do controle do FTP. Então, o cliente diz ao servidor FTP se deve estabelecer uma conexão ativa ou passiva. O tipo de conexão escolhido pelo cliente determina como o servidor responde e em quais portas as transações ocorrem.

Os dois tipos de conexão de dados são:

Conexões Ativas

Quando uma conexão ativa é estabelecida, o servidor abre uma conexão de dados para o cliente pela porta 20 para uma porta de intervalo alto na máquina cliente. Todos os dados do servidor são então passados por esta conexão.

Conexões Passivas

Quando uma conexão passiva é estabelecida, o cliente pede ao servidor FTP para estabelecer uma porta de conexão passiva, que pode ser qualquer porta maior que 10.000. O servidor então se conecta a esta porta de número alto para esta sessão em particular e passa este número de porta de volta para o cliente. O cliente então abre a porta para a conexão de dados. Cada pedido de dados feito pelo cliente traz resultados em uma conexão de dados separada. A maioria dos cliente FTP modernos tentam estabelecer uma conexão passiva ao FTP.

As duas coisas mais importantes a notar sobre tudo isso em relação às operação do cluster são:

  1. O cliente determina o tipo de conexão, e não o servidor. Isto significa que, para clusterizar o FTP efetivamente, você deve configurar os roteadores LVS para lidar com ambas conexões, ativas e passivas.

  2. A relação cliente FTP/servidor pode, potencialmente, abrir um grande número de portas que a Ferramenta de Configuração do Piranha e o IPVS desconhecem.

11.4.2. Como Isto Afeta o Roteamento LVS

O encaminhamento de pacotes do IPVS permite conexões dentro de fora do cluster, baseado no reconhecimento do número de sua porta ou sua marca de firewall. Se um cliente de fora do cluster tentar abrir uma porta que o IPVS não está configurado para suportar, derruba a conexão. Da mesma maneira, se o servidor real tenta abrir uma conexão de volta à Internet numa porta que o IPVS desconhece, derruba a conexão. Isto significa que todas as conexões de clientes FTP na Internet devem ter a mesma marca de firewall atribuída, e todas as conexões do servidor FTP devem ser devidamente encaminhadas à Internet usando regras de filtragem de pacotes de rede.

11.4.3. Criando Regras de Filtragem de Pacotes de Rede

Antes de atribuir regras iptables para o serviço FTP, reveja as informações na Seção 11.3.1 em relação aos serviços e técnicas multi-porta, para verificar as regras existentes para a filtragem de pacotes de rede.

Veja abaixo regras que atribuem a mesma marca de firewall, 21, para o tráfego do FTP. Para que estas regras funcionem corretamente, você deve usar também a sub-seção SERVIDOR VIRTUAL da Ferramenta de Configuração do Piranha para configurar um servidor virtual para a porta 21 com o valor 21 no campo Marca de Firewall. Consulte a Seção 12.6.1 para mais detalhes.

11.4.3.1. Regras para Conexões Ativas

As regras para conexões ativas dizem ao kernel para aceitar e encaminhar as conexões provenientes de endereços IP flutuantes internos na porta 20 — a porta de dados do FTP.

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

Nos comandos iptables anteriores, n.n.n deve ser substituído pelos três primeiros valores do IP flutuante da interface de rede interna da interface NAT, no painel CONFIGURAÇÕES GLOBAIS da Ferramenta de Configuração do Piranha. O comando permite que o roteador LVS aceite conexões de saída dos servidores reais que o IPVS desconhece.

11.4.3.2. Regras para Conexões Passivas

As regras para conexões passivas atribuem a marca de firewall apropriada para conexões de entrada da Internet ao IP flutuante do serviço, em uma gama imensa de portas — 10.000 a 20.000.

AtençãoAtenção
 

Se você está limitando a gama de portas para as conexões passivas, deve também configurar o servidor VSFTP para usar uma gama de portas coincidente. Isto pode ser feito adicionando as seguintes linhas ao /etc/vsftpd.conf:

pasv_min_port=10000
pasv_max_port=20000

Você também deve controlar o endereço que o servidor exibe ao cliente para conexões FTP passivas. Em um sistema LVS roteado pelo NAT, adicione a linha seguinte ao /etc/vsftpd.conf para sobrescrever o endereço IP do servidor real pelo VIP, que é o que o cliente vê durante a conexão. Por exemplo:

pasv_address=X.X.X.X

Substitua X.X.X.X pelo endereço VIP do sistema LVS.

Para configurar outros servidores FTP, consulte a documentação respectiva.

Esta gama deve ser suficientemente grande para a maioria das situações; no entanto, você pode aumentar este número para incluir todas as portas não-protegidas disponíveis, alterando 10000:20000 nos comandos abaixo para 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

Nos comandos iptables anteriores, n.n.n.n deve ser substituído pelo IP flutuante do servidor FTP virtual, definido na sub-seção SERVIDOR VIRTUAL da Ferramenta de Configuração do Piranha. Estes comandos têm o efeito de rede de atribuir a todo o tráfego endereçado ao IP flutuante, nas portas apropriadas, uma marca de firewall 21, que então é reconhecida pelo IPVS e encaminhada apropriadamente.

AtençãoAtenção
 

Os comandos acima têm efeito imediato, mas não insista em reinicializar o sistema. Para garantir que as configurações da filtragem de pacotes de rede sejam recuperadas após uma reinicialização, veja a Seção 11.5.

Finalmente, você precisa assegurar que o serviço correto está configurado para ser ativado nos níveis de execução (runlevels) devidos. Para mais informações, consulte a Seção 10.1.