ป้ายกำกับ: Whitelist

แสดงวิธีตั้งค่า Whitelist IP หรือ Internal Service ไม่ให้ติด Rate Limit ใน Nginxแสดงวิธีตั้งค่า Whitelist IP หรือ Internal Service ไม่ให้ติด Rate Limit ใน Nginx

“>

ในสถาปัตยกรรมระบบที่ซับซ้อน การป้องกันการโจมตีแบบ Denial of Service (DoS) ด้วยการจำกัดอัตราการร้องขอ (Rate Limiting) เป็นสิ่งจำเป็น อย่างไรก็ตาม ระบบภายใน (Internal Services) หรือบริการที่เชื่อถือได้ (Trusted Services) มักจะต้องได้รับการยกเว้นจากกฎ Rate Limit เหล่านี้ เพื่อให้การสื่อสารระหว่าง Microservices หรือแอปพลิเคชันหลักกับ Backend Service เป็นไปอย่างราบรื่น

หลักการ Whitelist IP ใน Nginx ด้วย PostgreSQL Context

“>

การยกเว้น Rate Limit ใน Nginx ไม่ได้หมายถึงการปิดระบบ แต่คือการกำหนดข้อยกเว้น (Exception) ให้กับ IP หรือ Header ที่เชื่อถือได้ หลักการทำงานที่ใช้คือการใช้คุณสมบัติของคำสั่ง limit_req_zone: หากคีย์ที่ใช้ในการคิดโควตา (Zone Key) มีค่าเป็นสตริงว่าง ("") Nginx จะข้ามการคำนวณโควตา (Bypass) ของ Request นั้นทันที

“>

เทคนิคมาตรฐานในการทำ Whitelist คือการใช้โมดูล geo ร่วมกับ map เพื่อตรวจสอบ IP ต้นทาง หรือ Header ที่ส่งมาจาก Internal Service จากนั้นจึงแปลงค่าเหล่านั้นให้เป็นสตริงว่างสำหรับกลุ่มที่ต้องการยกเว้น


ขั้นตอนการตั้งค่า (nginx.conf)

“>

การตั้งค่าเหล่านี้ควรถูกวางไว้ในบล็อก http เพื่อให้สามารถเข้าถึงคำสั่ง geo และ map ได้อย่างถูกต้อง

“>

ในบริบทของสถาปัตยกรรมที่ใช้ PostgreSQL เป็น Backend หลัก ข้อมูล IP ที่ต้อง Whitelist ควรถูกบริหารจัดการอย่างเป็นระบบ อาจจะดึงมาจากตาราง trusted_ips ใน Schema ของ PostgreSQL เพื่อให้การอัปเดตเป็นไปอย่างอัตโนมัติ



<p class="code-lang-label wp-block-paragraph"><strong>SQL</strong></p>

<div class="wp-block-syntaxhighlighter-code ">
http {&lt;/code&gt;
    &lt;code class=&quot;language-sql&quot;&gt;# =========================================================&lt;/code&gt;
    &lt;code class=&quot;language-sql&quot;&gt;# 1. กำหนด IP / Subnet ที่ต้องการ Whitelist (โมดูล geo)&lt;/code&gt;
    &lt;code class=&quot;language-sql&quot;&gt;# IP เหล่านี้ควรมาจากข้อมูลที่ถูกจัดการใน PostgreSQL&lt;/code&gt;
    &lt;code class=&quot;language-sql&quot;&gt;geo $rate_limit_whitelist {&lt;/code&gt;
        &lt;code class=&quot;language-sql&quot;&gt;default        0;            # IP ทั่วไป (คิด rate limit)&lt;/code&gt;
        &lt;code class=&quot;language-sql&quot;&gt;127.0.0.1      1;            # Localhost&lt;/code&gt;
        &lt;code class=&quot;language-sql&quot;&gt;10.0.0.0/8     1;            # Internal Private Network (VPC/Docker)&lt;/code&gt;
        &lt;code class=&quot;language-sql&quot;&gt;192.168.1.0/24 1;            # Internal Subnet 2&lt;/code&gt;
    &lt;code class=&quot;language-sql&quot;&gt;}&lt;/code&gt;

    &lt;code class=&quot;language-sql&quot;&gt;# 2. ใช้ map เพื่อกำหนดค่าให้เป็นสตริงว่างสำหรับ IP ที่ Whitelist&lt;/code&gt;
    &lt;code class=&quot;language-sql&quot;&gt;map $rate_limit_whitelist &quot;&quot; &quot;&quot;;&lt;/code&gt;

    &lt;code class=&quot;language-sql&quot;&gt;server {&lt;/code&gt;
        &lt;code class=&quot;language-sql&quot;&gt;location /api/ {&lt;/code&gt;
            &lt;code class=&quot;language-sql&quot;&gt;limit_req zone=mylimit rate=5r/s;&lt;/code&gt;
        &lt;code class=&quot;language-sql&quot;&gt;}&lt;/code&gt;
    &lt;code class=&quot;language-sql&quot;&gt;}&lt;/code&gt;
&lt;code class=&quot;language-sql&quot;&gt;}
</div>
"><p class="wp-block-paragraph">เมื่อ Nginx ได้รับ Request ที่มี IP ตรงกับรายการใน <code class="language-sql">geo</code> ค่า <code class="language-sql">$rate_limit_whitelist</code> จะถูกกำหนดให้เป็นค่าที่ทำให้ <code class="language-sql">map</code> ส่งออกเป็นสตริงว่าง (<code class="language-sql">""</code>) ซึ่งทำให้ Request นั้นถูกยกเว้นจาก Rate Limit อย่างสมบูรณ์</p>



<h2 class="wp-block-heading">บทสรุปและข้อควรพิจารณา</h2>

">
<p class="wp-block-paragraph">การตั้งค่า Whitelist IP ใน Nginx เป็นกลไกที่ทรงประสิทธิภาพในการรักษาความต่อเนื่องทางธุรกิจ (Business Continuity) สำหรับ Internal Services อย่างไรก็ตาม ในฐานะ Senior Architect สิ่งสำคัญคือการจัดการรายการ IP เหล่านี้อย่างระมัดระวัง</p>

">
<p class="wp-block-paragraph">ควรมีการตรวจสอบและอัปเดตรายการ IP ที่ Whitelist อย่างสม่ำเสมอ โดยเฉพาะเมื่อมีการเปลี่ยนแปลงโครงสร้างเครือข่าย (Network Topology) หรือเมื่อมีการเพิ่มบริการใหม่เข้าสู่ระบบ การผสานรวมการจัดการ IP เหล่านี้เข้ากับระบบ Configuration Management ที่เชื่อมโยงกับ PostgreSQL จะช่วยให้ระบบมีความยืดหยุ่นและสามารถตรวจสอบสถานะของ Whitelist ได้อย่างแม่นยำ ทำให้มั่นใจได้ว่าระบบจะมีความเสถียรสูงสุดภายใต้การโจมตีหรือการใช้งานที่หนาแน่น</p>