Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
HAProxy-Keepalived-Sec-HighLoads — ✨ Affronta HAProxy e Keepalived, oltre al load balancer e al cluster, anche per la sicurezza (prevenzione della vulnerabilità dell'uso debole di SSL/Crypto (LOGJAM) (CVE-2015-4000)) e contro carichi elevati. | Kitploit
Strumenti/GitHubGitHub/fatlan/haproxy-keepalived-sec-highloads
Scanner di VulnerabilitàAudit di ConfigurazioneSicurezza di Rete
GitHubfatlan/haproxy-keepalived-sec-highloads

HAProxy-Keepalived-Sec-HighLoads

✨ Affronta HAProxy e Keepalived, oltre al load balancer e al cluster, anche per la sicurezza (prevenzione della vulnerabilità dell'uso debole di SSL/Crypto (LOGJAM) (CVE-2015-4000)) e contro carichi elevati.

Vedi Repository
6233 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Installazione e Configurazione di HAProxy e Keepalived (LoadBalancer+Cluster+Sec+HighLoads)

Crepe

HAProxy è un software open source che fornisce un servizio proxy per applicazioni TCP e HTTP con bilanciamento del carico ad alta disponibilità.

Keepalived è un software open source in grado di fornire la funzionalità IP failover per più di due server. Keepalived utilizza al suo interno la tecnica di comunicazione Multicast.

Nella nostra architettura utilizzeremo HAProxy per il bilanciamento del carico e Keepalived per il failover dell'IP, ovvero per rendere la nostra architettura HAProxy un Cluster.

Nel nostro scenario sono presenti 3 server. Installeremo HAProxy su questi 3 server per renderli un bilanciatore di carico. Successivamente installeremo il servizio Keepalived in modo che, quando uno dei server si spegne, esegua un IP failover e passi all'altro server senza interruzioni, mantenendo attivo il nostro servizio di bilanciamento del carico.

Per questo utilizzeremo 4 IP (gli IP sono completamente fittizi)

  1. Server : 10.10.5.13
  2. Server : 10.10.5.14
  3. Server : 10.10.5.15
  4. Keepalived Virtual Ip : 10.10.5.5

Ora installiamo i servizi HAProxy e Keepalived su tutti e 3 i server come segue.

root@kitploit:~
sudo add-apt-repository ppa:vbernat/haproxy-2.7 -y
sudo apt update
sudo apt install haproxy keepalived -y
sudo openssl dhparam -out /etc/haproxy/dhparams.pem 2048

Nota1: I server devono avere "net.ipv4.ip_nonlocal_bind=1". Altrimenti, non potendo ospitare lo stesso IP contemporaneamente sulla configurazione utilizzata per HAProxy, si verificherà un errore di bind e il servizio non funzionerà. Per questo è necessario seguire il percorso seguente.

Per prima cosa, modificate il file "vi /etc/sysctl.conf", incollate il seguente parametro, salvate e uscite.

root@kitploit:~
net.ipv4.ip_nonlocal_bind=1

Quindi eseguite il seguente comando.

root@kitploit:~
sysctl -p

Nota2: Se utilizzerete 443 SSL, nella directory "/etc/ssl/private/" deve essere presente il file "haproxy.pem" contenente il Bundle dei vostri SSL (.crt,.ca,*.key).

Ora diamo un'occhiata alla configurazione di HAProxy di esempio qui sotto. Utilizzerete la stessa configurazione per ogni HAProxy nella vostra architettura.

HAProxy

Per questo, modificherete il file "/etc/haproxy/haproxy.cfg". La configurazione seguente supporta minimo HAv2.

root@kitploit:~
vi /etc/haproxy/haproxy.cfg

Di seguito sono presenti anche i valori predefiniti

root@kitploit:~
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon
#        maxconn 100000 #replaceable


        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        # An alternative list with additional directives can be obtained from
        #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
        #ssl-default-bind-options no-sslv3
	ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
	ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
	ssl-dh-param-file /etc/haproxy/dhparams.pem
	#tune.ssl.default-dh-param 2048


#	nbproc 1
#	nbthread 8

	tune.maxrewrite 16384
	tune.bufsize 32768

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
	option forwardfor
#        maxconn 1000000 #replaceable
        timeout connect 3000000
        timeout client  6000000
        timeout server  6000000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

Parte di configurazione Dashboard per HAProxy (aggiunta integrazione prometheus per il monitoraggio)

root@kitploit:~
listen stats
        bind fatlan.com:8989
        mode http
        stats enable
        stats uri /stats
        option http-use-htx
        http-request use-service prometheus-exporter if { path /metrics }
        #stats hide-version
        stats realm HAProxy\ Statistics
        stats auth admin:admin

Nella configurazione seguente, in due blocchi è stato utilizzato ACL. Nel primo blocco, se in qualsiasi punto del link è presente la parola "rest", verrà eseguito il blocco middleware-fatlan-backend; nel secondo, per una richiesta a un dominio diverso (forum.fatlan.com) verrà eseguito backend fatlan-forum-backend; altrimenti, tutte le richieste verranno eseguite nel blocco fatlan-backend443. Escluse le altre reindirizzazioni di porta.

Parte di reindirizzamento dalla porta 80 alla porta 443

root@kitploit:~
frontend fatlan80
        bind fatlan.com:80
        mode http
        redirect scheme https if !{ ssl_fc }

frontend fatlan443
        bind fatlan.com:443 ssl crt /etc/ssl/private/haproxy.pem ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        option httplog
	option forwardfor
 	#http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])
        #option forwardfor except 127.0.0.0/8
        option http-server-close
	http-request set-header X-Forwarded-Proto https
#        reqadd X-Forwarded-Proto:\ https #old config
        mode http
        default_backend fatlan-backend443

Configurazione di esempio ACL (proxypass) se in qualsiasi punto del link è presente la parola rest reindirizza

root@kitploit:~
        acl middleware-fatlan path_beg /rest
        use_backend middleware-fatlan-backend if middleware-fatlan

Reindirizzamento ad host forum diverso tramite ACL

root@kitploit:~
    	acl host_fatlanforum hdr(host) -i forum.fatlan.com
    	use_backend fatlan-forum-backend if host_fatlanforum

Parte reindirizzata di default, parte reindirizzata per 443

root@kitploit:~
backend fatlan-backend443
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server frontend_01 10.10.37.12:8001 check port 8001 inter 3000 rise 2 fall 3
        server frontend_02 10.10.37.13:8001 check port 8001 inter 3000 rise 2 fall 3

Parte reindirizzata rest proveniente da ACL

root@kitploit:~
backend middleware-fatlan-backend
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk OPTIONS /login HTTP/1.0
        http-check expect status 200
	http-request replace-path (.*)(?:rest\/)(.*) \1\2
#        reqrep ^([^\ :]*)\ /rest[/]?(.*) \1\ //\2  #old config 
	
        server middleware_01 10.10.37.34:3000 check port 4000 inter 12000 rise 3 fall 3
        server middleware_02 10.10.37.35:3000 check port 4000 inter 12000 rise 3 fall 3

Parte reindirizzata forum proveniente da ACL

root@kitploit:~
backend fatlan-forum-backend
        mode http
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server forum_01 10.10.37.45:8080 check port 8080 inter 3000 rise 2 fall 3

Esempi esterni possono essere configurati anche come segue.

Esempio per la porta 5000;

root@kitploit:~
frontend Panel5000
        bind fatlan.com:5000
#        option httplog
        option forwardfor except 127.0.0.0/8
        #option http-server-close
	http-request set-header X-Forwarded-Proto https
#        reqadd X-Forwarded-Proto:\ https #old config
        mode http
        default_backend panel-backend5000

Parte reindirizzata per la porta 5000

root@kitploit:~
backend panel-backend5000
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server panel_01 10.10.37.43:5000 check port 5000 inter 12000 rise 3 fall 3
        server panel_02 10.10.37.44:5000 check port 5000 inter 12000 rise 3 fall 3

Esempio mysql 3306;

root@kitploit:~
frontend fatlanmysql
        bind fatlan.com:3306
        mode tcp
        default_backend fatlanmysql-backend3306

Parte reindirizzata per la porta 3306

root@kitploit:~
backend fatlanmysql-backend3306
        mode tcp
	
        server mysql_01 10.10.37.60:3306 check
        server mysql_02 10.10.37.61:3306 check backup
        server mysql_03 10.10.37.62:3306 check backup

Potete anche effettuare il reindirizzamento per altri domini, sottodomini o porte sempre tramite lo stesso haproxy. In effetti, abbiamo già visto sopra il reindirizzamento ACL per il sottodominio.

Esempio per il sottodominio egitim.fatlan.com sulla porta 4444;

root@kitploit:~
frontend egitim4444
        bind egitim.fatlan.com:4444
#        option httplog
        option forwardfor except 127.0.0.0/8
        #option http-server-close
	http-request set-header X-Forwarded-Proto https
#        reqadd X-Forwarded-Proto:\ https #old config
        mode http
        default_backend egitim-backend4444

Parte reindirizzata per la porta 4444 del sottodominio egitim.fatlan.com

root@kitploit:~
backend egitim-backend4444
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server egitim_01 10.10.37.77:4444 check port 4444 inter 12000 rise 3 fall 3
        server egitim_02 10.10.37.78:4444 check port 4444 inter 12000 rise 3 fall 3

Ho parlato sopra di esempi di configurazione di HAProxy, ho fatto la mia configurazione e ho incollato le stesse configurazioni su tutti e 3 i server.

Keepalived

Ora configuriamo Keepalived. Per Keepalived, su tutti e 3 i server ci saranno impostazioni parametriche parzialmente diverse. Per questo, creeremo e configureremo il file "/etc/keepalived/keepalived.conf". A proposito, quello con la "priority" più alta ha la precedenza.

Nota1: Keepalived comunica con gli altri peer tramite multicast e in questo modo vengono determinati master e backup.

Potete anche catturare la comunicazione multicast tra i peer con Tcpdump (tcpdump -n "multicast").

https://www.redhat.com/sysadmin/keepalived-basics

1. Server (HAProxy+Keepalived)

root@kitploit:~
vrrp_sync_group haproxy {
  group {
   VI_01
  }
}

vrrp_script haproxy_check_script {
  script "killall -0 haproxy"
  interval 2 # checking every 2 seconds (default: 5 seconds)
  fall 3 # require 3 failures for KO (default: 3)
  rise 6 # require 6 successes for OK (default: 6)
}

#Virtual interface
vrrp_instance VI_01 {
  state MASTER
  interface ens3
  ### Cambiare l'id 61, sarà lo stesso negli altri peer
  virtual_router_id 61
  ### Cambiare l'id 103, negli altri peer sarà decrescente
  priority 103
  
  authentication {
    auth_type PASS
    auth_pass 123456
  }

# Virtual ip address – floating ip
  virtual_ipaddress {
    10.10.5.5
  }
  
  track_script {
    haproxy_check_script
  }
}

2. Server (HAProxy+Keepalived) (Scrivo solo le differenze)

root@kitploit:~
  state BACKUP
  priority 102

3. Server (HAProxy+Keepalived) (Scrivo solo le differenze)

root@kitploit:~
  state BACKUP
  priority 101

Nota2: Se la comunicazione multicast tra i server non è possibile (es. ambienti kvm, cloud, ecc.), è necessario configurare utilizzando la comunicazione unicast, altrimenti non funzionerà.

Configurazione Unicast: può essere aggiunta all'interno della configurazione come segue.

root@kitploit:~
###Per ogni server devono essere specificati (scritti) gli IP degli altri peer

...
#Virtual interface
...

  unicast_peer {
    <ip_altro_peer>
    <ip_altro_peer>
  }

# Virtual ip address – floating ip
...

Le configurazioni sono tutto. Su tutti i server, HAProxy deve funzionare senza problemi, così come il servizio keepalived. In caso di interruzione su server o servizi, il servizio di bilanciamento del carico continuerà a essere fornito dall'altro server in esecuzione.

High Loads

Impostazioni per carichi elevati di HAProxy e kernel Linux

root@kitploit:~
sudo vi /etc/security/limits.conf


* soft no le 1000000
* hard no le 1000000
root soft no le 1000000
root hard no le 1000000
root@kitploit:~
sudo vi /etc/default/haproxy

ulimit 1000000
root@kitploit:~
sudo vi /lib/systemd/system/haproxy.service

LimitNOFILE=1000000
root@kitploit:~
sudo vi /etc/sysctl.conf

net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_max_syn_backlog = 100000
net.core.somaxconn = 100000
net.core.netdev_max_backlog = 100000
root@kitploit:~
sudo vi /etc/haproxy/haproxy.cfg

global
    nbproc 1
    nbthread 8
    tune.maxrewrite 16384
    tune.bufsize 32768
    maxconn 1000000
    tune.ssl.cachesize 1000000
defaults
    maxconn 1000000

Quindi reboot, se reboot non è possibile immediatamente

root@kitploit:~
sudo systemctl daemon-reload
sudo systemctl restart haproxy.service

Security

Inoltre, per eseguire i test di sicurezza sull'uso di SSL/Criptografia debole (LOGJAM) (CVE-2015-4000), potete utilizzare il seguente comando oppure https://www.ssllabs.com/ssltest/

root@kitploit:~
sudo nmap -sV --script ssl-enum-ciphers -p 443 fatlan.com

sudo nmap -p 443 --script ssl-cert fatlan.com

openssl s_client -connect fatlan.com:443

Inoltre, nelle config di cui sopra, per ottenere l'ip del client potete utilizzare tcpdump per catturare la verifica della configurazione x-forwarder-for (option forwardfor), cioè gli IP lato haproxy.

root@kitploit:~
sudo tcpdump -i ens3 -A -s 10240 | grep -v IP | egrep --line-buffered "..(GET |\.HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: " |sed -r 's/..(GET |HTTP\/|POST |HEAD )/\n\n\1/g'

Crepe

Scarica lo strumento