การจัดการกฎแบบคู่ขนานสำหรับ ipv4 และ ipv6 iptables?


10

เมื่อเร็ว ๆ นี้เราเริ่มทำการทดสอบกับ IPv6 และหนึ่งในปัญหาแรกที่เราต้องพิจารณาคือการจัดการกับชุดไฟร์วอลล์ (Linux iptables / ip6ables) ที่แยกต่างหากสำหรับโปรโตคอลสแต็คทั้งสอง ตรรกะไฟร์วอลล์ของเรานั้นใช้เครือข่ายเฉพาะจุดประสงค์จำนวนมาก (เช่น 10.0.0.0/24 คือเครือข่ายเวิร์กสเตชันของพนักงาน 10.1.0.0/24 เป็นเครือข่ายฐานข้อมูล 10.2.0.0/24 เป็นเครือข่ายเว็บเซิร์ฟเวอร์ ฯลฯ ) และตรรกะสำหรับทั้ง IPv6 และ IPv4 จะเหมือนกันส่วนใหญ่คำนำหน้าเครือข่ายที่แตกต่างกันแบบโมดูโล

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

ฉันจะให้ความสนใจเป็นพิเศษในโซลูชันที่ใช้หุ่นกระบอกซึ่งใช้ประโยชน์จากกลไกการพึ่งพาของ Puppet เพื่อใช้การเรียงลำดับของกฎที่สัมพันธ์กัน (หรือกลุ่มของกฎ)

คำตอบ:


5

ตัวสร้างไฟร์วอลล์มีสิ่งที่คุณต้องการอย่างแท้จริง คุณสามารถสร้างหนึ่งชุดกฎทำเครื่องหมายเป็น "รวม ipv4 + ipv6" และวางเครือข่าย ipv4 และ ipv6 ของคุณที่กำหนดให้กับกลุ่มเดียวกัน (เช่น "ฐานข้อมูลเครือข่าย" ฯลฯ ) ในกฎเดียวกัน จากนั้นโปรแกรมจะสร้างการกำหนดค่า iptables แยกกันสองรายการหนึ่งสำหรับ ipv4 และอีกหนึ่งรายการสำหรับ ipv6 บทนี้ของคู่มือผู้ใช้แสดงให้เห็นถึงสิ่งนี้แม้ว่าจะใช้รายการเข้าถึงเราเตอร์ของ Cisco เป็นตัวอย่าง มันทำงานเหมือนกันสำหรับ iptables

http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html


4

ฉันเพิ่งเผชิญหน้ากับการสร้าง iptables-rules สำหรับทั้ง IPv4 และ IPv6 หลังจากบางค้นหาฉันสิ้นสุดขึ้นโดยใช้สาขา IPv6 FireHOL โดยฟิล Whineray

FireHOL เป็นเครื่องกำเนิดไฟฟ้าไฟร์วอลล์ iptables ที่ผลิตไฟร์วอลล์กรองแพ็คเก็ต stateful iptables บน Linux โฮสต์และเราเตอร์ที่มีจำนวนของอินเตอร์เฟซเครือข่ายจำนวนเส้นทางใด ๆ จำนวนบริการที่ให้บริการใด ๆ จำนวนความซับซ้อนใด ๆ ระหว่างการเปลี่ยนแปลงของบริการ (รวมถึงบวกและลบ การแสดงออก) (ที่มา: เว็บไซต์ FireHOL)

น่าเสียดายที่เวอร์ชันทางการไม่รองรับ IPv6 แต่ Phil Whineray ได้เพิ่มการสนับสนุนในสาขาที่ไม่เป็นทางการ

ตัวอย่างบางส่วนเกี่ยวกับลักษณะของการกำหนดค่า:

# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept

# allow incoming ssh only on ipv4
ipv4 server ssh accept

# allow incoming IMAP requests only for ipv6
ipv6 server imap accept

คุณสามารถชำระเงินสาขา firehol นี้ได้ที่:

git clone git://repo.or.cz/fireholvi.git

เอกสารเพิ่มเติมสามารถพบได้ที่เอกสาร FireHOL อย่างเป็นทางการหรือที่เพิ่มเติมReadme เกี่ยวกับ IPv6

โดยส่วนตัวฉันอาจจะระมัดระวังเมื่อใช้กับเครื่องที่มีไฟร์วอลล์ที่เชื่อถือได้ 100% เป็นสิ่งสำคัญ แต่มันก็คุ้มค่าที่จะดู


3

เพื่อผลประโยชน์ของการประกาศอย่างต่อเนื่องฉันขอแนะนำให้ใช้หุ่นเชิดเพื่อยกระดับ ในปัจจุบันยังไม่มีสคริปต์ที่ดีสำหรับการจัดการกฎ iptables 4 และ 6 แต่มันจะไม่เป็นการท้าทายสำหรับการเขียนหนึ่งเมื่อคุณปรับเปลี่ยนเป็นภาษา

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

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


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

@ larsks ฉันเห็นด้วยและได้รับความผิดหวังในทำนองเดียวกันว่าวิธีการแก้ปัญหาทั่วไปที่ดียังไม่ได้รับการเผยแพร่ ... แต่อาจถึงเวลาที่ฉันต้องทำด้วยตัวเอง Puppet จะอนุญาตให้ใช้before => Resource['declared_name']กับคำจำกัดความใด ๆ เพื่อให้คุณสามารถสั่งซื้อได้โดยใช้การดำเนินการที่ไม่ได้พยายามเรียงลำดับสิ่งต่าง ๆ ด้วยชิ้นส่วน การใช้งาน Augueas สำหรับโครงสร้างที่ดีจะช่วยป้องกันปัญหานี้ได้เช่นกัน - แสดงความคิดเห็นทรีทรีของคุณและสั่งซื้อด้านล่างตามที่คุณต้องการ
Jeff Ferland

ความพยายามของฉันในการแก้ไขปัญหานี้ไม่ได้ไกลมาก สิ่งที่ฉันทำไปแล้วในตอนนี้คือ (a) ติดตั้งแฟรกเมนต์ลงในไดเรกทอรีย่อยและจากนั้น (b) ใช้rcorderเพื่อวางไว้ในลำดับการพึ่งพา มันใช้งานได้ แต่เนื่องจากมันขึ้นอยู่กับการจัดการไฟล์ส่วนเท่านั้นจึงไม่ให้ยืมตัวเองกับสภาพแวดล้อม ipv4 / ipv6 แบบผสม ฉันไม่ได้พิจารณาอย่างถี่ถ้วนในการใช้ Augeas เพื่อช่วยแก้ปัญหานี้ ฉันอยากรู้ถ้าคุณมีรหัสต้นแบบใด ๆ
larsks

2

ตอบคำถามของฉันเองที่นี่ แต่ฉันคิดว่าข้อมูลนี้อาจเป็นที่สนใจโดยทั่วไป:

ในขณะที่มองคำถามนี้ฉันพบufw (Uncomplicated FireWall) จาก Ubuntu คน เมื่อเปิดใช้งาน IPV6 ในการกำหนดค่า ufw ufw จะจัดการกฎ iptables และ ip6tables แบบขนาน หมายความว่าคุณสามารถทำสิ่งนี้:

# ufw allow ssh/tcp

และจบลงด้วย:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)

ผลลัพธ์ใดในกฎ iptables / ip6tables ที่มีลักษณะดังนี้:

# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT

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

# ufw allow 'WWW Full'

และจบลงด้วยการเปิดทั้งสองพอร์ต 80 และ 443 (สำหรับทั้ง IPv4 และ IPv6)

ฉันเพิ่งเริ่มดู แต่ดูเหมือนว่าจะรวมกันค่อนข้างดี


0

เนื่องจากยังขาดหายไปจากรายการ: Shorewallเป็นเครื่องมือกำหนดค่าตัวกรองแพ็กเก็ตคุณลักษณะที่มีคุณลักษณะหลากหลาย มีการรองรับ IPv6ในขณะนี้


1
ฉันเข้าใจว่า "shorewall" เป็น ipv4 เท่านั้นและ "shorewall6" เป็น ipv6 เท่านั้น anod หนึ่งต้องใช้ทั้งสองเพื่อครอบคลุมโปรโตคอลทั้งสอง พวกเขาสามารถแบ่งปันการกำหนดค่าทั่วไปได้หรือไม่
larsks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.