Container Firewall Rules Management

ฟีเจอร์ Container Firewall ช่วยให้คุณสามารถควบคุมความพร้อมใช้งานของโหนดได้ทั้งจากภายในและภายนอกแพลตฟอร์ม โดยจะวิเคราะห์พารามิเตอร์ต่างๆ (เช่น แหล่งที่มาของคำขอขาเข้า โปรโตคอล พอร์ตโหนดเป้าหมาย ฯลฯ) เพื่อจัดการการเข้าถึงคอนเทนเนอร์ของคุณได้อย่างยืดหยุ่นผ่านการตั้งค่ากฎการเชื่อมต่อที่จำเป็น

เคล็ดลับ: หากคุณต้องการจำกัดการเข้าถึง environment ในบัญชีเดียวคุณสามารถกำหนดค่าได้โดยอัตโนมัติผ่านฟีเจอร์ Network Isolation

การจัดการ Container Firewall ผ่าน UI

แต่ละโหนดที่ Ruk-Com cloud PaaS (ยกเว้นคอนเทนเนอร์ที่ใช้ Docker และ Windows) ได้จัดเตรียมชุดของ firewall rules ที่สามารถตรวจสอบและจัดการได้ผ่าน user interface แบบกราฟิกที่ใช้งานง่าย ส่วนที่เหมาะสมสามารถเข้าถึงได้โดยคลิกที่ปุ่ม Settings ถัดจาก environment ที่ต้องการและเลือกเมนู firewall

หมายเหตุ: ความพร้อมใช้งานของ Container Firewall UI ขึ้นอยู่กับการตั้งค่าผู้ให้บริการโฮสต์ของคุณ หากไม่มีส่วนนี้กรุณาติดต่อผู้ให้บริการเพื่อเปิดใช้งานฟีเจอร์สำหรับบัญชีของคุณ

โดยมีแท็บดังต่อไปนี้:

  • Overview – ประกอบด้วยข้อมูลทั่วไปสำหรับฟีเจอร์อนุญาตให้เปลี่ยนสถานะไฟร์วอลล์ (ซึ่งเปิดใช้งานสำหรับคอนเทนเนอร์ทั้งหมดโดยค่าเริ่มต้น) และแสดง Isolated Env Groups ที่รวมสภาพแวดล้อมปัจจุบันไว้
  • Inbound Rules – อนุญาตให้จัดการคำขอที่เข้ามา (ไม่ได้อยู่ในรายการที่ปฏิเสธโดยค่าเริ่มต้น)
  • Outbound Rules – อนุญาตให้ควบคุมการเชื่อมต่อขาออก (ไม่ได้อยู่ในรายการที่อนุญาตโดยค่าเริ่มต้น)

กฎของไฟร์วอลล์เริ่มต้น

เมื่อคุณสร้างคอนเทนเนอร์ใหม่ระบบจะเติมกฎ Inbound และ Outbound บางส่วนโดยอัตโนมัติซึ่งจำเป็นสำหรับการใช้งานคอนเทนเนอร์ที่เหมาะสม

เคล็ดลับ: กฎเหล่านี้จะถูกดึงโดยอัตโนมัติตามพอร์ต EXPOSE จากตัวแปรที่มีชื่อเดียวกันใน image’s dockerfile โปรดดูรายละเอียดเพิ่มเติมเกี่่ยวกับการสร้าง docker image ด้วย Ruk-Com Cloud PaaS

ในที่นี้ Rule จะถูกจัดกลุ่มตามเลเยอร์และมีโครงสร้างต่อไปนี้:

  • ช่องแรกสุดสีเทา (เช่น แก้ไขไม่ได้/ที่ควรปฏิบัติตามหลักกฎหมาย) มีลำดับความสำคัญสูงสุด (1) และอนุญาตให้โครงสร้างพื้นฐาน Ruk-Com cloud เข้าถึงคอนเทนเนอร์จาก:
    • platform orchestrator เพื่อจัดการการดำเนินการภายในทั้งหมด (เช่น การตั้งรหัสผ่านใหม่, การกำหนดค่า, การดำเนินการ CS scripts, การสร้าง SSH key, และอื่นๆ)
    • SSH Gate และ Web SSH จัดเตรียมการเข้าถึงบริการที่เหมาะสม
  • ค่าเริ่มต้น (stack ที่เกี่ยวข้อง) และที่ผู้ใช้งานเพิ่มกฎ (โดยเจ้าของ environment หรือผู้ร่วมงาน)

หมายเหตุ: ใช้การเปลี่ยนแปลงกฎเริ่มต้นเฉพาะกรณีที่รู้ว่าคุณำอะไรอยู่เนื่องจากการบันทึกนี้จำเป็นต้องทำให้แน่ใจว่ามีการทำงานเฉพาะของสแต็กที่เหมาะสมเพื่อจัดเตรียมฟีเจอร์ที่รองรับ (เช่น อนุญาต SSHHTTPHTTPS  หรือการเชื่อมต่อ FTP)

  • ช่องสีเทาที่ไม่สามารถแก้ไขได้ (เป็นอันสุดท้ายเสมอ เนื่องจากลำดับความสำคัญต่ำสุดที่ 65535) จะบล็อกการเชื่อมต่อขาเข้าซึ่งไม่ได้รับอนุญาตผ่านกฎที่กล่าวถึงข้างต้น

ขณะที่ทำงานกับคอนเทนเนอร์ (เช่น การเพิ่ม mount points, การติดตั้ง FTP add-on และอื่นๆ) แพลตฟอร์มสามารถเสริมกฎไฟร์วอลล์โดยอัตโนมัติตามข้อกำหนดใหม่ ในที่นี้แต่ละ record เริ่มต้นจะถูกเพิ่มด้วยขั้นตอนลำดับความสำคัญ 10 จุดเพื่อให้สามารถแทรกกฎที่กำหนดเองได้

การเพิ่มกฎเริ่มต้นของคอนเทนเนอร์

หากจำเป็น (เช่น สำหรับโซลูชันระบบอัตโนมัติ) คุณสามารถใช้ตัวแปร JELASTIC_PORTS เพื่อกำหนดพอร์ตเองซึ่งควรเปิดผ่านคอนเทนเนอร์ไฟร์วอลล์ระหว่างการสร้างโหนดที่เหมาะสม

1. คลิก New Environment ในแดชบอร์ดเลือก software stack ที่ต้องการและไปที่ Variables เพื่อกำหนดค่า

2. ระบุตัวแปร JELASTIC_PORTS ใหม่ในรูปแบบต่อไปนี้:

"JELASTIC_PORTS": "{port1}, {port2}, ... , {portN}"

โดยที่ {portN} เป็นพอร์ตเฉพาะ (1234) หรือช่วง (33062-34000) ซึ่งจะถูกเปิดเผยภายในกฎไฟร์วอลล์ขาเข้า (ผ่านทั้งโปรโตคอล tcp และ udp) หลังจากสร้างคอนเทนเนอร์

หมายเหตุ: การเปลี่ยนแปลงเนื่องจากตัวแปร JELASTIC_PORTS ถูกนำไปใช้เพียงครั้งเดียวระหว่างการติดตั้งโหนด ดังนั้นกฎไฟร์วอลล์ควรได้รับการจัดการด้วยตนเอง

3. คุณสามารถตรวจสอบกฎไฟร์วอลล์ของคุณหลังจากสร้าง environment

เคล็ดลับ: ด้านล่างนี้คุณสามารถตรวจสอบตัวอย่างเกี่ยวกับวิธีตั้งค่าตัวแปรนี้ผ่าน Cloud Scripting:

jpsType: install
name: JELASTIC_PORTS env variable
nodes:
  nodeType: apache2
  nodeGroup: cp
  env:
    JELASTIC_PORTS: 3306, 33061, 33062

การจัดการกฎ

เพื่อความสะดวกในการจัดการกฎไฟร์วอลล์ที่มีอยู่แล้วและจัดเตรียมกฎใหม่ แผงควบคุมด้านบนจะประกอบชุดของปุ่ม คือ Add, Edit, Remove, Disable (Enable) และ Refresh

เมื่อเพิ่มกฎไฟร์วอลล์ใหม่ พารามิเตอร์ต่อไปนี้จะถูกกำหนด:

  • Nodes – เพื่อเลือกเลเยอร์ environment ที่ต้องการ
  • Name – เพื่อตั้งชื่อบันทึก (สามารถขยายเพื่อเลือกจากค่าที่ตั้งล่วงหน้าที่ใช้กันทั่วไปได้)
  • Protocol – เพื่อตั้งค่าประเภทของโปรโตคอลที่ต้องการ (TCP, UDP หรือ TCP/UDP)
  • Port Range – เพื่อกำหนดพอร์ตเฉพาะ (เช่น 80) หรือช่วง (เช่น 1024-2048) ที่จะเปิด/ปิดสำหรับการเชื่อมต่อ เว้นฟิลด์นี้ว่างไว้เพื่อใช้กฎกับพอร์ตทั้งหมด
  • Source – เพื่อเลือกคำขอต้นทาง:
    • IP Address(es)  ที่กำหนดเอง – แยกรายการด้วยเครื่องหมายจุลภาคสำหรับ IPv4/IPv6 addresses และ CIDR blocks (เช่น 10.0.0.1,10.0.0.0/24)
    • ช่วงที่กำหนดไว้ล่วงหน้า – All, All IPv4, All IPv6, Local Network, Internet (Public Access)
    • Environment Nodes – ประเภทโหนด (เลเยอร์) จาก environment ใดๆในบัญชี (กฎนี้จะถูกเสริม/ลดขนาดโดยอัตโนมัติด้วย IP ที่จำเป็นเมื่อเลเยอร์ที่เหมาะสมถูกปรับขนาดเข้า/ออก)
  • Priority – เพื่อกำหนดลำดับความสำคัญของกฎ (โดยที่กฎที่มีค่าต่ำกว่าจะถูกนำไปใช้ก่อน)
  • Action – เพื่อกำหนดการดำเนินการที่จำเป็นเมื่อได้รับคำขอจับคู่ (allow หรือ deny)

หากตรงตามความจำเป็นในการแก้ไขกฎเริ่มต้นหรือกฎที่กำหนดเอง คุณจะสามารถปรับเปลี่ยนพารามิเตอร์ที่อธิบายข้างต้นทั้งหมดได้ ยกเว้นช่อง Node (เช่น ไม่สามารถสลับเลเยอร์เป้าหมายได้) นอกจากนี้ เพื่อวัตถุประสงค์ในการทดสอบคุณสามารถปิดใช้งานกฎบางกฎชั่วคราวและนำไปใช้ใหม่ได้ในภายหลังด้วยปุ่ม Disable/Enable ปุ่ม Refresh มีประโยชน์อย่างมากในการอัปเดตรายการกฎหลังจากการปรับเซิร์ฟเวอร์บางส่วน (เช่น การเปลี่ยนแปลง topology) โดยไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ทั้งหมด

Firewall Use Cases

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

หมายเหตุ: ก่อนทำตามคำแนะนำนี้ ตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ของคุณมี public IP address

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

จำกัดการเข้าถึงผ่าน User Interface

ตามที่ได้แสดงไว้ข้างต้นบางส่วน Ruk-Com cloud จัดเตรียม GUI ที่ใช้งานง่ายและมีประสิทธิภาพในการจัดการคอนเทนเนอร์ไฟร์วอลล์โดยตรงผ่านแดชบอร์ด

1. ในการเข้าถึงแผงควบคุมที่เหมาะสม ให้คลิกปุ่ม Settings ถัดจาก environment ที่ต้องการและคลิกที่ส่วนของ Firewall

เลือกแท็บ Inbound Rules และคลิกปุ่ม Add (จะเห็นได้ชัดว่า ในการจัดการการรับส่งข้อมูลคอนเทนเนอร์ภายนอกคุณต้องเลือกแท็บ Outbound Rules แทน; โดยที่กฎพารามิเตอร์ทั้งหมดจะคล้ายกับพารามิเตอร์ที่อธิบายไว้ด้านล่าง)

2. เมื่อเปิด Add Inbound Rules คุณสามารถกำหนดค่าเงื่อนไขใหม่สำหรับการประมวลผลคำที่เข้ามาโดยคอนเทนเนอร์

หากต้องการปฏิเสธ deny การเชื่อมต่อจาก IP โดยเฉพาะ (ตามตัวอย่างกรณีการใช้งานที่เราแนะนำ) ให้กรอกข้อมูลในฟิลด์ดังต่อไปนี้

  • Nodes – เลือกคอนเทนเนอร์เพื่อจำกัดการเข้าถึง (เช่น tomcat)
  • Name – ป้อนชื่อกฎที่ต้องการ (เช่น my-rule)
  • Protocol – เลือกโปรโตคอลที่ต้องการ (TCP)
  • Port Range – ปฏิเสธการเข้าถึงพอร์ตทั้งหมดโดยเว้นฟิลด์นี้ว่างไว้
  • Source – เลือกตัวเลือก IP address(es) ที่กำหนดเองและใส่ IP ทีจำเป็นในช่อง IP Address Range (111.111.111.111)
  • Priority – กำหนดลำดับความสำคัญที่เหมาะสมสำหรับ record นี้ (เช่น 900 ที่จะใช้ก่อนกฎเริ่มต้น)
  • Action – เลือกตัวเลือก Deny
    คลิก Add เพื่อบันทึกและใช้กฎของคุณโดยอัตโนมัติ

3. ตอนนี้เมื่อพยายามเชื่อมต่อโหนดของคุณจาก IP address 111.111.111.111 ที่ระบุไว้ ผู้ใช้จะแสดงหน้าต่อไปนี้:

วิธีนี้ทำให้คุณสามารถปฏิเสธการเข้าถึงคอนเทนเนอร์ของคุณจากที่อยู่ IP ใดก็ได้

การจำกัดการเข้าถึงผ่าน SSH

อีกทางเลือกหนึ่งคุณสามารถกำหนดค่ากฎไฟร์วอลล์สำหรับคอนเทนเนอร์ของคุณผ่าน terminal เมื่อเข้าถึงโหนดผ่าน SSH Gate

หมายเหตุ: ถึงแม้ว่าการกำหนดค่าไฟร์วอลล์ส่วนใหญ่จะสามารถทำได้ผ่าน User Interface โดยเฉพาะแต่การจัดการผ่าน SSH นั้นจะมีความยืดหยุ่นมากกว่า (เช่น อนุญาตให้กำหนดค่า redirect NAT) กฎดังกล่าวจะไม่ปรากฏในรายการ UI แต่จะมีลำดับความสำคัญสูงกว่า

1. วิธีที่ง่ายที่สุดในการเข้าถึงโหนดผ่าน SSH คือการเรียก Web SSH ที่เหมาะสมโดยตรงจากแดชบอร์ด – คลิกโหนดที่ต้องการเมื่อเชื่อมต่อแล้ว ให้ตรวจสอบไฟล์ /etc/jelastic/metainf.conf เพื่อให้แน่ใจว่า container firewall ปิดอยู่:

cat /etc/jelastic/metainf.conf

ในที่นี้พารามิเตอร์ FIREWALL_ENABLED ควรเท่ากับ “1” หากไม่เป็นเช่นนั้นโปรดติดต่อผู้ให้บริการโฮสต์ของคุณเพื่อขอเปิดใช้งานการป้องกันไฟร์วอลล์สำหรับบัญชีของคุณ

2. คุณต้องแก้ไขไฟล์ /etc/sysconfig/iptables-custom (เช่น vim editor)

หมายเหตุ: ไฟล์ /etc/sysconfig/ip6tables-custom ควรใช้เมื่อทำงานกับ IPv6 rules

3. ประกาศ firewall rules ที่จำเป็นโดยใช้รูปแบบเครื่องมือ iptables-save ตัวอย่างเช่น ควรใช้รหัสต่อไปนี้เพื่อปฏิเสธการเข้าถึงจาก IP โดยเฉพาะ (เช่น 111.111.111.111):

filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-I INPUT -s 111.111.111.111 -p tcp -m state --state NEW -m tcp --dport 1111 -j DROP
COMMIT
\#

4. ใช้คำสั่งต่อไปนี้เพื่อใช้การตั้งค่าไฟร์วอลล์แบบกำหนดเองกับกฎไฟร์วอลล์เริ่มต้นของคอนเทนเนอร์

sudo /usr/bin/jem firewall fwstart

5. ตอนนี้คุณสามารถตรวจสอบรายการกฎไฟร์วอลล์ที่ทำงานอยู่ในปัจจุบันสำหรับคอนเทนเนอร์ของคุณได้โดยใช้คำสั่งต่อไปนี้:

sudo jem firewall list {table} {options}

โดยที่:

  • {table} – ระบุเป้าหมาย iptable (filternatmangleraw)
  • {options} – แสดงรายการพารามิเตอร์ iptable (ควรใช้)

กฎที่คุณกำหนดเองจะอยู่หลังกฎเริ่มต้น ซึ่งปฏิเสธการเข้าถึงโหนดของคุณจาก IP 111.111.111.111

การตั้งค่ากฎผ่าน Jelastic API

ในบางกรณี (เช่น การกำหนด scripts, การทำงานอัตโนมัติ ฯลฯ) คุณอาจต้องกำหนดค่ากฎไฟร์วอลล์ผ่านโค้ด คุณสามารถใช้วิธีการที่เหมาะสมจากส่วนของ environment > Security ในเอกสาร Jelastic API

  • AddRule – สร้างกฎใหม่
  • AddRules – เพิ่มหลายกฎ
  • EditRule – เปลี่ยนพารามิเตอร์ของกฎที่มีอยู่
  • GetRules – แสดงรายการของกฎสำหรับ environment
  • RemoveRule – ลบกฎ
  • RemoveRules – ลบหลายกฎ
  • SetFirewallEnabled – เปิดไฟร์วอลล์
  • SetRuleEnabled – เปิดใช้งานกฎที่มีอยู่
  • SetRules – แทนที่กฎที่มีอยู่

ด้วยวิธีนี้ การจัดการ Container Firewall จะช่วยให้คุณสามารถควบคุมความพร้อมใช้งานของโหนดในบัญชีของคุณได้อย่างมีประสิทธิภาพ และเพิ่มความปลอดภัยให้แอปพลิเคชันอย่างมาก (โดยการกรองการเชื่อมต่อที่ต้องการและไม่ต้องการ)