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

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

โดยมีแท็บดังต่อไปนี้:
- ภาพรวม- ประกอบด้วยข้อมูลทั่วไปสำหรับฟีเจอร์อนุญาตให้เปลี่ยนสถานะไฟร์วอลล์ (ซึ่งเปิดใช้งานสำหรับคอนเทนเนอร์ทั้งหมดโดยค่าเริ่มต้น) และแสดง Isolated Env Groups ที่รวมสภาพแวดล้อมปัจจุบันไว้
- กฎขาเข้า- อนุญาตให้จัดการคำขอที่เข้ามา (ไม่ได้อยู่ในรายการที่ปฏิเสธโดยค่าเริ่มต้น)
- กฎขาออก- อนุญาตให้ควบคุมการเชื่อมต่อขาออก (ไม่ได้อยู่ในรายการที่อนุญาตโดยค่าเริ่มต้น)
กฎของไฟร์วอลล์เริ่มต้น
เมื่อคุณสร้างคอนเทนเนอร์ใหม่ระบบจะเติมกฎ Inbound และ Outbound บางส่วนโดยอัตโนมัติซึ่งจำเป็นสำหรับการใช้งานคอนเทนเนอร์ที่เหมาะสม
เคล็ดลับ:กฎเหล่านี้จะถูกดึงโดยอัตโนมัติตามพอร์ตเปิดเผยจากตัวแปรที่มีชื่อเดียวกันในdockerfile ของรูปภาพโปรดดูรายละเอียดเพิ่มเติมเกี่่ยวกับการสร้าง docker image ด้วย Ruk-Com Cloud PaaS

ในตัวอย่างนี้ Rule จะถูกจัดกลุ่มตามเลเยอร์และมีโครงสร้างต่อไปนี้:
- ช่องแรกสุดสีเทา (เช่น แก้ไขไม่ได้/ที่ควรปฏิบัติตามหลักกฎหมาย) มีลำดับความสำคัญสูงสุด(1)และอนุญาตให้โครงสร้างพื้นฐาน Ruk-Com cloud เข้าถึงคอนเทนเนอร์จาก:
- ผู้จัดเตรียมแพลตฟอร์มเพื่อจัดการการดำเนินการภายในทั้งหมด (เช่น การตั้งรหัสผ่านใหม่, การกำหนดค่า, การดำเนินการ CS scripts, การสร้าง SSH key, และอื่นๆ)
- SSH Gate และ Web SSHจัดเตรียมการเข้าถึงบริการที่เหมาะสม
- ค่าเริ่มต้น (stack ที่เกี่ยวข้อง) และที่ผู้ใช้งานเพิ่มกฎ (โดยเจ้าของ environment หรือผู้ร่วมงาน)
หมายเหตุ:ใช้การเปลี่ยนแปลงกฎเริ่มต้นเฉพาะกรณีที่รู้ว่าคุณำอะไรอยู่เนื่องจากการบันทึกนี้จำเป็นต้องทำให้แน่ใจว่ามีการทำงานเฉพาะของสแต็กที่เหมาะสมเพื่อจัดเตรียมฟีเจอร์ที่รองรับ (เช่น อนุญาตสสส, HTTP, HTTPSหรือการเชื่อมต่อ FTP)
- ช่องสีเทาที่ไม่สามารถแก้ไขได้ (เป็นอันสุดท้ายเสมอ เนื่องจากลำดับความสำคัญต่ำสุดที่ 65535) จะบล็อกการเชื่อมต่อขาเข้าซึ่งไม่ได้รับอนุญาตผ่านกฎที่กล่าวถึงข้างต้น
ขณะที่ทำงานกับคอนเทนเนอร์ (เช่น การเพิ่ม mount points, การติดตั้ง FTP add-on และอื่นๆ) แพลตฟอร์มสามารถเสริมกฎไฟร์วอลล์โดยอัตโนมัติตามข้อกำหนดใหม่ ในตัวอย่างนี้แต่ละ record เริ่มต้นจะถูกเพิ่มด้วยขั้นตอนลำดับความสำคัญ 10 จุดเพื่อให้สามารถแทรกกฎที่กำหนดเองได้
การเพิ่มกฎเริ่มต้นของคอนเทนเนอร์
หากจำเป็น (เช่น สำหรับโซลูชันระบบอัตโนมัติ) คุณสามารถใช้ตัวแปรเจลาสติค_พอร์ตเพื่อกำหนดพอร์ตเองซึ่งควรเปิดผ่านคอนเทนเนอร์ไฟร์วอลล์ระหว่างการสร้างโหนดที่เหมาะสม
1. คลิกสภาพแวดล้อมใหม่ในแดชบอร์ดเลือก software stack ที่ต้องการและไปที่ตัวแปรเพื่อกำหนดค่า

2. ระบุตัวแปร JELASTIC_PORTS ใหม่ในรูปแบบต่อไปนี้:
"JELASTIC_PORTS": "{port1}, {port2}, ... , {portN}"
โดยที่{พอร์ตN}เป็นพอร์ตเฉพาะ (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
เมื่อเพิ่มกฎไฟร์วอลล์ใหม่ พารามิเตอร์ต่อไปนี้จะถูกกำหนด:
- โหนด- เพื่อเลือกเลเยอร์ environment ที่ต้องการ
- ชื่อ- เพื่อตั้งชื่อบันทึก (สามารถขยายเพื่อเลือกจากค่าที่ตั้งล่วงหน้าที่ใช้กันทั่วไปได้)
- พิธีสาร- เพื่อตั้งค่าประเภทของโปรโตคอลที่ต้องการ (TCP, UDP หรือ TCP/UDP)
- ช่วงพอร์ต- เพื่อกำหนดพอร์ตเฉพาะ (เช่น 80) หรือช่วง (เช่น 1024-2048) ที่จะเปิด/ปิดสำหรับการเชื่อมต่อ เว้นฟิลด์นี้ว่างไว้เพื่อใช้กฎกับพอร์ตทั้งหมด
- แหล่งที่มา- เพื่อเลือกคำขอต้นทาง:
- IP Address(es) ที่กำหนดเอง - แยกรายการด้วยเครื่องหมายจุลภาคสำหรับ IPv4/IPv6 addresses และ CIDR blocks (เช่น 10.0.0.1, 10.0.0.0/24)
- ช่วงที่กำหนดไว้ล่วงหน้า -ทั้งหมด, IPv4 ทั้งหมด, IPv6 ทั้งหมด, เครือข่ายท้องถิ่น, อินเทอร์เน็ต (การเข้าถึงสาธารณะ)
- Environment Nodes - ประเภทโหนด (เลเยอร์) จาก environment ใดๆในบัญชี (กฎนี้จะถูกเสริม/ลดขนาดโดยอัตโนมัติด้วย IP ที่จำเป็นเมื่อเลเยอร์ที่เหมาะสมถูกปรับขนาดเข้า/ออก)
- ลำดับความสำคัญ- เพื่อกำหนดลำดับความสำคัญของกฎ (โดยที่กฎที่มีค่าต่ำกว่าจะถูกนำไปใช้ก่อน)
- การดำเนินการ- เพื่อกำหนดการดำเนินการที่จำเป็นเมื่อได้รับคำขอจับคู่ (อนุญาตหรือปฏิเสธ)

หากตรงตามความจำเป็นในการแก้ไขกฎเริ่มต้นหรือกฎที่กำหนดเอง คุณจะสามารถปรับเปลี่ยนพารามิเตอร์ที่อธิบายข้างต้นทั้งหมดได้ ยกเว้นช่อง Node (เช่น ไม่สามารถสลับเลเยอร์เป้าหมายได้) นอกจากนี้ เพื่อวัตถุประสงค์ในการทดสอบคุณสามารถปิดใช้งานกฎบางกฎชั่วคราวและนำไปใช้ใหม่ได้ในภายหลังด้วยปุ่มปิดการใช้งาน/เปิดใช้งานปุ่มรีเฟรชมีประโยชน์อย่างมากในการอัปเดตรายการกฎหลังจากการปรับเซิร์ฟเวอร์บางส่วน (เช่น การเปลี่ยนแปลง topology) โดยไม่จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์ทั้งหมด
กรณีการใช้งานไฟร์วอลล์
การเข้าถึงโหนดของคุณสามารถควบคุมได้ตามพารามิเตอร์คำขอ เช่น ที่อยู่ IP ของโหนดต้นทาง, การเชื่อมต่อโปรโตคอล, พอร์ต และอื่นๆ ในคำแนะนำด้านล่างเราจะพิจารณาตัวอย่างง่ายๆของการบล็อกการเข้าถึงคอนเทนเนอร์สำหรับ IP address โดยเฉพาะโดยนำไปใช้ผ่านวิธีใดวิธีหนึ่งต่อไปนี้:
หมายเหตุ:ก่อนทำตามคำแนะนำนี้ ตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ของคุณมี public IP address
นอกจากนี้เมื่อจัดเตรียมโซลูชันอัตโนมัติของวงจรคอนเทนเนอร์ คุณอาจต้องใช้การเปลี่ยนแปลงไฟร์วอลล์ที่จำเป็นผ่านJelastic API- ตรวจสอบรายการของวิธีการที่เหมาะสมที่ลิงก์ข้อมูลอ้างอิง
จำกัดการเข้าถึงผ่าน User Interface
ตามที่ได้แสดงไว้ข้างต้นบางส่วน Ruk-Com cloud จัดเตรียม GUI ที่ใช้งานง่ายและมีประสิทธิภาพในการจัดการคอนเทนเนอร์ไฟร์วอลล์โดยตรงผ่านแดชบอร์ด
1. ในการเข้าถึงแผงควบคุมที่เหมาะสม ให้คลิกปุ่มการตั้งค่าถัดจาก environment ที่ต้องการและคลิกที่ส่วนของไฟร์วอลล์

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

หากต้องการปฏิเสธปฏิเสธการเชื่อมต่อจาก IP โดยเฉพาะ (ตามตัวอย่างกรณีการใช้งานที่เราแนะนำ) ให้กรอกข้อมูลในฟิลด์ดังต่อไปนี้
- โหนด- เลือกคอนเทนเนอร์เพื่อจำกัดการเข้าถึง (เช่น tomcat)
- ชื่อ- ป้อนชื่อกฎที่ต้องการ (เช่น my-rule)
- พิธีสาร- เลือกโปรโตคอลที่ต้องการ (TCP)
- ช่วงพอร์ต- ปฏิเสธการเข้าถึงพอร์ตทั้งหมดโดยเว้นฟิลด์นี้ว่างไว้
- แหล่งที่มา- เลือกตัวเลือก IP address(es) ที่กำหนดเองและใส่ IP ทีจำเป็นในช่องช่วงที่อยู่ IP(111.111.111.111)
- ลำดับความสำคัญ- กำหนดลำดับความสำคัญที่เหมาะสมสำหรับ record นี้ (เช่น 900 ที่จะใช้ก่อนกฎเริ่มต้น)
- การดำเนินการ- เลือกตัวเลือก Deny
คลิก Add เพื่อบันทึกและใช้กฎของคุณโดยอัตโนมัติ
3. ตอนนี้เมื่อพยายามเชื่อมต่อโหนดของคุณจาก IP address111.111.111.111ที่ระบุไว้ ผู้ใช้จะแสดงหน้าต่อไปนี้:

วิธีนี้ทำให้คุณสามารถปฏิเสธการเข้าถึงคอนเทนเนอร์ของคุณจากที่อยู่ IP ใดก็ได้
การจำกัดการเข้าถึงผ่าน SSH
อีกทางเลือกหนึ่งคุณสามารถกำหนดค่ากฎไฟร์วอลล์สำหรับคอนเทนเนอร์ของคุณผ่านสถานีปลายทางเมื่อเข้าถึงโหนดผ่านประตูเอสเอสเอช
หมายเหตุ:ถึงแม้ว่าการกำหนดค่าไฟร์วอลล์ส่วนใหญ่จะสามารถทำได้ผ่าน User Interface โดยเฉพาะแต่การจัดการผ่าน SSH นั้นจะมีความยืดหยุ่นมากกว่า (เช่น อนุญาตให้กำหนดค่า redirect NAT) กฎดังกล่าวจะไม่ปรากฏในรายการ UI แต่จะมีลำดับความสำคัญสูงกว่า
1. วิธีที่ง่ายที่สุดในการเข้าถึงโหนดผ่าน SSH คือการเรียก Web SSH ที่เหมาะสมโดยตรงจากแดชบอร์ด - คลิกโหนดที่ต้องการเมื่อเชื่อมต่อแล้ว ให้ตรวจสอบไฟล์ /etc/jelastic/metainf.conf เพื่อให้แน่ใจว่า container firewall ปิดอยู่:
cat /etc/jelastic/metainf.conf

ในตัวอย่างนี้พารามิเตอร์ไฟร์วอลล์_เปิดใช้งานแล้วควรเท่ากับ "1" หากไม่เป็นเช่นนั้นโปรดติดต่อผู้ให้บริการโฮสต์ของคุณเพื่อขอเปิดใช้งานการป้องกันไฟร์วอลล์สำหรับบัญชีของคุณ
2. คุณต้องแก้ไขไฟล์/etc/sysกำหนดค่า/iptables-custom.php(เช่น vim editor)

หมายเหตุ:ไฟล์ /etc/sysกำหนดค่า/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}
โดยที่:
- {ตาราง}- ระบุเป้าหมาย iptable (กรอง, แนท, ยุ่งเหยิง, ดิบ)
- {ตัวเลือก}- แสดงรายการพารามิเตอร์ iptable (ควรใช้)

กฎที่คุณกำหนดเองจะอยู่หลังกฎเริ่มต้น ซึ่งปฏิเสธการเข้าถึงโหนดของคุณจาก IP 111.111.111.111
การตั้งค่ากฎผ่าน Jelastic API
ในบางกรณี (เช่น การกำหนด scripts, การทำงานอัตโนมัติ ฯลฯ) คุณอาจต้องกำหนดค่ากฎไฟร์วอลล์ผ่านโค้ด คุณสามารถใช้วิธีการที่เหมาะสมจากส่วนของสภาพแวดล้อม > ความปลอดภัยในเอกสารJelastic API
- เพิ่มกฎ- สร้างกฎใหม่
- เพิ่มกฎ- เพิ่มหลายกฎ
- แก้ไขกฎ- เปลี่ยนพารามิเตอร์ของกฎที่มีอยู่
- รับกฎ- แสดงรายการของกฎสำหรับ environment
- ลบกฎ- ลบกฎ
- ลบกฎ- ลบหลายกฎ
- ตั้งค่าไฟร์วอลล์เปิดใช้งานแล้ว- เปิดไฟร์วอลล์
- ตั้งค่ากฎเปิดใช้งานแล้ว- เปิดใช้งานกฎที่มีอยู่
- ตั้งกฎ- แทนที่กฎที่มีอยู่
ด้วยวิธีนี้ การจัดการ Container Firewall จะช่วยให้คุณสามารถควบคุมความพร้อมใช้งานของโหนดในบัญชีของคุณได้อย่างมีประสิทธิภาพ และเพิ่มความปลอดภัยให้แอปพลิเคชันอย่างมาก (โดยการกรองการเชื่อมต่อที่ต้องการและไม่ต้องการ)