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

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

ก่อนที่จะทำสคริปต์และแสดงให้คุณเห็นว่าหน้าตาเป็นอย่างไรเรามาพูดคุยกันเล็กน้อยเกี่ยวกับ 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/ ด้วยชื่อ ไฟร์วอลล์. ดังนั้นหากเราต้องการจัดการไฟร์วอลล์เราสามารถใช้คำสั่ง /etc/init.d/ ไฟร์วอลล์เริ่มทำงาน ในทำนองเดียวกันเราสามารถหยุดมันหรือดูสถานะ

ตอนนี้เรากำลังจะแก้ไขไฟล์ /etc/rc.local และเราใส่สิ่งที่ชอบ: /etc/init.d/ ไฟร์วอลล์เริ่มทำงาน เพื่อให้เริ่มต้นด้วยระบบ

เช่นกัน. นี่คือส่วนที่สอง ฉันหวังว่ามันจะนำบางสิ่งมาสู่พวกคุณทุกคน ถัดไปเราจะเห็น Proxy และ IDS


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   นักล่า dijo

    หากคุณใช้ Debian มีแพ็กเกจใน repo (iptables-persistent) ที่ทำเช่นนั้นมันจะทิ้งกฎปัจจุบันใน /etc/iptables/rules.v4 หรือ v6 ขึ้นอยู่กับสิ่งที่คุณใช้จากนั้นนำไปใช้เมื่อคุณยก ระบบ.

  2.   OCZ dijo

    ในทางปฏิบัติการล้างการกำหนดค่าไฟร์วอลล์ iptables ธรรมดา (และการใช้ NAT จะไม่เป็นเช่นนั้นจากมุมมองของฉัน) ในกรณีส่วนใหญ่กฎจะล้างและรีเซ็ตนโยบายเริ่มต้นเป็น ACCEPT ก็เพียงพอแล้ว
    แต่ในทางทฤษฎีและเท่าที่ฉันรู้นอกจากนี้คุณยังต้องล้างสตริงที่ไม่ใช่ค่าเริ่มต้นและรีเซ็ตตัวนับ สิ่งที่ต้องดำเนินการโดยคำนึงว่านอกจาก "ตัวกรอง" แล้วยังมีตารางอื่น ๆ (จำเป็นต้องอ่านไฟล์ "/ proc / net / ip_tables_names" สำหรับสิ่งนี้)

    อย่างไรก็ตาม orthodoxy กล่าวว่าไฟร์วอลล์จะต้องขึ้นก่อนเครือข่าย ฉันไม่รู้ว่ามันทำได้อย่างไรบนระบบ Linux อื่น ๆ แต่สำหรับระบบ Debian สคริปต์สามารถปรับและตั้งค่าในไดเร็กทอรี "/etc/network/if-pre-up.d/"

    ไฟร์วอลล์ที่ดีทุกคน 😉

  3.   หอยโข่ง dijo

    สวัสดีค่ะกระทู้ดีมาก ฉันได้อ่านทั้ง 2 เล่ม

    รอต่อไป🙂

  4.   ไม่ระบุชื่อ dijo

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

    ขอบคุณ

    1.    ยูกิเทรุ dijo

      nftables รวมฟังก์ชันทั้งหมดของ iptables, ip6tables, arptables และ ebtables ทั้งหมดนี้ใช้โครงสร้างพื้นฐานใหม่ทั้งใน kernelspace และ userspace ซึ่งทำให้มั่นใจได้ถึงประสิทธิภาพที่ดีขึ้นและการทำงานที่ดีขึ้น nftables จะแทนที่ iptables และเครื่องมืออื่น ๆ ทั้งหมดที่กล่าวถึง แต่ไม่ใช่ในขณะนี้อย่างน้อยก็จนกว่าจะมีการใช้ nftables ในวงกว้างเช่นนี้

  5.   อเล็กซานเด dijo

    โพสต์ที่ดีมากฉันต้องการอ่านเพิ่มเติมเพราะมันอธิบายได้ดีมาก .. ทักทายขอบคุณการสนับสนุนที่ดี

  6.   อัฟเราะฮ์ dijo

    สวัสดี! ดีมากทั้งสองโพสต์
    คุณสามารถเพิ่มส่วนท้ายได้ในส่วนนี้:

    "ตอนนี้เรากำลังจะแก้ไขไฟล์ /etc/rc.local และใส่บางอย่างเช่น: /etc/init.d/firestop start เพื่อให้มันเริ่มต้นด้วยระบบ"

    เพิ่มสิ่งนี้ใน rc.local

    ถ้า [-x /etc/init.d/ ไฟร์วอลล์]; แล้ว
    /etc/init.d/ ไฟร์วอลล์เริ่มทำงาน
    fi

    ซึ่งหมายความว่าหาก "ไฟร์วอลล์" มีสิทธิ์ในการดำเนินการให้ดำเนินการหากไม่มี
    หากคุณไม่ต้องการให้ "ไฟร์วอลล์" เริ่มทำงานให้ลบสิทธิ์ออก

    ตัวอย่างเช่น chmod + x /etc/init.d/ firewall
    เพื่อให้ทำงานได้ในทุกๆการเริ่มต้นหรือ ...
    chmod -x /etc/init.d/ ไฟร์วอลล์
    เพื่อปิดการใช้งานอย่างสมบูรณ์

    ทักทาย!