ฉันจะเขียนการทดสอบอัตโนมัติสำหรับ iptables ได้อย่างไร


13

ฉันกำลังกำหนดค่าเราเตอร์ Linux iptablesกับ ฉันต้องการเขียนการทดสอบการยอมรับสำหรับการกำหนดค่าที่ยืนยันสิ่งต่าง ๆ เช่น:

  • ปริมาณการใช้งานจากผู้ชายบนอินเทอร์เน็ตไม่ได้ถูกส่งต่อ
  • TCP ไปยังพอร์ต 80 บนเว็บเซิร์ฟเวอร์ใน DMZ จากโฮสต์บน LAN องค์กรจะถูกส่งต่อ

คำถามที่พบบ่อยโบราณบ่งบอกถึงiptables -Cตัวเลือกที่อนุญาตให้ใครซักคนถามว่า "ได้รับแพ็คเก็ตจาก X, Y ในพอร์ต Z มันจะได้รับการยอมรับหรือไม่?" แม้ว่าคำถามที่พบบ่อยแสดงให้เห็นว่ามันใช้งานได้เช่นนี้สำหรับiptables(แต่อาจไม่ใช่ipchainsตามที่ใช้ในตัวอย่าง) -Cตัวเลือกดูเหมือนจะไม่จำลองแพคเก็ตทดสอบที่วิ่งผ่านกฎทั้งหมด แต่จะตรวจสอบว่ามีกฎการจับคู่ตรงกัน สิ่งนี้มีค่าเพียงเล็กน้อยในการทดสอบ ฉันต้องการยืนยันว่ากฎมีผลตามที่ต้องการไม่ใช่แค่มีอยู่จริง

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

ฉันจะแก้ไขปัญหานี้ได้อย่างไร มีกลไกบางอย่างที่ฉันอาจจะใช้ในการสร้างหรือการจำลองการจราจรโดยพลแล้วทราบว่ามันเป็น (หรือจะเป็น) ลดลงหรือได้รับการยอมรับโดยiptables?


อันนี้ก็น่าสนใจเช่นกัน: security.stackexchange.com/questions/31957/ …
dawud

1
@dawud ฉันไม่คิดว่าอย่างใดอย่างหนึ่งที่ซ้ำกัน ฉันรู้วิธีเรียกใช้การสแกนพอร์ต: นั่นไม่ใช่การทดสอบที่ดีเพราะฉัน จำกัด การทดสอบไปยังและจากปลายทางและแหล่งที่มาที่ฉันสามารถควบคุมได้ ความกังวลของฉันยังไม่ได้ล็อคตัวเองออกจากเซิร์ฟเวอร์ ฉันต้องการทดสอบโดยอัตโนมัติว่ากฎไฟร์วอลล์จริงมีผลกระทบที่ฉันออกแบบให้มี
Phil

คำตอบ:


2

หากคุณพร้อมที่จะทำการเขียนโค้ดคุณสามารถลอง:

  • สร้างเนมสเปซเครือข่ายใหม่โดยใช้CLONE_NEWNETแฟล็กสำหรับการcloneโทรของระบบหรือโดยการใช้ip netns addและip netns execคำสั่ง
  • ในลัง namespace นี้เป็นชุดของการเชื่อมต่อเครือข่ายเสมือนใช้โปรแกรมควบคุมหรือtunip link add
  • โหลดการกำหนดค่าโดยใช้ iptables-restore
  • ป้อนจำนวนของแพ็กเก็ตตามกฎผ่านอุปกรณ์tunหรือveth
  • สังเกตว่าคุณได้รับแพ็กเก็ตที่ถูกต้องจากtunหรือvethอุปกรณ์

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

นี่คือตัวอย่างของลำดับของคำสั่งที่สามารถใช้ได้:

ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host

ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host

ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0

ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2

ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1

ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2

ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host

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

ในตัวอย่างข้างต้นtelnetคำสั่งแรกรับการเชื่อมต่อถูกปฏิเสธจากtest-iptables-lan-hostเนมสเปซtelnetคำสั่งที่สองรับการหมดเวลาหากชุดกฎลดลงแพ็คเก็ต

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


0

โลกมืออาชีพทำเช่นนั้นด้วยความช่วยเหลือของฮาร์ดแวร์ / ซอฟต์แวร์ที่จัดทำโดย 2 บริษัท

www.ixiacom.com

www.spirent.com

ในกรณีแรกคุณสามารถใช้บางอย่างเช่นแชสซี Ixia 400T + Ixload

ในกรณีที่สองบรรทัด Smartbits หรือ Testcenter พร้อมกับแอพพลิเคชั่นที่เกี่ยวข้อง

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

ไม่ใช่ตัวเลือกที่ราคาถูก


เป็นที่น่าอัศจรรย์ที่จะดูว่าไม่รู้ธรรมดาอย่างเงียบ ๆ สามารถปรับลดคำตอบที่ถูกต้อง ...
แพ็ต
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.