Haproxy - настройка для FTP
Материал из support.qbpro.ru
НАСТРОЙКА
- Предварительно настроенный Vsftp сервер имеет следующие настройки:
listen=YES listen_ipv6=NO anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES idle_session_timeout=300 data_connection_timeout=120 nopriv_user=ftp ftpd_banner=Welcome. chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO utf8_filesystem=YES pasv_enable=YES pasv_min_port=17000 pasv_max_port=17500 guest_enable=YES guest_username=ftp virtual_use_local_privs=YES user_sub_token=$USER local_root=/srv/ftp/$USER hide_ids=YES seccomp_sandbox=NO allow_writeable_chroot=YES max_clients=20 max_per_ip=3 user_config_dir=/etc/vsftpd/vsftpd_user_conf pasv_address=*.*.*.* # Здесь обязательно указывается ip внешнего интерфейса с которого сделан проброс порта в NAT шлюза
- На сервере Haproxy*
- у нас кластер с keepalived, где входной ip 10.33.33.11, а выходной ip: 10.1.2.21 (нода1)
- С учетом того, что сервер FTP является активным ip:10.1.2.5:
1. Вносим в /etc/haproxy/haproxy.conf:
... ## - pubftp frontend ftp-acl bind *:21,:17000-17500 name ftp mode tcp use_backend ftp_host # backend ftp_host option tcp-check server ftp.host.ru 10.1.2.5 check port 21 ...
2. В правилах iptables вносим правила для обратного прохождения пакетов сервера ftp к клиенту:
iptables -t nat -A POSTROUTING -s 10.1.2.21 -o enp6s18:1 -j SNAT --to-source 10.33.33.11 / -m comment --comment 'acl_for_active_ftp' iptables -t nat -A PREROUTING -d 10.33.33.11/32 -i enp6s18:1 -p tcp -m tcp --dport 17000:17500 / -j DNAT --to-destination 10.1.2.21 -m comment --comment 'acl2_for_active_ftp'
3. Для того, чтобы эти правила стартовали при запуске 1ноды Haproxy, добавляем это в виде скрипта в автозагрузку:
- скрипт который добавляет правила:
/etc/scripts/startnat.sh ... #!/bin/bash function clearNat(){ iptables -t nat -F iptables -t nat -X } function addRules(){ if [ $(iptables -L -nv -t nat|grep acl_for_active_ftp|wc -l) == "0" ]; then iptables -t nat -A POSTROUTING -s 10.1.2.21 -o enp6s18:1 -j SNAT --to-source 10.33.33.11 / -m comment --comment 'acl_for_active_ftp' iptables -t nat -A PREROUTING -d 10.33.33.11/32 -i enp6s18:1 -p tcp -m tcp --dport 17000:17500 / -j DNAT --to-destination 10.1.2.21 -m comment --comment 'acl2_for_active_ftp' fi } clearNat; addRules; ...
- для запуска скрипта при старте вносим:
в /etc/rc.local .. /etc/scripts/startnat.sh ..
в случае перезапуска сети: в /etc/networks/interfaces ... auto eth1 allow-hotplug eth1 ... post-up /etc/scripts/startnat.sh ...
- все сервер Haproxy (нода1) готов, далее все повторить на второй ноде, только указать ее ip:10.1.2.22