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

โดย Pahn อัปเดต อ่าน 5 นาที เข้าชม 9 ครั้ง

แชร์FacebookXLINELinkedIn
Setup 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 จะรีเซ็ตหลังรีบูต เว้นแต่จะบันทึกกฎไว้!

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน