ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Setup iptables
Home วิธีการกำหนดค่าไฟร์วอลล์บน Linux ด้วย iptables

วิธีการกำหนดค่าไฟร์วอลล์บน Linux ด้วย iptables

iptables เป็นเครื่องมือสำหรับกำหนดค่ากฎไฟร์วอลล์ใน Linux โดยทำงานร่วมกับ Netfilter ซึ่งเป็นส่วนหนึ่งของเคอร์เนล Linux ที่ใช้สำหรับควบคุมและกรองแพ็กเก็ตเครือข่าย

หลักการทำงานของ iptables

iptables ทำงานโดยการสร้าง กฎ (rules) ที่กำหนดว่าจะแบน (DROP), อนุญาต (ACCEPT) หรือดำเนินการอื่น ๆ กับแพ็กเก็ตเครือข่ายที่เข้ามา ขาออก หรือถูกส่งผ่านเซิร์ฟเวอร์

โครงสร้างของ iptables

Tables (ตาราง): ประกอบด้วยกฎหลาย ๆ ข้อที่ใช้กำหนดการควบคุมแพ็กเก็ต

  • filter – ใช้สำหรับควบคุมการอนุญาตและปฏิเสธแพ็กเก็ต
  • nat – ใช้สำหรับการเปลี่ยนเส้นทางและการแปลงที่อยู่ IP
  • mangle – ใช้สำหรับแก้ไขแพ็กเก็ตเฉพาะทาง เช่น QoS
  • raw – ใช้สำหรับกำหนดแพ็กเก็ตที่ไม่ต้องการให้ถูกตรวจสอบโดยระบบติดตามการเชื่อมต่อ (connection tracking)

Chains (เชน): เป็นชุดของกฎที่ใช้กำหนดเส้นทางของแพ็กเก็ตในแต่ละตาราง

  • INPUT – ควบคุมแพ็กเก็ตที่เข้ามาในเซิร์ฟเวอร์
  • OUTPUT – ควบคุมแพ็กเก็ตที่ออกจากเซิร์ฟเวอร์
  • FORWARD – ควบคุมแพ็กเก็ตที่ถูกส่งผ่านเซิร์ฟเวอร์ไปยังเครือข่ายอื่น
  • PREROUTING – ใช้เปลี่ยนแปลงแพ็กเก็ตก่อนเข้าสู่กระบวนการ Routing
  • POSTROUTING – ใช้เปลี่ยนแปลงแพ็กเก็ตก่อนออกจากเซิร์ฟเวอร์

วิธีการ Setup iptables

1. ดูกฎที่มีอยู่ใน iptables

ดูกฎทั้งหมดใน Chain INPUT, OUTPUT, FORWARD
sudo iptables -L -v --line-numbers
  • -L → แสดงรายการกฎทั้งหมด
  • -v → แสดงรายละเอียดเพิ่มเติม
  • --line-numbers → แสดงหมายเลขของกฎแต่ละข้อ
ดูกฎเฉพาะ Chain INPUT
sudo iptables -L INPUT -v --line-numbers
ดูกฎที่เกี่ยวข้องกับพอร์ตที่ต้องการ (เช่น 5015)
sudo iptables -L INPUT -v | grep 5015
ดูกฎทั้งหมดในรูปแบบที่ใช้กับ iptables-save
sudo iptables-save

2. เพิ่มกฎใหม่เข้า iptables (ตัวในการเพิ่ม)

ตัวอย่าง: อนุญาต TCP ขาเข้า (INPUT) บนพอร์ต 5015

sudo iptables -I INPUT -p tcp --dport 5015 -j ACCEPT

  • -I INPUT → แทรกกฎเข้า INPUT (เป็นลำดับแรก)
  • -p tcp → ใช้กับโปรโตคอล TCP
  • --dport 5015 → พอร์ตปลายทางคือ 5015
  • -j ACCEPT → อนุญาตให้แพ็กเก็ตผ่าน
เพิ่มกฎให้อยู่ท้ายสุดของ Chain
sudo iptables -A INPUT -p tcp --dport 5015 -j ACCEPT
  • -A INPUT → เพิ่มกฎไว้ท้ายสุดของ Chain INPUT

3. ลบกฎออกจาก iptables

วิธีที่ 1: ลบกฎโดยใช้เงื่อนไขเดียวกับตอนเพิ่ม
sudo iptables -D INPUT -p tcp --dport 5015 -j ACCEPT
วิธีที่ 2: ลบกฎโดยใช้หมายเลขบรรทัด
sudo iptables -L INPUT --line-numbers
ลบกฎที่หมายเลข (เช่น หมายเลข 3)
sudo iptables -D INPUT 3

4. บันทึกและกู้คืนกฎ iptables (ให้รอดจากการรีสตาร์ท)

บันทึกกฎปัจจุบัน (Ubuntu/Debian)
sudo iptables-save > /etc/iptables/rules.v4
โหลดกฎกลับมาใช้ใหม่
sudo iptables-restore < /etc/iptables/rules.v4

ตัวอย่างการใช้งาน

อนุญาต SSH (พอร์ต 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
บล็อก IP 192.000.0.000 ไม่ให้เข้าเซิร์ฟเวอร์
sudo iptables -A INPUT -s 192.000.0.000 -j DROP
อนุญาตให้เครื่อง IP 192.111.0.000 ใช้พอร์ต 3306 (MySQL)

sudo iptables -A INPUT -p tcp -s 192.111.0.000 --dport 3306 -j ACCEPT

ลบกฎที่บล็อก IP 192.000.0.000
sudo iptables -D INPUT -s 192.000.0.000 -j DROP

สรุป

  • ใช้ iptables -L เพื่อตรวจสอบกฎ
  • ใช้ iptables -A หรือ iptables -I เพื่อเพิ่มกฎ
  • ใช้ iptables -D เพื่อลบกฎ
  • ใช้ iptables-save และ iptables-restore เพื่อบันทึกและโหลดกฎใหม่

หมายเหตุiptables จะรีเซ็ตหลังรีบูต เว้นแต่จะบันทึกกฎไว้!

Hybrid Cloud Enterprise Downtime 0%
ไม่ล่มแม้แต่วินาทีเดียว

ต่อเนื่องเป็นเวลา 6 ปี ตั้งแต่ 2019 - ปัจจุบัน

เราให้บริการ Enterprise Cloud ในราคาถูกและคุ้มค่า เพื่อสนับสนุนให้ทุกธุรกิจของคนไทยได้เข้าถึง Cloud ระดับโลก
คุณภาพสูงทำงานได้ต่อเนื่องตลอดเวลา ไม่มีสะดุด พร้อมสนับสนุนการเติบโตของธุรกิจคุณอย่างเต็มที่!