25+ คำสั่ง iptables ที่พบบ่อยที่สุดพร้อมตัวอย่าง

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

อย่างไรก็ตาม เนื่องจากเป็นโปรแกรมอรรถประโยชน์บรรทัดคำสั่ง จึงต้องมีช่วงการเรียนรู้เล็กน้อย

ดังนั้น หากคุณเป็นผู้ดูแลระบบหรือผู้เรียนรู้ Linux คุณมาถูกที่แล้วเมื่อเราอ่านคำสั่ง iptables ทั่วไปพร้อมตัวอย่าง

สารบัญ

iptables คืออะไร?

iptables เป็นไฟร์วอลล์ในตัว Linux ที่ใช้ซอฟต์แวร์ ช่วยให้ผู้ใช้ Linux สามารถสร้างหรือกำหนดนโยบายที่ส่งผลกระทบต่อการรับส่งข้อมูลทางอินเทอร์เน็ตทั้งทางตรงและทางอ้อม

ซึ่งหมายความว่าคุณสามารถใช้ iptables เพื่อสร้างกฎการบล็อกหรืออนุญาตการรับส่งข้อมูลผ่านพอร์ต ที่อยู่ IP ต้นทาง อินเทอร์เฟซเครือข่าย และอื่นๆ

เมื่อคุณกำหนดกฎแล้ว การรับส่งข้อมูลทั้งหมดจะต้องผ่านกฎนั้น ตัวอย่างเช่น สำหรับการเชื่อมต่อใหม่ทุกครั้ง iptables จะตรวจสอบกฎที่กำหนดไว้ล่วงหน้าซึ่งตรงกับการเชื่อมต่อ ถ้าเป็นเช่นนั้น จะใช้กฎกับการเชื่อมต่อ อย่างไรก็ตาม หากไม่มีกฎที่เกี่ยวข้องที่เกี่ยวข้อง ก็จะใช้กฎเริ่มต้น

หากต้องการใช้ iptables คุณต้องใช้คำสั่งต่อไปนี้

$ iptables -L -n -v 

ที่นี่ พารามิเตอร์มีดังนี้:

  • -L เป็นรายการกฎทั้งหมด
  • -n ทำให้เอาต์พุตตัวเลขมีประสิทธิภาพที่เร็วขึ้น
  • -v สำหรับแสดงผลในรูปแบบรายละเอียด

เมื่อคุณรันคำสั่ง iptables โดยไม่มีพารามิเตอร์ใดๆ มันจะส่งคืนผลลัพธ์ต่อไปนี้:

iptables v1.8.7 (nf_tables): no command specified

Try `iptables -h' or 'iptables --help' for more information.

คุณต้องติดตั้งหากเกิดข้อผิดพลาด เช่น ไม่พบคำสั่ง “iptables”

ในการติดตั้ง iptables ในการแจกจ่าย Linux ให้รันคำสั่งต่อไปนี้

$ sudo apt-get install iptables

มันจะส่งคืนสิ่งต่อไปนี้เนื่องจากติดตั้งไว้ล่วงหน้าแล้วในการแจกจ่าย Linux ของฉัน

#output
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
iptables is already the newest version (1.8.7-1ubuntu5).
iptables set to manually installed.
0 upgraded, 0 newly installed, 0 to remove, and 35 not upgraded.

ไฟร์วอลล์คืออะไร?

ไฟร์วอลล์เป็นรูปแบบพื้นฐานที่สุดในการปกป้องระบบ เครือข่าย และคอมพิวเตอร์ส่วนบุคคล อาจเป็นฮาร์ดแวร์หรือซอฟต์แวร์ ขึ้นอยู่กับกฎเพื่อให้ทำงานได้อย่างถูกต้อง

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

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

ทำไมคุณต้องใช้ iptables เพื่อกำหนดค่าไฟร์วอลล์

แต่ทำไมคุณควรใช้ iptables เลย? ท้ายที่สุด มียูทิลิตี้ไฟร์วอลล์บรรทัดคำสั่งทางเลือกที่ดี เช่น ufw และ firewalld นอกจากนี้ คุณสามารถใช้ไฟร์วอลล์ Linux แบบสแตนด์อโลนที่ใช้งานง่ายและมีคุณสมบัติเพิ่มเติม

ดังนั้น อะไรทำให้ iptables น่าสนใจเมื่อกำหนดค่าไฟร์วอลล์ เหตุผลในการใช้รวมถึง:

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

และอีกมากมาย!

ทำความเข้าใจกับสถาปัตยกรรม iptables และความสัมพันธ์กับ Netfilter

เพื่อให้เข้าใจ iptables อย่างถูกต้อง เราจำเป็นต้องเรียนรู้เกี่ยวกับสถาปัตยกรรมของมัน ประการแรก มันจะทำให้เราเข้าใจอย่างชัดเจนเกี่ยวกับส่วนประกอบต่างๆ ของ iptables จากนั้น เมื่อเรารู้เกี่ยวกับแต่ละกฎแล้ว เราก็สามารถใช้กฎเหล่านี้เพื่อเขียนกฎไฟร์วอลล์ได้

และเมื่อเราพูดถึง iptables Netfilter ก็เข้ามาอยู่ในภาพด้วย คุณอาจคิดว่า “Netfilter” เป็นพี่ใหญ่ของ iptables มันสร้างขึ้นจาก iptables และเสนอชุดคุณสมบัติที่ดีกว่าในการจัดการไฟร์วอลล์ของคุณ อย่างไรก็ตาม มันใช้ iptables เป็นวิธีหนึ่งในการบรรลุความสามารถของไฟร์วอลล์ที่ยอดเยี่ยม

Iptables เป็นอินเตอร์เฟสบรรทัดคำสั่งสำหรับ hooks ระดับเคอร์เนลของ Netfilter hooks เหล่านี้สามารถโต้ตอบกับ Linux network stack ซึ่งส่งผลต่อแพ็กเก็ตที่ระดับลึกที่สุด

ดังนั้นสถาปัตยกรรม iptables มีลักษณะอย่างไร:

ตาราง

สถาปัตยกรรม iptables เริ่มต้นด้วยตาราง ตารางเหล่านี้ดูแลการจัดระเบียบกฎ และแต่ละตารางจะถูกจัดประเภทตามประเภทการตัดสินใจที่พวกเขากำลังทำ พูดง่ายๆ ก็คือ ตารางจะทำให้การประมวลผลแพ็กเกจโดยรวมง่ายขึ้นโดยการแนบวิธีเฉพาะในการประมวลผลแพ็กเกจ

ตารางต่างๆ ที่นำเสนอโดย iptables ได้แก่:

  • ตารางตัวกรอง: ระบุประเภทการตัดสินใจสำหรับการกรองแพ็คเก็ต พูดง่ายๆ คือกำหนดว่าพัสดุควรถึงปลายทางหรือไม่
  • ตาราง NAT: ระบุประเภทการตัดสินใจสำหรับการแปลที่อยู่ ที่นี่ การกำหนดเส้นทางของแพ็กเก็ตจะพิจารณาจากเครือข่าย NAT ตัวอย่างเช่น หากแพ็กเกจไม่สามารถเข้าถึง NAT ได้ แพ็กเกจจะข้ามและพยายามค้นหาเครือข่ายที่ไม่ใช่ NAT
  • ตาราง Mangle: จัดการความต้องการการประมวลผลพิเศษของแพ็คเกจ ตัวอย่างเช่น คุณสามารถกำหนดค่าให้เปลี่ยนข้อมูลส่วนหัวของแพ็คเก็ต เช่น ค่า TTL
  • ตารางดิบ: ตารางดิบช่วยให้คุณทำงานอย่างขยันขันแข็งด้วยลักษณะสถานะของไฟร์วอลล์ iptables เมื่อใช้ตาราง คุณสามารถกำหนดเส้นทางแพ็กเก็ตตาม “สถานะ” ก่อนที่เคอร์เนล Linux จะเริ่มติดตามสถานะของมัน ส่วนใหญ่จะใช้เพื่อทำเครื่องหมายแพ็กเก็ต ไม่ว่าระบบการติดตามการเชื่อมต่อจะจัดการหรือไม่ก็ตาม หากแพ็กเก็ตไม่ถูกติดตาม จะถูกตั้งค่าเป็นเป้าหมาย NOTRACK

ห่วงโซ่

จากนั้น เราก็มี “โซ่” ภายใน “ตาราง”

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

เช่นเดียวกับโต๊ะ คุณจะได้รับโซ่ที่แตกต่างกัน เหล่านี้รวมถึง:

  • ห่วงโซ่ PREROUTING: ที่นี่ กฎจัดการกับแพ็กเก็ตที่เพิ่งมาถึงที่อินเทอร์เฟซเครือข่าย
  • INPUT chain: กฎที่กล่าวถึงใน INPUT chain จะจัดการกับพฤติกรรมการเชื่อมต่อขาเข้า เมื่อทำเสร็จแล้ว พวกเขาจะถูกส่งไปยังกระบวนการในท้องถิ่น
  • ห่วงโซ่ OUTPUT: ห่วงโซ่ OUTPUT เกี่ยวข้องกับแพ็กเก็ตที่ดำเนินการผลิต
  • ห่วงโซ่ FORWARD: ห่วงโซ่ FORWARD จัดการแพ็กเก็ตที่ไม่ได้หมายถึงระบบโลคัล เป็นพาหะสำหรับระบบปลายทางอื่นๆ เช่น เราเตอร์
  • ห่วงโซ่ POSTROUTING: สุดท้าย เรามีห่วงโซ่ POSTROUTING ซึ่งจัดการกับแพ็กเก็ตที่จะออกจากอินเทอร์เฟซเครือข่าย

แต่ละตารางมีเชนไม่ครบทุกรายการ ตัวอย่างเช่น โซ่ FORWARD มีเฉพาะในตาราง mangle, filter และ security ในทำนองเดียวกัน ห่วงโซ่ POSTROUTING มีอยู่ใน mangle และ nat (SNAT) เฉพาะห่วงโซ่ OUTPUT เท่านั้นที่มีอยู่ในตารางทั้งหมด

เป้า

ตอนนี้เรามี “เป้าหมาย” เมื่อพัสดุมาถึง พัสดุจะเคลื่อนผ่านสายโซ่เพื่อดูว่าคำอธิบายกฎข้อใดเหมาะสมที่สุด หากเป็นไปตามคำอธิบายของกฎ ก็จะดำเนินการที่เกี่ยวข้องตามนั้น จากนั้นจึงย้ายไปยังเป้าหมาย เป็นการปิดผนึกชะตากรรมของแพ็กเก็ต

ในหลายกรณี แพ็กเก็ตจะไม่พอดีกับคำอธิบายหรือชุดกฎใดๆ และนั่นคือที่มาของนโยบายเริ่มต้นซึ่งเป็นเป้าหมาย

เป้าหมายสามารถยอมรับ ปล่อย และปฏิเสธ สิ่งเหล่านี้คือเป้าหมายปลายทางที่ตัดสินชะตากรรมของแพ็กเก็ต

  • ยอมรับ: ยอมรับแพ็กเก็ต
  • DROP: ดรอปแพ็กเก็ต ทำให้ผู้ส่งไม่สามารถเรียนรู้ได้ว่าระบบมีอยู่หรือไม่
  • REJECT: ปฏิเสธแพ็คเก็ต

นอกจากนี้ยังมีเป้าหมายที่ไม่สิ้นสุดซึ่งส่วนใหญ่จะใช้เพื่อเก็บข้อมูลเกี่ยวกับแพ็กเก็ต

คำสั่ง iptables ที่พบบ่อยที่สุดพร้อมตัวอย่าง

ก่อนที่คุณจะกระโดดและเริ่มดำเนินการคำสั่ง iptables ตรวจสอบให้แน่ใจว่า:

  • คุณมีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบเพื่อเรียกใช้คำสั่ง หากคำสั่งล้มเหลวเนื่องจากสิทธิ์ของผู้ดูแลระบบ ให้รันคำสั่งอีกครั้งโดยมีคำสั่ง sudo อยู่ข้างหน้า
  • บทความนี้ไม่ใช่บทช่วยสอนเกี่ยวกับวิธีกำหนดค่า iptables บน Ubuntu
  • เราจะใช้คำสั่ง iptables ที่ใช้ได้กับ IPv4 หากคุณต้องการทำงานกับ IPv6 คุณจะต้องใช้ ip6tables แทน

ตรวจสอบสถานะ iptables

ในการตรวจสอบสถานะ iptables ปัจจุบัน คุณต้องเรียกใช้คำสั่งต่อไปนี้

$ iptables -L -n -v
#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

ผลลัพธ์ข้างต้นมีข้อมูลจำนวนมาก อย่างไรก็ตาม มันยังบ่งบอกถึงไฟร์วอลล์ที่ไม่ได้ใช้งานอีกด้วย นั่นเป็นเพราะในปัจจุบัน เครือข่ายทั้งหมดถูกตั้งค่าเป็น ACCEPT และไม่มีกฎ

คุณจะต้องเริ่มเพิ่มกฎเพื่อเปิดใช้งานไฟร์วอลล์

การเพิ่มกฎในห่วงโซ่

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

$ sudo iptables - A

อย่างไรก็ตาม เมื่อคุณเรียกใช้ มันจะส่งคืนสิ่งต่อไปนี้:

iptables v1.8.7 (nf_tables): option "-A" requires an argument

Try `iptables -h' or 'iptables --help' for more information.

อาร์กิวเมนต์ที่คุณสามารถใช้ในการเพิ่มกฎได้แก่:

  • – i: มันย่อมาจากส่วนต่อประสาน คุณสามารถพูดถึงอินเทอร์เฟซที่คุณกำลังเพิ่มกฎได้ที่นี่ สามารถเป็น ppp0, eth0 และอื่นๆ
  • – p: มันย่อมาจากโปรโตคอล ที่นี่ คุณได้กล่าวถึงกฎการใช้โปรโตคอลเครือข่ายเพื่อกรองผู้แบ่งบรรจุ ตัวอย่างเช่น คุณสามารถพูดว่า ICMP, TCP, UDP เป็นต้น หากคุณต้องการให้กฎทำงานในโปรโตคอลทั้งหมด ให้ระบุ “ทั้งหมด” เป็นค่าอาร์กิวเมนต์
  • – s: ถัดมาเป็นอาร์กิวเมนต์แหล่งที่มา ซึ่งกล่าวถึงแหล่งที่มาของการรับส่งข้อมูล (เป็นที่อยู่ IP หรือชื่อโฮสต์)
  • – dport: dport ย่อมาจาก port ปลายทาง ซึ่งคุณระบุหมายเลขพอร์ตที่แพ็คเก็ตถูกปลายทาง
  • – j: สุดท้าย เรามีอาร์กิวเมนต์ TARGET ที่คุณสามารถระบุชื่อเป้าหมาย ยอมรับ วาง หรือส่งคืน
  วิธีชนะที่ Wordle: เคล็ดลับและคำแนะนำ

สิ่งสำคัญคือต้องเขียนคำสั่งตามลำดับต่อไปนี้:

$ sudo iptables -A <chain-name> -i <interface-name> - p <protocool-name> - s <source> --dport <port no.> -j <target>

บันทึกการเปลี่ยนแปลงเป็น iptables

เมื่อคุณเพิ่มกฎแล้ว คุณสามารถบันทึกได้ด้วยคำสั่ง iptables -save

$ sudo iptables -save

ผลลัพธ์จะเป็นดังนี้:

[email protected]:~$ sudo iptables-save

# Generated by iptables-save v1.8.7 on Sun May 14 13:37:34 2023

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 392 -j REJECT --reject-with icmp-port-unreachable

-A OUTPUT -o lo -j ACCEPT

COMMIT

# Completed on Sun May 14 13:37:34 2023

กฎที่คงอยู่ด้วยตนเอง

ตามค่าเริ่มต้น iptables จะไม่บันทึกกฎ ดังนั้น หากคุณรีสตาร์ทคอมพิวเตอร์ ระบบจะลบกฎทั้งหมด คุณจะต้องใช้คำสั่งต่อไปนี้เพื่อให้แน่ใจว่าคุณไม่ต้องกำหนดค่า iptables ใหม่

สำหรับกฎ IPv4 ให้เขียนคำสั่ง:

$ sudo iptables-save > /etc/iptables/rules.v4

และสำหรับกฎ IPv6 ให้เขียนคำสั่ง:

$ sudo iptables-save > /etc/iptables/rules.v6

กฎที่คงอยู่โดยอัตโนมัติ

เพื่อให้กฎคงอยู่แม้หลังจากรีสตาร์ทและอัตโนมัติเช่นกัน คุณจะต้องติดตั้งแพ็คเกจที่มี iptables

โดยเรียกใช้คำสั่งต่อไปนี้

$ sudo apt-get install iptables-persistent

จะเปิดหน้าต่างต่อไปนี้ กด Enter บน <ใช่>

ขณะที่เรากำลังทำงานกับตาราง IPv4 ตารางจะแสดงเฉพาะกฎ IPv4 หากคุณกำลังทำงานบน IPv6 หน้าต่างนั้นจะแสดงหน้าต่างที่เกี่ยวข้อง

หมายเหตุ: แพ็คเกจจะโหลดกฎ iptables ที่คุณบันทึกไว้เท่านั้น ดังนั้น เมื่อใดก็ตามที่คุณเปลี่ยน iptables คุณจะต้องบันทึกด้วยคำสั่ง iptables -save

กฎการโหลดซ้ำหลังจากรีสตาร์ท

เมื่อบันทึกกฎแล้ว คุณต้องกู้คืนด้วยคำสั่งต่อไปนี้

$ sudo iptables-restore < /etc/iptables/rules.v4

และ

$ sudo iptables-restore < /etc/iptables/rules.v6

เปิดใช้งานทราฟฟิกบน Localhost / เปิดใช้งานลูปแบ็ค

หากต้องการเปิดใช้งานการรับส่งข้อมูลบน Localhost ให้ใช้คำสั่งต่อไปนี้:

$ sudo iptables -A INPUT -i lo -j ACCEPT

ที่นี่ lo ย่อมาจากอินเทอร์เฟซย้อนกลับสำหรับการสื่อสารในเครื่องโฮสต์ทั้งหมด

ในทำนองเดียวกัน เราสามารถอนุญาตให้แพ็กเก็ตออกจากอินเทอร์เฟซลูปแบ็คได้

$ sudo iptables -A OUTPUT -o lo -j ACCEPT

หากต้องการตรวจสอบว่ากฎมีการเปลี่ยนแปลงอย่างไร ให้รัน iptables -L -n -V

#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

การเปิดใช้งานทราฟฟิกบนพอร์ตเฉพาะ

คุณสามารถเปิดใช้งานทราฟฟิกเพื่อยอมรับหรือปฏิเสธในบางพอร์ต

ตัวอย่างเช่น พอร์ต SSL, HTTP และ SSH มีความสำคัญต่อการทำงานปกติของแอปของคุณ คุณสามารถเพิ่มกฎให้กับแพ็กเก็ต ACCEPT ผ่านหมายเลขพอร์ตเพื่อให้แน่ใจว่ากฎทำงานตามที่ต้องการ

สำหรับ SSL ให้รันคำสั่งต่อไปนี้

$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

สำหรับ HTTPS ให้รันคำสั่งต่อไปนี้

$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

สำหรับการอนุญาตการรับส่งข้อมูล HTTPS ทั้งหมดที่อินเทอร์เฟซ eth0

$ iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

สำหรับ SSH ให้รันคำสั่งต่อไปนี้

$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

และหากต้องการยอมรับทราฟฟิก SSH ขาเข้าทั้งหมดบนอินเทอร์เฟซ eth0 ให้รันดังต่อไปนี้:

$ iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

อีกตัวอย่างหนึ่งคือการเปิดใช้งานการรับส่งข้อมูลพอร์ตบนพอร์ตเฉพาะสำหรับแอปที่คุณกำหนดเอง สมมติว่าพอร์ต 233

หากต้องการเปิดการเชื่อมต่อบนพอร์ตนั้น ให้เรียกใช้

$ sudo iptables -A INPUT -p tcp --dport 233 -j ACCEPT

ในทำนองเดียวกัน คุณยังสามารถปิดการเชื่อมต่อบนพอร์ตเฉพาะได้โดยใช้ตัวเลือกปฏิเสธเป้าหมาย

บล็อกการเชื่อมต่อทั้งหมดที่พอร์ต 392

$ sudo iptables -A INPUT -p tcp --dport 392 -j REJECT

ในการตรวจสอบ ให้รันคำสั่ง iptables -L -n -v

#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:233

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

 0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

ลบกฎที่มีอยู่

หากต้องการลบกฎที่มีอยู่ คุณจะต้องเรียกใช้คำสั่งต่อไปนี้

$ iptables -F

หรือ

$ iptables --flush

หมายเหตุ: หากคุณยังไม่ได้บันทึกกฎของคุณ กฎเหล่านั้นจะหายไปตลอดกาลและไม่สามารถกู้คืนได้โดยใช้ iptables -restore

  ตัวสร้างอาหารให้ข้อมูลโภชนาการตามส่วนผสมของคุณ

ลบกฎด้วยหมายเลขบรรทัด

หากต้องการลบกฎเฉพาะ คุณจะต้องได้รับรายการกฎพร้อมตัวเลข

$ sudo iptables -L --line-numbers
#output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http

3    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https

4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:233

5    REJECT     tcp  --  anywhere             anywhere             tcp dpt:392 reject-with icmp-port-unreachable

รันคำสั่งต่อไปนี้หากคุณต้องการลบกฎข้อที่ 4 สำหรับสาย INPUT

$ sudo iptables -D INPUT 4

และหากคุณเรียกใช้คำสั่ง iptables -n -v -L อีกครั้ง

#output

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

    0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

แสดงเฉพาะกฎลูกโซ่ INPUT หรือ OUTPUT

หากต้องการแสดงเฉพาะกฎลูกโซ่ INPUT ให้รันคำสั่งต่อไปนี้

$ sudo iptables -L INPUT -n -v --line-numbers
#ouput

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

num   pkts bytes target     prot opt in     out     source               destination

1        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:443

4        0     0 REJECT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

ในทำนองเดียวกัน หากคุณต้องการดูเฉพาะกฎลูกโซ่ OUTPUT ให้เรียกใช้:

$ sudo iptables -L OUTPUT -n -v --line-numbers
#output

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

num   pkts bytes target     prot opt in     out     source               destination

1        0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0

เริ่ม/หยุด/รีสตาร์ทไฟร์วอลล์

หากคุณใช้ RHEL/ Fedora Linux หรือ CentOS คุณสามารถเริ่ม/หยุดหรือรีสตาร์ทไฟร์วอลล์ได้โดยการเรียกใช้คำสั่ง

$ service iptables stop

$ service iptables start

$ service iptables restart

คุณยังสามารถใช้คำสั่ง systemctl

  วิธีการค้นหาไฟล์หลายประเภทใน File Explorer

อย่างไรก็ตาม มันจะใช้ไม่ได้กับ Ubuntu

แทรกกฎในสถานที่เฉพาะ

หากคุณต้องการแทรกกฎในตำแหน่งเฉพาะ คุณต้องใช้คำสั่งต่อไปนี้

ก่อนอื่นให้ตรวจสอบกฎ

$ sudo iptables -L INPUT -n --line-numbers
#output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443

4    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

เรียกใช้คำสั่งต่อไปนี้หากคุณต้องการแทรกกฎระหว่าง 2 และ 3

$ sudo iptables -I INPUT 3 -s 252.32.1.2 -j DROP

ตรวจสอบกฎที่อัปเดตแล้ว

#output

Chain INPUT (policy ACCEPT)

num  target     prot opt source               destination

1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80

3    DROP       all  --  252.32.1.2           0.0.0.0/0

4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:443

5    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:392 reject-with icmp-port-unreachable

บล็อกทราฟฟิกขาเข้าแต่อนุญาตทราฟฟิกขาออก

คุณจะต้องป้อนคำสั่งต่อไปนี้เพื่อบล็อกทราฟฟิกขาเข้าทั้งหมด

$ iptables -P INPUT DROP

$ iptables -P FORWARD DROP

$ iptables -P OUTPUT ACCEPT

$ iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT

$ iptables -L -v -n

ด้วยวิธีนี้ คุณสามารถ ping หรือดาวน์โหลดแพ็คเกจ แต่บล็อกการรับส่งข้อมูลที่ไม่รู้จัก

บล็อกที่อยู่ IP เฉพาะ

หากต้องการบล็อกที่อยู่ IP เฉพาะ ให้รันคำสั่งต่อไปนี้

$ iptables -A INPUT -s 14.23.59.9 -J DROP

คุณยังสามารถกำหนดตัวแปรเพื่อจัดเก็บที่อยู่ IP ที่ถูกบล็อกแล้วเรียกใช้คำสั่ง

BLOCK_THE_IP = “a.b.c.d”

จากนั้นเรียกใช้:

$ iptables -A INPUT -s “BLOCK_THE_IP” -j DROP

หมายเหตุ: เปลี่ยน “abcd” เป็นที่อยู่ IP ที่คุณต้องการ

อนุญาตให้ระบบ Pinging จากภายนอก

คุณสามารถให้ผู้ใช้ภายนอก ping เซิร์ฟเวอร์ของคุณเพื่อให้ค้นพบเครือข่ายของคุณได้

$ sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

$ sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

อนุญาตให้เครือข่ายภายในพูดคุยกับเครือข่ายภายนอก

เรียกใช้คำสั่งต่อไปนี้เพื่ออนุญาตเครือข่ายภายใน (สมมติว่า eth0) ไปยังเครือข่ายภายนอก (สมมติว่า eth1)

$ sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

อนุญาต DNS ขาออก

หากต้องการอนุญาตการเชื่อมต่อ DNS กับเซิร์ฟเวอร์ของคุณ ให้รันคำสั่งต่อไปนี้

$ iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT

$ iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

อนุญาต Rsycn จากเครือข่ายเฉพาะ

หากคุณใช้คำสั่ง Rsync และต้องการเปิดใช้งานผ่านเครือข่ายเฉพาะ ให้รันคำสั่งต่อไปนี้

iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

บล็อกพอร์ต

เรียกใช้คำสั่งต่อไปนี้เพื่อบล็อกพอร์ตเฉพาะและคำขอที่เข้ามา

iptables -A INPUT -p tcp --dport 80 -j DROP

iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP

บล็อกการรับส่งข้อมูลขาออกไปยังที่อยู่ IP เฉพาะ

คุณสามารถบล็อกทราฟฟิกไปยังที่อยู่ IP ใดๆ ได้โดยใช้คำสั่งต่อไปนี้

$ host -t a admintrick.com.com

#เอาต์พุต

admintrick.com.com มีที่อยู่ 172.66.40.93

หากต้องการบล็อกทราฟฟิกขาออกไปยังที่อยู่ IP นั้น ให้รันคำสั่งต่อไปนี้

iptables -A OUTPUT -d 72.66.40.93 -j DROP

ในทำนองเดียวกัน คุณยังสามารถบล็อกแพลตฟอร์มโซเชียลมีเดีย เช่น Instagram, Twitter และ Facebook

ค้นหาที่อยู่ IP ของโซเชียลมีเดียโดยเรียกใช้คำสั่งต่อไปนี้:

$ host -t a social-media-web-adrress.com

ตัวอย่างเช่น สำหรับ Instagram จะเป็น:

$ host -t a www.instagram.com

ตอนนี้ คุณจะต้องค้นหา CIDR สำหรับที่อยู่ IP ของแพลตฟอร์มโซเชียลมีเดียนั้นๆ

$ whois 185.89.219.11 | grep CIDR

หมายเหตุ: คุณอาจต้องติดตั้งแพ็คเกจ whois โดยเรียกใช้ sudo apt-get install whois

ตอนนี้ ป้อนค่า CIDR ด้วยวิธีต่อไปนี้:

$ iptables - A OUTPUT -p tcp -d CIDR-value -j DROP

หมายเหตุ: อย่าลืมเปลี่ยนค่า CIDR ตามนั้น

อนุญาตหรือบล็อกคำขอ ICMP Ping

หากต้องการอนุญาตหรือบล็อกคำขอ ping ของ ICMP ให้รันคำสั่งต่อไปนี้

$ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

$ iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP

เปิดช่วงพอร์ตเฉพาะ

หากต้องการเปิดช่วงของพอร์ต ให้รันคำสั่งต่อไปนี้

$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8933: 8500 -j ACCEPT

แสดงรายการกฎ NAT

หากต้องการแสดงกฎ NAT ให้รันคำสั่งต่อไปนี้:

$ sudo iptables -t nat -L -n -v

หรือ

$ sudo iptables -t nat -v -L -n --line-number

รีเซ็ตตัวนับแพ็คเกจ

ในการตรวจสอบตัวนับ iptables ปัจจุบัน:

$ sudo iptables -L -n -v

หากต้องการรีเซ็ตหรือล้างตัวนับ ให้รันดังต่อไปนี้:

$ sudo iptables -Z

$ sudo iptables -L -n -v

สำหรับการรีเซ็ตตัวนับเชน INPUT เท่านั้น ให้รัน:

$ iptables -Z INPUT

หากต้องการรีเซ็ตตัวนับกฎเฉพาะ ให้รันดังต่อไปนี้:

$ iptables -z INPUT RULE-NUMBER

อย่าลืมเปลี่ยน RULE-NUMBER เป็นกฎนั้นๆ

คำสุดท้าย

iptables เป็นยูทิลิตี้บรรทัดคำสั่งไฟร์วอลล์ที่ทรงพลัง คุณสามารถกำหนดค่าเกือบทุกอย่างที่เกี่ยวข้องกับทรัพยากรเครือข่าย แพ็กเก็ต อินเทอร์เฟซ และสถานการณ์เฉพาะ

นอกจากนี้ iptables ยังมีตัวเลือกมากมาย ตรวจสอบหน้าหลักโดยใช้คำสั่ง man เพื่อให้ได้ภาพที่สมบูรณ์

$ man iptables
$ man ip6tables

ต่อไป ตรวจสอบไฟร์วอลล์เครือข่ายและวิธีที่ช่วยหยุดการโจมตี

เรื่องล่าสุด

x