Neste post será apresentado como configurar o SSL Offloading onde a requisição é feita em https e convertida em requições http apontando para servidores backend .
1) Ambiente :
10.0.0.38 – HAPROXY-01
10.0.0.40 – APACHE-01
10.0.0.41 – APACHE-02
Todos os servidores utilizam RHEL7 com 1 Gb de RAM e 1 vCPU .
2) Criando o certificado :
Criando um certificado auto assinado para o laboratório.
openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/haproxy.pem -out /etc/pki/tls/certs/haproxy.pem -days 365
3) Configuração do HAPROXY :
Em nosso exemplo iremos configurar via YUM
yum install haproxy openssl openssl-devel -y
Confirme a versão com o comando haproxy -v
Arquivo de configuração
# Global settings global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon # turn on stats unix socket stats socket /var/lib/haproxy/stats # max per-process number of SSL connections # set 2048 bits for Diffie-Hellman key tune.ssl.default-dh-param 2048 # Default config defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 # Dashboard listen stats :4997 mode http stats enable stats hide-version stats refresh 30s stats show-node stats realm Haproxy\ Statistics stats auth admin:haproxy stats uri /haproxy # Frontends settings frontend http-in bind *:80 bind *:443 ssl crt /opt/cert/haproxy.pem ciphers RC4-SHA:AES128-SHA:AES256-SHA no-sslv3 # ACLs use_backend bk_webserver1 if { ssl_fc_sni webserver1.example.com } use_backend bk_webserver2 if { ssl_fc_sni webserver2.example.com } default_backend bk_fajlinux # Backends settings backend bk_fajlinux mode http server localhost 127.0.0.1:80 backend bk_webserver1 mode http server apache-01 10.0.0.39:80 backend bk_webserver2 mode http server apache-02 10.0.0.40:80
Adicione no /etc/hosts as entradas :
10.0.0.38 webserver1.example.com webserver2.example.com
Valide as configurações com o comando haproxy -c -f /etc/haproxy/haproxy.cfg :
Inicie o serviço
systemctl start haproxy systemctl enable haproxy
4) Configuração dos Backends :
Instalação do Apache
yum install httpd -y
Criação de cada vhost onde “X”é referente ao número do site :
/etc/httpd/conf.d/webserver.conf
<VirtualHost *:80> ServerName webserverX.example.com DocumentRoot /var/www/html </VirtualHost>
Criação do index.html
echo "`hostname` Web Backend" >> /var/www/html/index.html
Arquivo /etc/hosts :
10.0.0.39 webserver1.example.com 10.0.0.40 webserver2.example.com
Inicie o serviço :
systemctl start httpd systemctl enable httpd
5) Testes finais :
Para realizar o teste foram criadas de nome apontando para o ip de frontend do Haproxy :
10.0.0.38 webserver1.example.com webserver2.example.com
Durante o acesso será apresentada uma mensagem de alerta para adicionar uma exceção , pois não é uma CA conhecida.
Acessando o webserver1.example.com :
Acessando o webserver2.example.com :
Com esses testes estamos validando a configuração de SSL termination para diversos backends.
Referências :
blog.filepicker.io/post/29422604907/improved-https-performance-with-early-ssl-termination
http://blog.haproxy.com/2013/02/26/ssl-offloading-impact-on-web-applications/