=======Развертывание multi-протокольного и отказоустойчивого Proxy сервиса ======= ==== Введение. ==== Предположим, необходимо развернуть отказоустойчивый proxy сервис со следующей функциональностью: - доступ к web-ресурсам\\ - native доступ ftp-ресурсам с возможностью записи\\ - доступ к почте на Google Apps for Business или Yandex Mail для домена или к любому другому подобному сервису используя протоколы: IMAP,SMTP\\ Решение - Linux Centos + Cororsync + pacemaker + squid + delegate. ==== Организационная схема ==== Для инсталляции необходимы три сервера (физических или виртуальных). Два сервера будут узами proxy и один quorum. Следующий пример описывает ситуацию когда сервера подключены как к локальной сети так и к Интернет. Если используется DMZ тогда достаточно одного сетевого подключения. {{:ru:jobs:proxymulti.jpg?500|500}} [[http://www.squid-cache.org/|Squid]] будет выполнять роль http,https, ftp over http - proxy (port 8080)\\ [[http://www.delegate.org/delegate/|Delegate]] будет выполнять роль IMAP,SMTP and native FTP proxy. Delegate может в том числе работать и как http proxy, но имеет меньшую производительность по сравнению со squid. ==== Развертывание ==== 1. Инстоляция OS Centos 6.3 и конфигурация интерфейсов.\\ 2. Добавление необходимых репозиториев на каждый сервер\\ 2.1. EPEL wget http://mirror.yandex.ru/epel/6/x86_64/epel-release-6-8.noarch.rpm (необходимо проверить актуальную версию) rpm -i epel-release-6-8.noarch.rpm 2.2 squid-repo Версия Squid 3.1 поставляется вместе с Centos 6.3. Если необходимо [[http://wiki.squid-cache.org/Features/HTTP11|http/1.1 answers]] тогда устанавливаем версию squid 3.2 На официальном сайте есть [[http://wiki.squid-cache.org/SquidFaq/BinaryPackages#KnowledgeBase.2BAC8-RedHat.Squid-3.2|линк]] с репозиторием cat /etc/yum.repos.d/squid.repo [squid] name=Extra Packages squid proxy for Centos 6 baseurl=http://repo.ngtech.co.il/rpm/centos/6/x86_64/ enabled=1 gpgcheck=0 3. Update ОС и установка пакетов на каждый сервер. yum update reboot (if needed) yum install htop systat blktrace scp ntp bind bind-utils pacemaker corosync make gcc \ gcc-c++ openssl-devel openssh-clients squid 4. Конфигурация локального NTPD на каждом сервере. /etc/ntp.conf driftfile /var/lib/ntp/drift restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict -6 ::1 server your_1.ntp.server Запуск сервиса и установка старта при загрузке chkconfig ntpd on service ntpd start 5. Конфигурация локального кэширующего DNS сервера на каждом узле proxy cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursion yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; max-ncache-ttl 3600; max-cache-ttl 28800; allow-query { any; }; allow-recursion { any; }; forwarders { **your_dns_server1**; **your_dns_server2**; }; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; Перенаправление запросов на локальный DNS сервер cat /etc/resolv.conf nameserver 127.0.0.1 6. Инсталяция Delegate на proxy-node1 an proxy-node2 6.1 Скачивание и разархивация последней стабильно версии http://www.delegate.org/delegate/download/\\ 6.2 Компиляция make\\ 6.3 Копирование бинарника delegated из /usr/src/delegatex.x.x/src/delegate в /usr/sbin directory для каждого из трех протоколов\\ cp delegated /usr/sbin/delegated-imap cp delegated /usr/sbin/delegated-smtp cp delegated /usr/sbin/delegated-ftp 6.4 Создание скриптов FTP cat /etc/init.d/delegate-ftp #!/bin/sh # Startup script for anacron # # chkconfig: 34 60 40 # description: Run Delegate daemons . /etc/init.d/functions prog="delegated-ftp" startoptions="-r -P0.0.0.0:21 SERVER=ftp ADMIN=adm@your_domain.dom \ CACHE=no REMITTABLE=ftp,ftps PERMIT=*:*:192.168.* MAXIMA=delegated:100,standby:80 \ TIMEOUT=shutout:300,restart:1d,acc:100,con:100,dns:4,dnsinv:1 \ RESOLV=sys,file SRCIF=217.9.80.9:*:* LOGFILE=ftp[date+.%d]" stopoptions="-P0.0.0.0:21 -Fkill" lockfile=/var/lock/subsys/$prog start() { echo -n $"Starting $prog: " # daemon $prog $startoptions RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $lockfile return $RETVAL } stop() { echo -n $"Stopping $prog: " # daemon $prog $stopoptions RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $lockfile return $RETVAL } case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0 chmod 755 /etc/init.d/delegate-ftp IMAP Для YANDEX cat /usr/sbin/delegate-imapo #!/bin/sh /usr/sbin/delegated-imap -r -P0.0.0.0:143 SERVER=imap ADMIN=adm@your_domain.dom SRCIF=217.9.80.9:*:* CACHE=no \ REMITTABLE=imap,imaps PERMIT=*:*:192.168.* STLS=fsv MOUNT="//*%S/%S imaps://imap.yandex.ru/*%(1)@%(0)" LOGFILE="imap[date+.%d]" Для GOOGLE cat /usr/sbin/delegate-imapo #!/bin/sh /usr/sbin/delegated-imap -r -P0.0.0.0:143 SERVER=imap ADMIN=adm@your_domain.dom SRCIF=217.9.80.9:*:* CACHE=no \ REMITTABLE=imap,imaps PERMIT=*:*:192.168.* STLS=fsv MOUNT="//*%S/%S imaps://imap.gmail.com/*%(1)@%(0)" LOGFILE="imap[date+.%d]" chmod 755 /usr/sbin/delegated-imapo Тюнинг Если вы столкнетесь с проблемами производительности просто поправте MAXIMA параметры. Пример MAXIMA=listen:50,delegated:300 cat /etc/init.d/delegate-imap #!/bin/sh # Startup script for anacron # # chkconfig: 34 60 40 # description: Run Delegate daemons . /etc/init.d/functions prog="delegated-imap" progo="delegated-imapo" stopoptions="-P0.0.0.0:143 -Fkill" lockfile=/var/lock/subsys/$prog start() { echo -n $"Starting $prog: " # daemon $progo RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $lockfile return $RETVAL } stop() { echo -n $"Stopping $prog: " # daemon $prog $stopoptions RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $lockfile return $RETVAL } case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0 chmod 755 /etc/init.d/delegate-imap SMTP Для YANDEX cat /usr/sbin/delegate-smtpo #!/bin/sh /usr/sbin/delegated-smtp -r -P0.0.0.0:25 SERVER=smtps://smtp.yandex.ru/ CACHE=no REMITTABLE=* CACHE=no PERMIT=*:*:192.168.* \ LOGFILE="smtp[date+.%d]" STLS=fsv SRCIF=217.9.80.9:*:* Для GOOGLE cat /usr/sbin/delegate-smtpo #!/bin/sh /usr/sbin/delegated-smtp -r -P0.0.0.0:25 SERVER=smtps://smtp.gmail.com/ CACHE=no REMITTABLE=* CACHE=no PERMIT=*:*:192.168.* \ LOGFILE="smtp[date+.%d]" STLS=fsv SRCIF=217.9.80.9:*:* chmod 755 /usr/sbin/delegated-smtpo Тюнинг Если вы столкнетесь с проблемами производительности просто поправте MAXIMA параметры. Пример MAXIMA=listen:50,delegated:300 cat /etc/init.d/delegate-smtp #!/bin/sh # Startup script for anacron # # chkconfig: 34 60 40 # description: Run Delegate daemons . /etc/init.d/functions prog="delegated-smtp" progo="delegated-smtpo" stopoptions="-P0.0.0.0:25 -Fkill" lockfile=/var/lock/subsys/$prog start() { echo -n $"Starting $prog: " # daemon $progo RETVAL=$? echo [ $RETVAL -eq 0 ] && touch $lockfile return $RETVAL } stop() { echo -n $"Stopping $prog: " # daemon $prog $stopoptions RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f $lockfile return $RETVAL } case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0 chmod 755 /etc/init.d/delegate-smtp 6.5. Запуск delegated на proxy серверах. Delegated очень стабильное приложение. (Работаю с ним более 7 лет. Ни разу не падал) chkconfig delegate-ftp on chkconfig delegate-smtp on chkconfig delegate-imap on service delegate-ftp start service delegate-smtp start service delegate-imap start Для ротации логов раз в неделю презапускайте по крону (не чаще раза в сутки или меняйте LOGFILE="protocol[date+.%d]") 7. Конфигурирование squid на каждом сервере Детальная конфигурация не является целью данной статьи. Для детальной конфигурации обратитесь к следующему [[http://wiki.squid-cache.org/ConfigExamples|линку]].\\ Для данного примера: cat /etc/squid/squid.conf acl localhost src 127.0.0.1/32 ::1 #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/24 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl CONNECT method CONNECT shutdown_lifetime 3 second http_access allow manager localhost http_access deny manager http_access allow localnet http_access allow localhost # And finally deny all other access to this proxy http_access deny all http_port 8080 tcp_outgoing_address 217.9.80.9 hierarchy_stoplist cgi-bin ? cache_mem 2048 MB maximum_object_size_in_memory 2048 KB # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # Add any of your own refresh_pattern entries above these. refresh_pattern . 0 20% 240 Выключение запуска при загрузке системы chkconfig squid off 8. Конфигурирование Corosync на каждом сервере cat /etc/corosync/corosync.conf compatibility: whitetank totem { version: 2 secauth: on threads: 0 interface { ringnumber: 0 bindnetaddr: 192.168.0.N # where N is IP address of front end network mcastaddr: 226.94.1.1 mcastport: 5405 ttl: 1 } } logging { fileline: off to_stderr: no to_logfile: yes to_syslog: yes logfile: /var/log/cluster/corosync.log debug: off timestamp: on logger_subsys { subsys: AMF debug: off } } amf { mode: disabled } cat /etc/corosync/service.d/pcmk service { # Load the Pacemaker Cluster Resource Manager name: pacemaker ver: 1 } END Необходимо создать authkey на одном из серверов и скопировать на другие. corosync-keygen Перезагрузка сервисов service corosync restart service pacemaker restart Проверка crm status Last updated: Fri Jan 11 09:31:55 2013 Last change: Tue Dec 11 14:33:11 2012 via crm_resource on proxy-node1 Stack: openais Current DC: proxy-node1 - partition with quorum Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14 3 Nodes configured, 3 expected votes ============ Online: [ proxy-node1 proxy-node2 proxy-quorum ] 9. Конфигурирование pacemaker На любом из узлов crm crm(live)# crm(live)#configure crm(live)configure#crm configure property no-quorum-policy=stop crm(live)configure#crm configure property stonith-enabled=false crm(live)configure#primitive LShareIP ocf:heartbeat:IPaddr2 params ip="192.168.0.9" cidr_netmask="23" op monitor interval="30s" on_fail="standby" crm(live)configure#primitive GShareIP ocf:heartbeat:IPaddr2 params ip="217.9.80.9" cidr_netmask="24" op monitor interval="30s" on_fail="standby" crm(live)configure#primitive squid lsb:squid op monitor interval="120s" on_fail="standby" \ op start interval="0" timeout="120s" \ op stop interval="0" timeout="120s" crm(live)configure#commit На узле quorum crm crm(live)#node crm(live)node#standby Запуск при загрузке системы chkconfig corosync on chkconfig pacemaker on 10. Конфигурирование iptables cat /etc/sysconfig/iptables # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -i eth0 -p icmp -j ACCEPT -A INPUT -i eth0 -j DROP COMMIT eth0 - внешний интерфейс. service iptables restart chkconfig iptables on ====PS==== Огромное спасибо [[http://staff.aist.go.jp/y.sato/|Yutaka Sato]] за создание приложения proxy (delegate). ==== Centos/Redhat 6.4 ==== Сегодня обновил систему до centos 6.4. Команда Crm в новом pacemaker-cli исчезла. \\ Если хотите использовать команду crm с centos/redhat 6.4 необходимо установить crmsh: yum install crmsh\\ Я использую следующий репозиторий: [network_ha-clustering] name=High Availability/Clustering server technologies (RedHat_RHEL-6) type=rpm-md baseurl=http://download.opensuse.org/repositories/network:/ha-clustering/RedHat_RHEL-6/ gpgcheck=1 gpgkey=http://download.opensuse.org/repositories/network:/ha-clustering/RedHat_RHEL-6/repodata/repomd.xml.key enabled=1 Или используйте pcs (yum install pcs) ==== Об авторе ==== [[https://www.linkedin.com/pub/alexey-vyrodov/59/976/16b|Profile]] автора