PlusMagi's Blog By Pitt Phunsanit Database Network Socket Security & TLS/SSL Wrappers (การเข้ารหัสข้อมูลระดับ Socket ด้วย SSL/TLS และการป้องกัน Socket Exhaustion / SYN Flood)

Network Socket Security & TLS/SSL Wrappers (การเข้ารหัสข้อมูลระดับ Socket ด้วย SSL/TLS และการป้องกัน Socket Exhaustion / SYN Flood)

ในยุคที่ข้อมูลเป็นสินทรัพย์ที่ทรงคุณค่าที่สุด การส่งผ่านข้อมูลผ่านเครือข่ายจึงต้องมาพร้อมกับการรับประกันความลับและความสมบูรณ์ของข้อมูล (Confidentiality and Integrity) สำหรับระบบฐานข้อมูลอย่าง PostgreSQL การสื่อสารระหว่างแอปพลิเคชันกับเซิร์ฟเวอร์จึงไม่ได้จบแค่การส่งคำสั่ง SQL แต่ต้องมีการเข้ารหัสข้อมูลในระดับ Socket เพื่อป้องกันการดักฟัง (Eavesdropping) หรือการแก้ไขข้อมูลระหว่างทาง

การเข้ารหัสข้อมูลระดับ Socket ด้วย TLS/SSL ใน PostgreSQL

การสื่อสารข้อมูลที่วิ่งผ่านเครือข่ายโดยไม่มีการเข้ารหัสถือเป็น Plaintext ซึ่งเสี่ยงต่อการถูกดักฟังได้ง่าย แนวคิดของ TLS/SSL Wrappers จึงเข้ามาทำหน้าที่ ‘ห่อหุ้ม’ การเชื่อมต่อทั้งหมดของ PostgreSQL ด้วยชั้นการเข้ารหัสทางคณิตศาสตร์ ทำให้แม้ผู้โจมตีจะดักจับข้อมูลได้ ก็ไม่สามารถอ่านเนื้อหาได้หากไม่มีกุญแจถอดรหัสที่ถูกต้อง

ใน PostgreSQL การเปิดใช้งาน TLS/SSL จะถูกควบคุมผ่านการตั้งค่า ssl และ sslmode ซึ่งเป็นกลไกสำคัญที่บังคับให้ไคลเอนต์และเซิร์ฟเวอร์ต้องเข้ารหัสการสื่อสารทั้งหมด ตัวอย่างเช่น การตั้งค่า sslmode=require จะทำให้การเชื่อมต่อถูกปฏิเสธหากไม่ได้มีการเข้ารหัสที่ถูกต้อง

การป้องกัน Socket Exhaustion และการโจมตี (SYN Flood)

นอกจากเรื่องการเข้ารหัสแล้ว ความเสถียรและความทนทานต่อการโจมตีก็สำคัญไม่แพ้กัน การโจมตีประเภท Denial of Service (DoS) เช่น SYN Flood คือการส่งคำขอเชื่อมต่อจำนวนมากแต่ไม่สมบูรณ์ เพื่อทำให้ทรัพยากรของเซิร์ฟเวอร์หมดลงจนไม่สามารถรับการเชื่อมต่อที่ถูกต้องได้

แม้ว่าการป้องกัน SYN Flood ระดับต่ำ (Low-level) จะเป็นหน้าที่ของระบบปฏิบัติการ (OS) และ Firewall แต่ในระดับ PostgreSQL เราสามารถป้องกันการใช้ทรัพยากรเกินขีดจำกัดได้โดยการจำกัดจำนวนการเชื่อมต่อ (Connection Limits) และการควบคุมการเข้าถึงผ่านไฟล์ pg_hba.conf เพื่อให้แน่ใจว่ามีเพียงไคลเอนต์ที่ได้รับอนุญาตเท่านั้นที่สามารถเชื่อมต่อได้

ตัวอย่างการตั้งค่าความปลอดภัยใน PostgreSQL

เพื่อให้มั่นใจว่าการเชื่อมต่อทั้งหมดต้องผ่านการเข้ารหัส TLS/SSL และเพื่อจำกัดการเชื่อมต่อที่อาจก่อให้เกิดปัญหาทรัพยากร เราสามารถใช้คำสั่ง SQL เพื่อตรวจสอบและปรับปรุงการตั้งค่าได้:

SQL

-- 1. ตรวจสอบสถานะ SSL ของเซิร์ฟเวอร์ (ควรเป็น on) 
SELECT name, ssl FROM pg_settings WHERE name = 'ssl';

-- 2. บังคับให้การเชื่อมต่อทั้งหมดต้องใช้ SSL (ต้องมีการตั้งค่า cert/key ด้วย) 
ALTER SYSTEM SET ssl = 'on';

-- 3. จำกัดจำนวนการเชื่อมต่อสูงสุดเพื่อป้องกัน Resource Exhaustion 
ALTER SYSTEM SET max_connections = '100';

-- 4. (การป้องกันระดับแอปพลิเคชัน) ใช้ pg_hba.conf เพื่อจำกัด IP/User ที่เชื่อมต่อได้เท่านั้น 
-- ตัวอย่าง: อนุญาตเฉพาะ 192.168.1.10 เท่านั้น 
-- host    database    user    address
-- host    all         all     192.168.1.10/32 md5

บทสรุป

การรักษาความปลอดภัยของ Socket ใน PostgreSQL ไม่ได้อาศัยเพียงแค่การเข้ารหัส (TLS/SSL) เท่านั้น แต่ยังรวมถึงการจัดการทรัพยากรและการควบคุมการเข้าถึงที่เข้มงวด การทำความเข้าใจและปรับใช้การตั้งค่า sslmode ร่วมกับการจำกัดการเชื่อมต่อผ่าน max_connections และ pg_hba.conf อย่างถูกต้อง จะช่วยให้ระบบฐานข้อมูลของคุณมีความมั่นคง ปลอดภัย และทนทานต่อการโจมตีทั้งในระดับข้อมูลและการเชื่อมต่อได้อย่างสมบูรณ์

Exit mobile version