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

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

เนื้อหานี้อ้างอิงจากหนังสือ "Linux - System Administration and Network Services Operation" - Sébastien BOBILLIER

การกำหนดเส้นทางและการกรอง

ในการพูดคุยและทำความเข้าใจเกี่ยวกับการกำหนดเส้นทางเราสามารถกำหนดได้ก่อนว่าบทบาทของเราเตอร์คืออะไร? สำหรับสิ่งนี้เราสามารถพูดได้ว่าเราเตอร์นอกเหนือจากการสร้างเครือข่ายและอนุญาตให้เชื่อมต่อกับอุปกรณ์อื่น ๆ (โดยรู้ว่าเราสามารถทำได้ด้วย AP, Switch, Hub หรืออื่น ๆ ) มีความสามารถในการเชื่อมต่อเครือข่ายที่แตกต่างกันสองเครือข่ายเข้าด้วยกัน

เราเตอร์

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

ลินุกซ์เป็นเราเตอร์

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

/proc/sys/net/ipv4/ip_forward

เราจะพบว่าเป็นไฟล์ที่มีเพียงศูนย์ "0" สิ่งที่เราต้องทำคือเปลี่ยนเป็น "1" เพื่อเปิดใช้งานพฤติกรรมนี้ สิ่งนี้ถูกลบไปอย่างน่าเสียดายเมื่อเรารีสตาร์ทคอมพิวเตอร์เพื่อให้เปิดใช้งานตามค่าเริ่มต้นเราต้องใช้คำสั่ง:

sysctl net.ipv4.ip_forward=1

หรือแก้ไขโดยตรงในไฟล์ /etc/sysctl.conf. ขึ้นอยู่กับการกระจายการกำหนดค่านี้ยังสามารถอยู่ในไฟล์ใน  /etc/sysctl.d/

โดยค่าเริ่มต้น Linux ของเราจะต้องมีตารางเส้นทางซึ่งโดยทั่วไปจะเป็นการกำหนดค่าเครือข่าย lan ของเราและการเชื่อมต่อกับเราเตอร์ หากเราต้องการดูเส้นทางนี้เราสามารถใช้สองคำสั่ง:

route -n

o

netstat -nr

คำสั่งทั้งสองควรกลับมาเหมือนกัน

สกรีนช็อตจาก 2014-09-30 18:23:06 น

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

สมมติว่า Linux ของฉันมีอินเทอร์เฟซเครือข่ายสองอันอันแรกมีการเชื่อมต่ออินเทอร์เน็ตที่มีเครือข่าย 172.26.0.0 และอันที่สอง (10.0.0.0) มีคอมพิวเตอร์บางเครื่องจากเครือข่ายท้องถิ่นอื่น หากเราต้องการกำหนดเส้นทางแพ็กเก็ตไปยังเครือข่ายอื่นเราสามารถใช้ได้:

route add -net 10.0.0.0 netmask 255.0.0.0 gw 172.26.0.8

โดยทั่วไปคือ:

route add -net REDDESTINO netmask MASCARA gw IPDELLINUX

ถ้าเราให้ เส้นทาง -n ไม่ว่าเครือข่ายนี้จะมีอยู่หรือไม่ก็ตามการกำหนดเส้นทางนี้จะได้รับการแก้ไขในตารางของเรา

สกรีนช็อตจาก 2014-09-30 18:31:35 น

หากเราต้องการกำจัดการกำหนดเส้นทางดังกล่าวเราสามารถใช้ได้

route del -net 10.0.0.0 netmask 255.0.0.0

Iptables

โดยทั่วไปแล้ว iptables จะใช้สำหรับการกรองแพ็กเก็ตขาออกขาเข้าหรืออื่น ๆ ทำให้เป็นเครื่องมือที่ยอดเยี่ยมในการจัดการทราฟฟิกเครือข่ายของเรา iptables เช่นเดียวกับที่ช่วยให้เราสามารถกรองการรับส่งข้อมูลจากคอมพิวเตอร์เครื่องเดียวกันได้นอกจากนี้ยังช่วยให้เราสามารถกรองการรับส่งข้อมูลที่ผ่านได้ (การส่งต่อ). Iptables สามารถแบ่งออกเป็นตารางสตริงและการดำเนินการ

  • บอร์ด:  โดยทั่วไปอาจมีสองตาราง กรอง, เพื่อกรองแพ็กเก็ตและ  แน็ต ในการแปลที่อยู่นั่นคือการย้ายจากเครือข่ายหนึ่งไปยังอีกเครือข่าย
  • โซ่: โซ่หมายถึงประเภทของการเข้าชมที่เราต้องการกรองหรือว่ายน้ำนั่นคือเราจะใช้ตารางใด และสามารถ:  INPUT: การจราจรขาเข้า เอาท์พุท: การจราจรขาออกหรือ ไปข้างหน้า: การจราจรที่ผ่าน แต่ไม่ได้เชื่อมต่ออย่างเหมาะสม
  • นอกจากนี้ยังอาจปรากฏขึ้น POSTROUTING ซึ่งใช้ในการรักษาแพ็คเก็ตในลักษณะหนึ่งหลังจากถูกส่งไปแล้ว
  • การดำเนินการ: การดำเนินการโดยพื้นฐานแล้วเป็นการดำเนินการกับห่วงโซ่ การกระทำนี้สามารถ DROP ที่ทำลายการจราจรหรือ ยอมรับ. ที่ช่วยให้การเข้าชมดำเนินการดังกล่าว

กฎ IPTABLES จะถูกบันทึกและดำเนินการตามลำดับที่สร้างขึ้นและหากกฎลบกฎก่อนหน้ากฎสุดท้ายในลำดับจะถูกนำไปใช้เสมอ

นโยบายไฟร์วอลล์

โดยทั่วไปไฟร์วอลล์โดยธรรมชาติทำงานได้สองวิธี:

  1. อนุญาตการรับส่งข้อมูลทั้งหมดยกเว้นหรือ
  2. ไม่อนุญาตให้สัญจรไปมายกเว้น ...

หากต้องการใช้นโยบายให้ใช้ IPTABLES - P ACTION CHAIN

โดยที่สตริงแสดงถึงชนิดของการรับส่งข้อมูล (INPUT, OUTPUT, FORWARD, POSTROUTING ... ) และการดำเนินการคือ DROP หรือ ACCEPT

ลองดูตัวอย่าง

สกรีนช็อตจาก 2014-09-30 18:53:23 น

ที่นี่เราเห็นว่าในตอนแรกฉันสามารถ ping ได้แล้วฉันก็บอกกับ IPTABLES ว่าการรับส่งข้อมูล OUTPUT ทั้งหมดเป็นแบบ DROP หรือไม่ได้รับอนุญาต จากนั้นฉันก็บอกให้ IPTABLES ยอมรับ

หากเราจะสร้างไฟร์วอลล์ตั้งแต่เริ่มต้นเราจะต้องใช้กฎของ (ไม่อนุญาตให้มีการรับส่งข้อมูลใด ๆ ยกเว้น ... สำหรับสิ่งนี้เราจึงใช้กฎ

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
หากใช้นโยบายเหล่านี้นโยบายเหล่านี้จะไม่มีการเชื่อมต่อใด ๆ
.

ในการส่งคืนเราเขียนสิ่งเดียวกันและแทนที่ DROP ด้วย ACCEPT

ณ จุดนี้เนื่องจากการรับส่งข้อมูลทั้งหมดถูกปฏิเสธเราจึงเริ่มบอก IPTABLES ของเราว่ามีการรับส่งข้อมูลใดบ้าง

ไวยากรณ์คือ:

iptables -A cadena -s ip_orgigen -d ip_destino -p protocolo --dport puerto -j acción

ที่อยู่:

สตริง = INPUT, OUTPUT หรือ FORWARD

origin_ip = จุดเริ่มต้นของแพ็กเก็ตซึ่งอาจเป็น IP เดียวหรือเครือข่ายและในกรณีนี้เราต้องระบุมาสก์)

destination_ip = แพ็คเก็ตจะไปที่ใด นี่อาจเป็น IP เดียวหรือเครือข่ายและในกรณีนี้เราต้องระบุมาสก์)

โปรโตคอล = ระบุโปรโตคอลที่แพ็กเก็ตใช้ (icmp, tcp, udp ... )

พอร์ต = พอร์ตปลายทางของการจราจร

การกระทำ = DROP หรือ ACCEPT

ตัวอย่าง:

สกรีนช็อตจาก 2014-09-30 19:26:41 น

ใช้นโยบายที่ จำกัด ทั้งหมด

สกรีนช็อตจาก 2014-09-30 19:27:42 น

จากนั้นเราเพิ่มกฎเพื่อให้สามารถรับส่งข้อมูลผ่านพอร์ต 80 HTTP และ 443 HTTPS ด้วยโปรโตคอล TCP จากนั้นพอร์ต 53 จะใช้กับไคลเอ็นต์ DNS เพื่อแก้ไขโดเมนมิฉะนั้นคุณจะไม่นำทาง ใช้งานได้กับโปรโตคอล udp

เส้น:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

เป็นเพราะสิ่งต่อไปนี้: เมื่อคุณทำการร้องขอ HTTP เช่นคุณเชื่อมต่อกับพอร์ต 80 ของเซิร์ฟเวอร์ แต่เซิร์ฟเวอร์ที่จะส่งคืนข้อมูลจำเป็นต้องเชื่อมต่อกับคุณผ่านพอร์ตใดก็ได้ (โดยทั่วไปมากกว่า 1024)

เนื่องจากพอร์ตทั้งหมดของเราถูกปิดสิ่งนี้จะไม่สามารถทำได้เว้นแต่เราจะเปิดพอร์ตทั้งหมดที่สูงกว่า 1024 (คิดไม่ดี) สิ่งนี้บอกว่าการรับส่งข้อมูลขาเข้าทั้งหมดที่มาจากการเชื่อมต่อที่ฉันสร้างขึ้นเองเป็นที่ยอมรับ ฉันหมายถึงการเชื่อมต่อที่โดยหลักการแล้วฉันเริ่มต้น

เมื่อใส่ OUTPUT ในกฎสิ่งนี้จะใช้กับอุปกรณ์ที่เป็นปัญหาเท่านั้นหากเราใช้อุปกรณ์ของเราเป็นเราเตอร์เพื่ออนุญาตการเชื่อมต่อเหล่านี้เราจะต้องเปลี่ยน OUTPUT เป็น FORWARD เนื่องจากการรับส่งข้อมูลผ่านคอมพิวเตอร์ แต่ไม่ได้เริ่มต้นโดยมัน
กฎเหล่านี้ทั้งหมดจะถูกลบออกหลังจากรีสตาร์ทดังนั้นคุณต้องสร้างสคริปต์เพื่อให้เริ่มต้นตามค่าเริ่มต้น แต่เราจะเห็นสิ่งนี้ในครั้งต่อไป

ฉันหวังว่าคุณจะชอบข้อมูลนี้ ในตอนต่อไปฉันจะพูดถึง NAT, Proxy และสคริปต์สำหรับ Firewal


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

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

*

*

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

  1.   โรเจลิโอ ปินโต dijo

    นี่เป็นพื้นฐานที่ผู้ประกอบการจำนวนมากใช้ในการผลิตไฟร์วอลล์ของตัวเองซึ่งเป็นเหตุผลว่าทำไมจึงมีไฟร์วอลล์หลายยี่ห้อที่มีลินุกซ์ฝังอยู่ในตลาดบางอย่างดีและอื่น ๆ ไม่มาก

  2.   ฮีเบอร์ dijo

    บทความยอดเยี่ยม ฉันหวังว่าจะได้ส่วนที่สอง

  3.   มิลตัน dijo

    คำอธิบายที่ดีมากมันช่วยให้ฉันเข้าใจพร็อกซีของงานของฉัน ขอขอบคุณ

  4.   Faustod dijo

    สวัสดี Jlcmux

    ยอดเยี่ยมฉันชอบมากอีกฝ่ายจะว่างเมื่อไหร่

    ทักทายและขอบคุณสำหรับการแบ่งปัน

    1.    @Jlcmux dijo

      ขอบคุณสำหรับความคิดเห็น

      ฉันส่งส่วนอื่นไปเมื่อวานนี้ในระหว่างวันฉันคิดว่าพวกเขาจะเผยแพร่มัน

      อาศิรพจน์

  5.   อิสราเอล dijo

    เพื่อนบทความที่ดีมาก @ Jlcmux ฉันได้เรียนรู้กับเขาจริงๆเนื่องจากเขาชี้แจงข้อสงสัยบางอย่างที่ฉันมีมาระยะหนึ่งโดยที่คุณไม่รังเกียจที่จะแบ่งปันหนังสือที่มาของบทความซึ่งเป็นของSébastien BOBILLIER และตอนนี้ เพื่อดูภาค 2 salu2s

    1.    @Jlcmux dijo

      สวัสดีขอบคุณสำหรับความคิดเห็นของอิสราเอล

      ปรากฎว่าฉันมีหนังสือเล่มนี้ในรูปแบบทางกายภาพ แต่ฉันพบลิงก์นี้ใน Google หนังสือ http://books.google.com.co/books?id=zxASM3ii4GYC&pg=PA356&lpg=PA356&dq=S%C3%A9bastien+BOBILLIER+Linux+%E2%80%93+Administraci%C3%B3n+del+sistema+y+explotaci%C3%B3n+de+los+servicios+de+red#v=onepage&q=

      คิดว่าครบแล้ว

  6.   เอเรียล dijo

    บทความที่ดีมากฉันเพิ่มข้อความค้นหา: อะไรคือข้อได้เปรียบของการใช้ linux เป็นเราเตอร์หากมีเกี่ยวกับฮาร์ดแวร์ที่ทุ่มเทให้กับมัน? หรือเป็นเพียงการออกกำลังกาย? ฉันรู้ว่ามี distros เฉพาะ แต่ฉันไม่รู้ว่าพวกเขาต้องการกอบกู้พีซีเก่าหรือให้ความยืดหยุ่นในการกำหนดค่ามากขึ้น

    1.    @Jlcmux dijo

      ฉันคิดว่าข้อดีและข้อเสียขึ้นอยู่กับสถานการณ์ที่คุณจะดำเนินการนี้ ทำไมคุณถึงไม่ซื้อ UTM หรืออะไรทำนองนั้นสำหรับบ้านของคุณ? และสำหรับธุรกิจขนาดเล็กที่ไม่สามารถจ่ายได้เช่นกัน นอกจากนี้ยังเป็นการออกกำลังกายที่ดีเพราะช่วยให้คุณเข้าใจตรรกะทั้งหมดของสิ่งนี้และคุณสามารถกำหนดค่า FWall เฉพาะได้ดีขึ้น นอกจากนั้นอุปกรณ์เหล่านี้เกือบทั้งหมดยังมี Embedded Linux

      อาศิรพจน์

  7.   เอเรียล dijo

    สวัสดีคำถามคุณสามารถสร้างอินเทอร์เฟซ "เทียม" ใน linux สำหรับการกำหนดเส้นทางที่คล้ายกันระหว่างเครือข่ายได้หรือไม่ (สไตล์ตัวติดตามแพ็คเก็ต) เพื่อทำงานกับเครื่องเสมือน? เช่นถ้าฉันมี eth0 (เพราะฉันมีบัตรเดียวแน่นอน) ฉันสามารถสร้าง eth1 เพื่อสร้างเครือข่ายอื่นได้หรือไม่? ติวเตอร์เก่งมาก!

    1.    Elav dijo

      ใน Linux คุณสามารถสร้างอินเทอร์เฟซเสมือนได้แน่นอน หากคุณมี eth0 คุณสามารถมี eth0: 0, eth0: 1, eth0: 2 ... ฯลฯ

  8.   ชิโนโลโก dijo

    ดีมากขอบคุณสำหรับการแบ่งปัน