Security of App with NGINX Balancer

เนื่องจากปริมาณข้อมูลที่แชร์ผ่านอินเทอร์เน็ตเพิ่มขึ้นทุกปีเช่นเดียวกับการใช้เว็บเป็นเครื่องมือในการทำธุรกิจ การปกป้องเว็บไซต์และเว็บแอปพลิเคชันจึงกลายเป็นปัญหาด้านความปลอดภัยทางอินเทอร์เน็ตที่สำคัญประการหนึ่ง การตอบสนองที่ชัดเจนสำหรับเรื่องนี้คือการใช้เครื่องมือป้องกันมากมาย แต่ก่อนที่จะรีบรวมโซลูชันการป้องกันที่ซับซ้อนและ/หรือมีราคาแพง ให้พิจารณาวิธีการรักษาความปลอดภัยทั่วไปสองสามวิธีก่อน

เนื่องจากบางครั้งการรักษาความปลอดภัยขั้นพื้นฐานที่สุดก็กลายเป็นวิธีที่มีประสิทธิภาพมากที่สุด ดังนั้นในคู่มือนี้เราจะแสดงวิธีตั้งค่ากลไกการป้องกันง่าย ๆ สองสามอย่างซึ่งมีให้สำหรับแอปพลิเคชันที่ใช้ NGINX balancerเป็นฟร้อนท์เอนด์และการสมัครใด ๆ ที่ไม่ต้องเสียค่าใช้จ่ายเพิ่มเติม

โดยพื้นฐานแล้วเซิร์ฟเวอร์ NGINX load balancer มีไว้สำหรับดำเนินการแจกจ่ายคำขออัจฉริยะระหว่างโหนดแอปพลิเคชันเซิร์ฟเวอร์หลาย ๆ โหนด ดังนั้นจึงมั่นใจได้ว่าระบบมีความพร้อมใช้งานและความน่าเชื่อถือสูง ด้วยเหตุนี้จึงสามารถใช้สำหรับการประมวลผลทราฟฟิก HTTP และ TCP (รายละเอียดสามารถพบได้ในเอกสาร HTTP Load Balancing และ TCP Load Balancing)

Load balancing node จะถูกเพิ่มโดยอัตโนมัติใน Env หากคุณรับโหนดแอปพลิเคชันเซิร์ฟเวอร์มากกว่า 1 โหนดและนอกจากนี้ยังสามารถเพิ่มโหนดได้ด้วยตนเองแม้ใช้เพียงเซิร์ฟเวอร์เดียว ในการดำเนินการนี้เพียงเลือกบล็อก Balancing wizard เหนือแอปพลิเคชันเซิร์ฟเวอร์ที่เลือกในหน้าต่าง Environment Topology

เมื่อ Environment พร้อมแล้วคุณสามารถดำเนินการกำหนดค่าวิธีการป้องกันที่ต้องการได้โดยใช้คำแนะนำด้านล่าง

  • Authentication ทำให้การเข้าถึงแอปพลิเคชันได้รับการป้องกันด้วยรหัสผ่าน
  • IP Address Deny กลไกถูกใช้เพื่อห้ามการเข้าถึงแอปพลิเคชันจาก IP เฉพาะ

We’ll also pay the attention to the way of combining the abovementioned methods for being used simultaneously. So, let’s find out how to implement this to your environment. Here we go!

นอกจากนี้เราจะให้ความสำคัญกับวิธีการ combining วิธีการข้างต้นเพื่อใช้พร้อมกัน ดังนั้นเรามาดูวิธีการนำสิ่งนี้ไปใช้กับ Env ของคุณ ไปดูกันเลย

Authentication

การตรวจสอบสิทธิ์เป็นวิธีการที่เรียบง่ายแต่มีประสิทธิภาพในการจำกัดการเข้าถึงแอปพลิเคชันและตรวจสอบให้แน่ใจว่าหน่วยงานที่ไม่ได้รับอนุญาตจะไม่สามารถก่อให้เกิดอันตรายใด ๆ ได้ ในตัวอย่างนี้เราจะแสดงวิธีตั้งค่าการป้องกันชื่อผู้ใช้ / รหัสผ่าน

1. เห็นได้ชัดว่าข้อมูลรหัสผ่านไม่สามารถจัดเก็บในรูปแบบเปิดได้ ดังนั้นจึงจำเป็นต้องมีการป้องกันตัวเอง เพื่อที่คุณจะต้องสร้างแฮช (hash) ตามชื่อผู้ใช้และรหัสผ่านที่ต้องการ โดยใช้เครื่องมือ htpasswd หรือหนึ่งในบริการออนไลน์ที่คล้ายกัน (ตัวอย่างเช่น https://www.web2generators.com/apache-tools/htpasswd-generator)

2. บันทึกลำดับอักขระ (character) ที่คุณได้รับและเปลี่ยนกลับไปที่แดชบอร์ด Ruk-Com Cloud พร้อมระบุ Environment ของคุณ จากนั้นคลิกปุ่ม Config สำหรับโหนด NGINX balancer

3. คุณจะเห็นแท็บ Configuration Manager เปิดขึ้น ซึ่งคุณต้องสร้าง New file (โดยใช้ปุ่มชื่อเดียวกันที่พาเนลเครื่องมือ) ภายในโฟลเดอร์ conf.d ตั้งชื่อที่ต้องการ แต่บังคับต้องใช้นามสกุล .htpasswd (เช่น password.htpasswd)

4. หลังจากเสร็จสิ้นให้วางแฮช (hash) ที่คุณได้รับในขั้นตอนคำแนะนำแรกลงในเนื้อหาของไฟล์  โปรดจำไว้ว่าคุณสามารถเพิ่มบัญชีได้มากเท่าที่คุณต้องการ (อย่าลืมวางทุกบัญชีถัดไปจากบรรทัดใหม่)

บันทึกการเปลี่ยนแปลงเมื่อการตั้งค่าทั้งหมดเสร็จสิ้น

5. จากนั้นเลือกไฟล์ nginx-jelastic.conf ภายในโฟลเดอร์ conf และค้นหาตำแหน่งบล็อกในส่วน first server วางบรรทัดต่อไปนี้เพื่อเปิดใช้งานการพิสูจน์ตัวตน (authentication) และใช้กฎการเข้าถึงที่เหมาะสม:

auth_basic           "closed site";  
auth_basic_user_file /etc/nginx/conf.d/{htpasswd_file};  

โดยที่ {htpasswd_file} – ชื่อไฟล์ที่คุณใส่ hash พร้อมรหัสผ่าน (ในกรณีของเราคือไฟล์ password.htpasswd)

หมายเหตุ :
ซึ่งโดยปกติเราแนะนำให้แก้ไขการกำหนดค่าในไฟล์ nginx.conf และเก็บเนื้อหาของ nginx-jelastic.conf ไว้เป็นค่าเริ่มต้น/การสำรองข้อมูล แต่ในกรณีนี้เนื่องจากการเปลี่ยนแปลงที่จำเป็นนั้นค่อนข้างง่ายและเราค่อนข้างแน่ใจว่าเรารู้ว่ากำลังทำอะไรอยู่การทำงานโดยตรงกับไฟล์ nginx-jelastic จึงง่ายกว่า

6. บันทึกการเปลี่ยนแปลงที่คุณทำไว้อีกครั้งและ รีสตาร์ทโหนด NGINX balancer

7. ตอนนี้เมื่อพยายามเปิดแอปพลิเคชันในเบราว์เซอร์ (และไคลเอนต์อื่น ๆ ) จะต้องผ่านหน้าต่างการตรวจสอบสิทธิ์ก่อนที่จะเข้าถึงแอปพลิเคชัน

หลังจากระบุข้อมูลรับรองที่เหมาะสม (เช่น ข้อมูลประจำตัวที่คุณสร้างแฮช) แล้วแอปพลิเคชันของคุณจะเปิดขึ้น

IP Address Deny

หากคุณสังเกตเห็นความเสียหายบางอย่างเกิดขึ้นกับแอปพลิเคชันของคุณโดยผู้ใช้บางราย คุณสามารถหยุดเขาได้โดยการบล็อกคำขอใด ๆ ที่ส่งมาจาก IP address ของผู้ใช้รายนั้นและด้วยเหตุนี้จึงปฏิเสธการเข้าถึงแอปพลิเคชันของคุณ สามารถทำได้ง่าย ๆ โดยทำตามขั้นตอนด้านล่างนี้

1. เปิดแดชบอร์ด Ruk-Com พร้อมกับ Env ของคุณและคลิกปุ่ม Config สำหรับโหนด NGINX balancer

2. คลิกที่ไฟล์ nginx-jelastic.conf ในโฟลเดอร์ conf ภายในแท็บ Configuration Manager ที่เปิดอยู่ จากนั้นค้นหาตำแหน่งบล็อกในส่วน first server code และวางบรรทัดต่อไปนี้ลงไป:

deny {IP_ADDRESS};
deny {IP_ADDRESS};

โดยที่ {IP_ADDRESS} – เป็นที่อยู่ที่คุณต้องการปิดกั้นความสามารถในการเปิดแอปพลิเคชันของคุณอย่างชัดเจน

หมายเหตุ :

  • คุณยังสามารถตั้งค่าพารามิเตอร์นี้เป็น all ซึ่งหมายความว่าจะไม่มีใครเข้าถึงแอปพลิเคชันของคุณได้ ในกรณีนี้การระบุคำสั่งอนุญาตเพิ่มเติมที่นี่อาจเป็นประโยชน์ ซึ่งใช้เพื่อกำหนด IP address (หรือช่วงของ addresses) ที่คุณต้องการให้สิทธิ์เข้าถึง
  • หากในกรณีที่การทำแบบเรียบง่ายที่เสนอข้างต้นนั้นไม่ได้ผลสำหรับคุณ (เนื่องจากอาจเกิดจากการกำหนดค่าเฉพาะที่ ที่แพลตฟอร์มใดแพลตฟอร์มหนึ่ง) คุณสามารถลองใช้วิธีต่อไปนี้แทน:
if ($http_x_forwarded_for ~* {IP_ADDRESS}) {  
  return 403;
}

3. บันทึกการเปลี่ยนแปลงและรีสตาร์ทโหนด NGINX ของคุณโดยใช้ปุ่มที่เหมาะสม

4. ด้วยเหตุนี้ผู้ใช้ที่มี IP address ที่ถูกปฏิเสธจะต้องเผชิญกับข้อผิดพลาด 403 Forbidden ขณะพยายามเข้าถึงแอปพลิเคชันของคุณ

Methods Combination

ในการรวมข้อจำกัดตาม IP address และวิธีการตรวจสอบสิทธิ์เข้าด้วยกันคุณจะต้องใช้คำสั่ง satisfy ตามค่าเริ่มต้น (เช่น หากไม่ได้ประกาศอย่างชัดเจนในการกำหนดค่า) จะถูกตั้งค่าเป็น all ซึ่งหมายความว่าผู้ใช้ควรมีคุณสมบัติตรงตามเงื่อนไขทั้งสองประเภทเพื่อให้ได้รับสิทธิ์ หากคุณระบุคำสั่งนี้ภายในไฟล์ configuration และตั้งค่าเป็น any ผู้ใช้จะสามารถเปิดแอปพลิเคชันได้ หากมีเงื่อนไขอย่างน้อยหนึ่งเงื่อนไข นี่คือตัวอย่างของการกำหนดค่าดังกล่าว: 

ดังนั้นผู้ใช้ที่ไม่ได้รับการพิสูจน์ตัวตนจะได้รับสิทธิ์ในการเข้าถึงหาก IP address ของเขาอยู่ในรายการที่อนุญาต หรือผู้ใช้ที่มี IP address ที่ถูกปฏิเสธจะยังคงสามารถเข้าถึงเว็บไซต์ได้หากพวกเขาป้อนชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง

ดังนั้นตอนนี้คุณรู้วิธีพื้นฐาน 2-3 อย่างในการป้องกันแอปของคุณแล้ว โดยให้สิทธิ์การเข้าถึงแก่ผู้ใช้ที่เชื่อถือได้เท่านั้นรวมถึงปฏิเสธแอปที่ไม่น่าเชื่อถือและอาจเป็นอันตราย โปรดจำไว้ว่าการใช้เวลาไปกับการเพิ่มความปลอดภัยให้กับแอปพลิเคชันของคุณในตอนนี้สามารถช่วยคุณประหยัดเวลาและค่าใช้จ่ายได้มากในภายหลังและถึงแม้ว่าจะไม่เกิดอันตรายใด ๆ ก็ตาม