การรักษาความปลอดภัยเครือข่ายของคุณด้วย Iptables - Proxy - NAT - IDS: PART 2

ในบทความก่อนหน้านี้เราได้เห็นวิธีการตั้งค่า 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 สาธารณะนั่นคือที่ที่เราไปที่อินเทอร์เน็ต

MASQUERADE ใช้เมื่อ ip เป็นสาธารณะ แต่อาจแตกต่างกันไปตามช่วงเวลา (ไดนามิก) มิฉะนั้นเราสามารถใช้ SNAT – to-source 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 ยอมรับ
อย่าลืมให้สิทธิ์ในการดำเนินการ

คำอธิบาย:

โดยทั่วไปสคริปต์จะทำสิ่งต่อไปนี้:

  1. อันดับแรก จำกัด การนำทางการเชื่อมต่อและการจราจรทั้งหมด (นโยบายไฟร์วอลล์พื้นฐาน)
  2. จากนั้นสร้าง NAT ด้วยปลายทาง eth1 แสดงว่าเรามี IP สาธารณะแบบคงที่ "81.2.3.4"
  3. เปิดพอร์ตที่จำเป็นในการรับแพ็กเก็ตการเชื่อมต่อที่เริ่มต้นโดยฉัน
  4. ยอมรับการรับส่งข้อมูล HTTP, HTTPS และ DNS ขาออก
กฎถูกกำหนดไว้สำหรับการรับส่งข้อมูล FORWARD เนื่องจากเราใช้ Linux เป็นเราเตอร์ดังนั้นนโยบายจึงใช้สำหรับการรับส่งข้อมูลที่ผ่าน Linux นั่นคือทำหน้าที่เป็นตัวกลาง นั่นหมายความว่า Linux ของเราไม่สามารถนำทางหรือรับข้อมูลใด ๆ ได้โดยตรง ใช้กับคอมพิวเตอร์ที่เชื่อมต่อกับคอมพิวเตอร์เท่านั้น แต่ไม่ใช่กับตัวเอง

หากเราต้องการใช้อุปกรณ์ของเราในการนำทางเราควรทำซ้ำบรรทัดและเปลี่ยน 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


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google