Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
HAProxy-Keepalived-Sec-HighLoads — ✨ يتناول موضوع HAProxy وKeepalived في موازنة التحميل والمجموعة بالإضافة إلى الأمان (منع ثغرة استخدام SSL/تشفير ضعيف (LOGJAM) (CVE-2015-4000)) ومواجهة الأحمال العالية. | Kitploit
أدوات/GitHubGitHub/fatlan/haproxy-keepalived-sec-highloads
ماسحات الثغرات الأمنيةتدقيق التكوينأمن الشبكات
GitHubfatlan/haproxy-keepalived-sec-highloads

HAProxy-Keepalived-Sec-HighLoads

✨ يتناول موضوع HAProxy وKeepalived في موازنة التحميل والمجموعة بالإضافة إلى الأمان (منع ثغرة استخدام SSL/تشفير ضعيف (LOGJAM) (CVE-2015-4000)) ومواجهة الأحمال العالية.

عرض المستودع
623منذ 3 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

تثبيت وتكوين HAProxy و Keepalived (موازن التحميل + المجموعة + الأمان + الأحمال العالية)

Crepe

HAProxy هو برنامج مفتوح المصدر يوفر خدمة خادم وكيل (proxy) لتطبيقات TCP و HTTP مع قدرة عالية على التوافر (high availability) وموازنة التحميل (load balancing).

Keepalived هو برنامج مفتوح المصدر قادر على توفير خاصية IP failover (تجاوز الفشل) لأكثر من خادمين. يستخدم Keepalived تقنية الاتصال Multicast بين أعضائه.

في بنيتنا، سنستخدم HAProxy لموازنة التحميل، و Keepalived لترحيل عناوين IP أي لجعل بنية HAProxy لدينا مجموعة (Cluster).

في السيناريو لدينا 3 خوادم. سنقوم بتثبيت HAProxy على هذه الخوادم الثلاثة لجعلها موازنة تحميل. ثم سنقوم بتثبيت خدمة Keepalived بحيث عندما يتوقف أحد الخوادم، سيتم تجاوز الفشل (IP failover) إلى خادم آخر دون انقطاع، مما يضمن استمرار عمل خدمة موازنة التحميل.

لهذا سنستخدم 4 عناوين IP (عناوين IP وهمية تمامًا)

  1. الخادم : 10.10.5.13
  2. الخادم : 10.10.5.14
  3. الخادم : 10.10.5.15
  4. IP الظاهري لـ Keepalived : 10.10.5.5

الآن، لنقم بتثبيت خدمتي HAProxy و Keepalived على الخوادم الثلاثة كما يلي:

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

ملاحظة1: يجب أن تحتوي الخوادم على "net.ipv4.ip_nonlocal_bind=1". وإلا، لن يتمكن التكوين المستخدم لـ HAProxy من استضافة نفس عنوان IP في نفس الوقت، مما يؤدي إلى خطأ ربط (bind error) ولن تعمل الخدمة. لذلك، يجب اتباع المسار التالي.

أولاً، قم بتحرير ملف "vi /etc/sysctl.conf" وألصق المعلمة التالية، ثم احفظ واخرج.

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

ثم قم بتشغيل الأمر التالي.

root@kitploit:~
sysctl -p

ملاحظة2: إذا كنت ستستخدم SSL على المنفذ 443، فيجب أن يكون لديك ملف "haproxy.pem" داخل الدليل "/etc/ssl/private/" والذي يحتوي على حزمة شهادات SSL الخاصة بك (***.crt, .ca, .key).

الآن، دعنا نلقي نظرة على تكوين HAProxy كمثال أدناه. ستستخدم نفس التكوين لكل HAProxy في بنيتك.

HAPoxy

لهذا، ستقوم بتحرير ملف "/etc/haproxy/haproxy.cfg". التكوين التالي يدعم الحد الأدنى من HAv2.

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

فيما يلي القيم الافتراضية أيضًا:

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

قسم تكوين Dashboard لـ HAProxy (تمت إضافة تكامل prometheus للمراقبة):

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

في التكوين أدناه، تم استخدام ACL في كتلتين. في الكتلة الأولى، إذا ظهرت كلمة "rest" في أي مكان داخل الرابط، فسيتم تشغيل كتلة middleware-fatlan-backend. في الثانية، إذا كان الطلب لنطاق مختلف (forum.fatlan.com) فسيتم تشغيل backend fatlan-forum-backend، وإلا فإن جميع الطلبات ستعمل في كتلة fatlan-backend443. باستثناء توجيهات المنافذ الأخرى.

جزء توجيه المنفذ 80 إلى المنفذ 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

مثال لتكوين ACL (proxypass) - إذا ظهرت كلمة rest في أي مكان في الرابط، فسيتم التوجيه:

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

ACL لتوجيه مضيف مختلف لـ forum:

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

الجزء الموجه افتراضيًا لـ 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

ACL الواردة - الجزء الموجه لـ rest:

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

ACL الواردة - الجزء الموجه لـ forum:

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

يمكن أيضًا تكوين أمثلة خارجية كما يلي.

مثال على المنفذ 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

الجزء الموجه للمنفذ 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

**مثال على 3306 mysql:

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

الجزء الموجه للمنفذ 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

يمكنك أيضًا إجراء التوجيه لنطاقات أخرى أو نطاقات فرعية أو منافذ أخرى من خلال نفس HAProxy. على الرغم من أننا رأينا توجيه ACL للنطاق الفرعي أعلاه.

مثال على النطاق الفرعي egitim.fatlan.com للمنفذ 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

الجزء الموجه للنطاق الفرعي egitim.fatlan.com للمنفذ 4444:

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

لقد تحدثت عن أمثلة تكوين HAProxy أعلاه، وقمت بتكوين خاص بي وقمت بلصق نفس التكوينات على الخوادم الثلاثة.

Keepalived

الآن، لنقم بتكوين Keepalived. ستكون هناك إعدادات مختلفة جزئيًا لتكوين Keepalived على الخوادم الثلاثة. لهذا، سنقوم بإنشاء ملف "/etc/keepalived/keepalived.conf" وتكوينه. بالمناسبة، الأولوية الأعلى ( priority ) هي الأهم.

ملاحظة1: يتواصل Keepalived مع أقرانه (peers) الآخرين عبر multicast، وبهذه الطريقة يتم تحديد master و backup.

يمكنك أيضًا التقاط اتصال multicast بين الأقران باستخدام Tcpdump (tcpdump -n "multicast").

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

الخادم 1 (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
  ### 61 id'sini degistirin, diger peer'lerde de aynı olacak
  virtual_router_id 61
  ### 103 id'sini degistirin, diger peer'lerde azalan şekilde olacak
  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 (HAProxy+Keepalived) (أكتب الاختلافات فقط)

root@kitploit:~
  state BACKUP
  priority 102

الخادم 3 (HAProxy+Keepalived) (أكتب الاختلافات فقط)

root@kitploit:~
  state BACKUP
  priority 101

ملاحظة2: إذا كان الاتصال عبر multicast غير ممكن بين الخوادم (مثل: بيئات kvm، السحابية، إلخ)، فسيتعين عليك التكوين باستخدام اتصال unicast، وإلا فلن يعمل.

تكوين Unicast: يمكن إضافته داخل التكوين كما يلي:

root@kitploit:~
###Her sunucu için diğer eşneliği(peer) ip olarak belirtilmelidir(yazılır)

...
#Virtual interface
...

  unicast_peer {
    <anaother_peer_ip>
    <anaother_peer_ip>
  }

# Virtual ip address – floating ip
...

هذا هو كل شيء للتكوين. يجب أن يعمل HAProxy بدون مشاكل على جميع الخوادم، وكذلك خدمة keepalived. في حالة حدوث أي انقطاع في الخوادم أو الخدمات، سيستمر موازن التحميل في العمل من الخادم الآخر العامل.

High Loads (الأحمال العالية)

ضبط HAProxy ونواة لينكس للأحمال العالية

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

ثم reboot، إذا لم يكن reboot ممكنًا فورًا:

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

Security (الأمان)

يمكنك أيضًا استخدام الأمر التالي لإجراء اختبارات الأمان مثل استخدام SSL/تشفير ضعيف (LOGJAM) (CVE-2015-4000)، أو استخدام 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

أيضًا، للتحقق من تكوين x-forwarder-for (option forwardfor) الموجود في التكوينات أعلاه للحصول على عنوان IP العميل، أي لالتقاط عناوين IP من جانب haproxy، يمكنك استخدام tcpdump.

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

تنزيل الأداة