<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Menlo;
        panose-1:2 11 6 9 3 8 4 2 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"Préformaté HTML Car";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.PrformatHTMLCar
        {mso-style-name:"Préformaté HTML Car";
        mso-style-priority:99;
        mso-style-link:"Préformaté HTML";
        font-family:Consolas;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=FR link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Hi James,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>After spending hours understanding how the different algorithms work, we selected the "TAILDROP" with the following parameters:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>modparam("ratelimit", "timer_interval", 1)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>modparam("ratelimit", "default_algorithm", "TAILDROP")<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>modparam("ratelimit", "hash_size", 2048)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>it does the job (it drops what it takes!).<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>The only thing I can advise you is to cache the limitation for each IP, because if you must query your database to obtain the limitation, in case of DDOS, your server will crash because of the possible slowdown of the database queries.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Regards<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:12.0pt;color:black'>De : </span></b><span style='font-size:12.0pt;color:black'>Users <users-bounces@lists.opensips.org> au nom de James Seer <sj6502621@gmail.com><br><b>Répondre à : </b>OpenSIPS users mailling list <users@lists.opensips.org><br><b>Date : </b>lundi 30 janvier 2023 à 14:33<br><b>À : </b><users@lists.opensips.org><br><b>Objet : </b>[OpenSIPS-Users] Ratelimit CPS Algorithms<o:p></o:p></span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Hello,<br>I'm trying to find the best way to control calls coming to my opensips box using the Ratelimit module.<br>i'm setting a specific cps limit to each customer via its ip source and i want precision and accuracy without exhausting my server (vultr virtual machine 2 cores, 4gb ram with 2gb dedicated to opensips shared memory and 32m shared + 8 udp workers with a profile scalling up to 16 workers on 70% load)<br>I was able to achieve what I wanted by using the SBT algorithm, a window_size of 1 second and slot_period of 200 milliseconds, 5 slots in total. Most of my customers have a 5 to 20 cps limit.<br><br><br><o:p></o:p></p><pre><code><span style='font-family:Menlo;color:#24292F;border:none windowtext 1.0pt;padding:0cm'>modparam("ratelimit", "window_size", 1)<o:p></o:p></span></code></pre><pre><code><span style='font-family:Menlo;color:#24292F;border:none windowtext 1.0pt;padding:0cm'>modparam("ratelimit", "slot_period", 200)</span></code><span style='font-size:9.0pt;font-family:Menlo;color:#24292F'><o:p></o:p></span></pre><div><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:9.0pt;font-family:Menlo;color:#24292F'>if(!rl_check("RL_$si", 5, "SBT")) send_reply("403", "Cps Exceeded");<br><br>I admit not being able to understand how the SBT algorithm works via the documentation, I wanted to know if the values i set for window_size and slot_period are the best for CPS Limitation.<br>Also do you confirm that SBT is the most accurate among other ratelimit algorithms for calls per second limitation ?<br><br>Thank you<br><br></span><o:p></o:p></p></div><div><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:9.0pt;font-family:Menlo;color:#24292F'><br></span><br><br><o:p></o:p></p></div></div><p class=MsoNormal>_______________________________________________ Users mailing list Users@lists.opensips.org http://lists.opensips.org/cgi-bin/mailman/listinfo/users <o:p></o:p></p></div></body></html>