ฟีเจอร์ 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 หรือผู้ร่วมงาน)
หมายเหตุ: ใช้การเปลี่ยนแปลงกฎเริ่มต้นเฉพาะกรณีที่รู้ว่าคุณำอะไรอยู่เนื่องจากการบันทึกนี้จำเป็นต้องทำให้แน่ใจว่ามีการทำงานเฉพาะของสแต็กที่เหมาะสมเพื่อจัดเตรียมฟีเจอร์ที่รองรับ (เช่น อนุญาต SSH, HTTP, HTTPS หรือการเชื่อมต่อ 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 (filter, nat, mangle, raw)
- {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 จะช่วยให้คุณสามารถควบคุมความพร้อมใช้งานของโหนดในบัญชีของคุณได้อย่างมีประสิทธิภาพ และเพิ่มความปลอดภัยให้แอปพลิเคชันอย่างมาก (โดยการกรองการเชื่อมต่อที่ต้องการและไม่ต้องการ)