HAproxy para balanceamento de carga de servidores vsFTPd

4

Eu configurei com sucesso um ambiente de balanceamento de carga usando HAProxy e 2 servidores FTP executando vsftpd . Isto é o que a configuração parece até agora:

Proxy: ftp00 | 192.168.2.135 (public, eth0) | 10.11.130.1 (private, eth1)
Node01: ftp01 | 10.11.130.140
Node02: ftp02 | 10.11.130.141


Sistema operacional : CentOS 6.6
HA-Proxy : versão 1.5.2 2014/07/12
vsftpd : versão 2.2.2


ftp00: /etc/haproxy/haproxy.conf

#---------------------------------------------------------------------
# GLOBAL CONFIG
#---------------------------------------------------------------------
global
    daemon
    log         127.0.0.1 local0 info
    log         127.0.0.1 local1 notice
    log         127.0.0.1 local5 debug
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# DEFAULTS CONFIG
#---------------------------------------------------------------------
defaults
        log             global
        mode            tcp
        option          tcplog
        option          dontlognull
        retries         3
        option          redispatch
        option          tcpka
        maxconn         2000
        contimeout      5000

#---------------------------------------------------------------------
# POOL CONFIG
#---------------------------------------------------------------------
listen ftp-lb
        bind 192.168.2.135:21
        mode tcp
        option tcplog
        balance roundrobin
        server ftp01 10.11.130.140:21 weight 10 minconn 30 maxconn 1000 check
        server ftp02 10.11.130.141:21 weight 10 minconn 30 maxconn 1000 check

#---------------------------------------------------------------------
# HAPROXY DASHBOARD CONFIG
#---------------------------------------------------------------------
listen stats
    bind 192.168.2.135:81
    mode http
    stats enable
    stats refresh 30s
    stats show-node
    stats uri  /stats
    stats auth admin:password



ftp00: /etc/sysconfig/iptables encontrado [aqui]

*nat
:PREROUTING ACCEPT [7:724]
:POSTROUTING ACCEPT [5:300]
:OUTPUT ACCEPT [5:300]
-A PREROUTING -d 192.168.2.135/32 -i eth1 -p tcp -m tcp --dport 12001:14000 -j DNAT --to-destination 10.11.130.140
-A PREROUTING -d 192.168.2.135/32 -i eth1 -p tcp -m tcp --dport 16001:18000 -j DNAT --to-destination 10.11.130.141
-A POSTROUTING -s 10.11.130.140/32 -o eth1 -j SNAT --to-source 192.168.2.135
-A POSTROUTING -s 10.11.130.141/32 -o eth1 -j SNAT --to-source 192.168.2.135
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [732:64731]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 81 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT



ftp01: /etc/vsftpd/vsftpd.conf

#------------------------------------------
# GENERAL CONFIG
#------------------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
pam_service_name=vsftpd

#------------------------------------------
# LOG CONFIG
#------------------------------------------
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES

#------------------------------------------
# USER WHITELIST
#------------------------------------------
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

#------------------------------------------
# PASSIVE MODE CONFIG
#------------------------------------------
#tcp_wrappers=YES
pasv_enable=YES
port_enable=YES
pasv_min_port=12001
pasv_max_port=14000
pasv_address=192.168.2.135
pasv_addr_resolve=NO
connect_from_port_20=YES

#------------------------------------------
# Added listen address for internal only
#------------------------------------------
listen=YES
listen_address=10.11.130.140

#-----------------------------------------
# BANNER CONFIG
#-----------------------------------------
banner_file=/etc/vsftpd/issue



ftp01: /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 12001:14000 -j ACCEPT
-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 22 -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 20 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT



ftp02: /etc/vsftpd/vsftpd.conf

Diferença para ftp01 config:

pasv_min_port=16001
pasv_max_port=18000

listen_address=10.11.130.141



ftp02: /etc/sysconfig/iptables

Same as **ftp01** with respective port ranges



todos os nós: /etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_ftp"



O

SELinux é desativado em todas as máquinas. Eu segui vários tutoriais (como este e isso ), mas ainda não consigo fazer com que passive mode funcione. Eu posso fazer login nos servidores FTP através do balanceador de carga HAproxy (que é definido como roundrobin e isso também funciona), e ele continua me dando isto:

220-***FTP SERVER CLUSTER NODE 02***
220
Name (192.168.2.135:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,2,135,67,94).
ftp: connect: Connection timed out
ftp>


Desde que eu passei por tudo o que posso pensar e quase tudo o que está lá fora, lidando com isso, estou ficando um pouco frustrado. Minha configuração é construída de forma idêntica às dos tutoriais, mas simplesmente não funciona. Talvez eu esteja perdendo algo que ainda não percebi, então qualquer ajuda é muito apreciada!

Pelo menos o número da porta parece estar correto. O ftp02 está configurado para usar 16001 - 18000 e, ao entrar no modo passivo, usa 67*256 + 94 = 17246 , o que é totalmente aceitável.

    
por Mosh Pit 31.01.2015 / 00:01

2 respostas

1

Com base em documentos RH que li relacionados ao Passive FTP LB, talvez seja necessário ativar um módulo do kernel

# modprobe ip_vs_ftp 

Red_Hat_Enterprise_Linux-6-Load_Balancer_Administration-en-US

In order to enable passive FTP connections, ensure that you have the ip_vs_ftp kernel module loaded, which you can do by running the command modprobe ip_vs_ftp as an administrative user at a shell prompt.

Eu não confirmei isso, mas vou mergulhar nesse tipo de serviço de FTP HA muito em breve, então espere que você escreva mais, e este módulo carregado está correto!

    
por 24.09.2015 / 22:28
0

Isso deve ser bem simples:

a) Você deve configurar o ip do modo passivo como x.135 (o que você fez)

b) Você deve restringir o intervalo de portas no servidor ftp (o que você fez)

c) Você deve ligar o haproxy a TODAS as portas relevantes (sua configuração não mostra isso) Tenha cuidado para remover a porta de cada servidor real quando fizer isso, por exemplo.

10.11.130.140:21

torna-se

10.11.130.140

Você quase certamente precisa ativar persistência / sticky na configuração haproxy ... e tempos limite maiores - 15mins?

Mas, mais importante, ao testar - Desligue as coisas do firewall completamente, teste se a configuração do haproxy funciona na rede local - quando estiver satisfeito, tudo está funcionando. Em seguida, inicie a configuração do seu firewall. Você realmente precisa de uma inspeção stateful local em cada servidor FTP? Basta configurar seu firewall externo corretamente.

Espero que você funcione.

    
por 27.09.2015 / 10:02

Tags