ในบทความก่อนหน้านี้เราได้เห็นวิธีการตั้งค่า IPTables ให้ทำงานเป็นไฟร์วอลล์แล้ว คราวนี้เราจะมาดูวิธีการสร้างสคริปต์เพื่อเรียกใช้กฎโดยอัตโนมัติเมื่อระบบเริ่มต้นทำงาน และวิธีการลบหรือหยุดกฎเหล่านั้นชั่วคราว
ก่อนที่จะทำสคริปต์และแสดงให้คุณเห็นว่าหน้าตาเป็นอย่างไรเรามาพูดคุยกันเล็กน้อยเกี่ยวกับ NAT และแนวคิดเกี่ยวกับสิ่งที่เราต้องการทำกับอุปกรณ์นี้
NAT และบริบทของตัวอย่าง
เมื่อเราพูดถึง NAT เราสามารถสับสนกับการกำหนดเส้นทางได้เนื่องจากทั้งสองมีหน้าที่ในการเชื่อมต่อเครือข่ายที่แตกต่างกันสองเครือข่ายเข้าด้วยกัน ความแตกต่างจริงๆคือการกำหนดเส้นทางถูกนำไปใช้เพื่อไปจากเครือข่ายท้องถิ่นหนึ่งไปยังอีกเครือข่ายหนึ่งและเครือข่ายอื่นนี้สามารถเชื่อมต่อกับเราเตอร์และออกไปยังอินเทอร์เน็ตได้
ในขณะที่เมื่อเราพูดถึง NAT เราพูดถึงการกำหนดเส้นทางแพ็กเก็ตจากเครือข่ายท้องถิ่นหรือส่วนตัวไปยังเครือข่ายสาธารณะหรืออินเทอร์เน็ต ทำได้โดยการปิดบังแพ็กเก็ตโดยการใส่ IP สาธารณะที่ไปยังอินเทอร์เน็ต กล่าวอีกนัยหนึ่งเราไม่จำเป็นต้องมีเราเตอร์เนื่องจาก IP สาธารณะเป็นของคอมพิวเตอร์ GNU / Linux โดยตรง
เราจะทำงานนี้ด้วยสโลแกนที่ว่าเราใช้ Linux เป็นเราเตอร์ / ไฟร์วอลล์เพื่อออกไปยังอินเทอร์เน็ตจากเครือข่ายท้องถิ่น แต่ที่นี่สามารถปรากฏได้สองสถานการณ์
- ลินุกซ์ของเราอยู่ระหว่างเราเตอร์ของผู้ให้บริการและเครือข่ายท้องถิ่น
ในกรณีนี้ จะมีเครือข่ายหนึ่งระหว่างเราเตอร์กับระบบ Linux ของเรา และอีกเครือข่ายหนึ่งระหว่างระบบ Linux กับเครือข่ายภายใน ซึ่งหมายความว่าเราเตอร์ของเราไม่จำเป็นต้องทำการ NAT การกำหนดเส้นทางการรับส่งข้อมูลแบบง่ายๆ ดังที่ได้อธิบายไว้ในโพสต์ก่อนหน้านี้ก็เพียงพอแล้ว
- ลินุกซ์ของเรามีอินเทอร์เฟซที่เชื่อมต่อกับเครือข่ายท้องถิ่นและผ่านอินเทอร์เฟซอื่นจะได้รับ IP สาธารณะโดยตรงที่ใช้นำทาง
ซึ่งหมายความว่า Linux ของเราต้องทำ NAT เพื่อให้แพ็กเก็ตเข้าถึงอินเทอร์เน็ตได้
สำหรับวัตถุประสงค์ของห้องปฏิบัติการขนาดเล็กนี้เราจะบอกว่า Linux ของเราได้รับ IP สาธารณะโดยตรงและสามารถทดสอบผลกระทบของ NAT ได้
ในการทำ NAT เราใช้ไวยากรณ์
iptables -t nat -A โพสต์ -O eth1 -j MASQUERADE
โดยที่ eth1 เป็นอินเทอร์เฟซที่เรารับ IP สาธารณะนั่นคือที่ที่เราไปที่อินเทอร์เน็ต
การสร้างสคริปต์ iptables
สมมติว่า 172.26.0.0 คือเครือข่ายท้องถิ่นของเราและ 81.2.3.4 คือ IP สาธารณะที่เราใช้ไปยังอินเทอร์เน็ต (เป็น IP แบบคงที่) ฉันมีอินเทอร์เฟซ eth0 (เครือข่ายท้องถิ่น)
eth1 (เครือข่ายสาธารณะ)
โดยพื้นฐานแล้วประกอบด้วยการสร้างสคริปต์ที่สามารถเรียกใช้จาก /etc/init.d/firestop (ตัวอย่าง) และจากสคริปต์นี้เราสามารถเริ่มหยุดหรือตรวจสอบสถานะของการกำหนดค่าของเราได้เช่นเดียวกับที่เราทำกับดีมอนระบบใด ๆ
สมมติว่ากฎ IPTABLES ของฉันคือ:
#! / bin / bash # ไฟร์วอลล์ของบ้านของฉัน # ชื่อไฟล์ / etc / firewall_on # โดย Jlcmux Twitter: @Jlcmux # # นโยบายพื้นฐาน iptables -P INPOUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # #NAT เพื่อแชร์อินเทอร์เน็ตจาก eth0 ถึง eth1 iptables -t nat -A POSTROUTING -O eth1 -j SNAT - to-source 81.2.3.4 # # อนุญาตการเชื่อมต่อขาเข้าที่เริ่มต้นโดย iptables ของฉัน -A FORWARD -m state --state ESTABLISHED, RELATED -j ACCEPT # # อนุญาตการรับส่งข้อมูลขาออก iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80 -j ยอมรับ iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -j ยอมรับ
คำอธิบาย:
โดยทั่วไปสคริปต์จะทำสิ่งต่อไปนี้:
- อันดับแรก จำกัด การนำทางการเชื่อมต่อและการจราจรทั้งหมด (นโยบายไฟร์วอลล์พื้นฐาน)
- จากนั้นสร้าง NAT ด้วยปลายทาง eth1 แสดงว่าเรามี IP สาธารณะแบบคงที่ "81.2.3.4"
- เปิดพอร์ตที่จำเป็นในการรับแพ็กเก็ตการเชื่อมต่อที่เริ่มต้นโดยฉัน
- ยอมรับการรับส่งข้อมูล HTTP, HTTPS และ DNS ขาออก
หากเราต้องการใช้อุปกรณ์ของเราในการนำทางเราควรทำซ้ำบรรทัดและเปลี่ยน FORWARD เป็น INPUT หรือ OUTPUT ตามความเหมาะสม
ยกเลิกสคริปต์
ตอนนี้เรากำลังจะสร้างสคริปต์ที่ลบล้างสิ่งที่กล่าวมาทั้งหมดและปล่อยให้คอมพิวเตอร์สะอาดหมดจด (เพื่อวัตถุประสงค์ในการทดสอบหรือเราเพียงต้องการปิดไฟร์วอลล์)
#! / bin / bash # ไฟร์วอลล์ของบ้านของฉัน # ชื่อไฟล์ / etc / firewall_off # โดย Jlcmux Twitter: @Jlcmux # # การลบกฎ iptables -F # # การใช้นโยบายเริ่มต้น (ยอมรับการรับส่งข้อมูลทั้งหมด) iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
ทำงานอัตโนมัติ
ตอนนี้เราจำเป็นต้องสร้างสคริปต์ภายใน/etc/init.d/เพื่อให้บริการเริ่มต้นทำงานโดยอัตโนมัติและเราสามารถจัดการได้ง่ายขึ้น
#! / bin / bash # ไฟร์วอลล์ของบ้านของฉัน # ชื่อไฟล์ /etc/init.d/ firewall # โดย Jlcmux Twitter: @Jlcmux case $ 1 ในการเริ่มต้น) / etc / firewall_on ;; หยุด) / etc / firewall_off ;; สถานะ) iptables -L ;; *) echo "ไวยากรณ์ไม่ถูกต้อง Valid = /etc/init.d/ firewall start | stop | status ;; esac
คำอธิบาย:
เราวางสคริปต์สุดท้ายนี้ไว้ใน/etc/init.d/โดยตั้งชื่อว่า"firewall"จากนั้น หากเราต้องการจัดการไฟร์วอลล์ เราสามารถใช้คำสั่ง/etc/init.d/firewall start ได้นอกจากนี้ เรายังสามารถหยุดหรือตรวจสอบสถานะของมันได้ด้วยวิธีเดียวกัน
ต่อไปเราจะแก้ไข ไฟล์ /etc/rc.localและเพิ่มข้อความประมาณนี้: /etc/init.d/firewall startเพื่อให้มันเริ่มต้นทำงานพร้อมกับระบบ
เช่นกัน. นี่คือส่วนที่สอง ฉันหวังว่ามันจะนำบางสิ่งมาสู่พวกคุณทุกคน ถัดไปเราจะเห็น Proxy และ IDS