พารามิเตอร์ IPtables การทดสอบและการดีบัก ดูการกำหนดค่าปัจจุบัน

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

ดังนั้น iptables ก็คือ ไฟร์วอลล์มาตรฐานซึ่งรวมอยู่ในค่าเริ่มต้นในลีนุกซ์ส่วนใหญ่ (nftables กำลังได้รับการพัฒนาเพื่อแทนที่) อันที่จริงแล้ว iptables เป็นส่วนต่อประสานผู้ใช้สำหรับจัดการระบบ netfilter ซึ่งจะจัดการสแต็กเครือข่าย Linux ตามลำดับ iptables จะเปรียบเทียบแพ็กเก็ตขาเข้าแต่ละแพ็กเก็ตกับชุดกฎที่กำหนดไว้ แล้วตัดสินใจว่าจะทำอย่างไรกับแพ็กเก็ตนั้นต่อไป

การอภิปรายเกี่ยวกับวิธีการทำงานของ iptables บทความนี้เน้นที่ตัวอย่างเชิงปฏิบัติที่สาธิตวิธีสร้างชุดกฎพื้นฐานสำหรับเซิร์ฟเวอร์ Ubuntu 14.04

คำสั่ง iptables พื้นฐาน

ส่วนนี้ประกอบด้วยคำสั่งพื้นฐานที่คุณสามารถสร้างชุดกฎที่ซับซ้อนและจัดการอินเทอร์เฟซ iptables โดยรวมได้

จดจำ: คำสั่ง iptables ต้องรันด้วยสิทธิ์รูท ซึ่งหมายความว่าคุณต้องดำเนินการอย่างใดอย่างหนึ่งต่อไปนี้:

  • เข้าสู่ระบบในฐานะผู้ใช้รูท
  • ใช้ su หรือ sudo -i เพื่อขยายรูตเชลล์
  • เริ่มคำสั่งทั้งหมดด้วย sudo (วิธีที่แนะนำใน Ubuntu)

ใน คู่มือเล่มนี้ใช้ตัวเลือกสุดท้าย

ดังนั้นก่อนอื่นคุณต้องดูรายการปัจจุบันก่อน กฎ iptables- เมื่อต้องการทำเช่นนี้ ให้ใช้แฟล็ก -L:

sudo iptables -L
อินพุตเชน (ยอมรับนโยบาย)


เป้าหมาย prot เลือกปลายทางต้นทาง
เอาท์พุทเชน (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง

ดังที่คุณเห็น รายการประกอบด้วยเครือข่ายเริ่มต้นสามรายการ (INPUT, OUTPUT และ FORWARD) ซึ่งแต่ละเครือข่ายมีการตั้งค่านโยบายเริ่มต้น (ปัจจุบันยอมรับ) คุณยังสามารถดูชื่อคอลัมน์ได้ แต่รายการนี้ไม่รวมกฎต่างๆ เนื่องจาก Ubuntu ไม่มีชุดกฎเริ่มต้นมาให้

เมื่อใช้แฟล็ก -S รายการนี้สามารถดูได้ในรูปแบบอื่นที่สะท้อนถึงคำสั่งที่จำเป็นในการเปิดใช้งานกฎและนโยบาย:

sudo iptables -S
-P ยอมรับอินพุต
-P ยอมรับไปข้างหน้า
-P เอาท์พุทยอมรับ

หากต้องการจำลองการกำหนดค่า คุณเพียงพิมพ์ sudo iptables ที่จุดเริ่มต้นของแต่ละบรรทัดผลลัพธ์ (ขึ้นอยู่กับการกำหนดค่าของคุณ ขั้นตอนนี้อาจซับซ้อนกว่าเล็กน้อยเมื่อเชื่อมต่อจากระยะไกล หากยังไม่ได้ตั้งค่ากฎที่อนุญาตการเชื่อมต่อปัจจุบัน คุณไม่ควรตั้งค่านโยบาย DROP)

หากต้องการรีเซ็ตกฎปัจจุบัน (ถ้ามี) ให้พิมพ์:

sudo iptables -F

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

ก่อนที่จะรีเซ็ตกฎสำหรับการเชื่อมต่อระยะไกล คุณต้องตรวจสอบให้แน่ใจว่าได้ตั้งค่านโยบาย ACCEPT ไว้ในห่วงโซ่ INPUT และ OUTPUT ทำเช่นนี้:

sudo iptables -P ยอมรับอินพุต
sudo iptables -P ยอมรับเอาต์พุต
sudo iptables -F

เมื่อคุณสร้างกฎที่อนุญาตการเชื่อมต่อระยะไกลแล้ว คุณสามารถตั้งค่านโยบาย DROP ได้ เรามาเริ่มสร้างกฎกันดีกว่า

การสร้างกฎ iptables

ตามที่กล่าวไว้ข้างต้น บทช่วยสอนนี้มุ่งเน้นไปที่การทำงานกับ INPUT chain เนื่องจากมีหน้าที่รับผิดชอบ การจราจรขาเข้า- ขั้นแรก เราต้องพิจารณากฎที่กล่าวไปแล้ว - กฎที่อนุญาตการเชื่อมต่อ SSH ในปัจจุบัน

ดูเหมือนว่านี้:

sudo iptables -A INPUT -m conntrack --ctstate ก่อตั้งขึ้นที่เกี่ยวข้อง -j ยอมรับ

แน่นอนว่ามันอาจดูซับซ้อนอย่างไม่น่าเชื่อในตอนแรก เพื่อทำความเข้าใจกฎนี้ ให้ทำความคุ้นเคยกับส่วนประกอบต่างๆ:

  • -อินพุต: ธง -A เพิ่ม ( ผนวก) กฎจนถึงจุดสิ้นสุดของห่วงโซ่ คำสั่งส่วนนี้บอกให้ iptables เพิ่มกฎที่ส่วนท้ายของห่วงโซ่ INPUT
  • -m คอนแทรค: นอกเหนือจากชุดฟังก์ชันพื้นฐานแล้ว iptables ยังมีชุดส่วนขยายหรือโมดูลที่รับผิดชอบความสามารถเพิ่มเติมของไฟร์วอลล์ คำสั่งในส่วนนี้บ่งชี้ว่าผู้ใช้จำเป็นต้องเข้าถึงฟังก์ชันของโมดูล conntrack โมดูลนี้อนุญาตให้คุณใช้คำสั่งที่ตัดสินใจว่าจะทำอย่างไรกับแพ็กเก็ตตามความสัมพันธ์กับการเชื่อมต่อก่อนหน้านี้
  • --ctstate: หนึ่งในคำสั่งที่ใช้งานได้เมื่อเรียกใช้โมดูล conntrack คำสั่งนี้ช่วยให้คุณติดตามความสัมพันธ์ของแพ็คเกจกับแพ็คเกจอื่นที่เคยดูไปแล้ว ตั้งค่าเป็น ESTABLISHED (ซึ่งยอมรับแพ็กเก็ตที่เป็นส่วนหนึ่งของการเชื่อมต่อที่มีอยู่) และ RELATED (ยอมรับแพ็กเก็ตที่เกี่ยวข้องกับการเชื่อมต่อที่สร้างไว้แล้ว) นี่เป็นส่วนหนึ่งของกฎที่รับผิดชอบเซสชัน SSH ปัจจุบัน
  • เจยอมรับ: ระบุการดำเนินการ (เป้าหมาย) ที่จะดำเนินการบนแพ็กเก็ตที่ตรงกับกฎ ในกรณีนี้ iptables จะยอมรับแพ็กเก็ตที่ตรงตามเกณฑ์ก่อนหน้า

ต้องวางกฎนี้ไว้ที่จุดเริ่มต้นเพื่อให้แน่ใจว่าการเชื่อมต่อที่มีอยู่ตรงกับกฎ ได้รับการยอมรับ และออกจากห่วงโซ่โดยไม่บรรลุกฎ DROP

โดยการขอรายการกฎ คุณจะเห็นการเปลี่ยนแปลง:

sudo iptables -L
อินพุตเชน (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง
ยอมรับทั้งหมด - ทุกที่ ctstate ที่เกี่ยวข้องและก่อตั้งขึ้น
ห่วงโซ่ไปข้างหน้า (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง
เอาท์พุทเชน (ยอมรับนโยบาย)
เป้าหมาย prot เลือกปลายทางต้นทาง

เมื่อคุณคุ้นเคยกับไวยากรณ์พื้นฐานแล้ว ให้สร้างกฎเพิ่มเติมสองสามข้อที่ยอมรับการเชื่อมต่อ

การยอมรับการเชื่อมต่อที่สำคัญอื่นๆ

ก่อนหน้านี้ iptables ได้รับคำสั่งไม่ให้รีเซ็ตทุกอย่าง การเชื่อมต่อปัจจุบันรวมทั้งยอมรับการเชื่อมต่อทั้งหมดที่เกี่ยวข้องกับพวกเขา ตอนนี้คุณต้องสร้างกฎที่ยอมรับการเชื่อมต่อที่ไม่ตรงตามเกณฑ์ข้างต้น

เปิดสองพอร์ตทิ้งไว้: พอร์ตเอสเอสเอช(คู่มือนี้ใช้พอร์ตเริ่มต้น 22; ถ้า มูลค่าที่กำหนดมีการเปลี่ยนแปลงแล้ว อย่าลืมใส่ค่าใหม่) ยิ่งกว่านั้นให้เราสันนิษฐานว่า คอมพิวเตอร์เครื่องนี้เว็บเซิร์ฟเวอร์ทำงานบนพอร์ต 80 ตามค่าเริ่มต้น (อย่าเพิ่มกฎนี้หากไม่เป็นเช่นนั้น)

ดังนั้น บรรทัดที่คุณต้องใช้เพื่อสร้างกฎดังกล่าวจะมีลักษณะดังนี้:

sudo iptables -A INPUT -p tcp --dport 22 -j ยอมรับ
sudo iptables -A INPUT -p tcp --dport 80 -j ยอมรับ

อย่างที่คุณเห็น พวกมันคล้ายกับกฎข้อแรกมาก บางทีพวกมันอาจมีโครงสร้างที่เรียบง่ายกว่านั้นอีก ตัวเลือกใหม่:

  • พีทีพีพี: ตัวเลือกนี้อนุญาตให้แพ็กเก็ตที่ใช้ TCP (โปรโตคอลแบบสตรีมที่ใช้โดยแอปพลิเคชันส่วนใหญ่เนื่องจากมีการสื่อสารที่เชื่อถือได้) เพื่อส่งผ่าน
  • พอร์ต: ตัวเลือกนี้ใช้งานได้เมื่อใช้แฟล็ก -p tcp โดยจะระบุพอร์ตขาเข้าที่พอร์ตของแพ็กเก็ตควรตรงกัน กฎข้อแรกข้ามไป แพ็กเก็ต TCPตรงไปที่พอร์ต 22 และกฎข้อที่สองยอมรับการรับส่งข้อมูล TCP ไปที่พอร์ต 80

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

นั่นคือหากบริการ 1 จำเป็นต้องสร้างการสื่อสารกับบริการ 2 ที่รับฟังการเชื่อมต่อบนพอร์ต 4555 บริการ 1 จะส่งแพ็กเก็ตไปยังพอร์ต 4555 โดยใช้อุปกรณ์ย้อนกลับ พฤติกรรมนี้จะต้องได้รับอนุญาตเพราะมันเป็น เงื่อนไขที่สำคัญการทำงานที่ถูกต้องของหลาย ๆ โปรแกรม

เมื่อต้องการทำเช่นนี้ เพิ่มกฎต่อไปนี้:

sudo iptables -I อินพุต 1 -i lo -j ยอมรับ

มันแตกต่างจากกฎก่อนหน้านี้เล็กน้อย ลองดูให้ละเอียดยิ่งขึ้น:

  • ฉันอินพุต 1: แฟล็ก -I บอกให้ iptables แทรกกฎ แฟล็กนี้แตกต่างจากแฟล็ก -A (ซึ่งเพียงเพิ่มกฎที่ส่วนท้ายของเชน) โดยระบุห่วงโซ่ที่ควรเพิ่มกฎและตำแหน่งของกฎในนั้น ในกรณีนี้ จำเป็นต้องแทรกกฎที่จุดเริ่มต้นของห่วงโซ่ INPUT ซึ่งส่งผลให้กฎทั้งหมดจะย้ายหนึ่งตำแหน่ง ควรวางกฎนี้ไว้ที่จุดเริ่มต้นของห่วงโซ่ เนื่องจากเป็นหนึ่งในกฎหลักและไม่ควรขึ้นอยู่กับกฎอื่นๆ
  • ฉันแท้จริง: องค์ประกอบกฎนี้อนุญาตแพ็กเก็ตที่ใช้อินเทอร์เฟซ lo (“lo” เป็นอีกชื่อหนึ่งสำหรับอุปกรณ์ลูปแบ็ค) ซึ่งหมายความว่าแพ็คเกจใดๆ ที่ใช้ อินเทอร์เฟซนี้จะต้องได้รับการยอมรับ

หากต้องการดูกฎปัจจุบัน ให้ใช้แฟล็ก -S เนื่องจากแฟล็ก -L จะไม่แสดงข้อมูลบางอย่าง (เช่น อินเทอร์เฟซที่เชื่อมโยงกับกฎ ซึ่งมีความสำคัญมากในกรณีของกฎข้อสุดท้าย):

sudo iptables -S
-P ยอมรับอินพุต
-P ยอมรับไปข้างหน้า
-P เอาท์พุทยอมรับ
-A อินพุต -i lo -j ยอมรับ
-A INPUT -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้งแล้ว -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 22 -j ยอมรับ
-A อินพุต -p tcp -m tcp --dport 80 -j ยอมรับ

การสร้างกฎ DROP

ในขณะนี้มีการสร้างกฎ 4 ข้อที่ยอมรับแพ็กเก็ตตามเกณฑ์ที่กำหนด อย่างไรก็ตาม ขณะนี้เซิร์ฟเวอร์ไม่ได้บล็อกแพ็กเก็ตอื่นใดอยู่แล้ว

หากแพ็กเก็ตผ่านห่วงโซ่อินพุตและไม่ตรงกับกฎใด ๆ ในสี่กฎ นโยบายเริ่มต้น (ACCEPT) จะถูกดำเนินการ ซึ่งจะยอมรับแพ็กเก็ตไม่ทางใดก็ทางหนึ่ง ตอนนี้มันจำเป็นต้องเปลี่ยน

ซึ่งสามารถทำได้สองวิธีซึ่งมีความแตกต่างกันค่อนข้างมาก

วิธีแรกคือการแก้ไขนโยบายเริ่มต้นของห่วงโซ่อินพุต ให้ทำประเภทนี้:

sudo iptables -P อินพุตลดลง

นโยบายนี้จะตรวจสอบและวางแพ็กเก็ตทั้งหมดที่ไม่ตรงกับกฎลูกโซ่ INPUT ใดๆ ผลที่ตามมาประการหนึ่งของการออกแบบประเภทนี้คือมันจะทิ้งแพ็กเก็ตแม้ว่าจะรีเซ็ตกฎแล้วก็ตาม

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

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

อีกวิธีหนึ่งคือการเพิ่มกฎที่ส่วนท้ายของห่วงโซ่ที่จะละทิ้งแพ็กเก็ตที่ไม่ตรงกันทั้งหมด ในขณะที่ยังคงนโยบายการยอมรับไว้

หากต้องการส่งคืนนโยบาย ACCEPT ไปยัง INPUT chain ให้พิมพ์:

sudo iptables -P ยอมรับอินพุต

ตอนนี้คุณสามารถเพิ่มกฎที่ส่วนท้ายของห่วงโซ่ที่จะปล่อยแพ็กเก็ตที่ไม่ตรงกันทั้งหมด:

sudo iptables -A อินพุต -j DROP

ภายใต้สภาวะการทำงานปกติ ผลลัพธ์จะเหมือนกับการใช้นโยบาย DROP ทุกประการ กฎนี้จะทิ้งทุกแพ็กเก็ตที่มาถึง เพื่อป้องกันไม่ให้แพ็กเก็ตที่ไม่ตรงกับกฎเข้าถึงเซิร์ฟเวอร์

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

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

sudo iptables -D อินพุต -j DROP
sudo iptables -A อินพุต new_rule
sudo iptables -A อินพุต -j DROP

หรือโดยการแทรกกฎใหม่ที่ส่วนท้ายของห่วงโซ่ (แต่ก่อนกฎการรีเซ็ต) โดยระบุหมายเลขบรรทัด หากต้องการป้อนกฎในบรรทัด 4 ให้พิมพ์:

sudo iptables -I อินพุต 4 new_rule

หากมีกฎหลายข้อ การคำนวณหมายเลขบรรทัดด้วยตนเองค่อนข้างเป็นปัญหา ในกรณีนี้ iptables สามารถกำหนดหมายเลขบรรทัดได้:

sudo iptables -L --line-numbers
อินพุตเชน (นโยบาย DROP)

1 ยอมรับทั้งหมด -- ทุกที่ ทุกเวลา
2 ยอมรับทั้งหมด -- ทุกที่ ctstate ที่เกี่ยวข้อง ก่อตั้งขึ้น
3 ยอมรับ tcp -- ทุกที่ tcp dpt:ssh
4 ยอมรับ tcp -- ทุกที่ tcp dpt:http
ห่วงโซ่ไปข้างหน้า (ยอมรับนโยบาย)
num เป้าหมาย prot เลือกปลายทางต้นทาง
เอาท์พุทเชน (ยอมรับนโยบาย)
num เป้าหมาย prot เลือกปลายทางต้นทาง

วิธีนี้ช่วยให้คุณตรวจสอบได้ว่ามีการป้อนกฎในบรรทัดที่ถูกต้อง

กำลังบันทึกการตั้งค่า iptables

ตามค่าเริ่มต้น กฎที่ยังไม่ได้บันทึกทั้งหมดจะยังคงมีผลจนกว่าเซิร์ฟเวอร์จะรีบูตครั้งถัดไป ทันทีหลังจากรีบูต กฎที่ไม่ได้บันทึกไว้จะสูญหายไป

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

ซึ่งสามารถทำได้หลายวิธี วิธีที่ง่ายที่สุดคือการใช้แพ็คเกจ iptables-persistent ซึ่งสามารถดาวน์โหลดได้จากที่เก็บเริ่มต้นของ Ubuntu:

อัปเดต sudo apt-get
sudo apt-get ติดตั้ง iptables ถาวร

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

เมื่อการติดตั้งเสร็จสมบูรณ์ บริการใหม่ที่เรียกว่า iptables-persistent จะปรากฏขึ้น ซึ่งจะเริ่มเมื่อเซิร์ฟเวอร์รีบูตและดำเนินการกฎที่ติดตั้งต่อ

ผลลัพธ์

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

แท็ก: ,

ในบทความนี้เราจะบอกวิธีกำหนดค่า iptables บน Linux คุณจะได้เรียนรู้ว่ามันคืออะไร และทำไมคุณต้องกำหนดค่าฟังก์ชันนี้ การตั้งค่า iptables บน Linuxค่อนข้างง่าย

การตั้งค่า iptables บน Linux: iptables คืออะไร?

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

Iptables มักจะติดตั้งไว้ล่วงหน้าบน Linux ทุกรุ่น หากต้องการอัปเดต/ติดตั้ง เพียงดาวน์โหลดแพ็คเกจ iptables:

sudo apt-get ติดตั้ง iptables

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

การตั้งค่า iptables บน Linux สำหรับหุ่นจำลอง

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

การตั้งค่า iptables บน Linux ดังที่เราได้กล่าวไว้ข้างต้นนั้นค่อนข้างง่าย แต่ก่อนที่คุณจะเริ่มตั้งค่า คุณต้องทำความคุ้นเคยกับแนวคิดทั่วไปของตัวเลือกนี้เสียก่อน

ประเภทของวงจร

Iptables ใช้วงจรที่แตกต่างกันสามวงจร: อินพุต ส่งต่อ และเอาต์พุต

ป้อนข้อมูล- ห่วงโซ่นี้ใช้เพื่อควบคุมพฤติกรรมของการเชื่อมต่อขาเข้า ตัวอย่างเช่น หากผู้ใช้พยายาม SSH ไปยังคอมพิวเตอร์/เซิร์ฟเวอร์ของคุณ iptables จะพยายามจับคู่ที่อยู่ IP และพอร์ตกับกฎในห่วงโซ่อินพุต

ซึ่งไปข้างหน้า- สายโซ่นี้ใช้สำหรับการเชื่อมต่อขาเข้าที่ไม่ได้จัดส่งภายในเครื่องจริง ลองนึกถึงเราเตอร์ - ข้อมูลจะถูกส่งไปยังเราเตอร์เสมอ แต่ไม่ค่อยถูกกำหนดไว้สำหรับเราเตอร์เอง ข้อมูลจะถูกเปลี่ยนเส้นทางไปยังหน้า Landing Page เว้นแต่ว่าคุณกำลังกำหนดเส้นทาง, NAT หรือสิ่งอื่นใดบนระบบของคุณที่ต้องมีการส่งต่อ คุณจะไม่ใช้ห่วงโซ่นี้ด้วยซ้ำ

มีอันหนึ่ง วิธีที่เชื่อถือได้ตรวจสอบว่าระบบของคุณใช้หรือต้องการระบบส่งต่อหรือไม่

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

เอาท์พุต - เชนนี้ใช้สำหรับการเชื่อมต่อขาออก ตัวอย่างเช่น หากคุณพยายาม ping ไปยังไซต์ linuxinsider iptables จะตรวจสอบห่วงโซ่เอาต์พุตเพื่อดูว่ากฎใดบ้างที่ใช้กับ ping และ linuxinsider ก่อนที่จะตัดสินใจว่าจะอนุญาตหรือปฏิเสธความพยายามในการเชื่อมต่อ

คำเตือน

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

พฤติกรรมนโยบายเริ่มต้น

ก่อนที่คุณจะเริ่มกำหนดค่ากฎเฉพาะ คุณต้องตัดสินใจว่าคุณต้องการให้พฤติกรรมเริ่มต้นของเชนทั้งสามนี้เป็นอย่างไร กล่าวอีกนัยหนึ่ง คุณต้องการให้ iptables ทำอย่างไรหากการเชื่อมต่อไม่ตรงกับกฎที่มีอยู่

หากต้องการดูว่ากลุ่มนโยบายใดได้รับการกำหนดค่าให้จัดการการรับส่งข้อมูลที่ไม่ตรงกัน ให้รันคำสั่ง iptables -L

อย่างที่คุณเห็น เรายังใช้คำสั่ง grep เพื่อให้ได้ผลลัพธ์ที่สะอาดยิ่งขึ้น ในภาพหน้าจอนี้ เครือข่ายของเราได้รับการกำหนดค่าให้ยอมรับการรับส่งข้อมูล

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

iptables -- ยอมรับอินพุตนโยบาย
iptables --นโยบายเอาท์พุทยอมรับ
iptables - ยอมรับนโยบายไปข้างหน้า

ตามค่าเริ่มต้น ในกฎการยอมรับ คุณสามารถใช้ iptables เพื่อปฏิเสธที่อยู่ IP หรือหมายเลขพอร์ตเฉพาะ ในขณะที่ยังคงยอมรับการเชื่อมต่ออื่นๆ ทั้งหมดต่อไป เราจะไปถึงคำสั่งเหล่านั้นในอีกสักครู่

หากคุณต้องการปฏิเสธการเชื่อมต่อทั้งหมด และระบุการเชื่อมต่อที่คุณต้องการอนุญาตให้เชื่อมต่อด้วยตนเอง คุณต้องเปลี่ยนนโยบายเริ่มต้นของวงจรของคุณที่จะปฏิเสธ สิ่งนี้อาจมีประโยชน์สำหรับเซิร์ฟเวอร์ที่มีข้อมูลที่ละเอียดอ่อนเท่านั้น และจะเชื่อมต่อกับที่อยู่ IP เดียวกันเท่านั้น

iptables -- นโยบาย INPUT DROP
iptables --นโยบายเอาต์พุตลดลง
iptables --นโยบายส่งต่อ DROP

การตอบสนองการเชื่อมต่อ

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

ยอมรับ- อนุญาตการเชื่อมต่อ

หยด- ยกเลิกการเชื่อมต่อ ทำราวกับว่ามันไม่เคยเกิดขึ้น วิธีนี้จะดีที่สุดหากคุณไม่ต้องการให้แหล่งที่มาทราบว่าระบบของคุณมีอยู่

ปฏิเสธ— ปฏิเสธการเชื่อมต่อ แต่ส่งข้อความแสดงข้อผิดพลาด วิธีนี้จะดีที่สุดถ้าคุณไม่ต้องการให้แหล่งข้อมูลเฉพาะเชื่อมต่อกับระบบของคุณ แต่คุณต้องการให้พวกเขารู้ว่าไฟร์วอลล์ของคุณบล็อกพวกเขาไว้

วิธีที่ดีที่สุดในการแสดงความแตกต่างระหว่างกฎทั้งสามข้อนี้คือการแสดงลักษณะที่ปรากฏเมื่อพีซีพยายามส่ง Ping เครื่อง Linux ด้วยการกำหนดค่า iptables สำหรับแต่ละตัวเลือกเหล่านี้

การอนุญาตการเชื่อมต่อ:

การลบการเชื่อมต่อ:

การปฏิเสธการเชื่อมต่อ:

เน็ตมาสก์หรือลักษณะเฉพาะเพื่อระบุช่วงของที่อยู่ IP

การตั้งค่า iptables บน Linux: วิธีการเชื่อมต่อ

หากเราพูดถึงหัวข้อ "การตั้งค่า iptables บน Linux" เราต้องพูดถึงวิธีการเชื่อมต่อ

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

บันทึก. ในตัวอย่างเหล่านี้ เราจะใช้ iptables -A เพื่อเพิ่มกฎให้กับเชนที่มีอยู่ Iptables เริ่มต้นที่ด้านบนสุดของรายการและผ่านแต่ละกฎจนกว่าจะพบกฎที่ตรงกัน หากคุณต้องการแทรกกฎไว้เหนือกฎอื่น คุณสามารถใช้ iptables -I เพื่อระบุหมายเลขที่ควรอยู่ในรายการได้

การเชื่อมต่อจากที่อยู่ IP เดียวกัน

ตัวอย่างนี้แสดงวิธีการบล็อกการเชื่อมต่อทั้งหมดจากที่อยู่ IP 10.10.10.10..

iptables -A อินพุต -s 10.10.10.10 -j DROP

การเชื่อมต่อจากช่วงของที่อยู่ IP

ตัวอย่างนี้แสดงวิธีการบล็อกที่อยู่ IP ทั้งหมดในช่วงเครือข่าย 10.10.10.0/24 คุณสามารถใช้เน็ตมาสก์หรือเครื่องหมายทับมาตรฐานเพื่อระบุช่วงของที่อยู่ IP

iptables -A อินพุต -s 10.10.10.0/24 -j DROP

iptables -A อินพุต -s 10.10.10.0/255.255.255.0 -j DROP

การเชื่อมต่อกับพอร์ตเฉพาะ

ตัวอย่างนี้แสดงวิธีบล็อกการเชื่อมต่อ SSH ตั้งแต่ 10.10.10.10

iptables -A อินพุต -p tcp --dport ssh -s 10.10.10.10 -j DROP

คุณสามารถแทนที่ "ssh" ด้วยโปรโตคอลหรือหมายเลขพอร์ตใดก็ได้ ส่วน -p tcp ของโค้ดจะบอก iptable ว่าการเชื่อมต่อใช้โปรโตคอลใด หากคุณกำลังบล็อกโปรโตคอลที่ใช้ UDP แทนที่จะเป็น TCP คุณจะต้องใช้ -p udp แทน

ตัวอย่างนี้แสดงวิธีบล็อกการเชื่อมต่อ SSH จากที่อยู่ IP ใด ๆ

iptables -A อินพุต -p tcp --dport ssh -j DROP

สถานะการเชื่อมต่อ

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

นี่คือที่มาของสถานะการเชื่อมต่อ ซึ่งให้ทางเลือกแก่คุณในการอนุญาตการสื่อสารแบบสองทาง แต่อนุญาตให้ทำการเชื่อมต่อแบบทางเดียวเท่านั้น ดูตัวอย่างนี้ที่อนุญาตการเชื่อมต่อ SSH จาก 10.10.10.10 แต่ไม่อนุญาตให้เชื่อมต่อ SSH ถึง 10.10.10.10 อย่างไรก็ตาม ระบบได้รับอนุญาตให้ส่งข้อมูลกลับผ่าน SSH ในขณะที่เซสชั่นถูกสร้างขึ้นแล้ว ทำให้สามารถสื่อสาร SSH ระหว่างทั้งสองโฮสต์ได้

iptables -A อินพุต -p tcp --dport ssh -s 10.10.10.10 -m รัฐ -- รัฐใหม่ ก่อตั้งแล้ว -j ยอมรับ

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state - สถานะที่จัดตั้งขึ้น -j ยอมรับ

กำลังบันทึกการเปลี่ยนแปลง

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

sudo /sbin/iptables-save.sudo

หมวกแดง/CentOS:

/sbin/service iptables บันทึก

/etc/init.d/iptables บันทึก

คำสั่งอื่นๆ

รายการกฎ iptables ที่กำหนดค่าไว้ในปัจจุบัน:

การเพิ่มตัวเลือก -v จะให้ข้อมูลแพ็กเก็ตและไบต์แก่คุณ ส่วนการเพิ่ม -n จะประกอบด้วยค่าตัวเลขทั้งหมด กล่าวอีกนัยหนึ่ง ชื่อโฮสต์ โปรโตคอล และเครือข่ายจะแสดงเป็นตัวเลข

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

การแปลจากแหล่งข้อมูลภาษาอังกฤษที่ดีเยี่ยม ฮาวทูกีค.

หากคุณยังคงมีคำถามในหัวข้อ “การตั้งค่า iptables บน Linux สำหรับหุ่นจำลอง” คุณสามารถเขียนคำถามเหล่านั้นลงในแบบฟอร์มความคิดเห็นบนเว็บไซต์ของเรา

หากคุณพบข้อผิดพลาด โปรดเน้นข้อความและคลิก Ctrl+ป้อน.

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

ประวัติความเป็นมาของการทรงสร้าง

ถึง IPTables ใน ระบบลินุกซ์ใช้ไฟร์วอลล์ IPFW ยืมมาจาก BSD จากนั้นด้วยเคอร์เนล Linux เวอร์ชัน 2.4 มันเริ่มมาพร้อมกับไฟร์วอลล์ Netfilter และยูทิลิตี้ IPTables สำหรับจัดการมัน ในวิธีการทำงานทุกด้านได้รับการเก็บรักษาไว้และขยายขอบเขตการใช้งานเล็กน้อย

โครงสร้างและการออกแบบ IPTables

กำลังเข้า ไฟร์วอลล์พัสดุต้องผ่านการตรวจสอบหลายครั้ง มันอาจจะเป็นเช่นนั้น เช็คซัมหรือการวิเคราะห์ระดับเคอร์เนลอื่นๆ จากนั้นก็ถึงเวลาที่ต้องผ่านห่วงโซ่ PREROUTING ถัดไปจะถูกตรวจสอบตามการเปลี่ยนเส้นทางไปยังลูกโซ่ถัดไป หากแพ็กเก็ตไม่มีที่อยู่เช่นใน TCP แพ็กเก็ตจะถูกส่งไปยังลูกโซ่ FORWARD ในกรณีที่มีที่อยู่เฉพาะ ห่วงโซ่ INPUT จะติดตาม และจากนั้นไปยัง daemons หรือบริการตามที่ตั้งใจไว้ การตอบสนองจะต้องผ่านหลายเชนด้วย เช่น OUTPUT ลิงค์สุดท้ายในกระบวนการนี้คือห่วงโซ่ POSTROUTING

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

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

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

โซ่ที่ตั้งไว้ล่วงหน้ามีอยู่ในประเภทต่อไปนี้:

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

นอกจากเชนในตัวแล้ว ผู้ใช้สามารถสร้างหรือลบเชนของตนเองได้

ดูและจัดการกฎ IPTables

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

รูปแบบคำสั่งมีลักษณะดังนี้: คำสั่ง iptables [-t ชื่อของตารางที่กำลังประมวลผล] เรียกว่า [เกณฑ์] [ดำเนินการ]

สิ่งใดก็ตามที่มีอยู่ในสามารถละเว้นได้ หากนี่คือพารามิเตอร์ที่ระบุตาราง ตัวกรองจะถูกนำมาใช้ หากต้องการใช้ชื่อเฉพาะ คุณต้องเพิ่มสวิตช์ -t คำสั่งที่เรียกช่วยให้คุณสามารถทริกเกอร์การดำเนินการที่จำเป็น เช่น การเพิ่มกฎ IPTables หรือการลบออก “เกณฑ์” ระบุพารามิเตอร์ที่จะใช้ในการเลือก และใน "การกระทำ" มีการกระทำที่ต้องดำเนินการหากตรงตามเงื่อนไข

คำสั่งสำหรับการสร้างและการดูกฎ IPTables

  • ผนวก(-A)เมื่อใช้คำสั่ง คุณจะต้องระบุสายโซ่และตารางที่คุณต้องการเพิ่มกฎที่ต้องการ คุณค่าของทีมคือทำสิ่งนี้ในตอนท้ายของรายการ
  • ลบ (-D)ตามชื่อที่แนะนำ มันจะลบกฎ ในฐานะพารามิเตอร์ คุณสามารถระบุทั้งชื่อเต็มและหมายเลขที่กำหนดได้
  • เปลี่ยนชื่อโซ่ (-E)เปลี่ยนชื่อโซ่ คำสั่งระบุชื่อเก่า ตามด้วยชื่อใหม่
  • ฟลัช (-F)การล้างกฎทั้งหมดของตารางอย่างแน่นอน
  • แทรก(-I)คำสั่งนี้จะแทรกกฎที่จำเป็นลงในตำแหน่งที่ระบุด้วยหมายเลข
  • รายการ(-ล)ดูกฎ Iptables หากไม่มีการระบุตาราง ระบบจะใช้ตัวกรองเริ่มต้น
  • นโยบาย (-P)มีการใช้นโยบายเริ่มต้นสำหรับห่วงโซ่ที่ระบุ
  • แทนที่ (-R)เปลี่ยนกฎภายใต้ หมายเลขที่ระบุเพื่อสิ่งที่จำเป็น
  • ลบเชน (-X)คำสั่งนี้จะลบเชนที่สร้างขึ้นทั้งหมด เฉพาะที่ติดตั้งไว้ล่วงหน้าเท่านั้นที่จะยังคงอยู่
  • ศูนย์ (-Z)รีเซ็ตตัวนับของข้อมูลที่ส่งในห่วงโซ่ที่ระบุ

เล็กน้อยเกี่ยวกับพารามิเตอร์การเลือกแพ็คเก็ต

พวกเขาสามารถแบ่งออกเป็นสามประเภท:

  • เกณฑ์ทั่วไป- สามารถระบุกฎเกณฑ์ใดก็ได้ ไม่จำเป็นต้องเชื่อมต่อส่วนขยายและโมดูลพิเศษ และไม่ได้ขึ้นอยู่กับโปรโตคอลที่จะใช้
  • ไม่ใช่เกณฑ์ทั่วไปจะพร้อมใช้งานเมื่อใช้เกณฑ์ทั่วไป
  • ชัดเจน.หากต้องการใช้ประเภทนี้ คุณต้องเชื่อมต่อปลั๊กอินพิเศษสำหรับ netfilter นอกจากนี้ คุณต้องใช้สวิตช์ -m ในคำสั่ง

เราควรพูดถึงพารามิเตอร์ที่พบบ่อยซึ่งใช้ในการวิเคราะห์แพ็กเก็ต:

  • โปรโตคอล (-p)บ่งชี้ถึงโปรโตคอล
  • แหล่งที่มา (-s)พารามิเตอร์นี้กำหนดที่อยู่ IP ของต้นทางที่แพ็กเก็ตมา สามารถระบุได้หลายวิธี โฮสต์ ที่อยู่ หรือเครือข่ายย่อยทั้งหมด
  • จุดหมายปลายทาง (-ง)ที่อยู่ปลายทางแพ็คเกจ เช่นเดียวกับก่อนหน้านี้สามารถอธิบายได้หลายวิธี
  • ในอินเทอร์เฟซ (-i)ระบุอินเทอร์เฟซขาเข้าของแพ็กเกจ ส่วนใหญ่ใช้สำหรับ NAT หรือบนระบบที่มีหลายอินเทอร์เฟซ
  • อินเทอร์เฟซภายนอก (-o)อินเทอร์เฟซขาออก

ตัวอย่างบางส่วน

หากต้องการดูกฎของ IPTables nat? คุณต้องใช้คำสั่ง - “iptables -L -t nat” ค้นหาสถานะทั่วไปของไฟร์วอลล์ - “iptables -L -n -v” นอกจากนี้ คำสั่งนี้อนุญาตให้คุณดูกฎ IPTables ที่มีอยู่ทั่วทั้งระบบ แทรกกฎในตำแหน่งใดตำแหน่งหนึ่งของตาราง เช่น ระหว่างบรรทัดแรกและบรรทัดที่สอง - “iptables -I INPUT 2 -s 202.54.1.2 -j DROP” จากนั้นดูว่ามีการเพิ่มหรือไม่ - “iptables -L INPUT -n --line-numbers”

หากต้องการบล็อกที่อยู่เฉพาะ เช่น 12.12.12.12 - “iptables -A INPUT -s 12.12.12.12 -j DROP”

ความช่วยเหลือสำหรับ iptables - "man iptables" หากคุณต้องการข้อมูลเกี่ยวกับคำสั่งเฉพาะ ให้ใช้ “iptables -j DROP -h”

สรุปแล้ว

ใช้ คำสั่ง IPTableจะต้องทำด้วยความระมัดระวังเช่น การตั้งค่าไม่ถูกต้อง(โดยไม่รู้ตัว) สามารถนำไปสู่ความล้มเหลวของเครือข่ายหรือความล้มเหลวโดยสิ้นเชิงได้ ดังนั้นจึงควรศึกษาคู่มือและคำแนะนำอย่างละเอียดก่อนการกำหนดค่า ด้วยมือที่มีทักษะ IPTables สามารถเปลี่ยนให้เป็นกองหลังที่เชื่อถือได้ การเชื่อมต่อเครือข่าย. ผู้ดูแลระบบใช้ยูทิลิตี้นี้อย่างจริงจังเพื่อสร้างการเชื่อมต่อที่แยกจากการเข้าถึงที่ไม่ได้รับอนุญาต

สคริปต์เริ่มต้นขนาดเล็ก (กฎ คำถามที่พบบ่อย iptables) สำหรับเดสก์ท็อปหรือเซิร์ฟเวอร์ธรรมดา ในกรณีนี้ ตัวอย่างการทำงานกับพอร์ตของซอฟต์แวร์ตัวใดตัวหนึ่งที่ทำงานบนคอมพิวเตอร์ของคุณ ต้องปฏิบัติตามข้อควรระวังด้านความปลอดภัยบนคอมพิวเตอร์ทุกเครื่อง ตำนานที่ว่า Linux มีความปลอดภัยมากกว่านั้นไม่เป็นความจริง ทุกอย่างขึ้นอยู่กับความซุ่มซ่ามของมือผู้ดูแลระบบ นอกจากนี้ยังมีระบบ Windows ที่ได้รับการปกป้องอย่างดี เช่นเดียวกับระบบ Linux ที่เปิดให้เกือบทุกคน ดังนั้นจึงควรคิดสักนิด การป้องกันเครือข่ายคอมพิวเตอร์. ด้านล่างนี้คือกฎ iptables บางส่วนที่อาจมีประโยชน์ในตอนแรก

ฉันแทนที่ $IPT ด้วย /sbin/iptables โดยเฉพาะ หากมีใครต้องการกฎเพียงข้อเดียว เพื่อไม่ให้เปลี่ยนแปลงอะไรเลย พวกเขาก็แค่คัดลอกและดำเนินการ แน่นอนว่ายังมีกฎอยู่สองสามข้อในตอนนี้ VPN ต่างๆฯลฯ หากต้องการก็เพิ่ม

บรรทัดเหล่านี้สามารถคัดลอกทั้งหมดลงในสคริปต์และดำเนินการได้อย่างง่ายดาย สำหรับกรณีธรรมดาก็เพียงพอแล้ว หากแอปพลิเคชันใดไม่สามารถเข้าถึงเครือข่ายได้ ระบบจะเพิ่มการบันทึกเป็นพิเศษ เพียงเปิด tail -f /var/log/syslog (หรือของคุณหากแตกต่างจาก Ubuntu) และดู! หากคุณมีคำถาม เพิ่มคำถามเหล่านี้ในการสนทนา แล้วเราจะแก้ไขร่วมกัน

ป.ล. นอกเหนือจากกฎเหล่านี้แล้ว ลองนึกถึงสิ่งที่คุณควรทำจากบทความ TCP Optimization

วิธีลบกฎใน Iptables

โพสต์โดย Alexey Ubozhenko

หลายครั้งที่ฉันได้พบกับความจริงที่ว่าแม้แต่คนฉลาดโดยทั่วไปก็ทำผิดพลาดอย่างไม่อาจให้อภัยได้ ตัวอย่างเช่น พวกเขาเปิดพอร์ตที่ฐานข้อมูลทำงานไปยังอินเทอร์เน็ตทั้งหมด

บล็อกเกี่ยวกับการดูแลระบบ บทความเกี่ยวกับ Linux, Windows, พื้นที่เก็บข้อมูล NetApp และการจำลองเสมือน

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

สำคัญ!เป็นเรื่องง่ายมากที่จะทำให้ไฟร์วอลล์เครื่องผิดพลาดจนคุณไม่สามารถเข้าถึงได้อีกต่อไป โดยเฉพาะอย่างยิ่งสำหรับโฮสติ้งคลาวด์ ตัวอย่างเช่น หากใน AWS คุณปิดพอร์ตทั้งหมดตั้งแต่ 1024 ถึง 65536 ด้วยเหตุผลบางประการ เครื่องจะปิดหลังจากรีบูต ทุกอย่างโดยทั่วไปพอร์ต หากคุณโฮสต์อยู่ในคลาวด์ จะเป็นการดีกว่าถ้าตั้งค่าไฟร์วอลล์ผ่านเว็บอินเตอร์เฟสที่โฮสต์เตรียมไว้ให้

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

โดยทั่วไปปัญหาประเภทใดที่สามารถแก้ไขได้โดยใช้ Netfilter:

  • อนุญาต/ปฏิเสธการรับส่งข้อมูลขาเข้าไปยังพอร์ตบางพอร์ตโดยใช้โปรโตคอลบางตัว (IPv4/IPv6, TCP/UDP) ด้วย ที่อยู่ที่ระบุ(IP, MAC) หรือเครือข่ายย่อย
  • ทุกอย่างเหมือนกันสำหรับการรับส่งข้อมูลขาออก
  • ตัวอย่างเช่น คุณสามารถละเว้นแพ็กเก็ต ICMP ทั้งหมดได้โดยสิ้นเชิง
  • การตั้งค่า NAT ดูโพสต์เกี่ยวกับการติดตั้งและกำหนดค่า OpenVPN
  • ฉันได้ยินมาว่ากูรูตัวจริงสามารถตั้งค่า DDoS และการป้องกันแบบ Brute Force จำกัดการเข้าถึงเครือข่ายสำหรับแอปพลิเคชั่น ผู้ใช้หรือกลุ่มเฉพาะ และทำสิ่งแปลกๆ อื่นๆ ได้

ฉันอยากจะทราบว่าในตอนแรกฉันพบว่ายูทิลิตี้ iptables ไม่สะดวกอย่างยิ่งเมื่อเทียบกับ ipfw ใน FreeBSD โชคดีที่หลังจากใช้งานมาระยะหนึ่งแล้ว ธงต่างๆ มากมายเช่น -A, -D, -j และอื่นๆ ก็คุ้นเคยกันดี ดังนั้นโปรดอดทนรอ มาดูคำสั่งพื้นฐานกัน

แสดงกฎทั้งหมด:

คุณอาจสังเกตเห็นว่า Netfilter มี "สายโซ่" บางอย่าง - อย่างน้อย INPUT, OUTPUT และ FORWARD

โดยส่วนตัวแล้วฉันมีโซ่ DOCKER บนเครื่องของฉันด้วย เป็นครั้งแรกที่คุณอาจนึกถึงสองรายการแรกว่าเป็นการรับส่งข้อมูลขาเข้าและขาออกทั้งหมด ตามลำดับ และลืมส่วนที่เหลือไปชั่วคราว โอกาสที่ดีที่คุณจะไม่ต้องการมันเลย

ลบกฎทั้งหมด:

เปลี่ยนนโยบาย (พฤติกรรมเริ่มต้น) ของเชน:

iptables -P อินพุตลดลง
iptables -P ยอมรับอินพุต

ปฏิเสธการเข้าถึงจากโฮสต์/ซับเน็ต:

iptables -A อินพุต -s 123.45.67.89 -j DROP
iptables -A อินพุต -s 123.45.0.0/16-j DROP

คุณยังสามารถใช้ชื่อโดเมน:

iptables -A อินพุต -s example.ru -j DROP

ข้อห้ามในการเชื่อมต่อขาออก:

iptables -A เอาต์พุต -d 123.45.67.89 -j DROP

คุณสามารถใช้การปฏิเสธในกฎ:

iptables -A อินพุต!-s 123.45.67.89 -j DROP

การลบกฎตามหมายเลขในห่วงโซ่:

iptables -D อินพุต 1

การลบกฎโดยยึดตามสิ่งที่ทำ:

iptables -D อินพุต -s 123.45.67.89 -j DROP

ตัวเลือก -p ระบุโปรโตคอล คุณสามารถใช้ทั้งหมด, icmp, tcp, udp หรือหมายเลขโปรโตคอลจาก /etc/protocols ธง --sport ระบุพอร์ตที่แพ็คเก็ตถูกส่ง และธง --dport ระบุพอร์ตปลายทาง:

iptables -A อินพุต -p tcp --sport80-j ยอมรับ
iptables -A อินพุต -p tcp --dport80-j ยอมรับ

การแทรกกฎที่จุดเริ่มต้นของห่วงโซ่:

iptables -ฉันอินพุต ...

หรือคุณสามารถระบุตำแหน่งเฉพาะ:

iptables-save >/etc/iptables.rules

กฎการคืนค่า:

iptables-เรียกคืน

ตอนนี้เรามาดูตัวอย่างเชิงปฏิบัติบ้าง ตัวอย่างเช่น นี่คือลักษณะการจำลอง netsplit ในการทดสอบที่ตรวจสอบพฤติกรรมของแอปพลิเคชันที่ใช้ Akka Cluster:

วิ่ง (node1, s "iptables -A INPUT -s $ node2 -j DROP")
วิ่ง (node1, s "iptables -A INPUT -s $ node3 -j DROP")
วิ่ง (node1, s "iptables -A OUTPUT -d $node2 -j DROP")
วิ่ง (node1, s "iptables -A OUTPUT -d $node3 -j DROP")

การกู้คืนเกิดขึ้นในลักษณะเดียวกันทุกประการ เฉพาะแฟล็ก -A เท่านั้นที่จะแทนที่ด้วยแฟล็ก -D

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

ตัวอย่างผลลัพธ์:

การเชื่อมต่ออินเทอร์เน็ตที่ใช้งานอยู่ (เฉพาะเซิร์ฟเวอร์)
Proto Recv-Q Send-Q ที่อยู่ในท้องถิ่น ที่อยู่ต่างประเทศ รัฐ PID/ชื่อโครงการ
TCP 0 0 0.0.0.0:80 0.0.0.0:* ฟัง 3210/nginx
TCP 0 0 0.0.0.0:4369 0.0.0.0:* ฟัง 1789/epmd
TCP 0 0 0.0.0.0:22 0.0.0.0:* ฟัง 797/sshd
TCP 0 0 127.0.0.1:5432 0.0.0.0:* ฟัง 990/postgres

Nginx และ SSHd ดูอินเทอร์เน็ตซึ่งเป็นเรื่องปกติ PostgreSQL จะรับฟังเฉพาะอินเทอร์เฟซภายในเครื่องเท่านั้น ดังนั้นจึงไม่มีปัญหาใดๆ เช่นกัน แต่ epmd หลุดออกมา (คุณสามารถตรวจสอบด้วย telnet จากเครื่องอื่นได้) และนี่ก็ไม่ดี คุณสามารถปิดพอร์ต 4369 ได้เท่านั้น วิธีการทำเช่นนี้แสดงไว้ด้านบน หรือคุณสามารถไปไกลกว่านั้นและปฏิเสธการเชื่อมต่อทั้งหมดจากภายนอกไปยังพอร์ต 81 และเก่ากว่า:

iptables -A INPUT -m มัลติพอร์ต \
-p tcp --dports81:65535!-s 127.0.0.0/8-j DROP

ซึ่งใช้ส่วนขยายหลายพอร์ตซึ่งช่วยให้คุณสามารถระบุช่วงพอร์ตได้

ตรวจสอบว่าทุกอย่างทำงานได้ หากตกลง ให้บันทึกกฎ:

iptables-save >/etc/iptables.rules

เพื่อให้กฎต่างๆ ได้รับการหยิบยกขึ้นมาเมื่อระบบบูท เราจึงสร้าง ไฟล์ใหม่/etc/network/if-pre-up.d/iptables:

iptables-เรียกคืนทางออก0

... และเราพูดว่า:

chmod +x /etc/network/if-pre-up.d/iptables

วิธีการนี้ได้รับการทดสอบแล้วว่าสามารถทำงานบน Ubuntu 14.04 LTS ได้

มันควรจะใช้ได้กับ Debian ด้วย คุณจะพบคำอธิบายของวิธีอื่นในการกู้คืนกฎไฟร์วอลล์เมื่อเริ่มต้นระบบในหมายเหตุเกี่ยวกับ OpenVPN ที่กล่าวถึงแล้ว

เอกสารเพิ่มเติมสำหรับผู้ที่ต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ Netfilter:

คุณจะตั้งค่าไฟร์วอลล์บนเซิร์ฟเวอร์ของคุณได้อย่างไร?

แท็ก: ลินุกซ์, ความปลอดภัย, เครือข่าย.

ยูทิลิตีบรรทัดคำสั่ง iptables ใช้เพื่อกำหนดค่าไฟร์วอลล์ netfilter ที่สร้างไว้ในระบบที่ใช้เคอร์เนล Linux

คำแนะนำนี้เหมาะสำหรับทั้งหุ่นจำลองที่ต้องการเข้าใจแง่มุมต่างๆ ของการรักษาความปลอดภัยเครือข่าย และสำหรับมืออาชีพที่มีประสบการณ์เพื่อใช้เป็นข้อมูลสรุป

หลักการตั้งค่า

ไวยากรณ์ทั่วไปสำหรับการใช้ iptables คือ:

iptables -t<таблица> <команда> <цепочка>[ตัวเลข]<условие> <действие>

<таблица>

กฎ netfilter กระจายอยู่ใน 4 ตาราง ซึ่งแต่ละตารางมีวัตถุประสงค์ของตัวเอง (รายละเอียดเพิ่มเติมด้านล่าง) มันถูกระบุด้วยสวิตช์ -t แต่หากไม่ได้ระบุพารามิเตอร์นี้ การดำเนินการจะดำเนินการสำหรับตารางเริ่มต้น - ตัวกรอง

<команда>

คำสั่งจะระบุประเภทการดำเนินการที่เราดำเนินการบน netfilter เช่น การสร้างหรือการลบกฎ

<цепочка>

แต่ละตารางมีห่วงโซ่ซึ่งแต่ละกฎจะถูกสร้างขึ้นเอง ตัวอย่างเช่น สำหรับตารางตัวกรองด้านบน มีเชนที่กำหนดไว้ล่วงหน้าสามสาย - INPUT (แพ็กเก็ตขาเข้า), OUTPUT (แพ็กเก็ตขาออก) และ FORWARD (แพ็กเก็ตการขนส่ง)

[ตัวเลข]

คำสั่งบางคำสั่งจำเป็นต้องระบุหมายเลขกฎ เช่น เพื่อลบหรือแก้ไข

<условие>

เงื่อนไขจะอธิบายเกณฑ์สำหรับการสร้างกฎเฉพาะ

<действие>

แล้วถ้าเข้าเงื่อนไขจะทำยังไงกับแพ็คเกจล่ะ?

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

คีย์ iptables และตัวอย่างการใช้งาน

เพื่อทำงานกับตาราง (iptables -t)

ฉันขอเตือนคุณว่ากฎทั้งหมดใน netfilter กระจายไปตามตาราง หากต้องการทำงานกับตารางใดตารางหนึ่ง คุณต้องใช้สวิตช์ -t

ทีม

คีย์ต่อไปนี้กำหนดการดำเนินการที่ยูทิลิตี้ iptables ดำเนินการ

สำคัญ คำอธิบายและตัวอย่าง
-ก การเพิ่มกฎที่ส่วนท้ายของรายการ:
iptables -A อินพุต -s 192.168.0.15 -j DROP
ปฏิเสธข้อความขาเข้าจาก 192.168.0.15
-D การลบกฎ:
iptables -D อินพุต 10
ลบกฎในห่วงโซ่ INPUT ด้วยหมายเลข 10
-ฉัน การแทรกกฎในส่วนเฉพาะของรายการ:
iptables -I อินพุต 5 -s 192.168.0.15 -j DROP
แทรกกฎข้อที่ 5 ในรายการ
-ร แทนที่กฎ
iptables -R เอาต์พุต 5 -s 192.168.0.15 -j ยอมรับ
แทนที่กฎข้อที่ 5 ของเราจากห้ามเป็นการอนุญาต
-ฟ การรีเซ็ตกฎในห่วงโซ่
iptables -F อินพุต
-Z กำลังรีเซ็ตสถิติ
iptables -Z อินพุต
-น การสร้างห่วงโซ่
iptables -N CHAINNEW
-เอ็กซ์ กำลังลบห่วงโซ่
iptables -X CHAINNEW
-ป กำหนดกฎเริ่มต้น
iptables -P อินพุตลดลง
-อี เปลี่ยนชื่อห่วงโซ่
iptables -E CHAINNEW CHAINOLD

เงื่อนไข

คีย์เหล่านี้กำหนดเงื่อนไขของกฎ

สำคัญ คำอธิบายและตัวอย่าง
-พี โปรโตคอลเครือข่าย ตัวเลือกที่ถูกต้องคือ TCP, UDP, ICMP หรือ ALL
iptables -A อินพุต -p tcp -j ยอมรับ
อนุญาตการเชื่อมต่อ TCP ขาเข้าทั้งหมด
-ส ที่อยู่ต้นทาง - ชื่อโฮสต์ ที่อยู่ IP หรือซับเน็ตในรูปแบบ CIDR
iptables -A อินพุต -s 192.168.0.50 -j DROP
ปฏิเสธข้อความขาเข้าจากโหนด 192.168.0.50
-d ที่อยู่ปลายทาง. หลักการใช้งานคล้ายกับคีย์ก่อนหน้า -s
iptables -A เอาต์พุต -d 192.168.0.50 -j DROP
ปฏิเสธการออกไปยังโหนด 192.168.0.50
-ฉัน อะแดปเตอร์เครือข่ายที่แพ็กเก็ตมาถึง (INPUT)
iptables -A อินพุต -i eth2 -j DROP
ปิดการใช้งานการรับส่งข้อมูลขาเข้าสำหรับอินเทอร์เฟซอีเทอร์เน็ต eth2
-o อะแดปเตอร์เครือข่ายที่ใช้ส่งแพ็กเก็ต (OUTPUT)
iptables -A เอาต์พุต -o eth3 -j ยอมรับ
อนุญาตข้อความขาออกจากอินเทอร์เฟซอีเทอร์เน็ต eth3
--dport ท่าเรือปลายทาง.
iptables -A อินพุต -p tcp --dport 80 -j ยอมรับ
อนุญาตสายเรียกเข้าบนพอร์ต 80
--กีฬา พอร์ตต้นทาง
iptables -A อินพุต -p tcp --sport 1023 -j DROP
ห้ามข้อความขาเข้าจากพอร์ต 1023

กุญแจที่อยู่ในรายการยังรองรับการก่อสร้างโดยใช้ป้ายด้วย ! .

การตั้งค่า netfilter โดยใช้ iptables

มันกลับเงื่อนไข เช่น
iptables -A อินพุต -s ! 192.168.0.50 -j ดรอป
จะปฏิเสธการเชื่อมต่อกับโฮสต์ทั้งหมด ยกเว้น 192.168.0.50

การดำเนินการ

การดำเนินการที่จะดำเนินการกับแพ็คเกจที่ตรงกับเกณฑ์ของเงื่อนไข แต่ละตารางมีชุดการดำเนินการที่อนุญาตเป็นของตัวเอง ระบุโดยใช้กุญแจ -เจ.

โต๊ะ การกระทำ คำอธิบาย
กรอง ยอมรับ อนุญาตให้มีแพ็คเกจ
หยด ปฏิเสธแพ็คเกจ
ปฏิเสธ ห้ามส่งข้อความไปยังแหล่งที่มา
แนท สวมหน้ากาก สำหรับแพ็กเก็ตขาออก ให้แทนที่ที่อยู่ IP ต้นทางด้วยที่อยู่ของอินเทอร์เฟซที่แพ็กเก็ตออกไป
สนท คล้ายกับ MASQUERADE แต่ระบุอินเทอร์เฟซเครือข่ายเฉพาะซึ่งจะใช้ที่อยู่สำหรับการปลอมแปลง
ดีเอ็นเอที การทดแทนที่อยู่สำหรับพัสดุที่เข้ามา
เปลี่ยนเส้นทาง เปลี่ยนเส้นทางคำร้องขอไปยังพอร์ตอื่นบนระบบเดียวกัน
ยุ่งเหยิง ทีโอเอส การปรับเปลี่ยนฟิลด์ TOS (การจัดลำดับความสำคัญของการรับส่งข้อมูล)
ดีเอสซีพี การเปลี่ยน DSCP (รวมถึงการจัดลำดับความสำคัญของการรับส่งข้อมูล)
ทีทีแอล เปลี่ยน TTL (อายุการใช้งานแพ็คเก็ต)
เอช.แอล. คล้ายกับ TTL แต่สำหรับ IPv6
เครื่องหมาย การทำเครื่องหมายแพ็คเกจ ใช้สำหรับการกรองหรือการสร้างรูปร่างในภายหลัง
คอนมาร์ค เครื่องหมายการเชื่อมต่อ
TCPMSS การเปลี่ยนค่า MTU

ตัวอย่างคำสั่ง iptables ที่ใช้กันทั่วไป

คำสั่งทั่วไป

ดูกฎด้วยหมายเลข:

iptables -L --line-numbers

สำหรับแต่ละตาราง คุณต้องดูกฎแยกกัน:

iptables -t nat -L --line-numbers

ลบกฎทั้งหมด:

ตั้งกฎเริ่มต้น:

iptables -P อินพุตลดลง

iptables -P เอาต์พุตลดลง

* ในตัวอย่างเหล่านี้ ตามค่าเริ่มต้น กฎการปฏิเสธ (DROP) จะใช้ได้กับแพ็กเก็ตขาเข้า (INPUT) และขาออก (OUTPUT) ทั้งหมด

อนุญาตทั้งหมด

วิธีที่ 1: โดยการเพิ่มกฎ:

iptables -I อินพุต 1 -j ยอมรับ

iptables -I เอาต์พุต 1 -j ยอมรับ

iptables - ฉันส่งต่อ 1 -j ยอมรับ

* คำสั่งทั้งสามนี้จะสร้างกฎที่อนุญาตแพ็กเก็ตขาเข้า ขาออก และการขนส่งทั้งหมด

วิธีที่ 2 การทำความสะอาดกฎ:

* ในที่นี้เราจะลบกฎทั้งหมด (-F) ออกก่อน จากนั้นจึงตั้งค่านโยบายเริ่มต้นเพื่ออนุญาตขาเข้า ขาออก และการขนส่ง (-S)

วิธีที่ 3 การปิดใช้งานบริการ (สะดวกในการปิดใช้งานไฟร์วอลล์ชั่วคราวเพื่อวินิจฉัยปัญหา):

การทำงานตามกฎเกณฑ์

เพิ่มกฎที่ส่วนท้ายของรายการ:

iptables -A อินพุต -p tcp --dport 25 -j ยอมรับ

iptables -A อินพุต -p tcp -s ! 192.168.0.25 —dport 993 -i eth0 -j ยอมรับ

เพิ่มช่วงพอร์ต:

iptables -A อินพุต -p tcp --dport 3000:4000 -j ยอมรับ

* ในกรณีนี้ตั้งแต่ 3,000 ถึง 4,000

แทรกกฎ:

iptables -I ส่งต่อ 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ยอมรับ

การส่งต่อพอร์ต

มีวิธีการตั้งค่าสองวิธี

1. กฎการเตรียมการ + การโพสต์:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —ไปยังปลายทาง 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 — กีฬา 2222 -j SNAT — ไปยังแหล่งที่มา 19.8.232.80:22

* ที่ไหน 19.8.232.80 — ที่อยู่ที่เรารับฟังคำขอเชื่อมต่อ 22 - พอร์ตสำหรับการส่งต่อ 192.168.1.15 2222 - พอร์ตภายใน

2. กฎการเตรียมล่วงหน้า + ส่งต่อ:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT -- สู่ปลายทาง 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m state —state ใหม่ ก่อตั้งแล้ว ที่เกี่ยวข้อง -j ยอมรับ

* ที่ไหน eth1— อินเทอร์เฟซเครือข่ายที่เรารับฟังคำขอ 22 - พอร์ตสำหรับการส่งต่อ 192.168.1.15 — ที่อยู่ IP ภายในที่เราถ่ายโอนคำขอทั้งหมดไป 2222 - พอร์ตภายใน

กำลังเริ่มการตั้งค่า

อนุญาต SSH:

iptables -A อินพุต -p tcp --dport 22 -j ยอมรับ

เรากำหนดนโยบายเพื่อห้ามข้อความขาเข้าและอนุญาตข้อความขาออกทั้งหมด:

iptables -P ยอมรับเอาต์พุต

เราสร้างกฎสำหรับการทำงานปกติของ apt-get:

iptables -A INPUT -p tcp --sport 80 -m state --state ก่อตั้งแล้ว -j ยอมรับ

อนุญาตให้ ICMP (เพื่อดำเนินการคำสั่ง ping):

iptables -A อินพุต -p icmp -j ยอมรับ

กฎการบันทึก (ถาวร)

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

วิธีที่ 1. iptables-save

บันทึกกฎลงในไฟล์:

iptables-save > /etc/iptables.rules

เปิดการตั้งค่าเครือข่าย:

vi /etc/network/interfaces.vi

และเพิ่มบรรทัด:

คืนค่า iptables ล่วงหน้า< /etc/iptables.rules

วิธีที่ 2: iptables แบบถาวร

ติดตั้งแพ็คเกจ iptables-persistent:

apt ติดตั้ง iptables แบบถาวร

หากต้องการบันทึกกฎ ให้ป้อนคำสั่ง:

บริการ iptables-บันทึกถาวร

วิธีที่ 3 บริการ iptables

ใช้งานได้กับ Linux เวอร์ชันเก่า:

วิธีที่ 4: iptables.init

ทำงานบน CentOS:

/usr/libexec/iptables/iptables.init บันทึก

อูบุนตู และ CentOS

ในห้องผ่าตัดที่ทันสมัย ระบบอูบุนตูและ CentOS ไม่มี iptables เป็นค่าเริ่มต้น

คุณต้องติดตั้งหรือใช้ยูทิลิตี้รุ่นใหม่

บน CentOS

เช่น โปรแกรมปกติการจัดการไฟร์วอลล์ใช้ firewall-cmd สำหรับรายละเอียดเพิ่มเติม โปรดอ่านคำแนะนำเกี่ยวกับวิธีการกำหนดค่าไฟร์วอลล์บน CentOS

หากคุณต้องการใช้ iptables ให้ติดตั้งแพ็คเกจด้วยยูทิลิตี้:

ยำติดตั้ง iptables-services

ปิดการใช้งานไฟร์วอลล์:

systemctl หยุดไฟร์วอลล์

systemctl ปิดการใช้งานไฟร์วอลล์

อนุญาตและเปิดใช้ iptables:

systemctl เปิดใช้งาน iptables

ในอูบุนตู

ตอนนี้ ufw ถูกใช้เพื่อจัดการไฟร์วอลล์

หากต้องการทำงานกับ iptables ให้ติดตั้งแพ็คเกจต่อไปนี้:

apt-get ติดตั้ง iptables แบบถาวร

ปิดการใช้งาน ufw:

# เครือข่าย# ความปลอดภัย# UNIX# Ubuntu# Linux

คำแนะนำนี้มีประโยชน์กับคุณหรือไม่?

เบื้องหลัง “กำแพงไฟ”:
ไฟร์วอลล์ (ไฟร์วอลล์) และเกตเวย์สู่อินเทอร์เน็ต
ใน DEBIAN GNU/LINUX 4.0 ETCH

คู่มือที่เป็นประโยชน์ในการจัดการการเข้าถึงอินเทอร์เน็ตที่ปลอดภัย
จากคอมพิวเตอร์เครื่องอื่นและจาก เครือข่ายท้องถิ่นใน Debian GNU/Linux 4.0 Etch
ทฤษฎีเล็กน้อย

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

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

เพื่อป้องกันการเชื่อมต่อที่ไม่ได้รับอนุญาตจากภายนอก และเพื่อกรองการรับส่งข้อมูลขาเข้า/ขาออก ระบบปฏิบัติการต้องใช้โปรแกรมพิเศษ - ไฟร์วอลล์(ไฟร์วอลล์ภาษาอังกฤษ) หรือที่เรียกกันว่า ไฟร์วอลล์และ ไฟร์วอลล์- อธิบายไว้ด้านล่าง ติดตั้งง่ายไฟร์วอลล์ในระบบปฏิบัติการฟรี เดเบียน GNU/ลินุกซ์ 4.0.

การใช้ไฟร์วอลล์จะมีความเกี่ยวข้องอย่างยิ่งหากคุณมีคอมพิวเตอร์มากกว่าหนึ่งเครื่อง เครือข่ายภายในบ้านหรือสำนักงานซึ่งมีคอมพิวเตอร์เข้าถึงอินเทอร์เน็ต

แม้แต่เครือข่ายท้องถิ่นขนาดเล็กก็ต้องได้รับการจัดระเบียบอย่างเหมาะสม สมมติว่าคุณมีจุดเชื่อมต่ออินเทอร์เน็ตความเร็วสูง (เช่น โมเด็ม ADSL) พร้อมอินเทอร์เฟซอีเทอร์เน็ต (เช่น เครือข่าย)

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

วิธีแก้ปัญหาที่สมเหตุสมผลและปลอดภัยคือการสร้าง สิ่งกีดขวางระหว่างโมเด็มและเครือข่ายท้องถิ่น - ในรูปแบบของคอมพิวเตอร์แยกต่างหากที่มีการกำหนดค่า "กำแพงไฟ" (ไฟร์วอลล์) คอมพิวเตอร์เครื่องนี้มีอินเทอร์เฟซ 2 แบบ โดยอินเทอร์เฟซหนึ่ง "ดู" ที่อินเทอร์เน็ต (เช่น เชื่อมต่อทางกายภาพกับโมเด็ม) ส่วนอีกอินเทอร์เฟซหันหน้าไปทางเครือข่ายท้องถิ่น (และเชื่อมต่อทางกายภาพกับสวิตช์ ซึ่งมีคอมพิวเตอร์เครื่องอื่นอยู่ด้วย เชื่อมต่อ) เนื่องจากคอมพิวเตอร์ของเราที่มีไฟร์วอลล์เป็นศูนย์กลางสำหรับคอมพิวเตอร์เครื่องอื่นในการเข้าถึงอินเทอร์เน็ตจึงถูกเรียกว่า เกตเวย์(เกตเวย์ภาษาอังกฤษ).

ด้วยองค์กรของเครือข่ายท้องถิ่นโอกาสในการแฮ็กจะลดลงอย่างมาก - ผู้โจมตี "เห็น" เฉพาะเกตเวย์จากอินเทอร์เน็ตและมีการติดตั้งไฟร์วอลล์บนเกตเวย์และไม่ใช่เรื่องง่ายที่จะแฮ็กมัน

การตั้งค่า iptables บน Linux สำหรับหุ่นจำลอง

คอมพิวเตอร์เครือข่ายท้องถิ่นสามารถท่องอินเทอร์เน็ตและยังคงปลอดภัย

การตั้งค่าไฟร์วอลล์โดยใช้ตัวกำหนดค่า arno-iptables-firewall

เพื่อจัดระเบียบไฟร์วอลล์ใน กนู/ลินุกซ์มีการใช้โปรแกรม ไอพีเทเบิลซึ่งตามกฎแล้วจะถูกติดตั้งทันทีเมื่อทำการติดตั้งการแจกแจงส่วนใหญ่ ใน เดเบียน GNU/Linuxคุณสามารถตรวจสอบได้โดยเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบ ความถนัด- หากจำเป็นเราก็ติดตั้ง ไอพีเทเบิล.

อย่างไรก็ตาม การกำหนดค่าด้วยตนเอง ไอพีเทเบิลเป็นงานที่ไม่สำคัญและสามารถทำได้โดยผู้เชี่ยวชาญในสาขาเท่านั้น การบริหารระบบ- ดังนั้นหากต้องการกำหนดค่ากฎที่ไฟร์วอลล์จะทำงานจึงควรใช้ ตัวกำหนดค่าพิเศษ- ใน เดเบียน GNU/Linuxนี่คือโปรแกรม arno-iptables-ไฟร์วอลล์- เมื่อเปิดตัวแล้ว มันจะถามคำถามหลายชุด โดยจะสร้างกฎสำหรับการทำงานของไฟร์วอลล์ ไอพีเทเบิล.

พิมพ์คอนโซลด้วยสิทธิ์ superuser:

#aptitude ติดตั้ง arno-iptables-ไฟร์วอลล์

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

ก่อนอื่นคุณต้องระบุอินเทอร์เฟซภายนอก - "ดู" ที่อินเทอร์เน็ตเช่น เชื่อมต่อกับโมเด็มแล้ว การตั้งค่าอินเทอร์เฟซถูกกำหนดไว้ในไฟล์กำหนดค่า /etc/เครือข่าย/อินเทอร์เฟซ- อาจมีลักษณะเช่นนี้ เช่น:

# นี่คืออินเทอร์เฟซแท้จริง - ชี้ไปที่เครื่องของเราเอง auto lo iface lo ที่อยู่ลูปแบ็ค inet 127.0.0.1 netmask 255.0.0.0 # นี่คืออินเทอร์เฟซ eth0 ซึ่งเชื่อมต่อกับอินเทอร์เน็ต (โมเด็ม ADSL) # ลักษณะเฉพาะของมันคือที่อยู่ IP ถูกกำหนดให้กับมันแบบไดนามิกโดยผู้ให้บริการ # ดังนั้น มันถูกตั้งค่าไว้ ตัวเลือก dhcp auto eth0 iface eth0 inet dhcp # นี่คืออินเทอร์เฟซที่หันหน้าไปทางเครือข่ายท้องถิ่น # ที่อยู่เครือข่ายท้องถิ่นจะเป็น 192.168.2.0/24 # เพื่อความปลอดภัยบนเครือข่ายท้องถิ่น เกตเวย์มี ที่อยู่ IP แบบคงที่- 192.168.2.1, # ดังนั้นจึงตั้งค่าตัวเลือกคงที่ # Network mask - 255.255.255.0 # ที่อยู่การออกอากาศของเครือข่ายในกรณีนี้คือ 192.168.2.255 auto eth1 iface eth1 ที่อยู่คงที่ inet 192.168.2.1 netmask 255.255.255.0 ออกอากาศ 192.168 .2.2 55

ดังนั้นดูที่การตั้งค่า /etc/เครือข่าย/อินเทอร์เฟซเราระบุให้ผู้กำหนดค่าไฟร์วอลล์ทราบว่าอินเทอร์เฟซของเราเป็นแบบภายนอก eth0:

สำหรับคำถามที่ว่าเราได้รับที่อยู่ IP จากผู้ให้บริการหรือไม่ แบบไดนามิก(โดยใช้โปรโตคอล DHCP) เราตอบแบบยืนยัน:

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

มีคำถามว่าเราจะให้บริการใดๆ ผ่าน UDP หรือไม่ ไม่ใช่เช่นกัน - และเราก็เว้นบรรทัดว่างไว้ด้วย!

เราจำเป็นต้องได้รับ Ping จากโลกภายนอกหรือไม่ (เช่น เพื่อตรวจสอบว่ามีการเชื่อมต่อกับคอมพิวเตอร์ที่ติดตั้งไฟร์วอลล์ไว้หรือไม่) ในกรณีของเรา สิ่งนี้ค่อนข้างเป็นที่ยอมรับ:

การดำเนินการนี้เป็นการเสร็จสิ้นการตั้งค่าสำหรับคอมพิวเตอร์เครื่องอื่นที่ไม่ใช่เกตเวย์เครือข่ายท้องถิ่น หากเราวางแผนที่จะใช้คอมพิวเตอร์เป็นเกตเวย์ เราต้องตอบคำถามเพิ่มเติมสองสามข้อ เราระบุอินเทอร์เฟซที่เกตเวย์หันหน้าไปทางเครือข่ายท้องถิ่น - ในกรณีของเรา eth1ดังที่ชัดเจนจาก /etc/เครือข่าย/อินเทอร์เฟซ(มิฉะนั้น สำหรับคอมพิวเตอร์ "โดดเดี่ยว" ให้ปล่อยช่องนี้ว่างไว้):

เมื่อถูกถามว่าจะอนุญาตการแปล NAT หรือไม่ เช่น เปลี่ยนเส้นทางการรับส่งข้อมูลจากอินเทอร์เน็ตผ่านเกตเวย์ไปยังเครือข่ายท้องถิ่นและย้อนกลับเราตอบว่า "ใช่" - นี่เป็นหนึ่งในงานหลักของเราในกรณีนี้:

จากนั้นคำถามก็เกิดขึ้น: ส่วนเครือข่ายท้องถิ่นใดที่สามารถเข้าถึงได้ผ่านการเปลี่ยนเส้นทางไปยังเครือข่ายภายนอก เรามีสิทธิ์ในการเข้าถึงอินเทอร์เน็ตบนคอมพิวเตอร์ทุกเครื่องในเครือข่ายท้องถิ่น ระบุค่าอีกครั้ง 192.168.2.0/24

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

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

สคริปต์ไฟร์วอลล์ Iptables ของ Arno v1.8.8c ———————————————————————————- ผ่านการตรวจสอบสุขภาพแล้ว…ตกลง โมดูล IPTABLES ที่ตรวจพบ…

กำลังโหลดโมดูล IPTABLES เพิ่มเติม: โหลดโมดูล IPTABLES ทั้งหมดแล้ว! กำลังกำหนดค่า /proc/…. การตั้งค่า: เปิดใช้งานการป้องกันการปลอมแปลงด้วย rp_filter เปิดใช้งานการป้องกันน้ำท่วม SYN ผ่านคุกกี้ SYN ปิดการใช้งานการบันทึกของดาวอังคาร ปิดการใช้งานการยอมรับข้อความเปลี่ยนเส้นทาง ICMP การตั้งค่าสูงสุด จำนวนการเชื่อมต่อพร้อมกันถึง 16384 เปิดใช้งานการป้องกันแพ็กเก็ตที่กำหนดเส้นทางต้นทาง การตั้งค่าการหมดเวลา conntrack เริ่มต้น เปิดใช้งานการลดความสามารถในการ DoS การตั้งค่าเริ่มต้น TTL=64 ปิดการใช้งาน ECN (การแจ้งเตือนความแออัดอย่างชัดเจน) เปิดใช้งานการสนับสนุนสำหรับตารางเส้นทางฟลัชชิงแบบไดนามิกของ IP /proc/ เสร็จสิ้น... กฎการฟลัชในตารางตัวกรอง การตั้งค่านโยบายเริ่มต้น (ปลอดภัย) การใช้ "ข้อมูล" ระดับบันทึกสำหรับ syslogd การตั้งค่ากฎไฟร์วอลล์: ———————————————————————— - การยอมรับแพ็กเก็ตจากอุปกรณ์ลูปแบ็คภายในเครื่อง เปิดใช้งานการตั้งค่าขนาดแพ็คเก็ตสูงสุดผ่าน MSS เปิดใช้งานการจัดการ TOS การบันทึกการสแกนแบบซ่อนตัว (nmap โพรบ ฯลฯ) เปิดใช้งาน การบันทึกแพ็กเก็ตที่เปิดใช้งานแฟล็ก TCP ที่ไม่ถูกต้อง การบันทึกแพ็กเก็ตที่ไม่ถูกต้อง ปิดใช้งาน การบันทึกแพ็กเก็ตที่กระจัดกระจาย เปิดใช้งานการบันทึกของ เปิดใช้งานการเข้าถึงจากที่อยู่ที่สงวนไว้ การตั้งค่ากฎป้องกันการปลอมแปลง การอ่านกฎ IPTABLES ที่กำหนดเองจาก /etc/arno-iptables-firewall/custom-rules กำลังโหลดปลั๊กอิน (ผู้ใช้) การตั้งค่านโยบาย INPUT สำหรับเน็ตภายนอก (INET): การเปิดใช้งานการสนับสนุนสำหรับ DHCP IP ที่กำหนดบนอินเทอร์เฟซภายนอก: eth0 เปิดใช้งานการบันทึกโฮสต์ที่ถูกบล็อกอย่างชัดเจน เปิดใช้งานการบันทึกการเชื่อมต่อเอาต์พุตในเครื่องที่ถูกปฏิเสธ แพ็กเก็ตจะไม่ถูกตรวจสอบสำหรับที่อยู่ต้นทางส่วนตัว อนุญาตให้คนทั้งโลกส่งคำขอ ICMP (ping) การบันทึกคำขอ ICMP ที่ตกหล่น เปิดใช้งานแพ็กเก็ต (ping) การบันทึกแพ็กเก็ต ICMP อื่นที่ลดลงเปิดใช้งาน การบันทึกการสแกนการลักลอบที่เป็นไปได้เปิดใช้งาน การบันทึกความพยายามในการเชื่อมต่อ (อื่น ๆ ) ไปยังพอร์ต TCP ที่มีสิทธิ์เปิดใช้งาน การบันทึกความพยายามในการเชื่อมต่อ (อื่น ๆ ) ไปยังพอร์ต UDP สิทธิพิเศษที่เปิดใช้งาน การบันทึกความพยายามในการเชื่อมต่อ (อื่น ๆ ) เปิดใช้งานพอร์ต TCP ที่ไม่มีสิทธิพิเศษ เปิดใช้งานการบันทึกความพยายามในการเชื่อมต่อ (อื่นๆ) ไปยังพอร์ต UDP ที่ไม่มีสิทธิพิเศษ เปิดใช้งานการบันทึกความพยายามในการเชื่อมต่อโปรโตคอล IP อื่น (ไม่ใช่ TCP/UDP/ICMP) เปิดใช้งานการบันทึก เปิดใช้งานการบันทึก ICMP Flooding การใช้นโยบาย INET กับอินเทอร์เฟซภายนอก (INET): eth0 (ไม่มี ระบุเครือข่ายย่อยภายนอก) การตั้งค่านโยบายอินพุตสำหรับอินเทอร์เฟซภายใน (LAN): eth1 การอนุญาตคำขอ ICMP (ping) การอนุญาตโปรโตคอล (อื่น ๆ ) ทั้งหมด การตั้งค่านโยบาย FORWARD สำหรับอินเทอร์เฟซภายใน (LAN): eth1 การบันทึกของ ปฏิเสธ LAN-> เปิดใช้งานการเชื่อมต่อ INET FORWARD การตั้งค่า LAN-> นโยบาย INET: การอนุญาตคำขอ ICMP (ping) การอนุญาตโปรโตคอล (อื่น ๆ ) ทั้งหมด การเปิดใช้งานการปลอมแปลง (NAT) ผ่านอินเทอร์เฟซภายนอก: eth0 การเพิ่มโฮสต์ (ภายใน) : 192. 168.2.0/24 การรักษาความปลอดภัยบังคับใช้สำหรับอินเทอร์เฟซภายนอกในห่วงโซ่ FORWARD 16 ม.ค. 23:53:12 กฎไฟร์วอลล์ทั้งหมดใช้

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

# dpkg- กำหนดค่า arno-iptables-firewall ใหม่

วิธีนี้จะกำจัดข้อผิดพลาดแบบสุ่มที่อาจเกิดขึ้นเมื่อตอบคำถามจากเครื่องมือกำหนดค่าระหว่างประสบการณ์การสื่อสารครั้งแรกของคุณ หากวิธีนี้ไม่ได้ผล คุณสามารถลองแก้ไขด้วยตนเองได้ ไฟล์การกำหนดค่าโปรแกรม arno-iptables-ไฟร์วอลล์กล่าวคือ: /etc/arno-iptables-ไฟร์วอลล์/firewall.conf- การเยี่ยมชมเว็บไซต์หลักของผู้สร้างโปรแกรมนี้อาจเป็นประโยชน์ที่: http://rocky.eld.leidenuniv.nl/ ประกอบด้วยคำแนะนำที่ให้ข้อมูลที่เป็นประโยชน์ในการทำงานกับโปรแกรม คำถามที่พบบ่อยที่น่าสนใจ และยังมีข้อมูลเกี่ยวกับโปรแกรมเวอร์ชันใหม่อีกด้วย

หมายเหตุ 2เราต้องไม่ลืมสิ่งนั้น ไม่มีไฟร์วอลล์ไม่สามารถรับประกันความปลอดภัยในการทำงานของคอมพิวเตอร์ของคุณบนอินเทอร์เน็ตได้ 100% อย่างไรก็ตาม การป้องกันไฟร์วอลล์ไม่สามารถละเลยได้ เราต้องทำทุกสิ่งตามอำนาจของเราเพื่อที่จะวางใจในความเมตตาของพระเจ้า “เว้นแต่องค์พระผู้เป็นเจ้าทรงพิทักษ์รักษาเมือง ยามก็เฝ้าดูอย่างเปล่าประโยชน์”(สดุดี 126:1)

ที่มาของบทความ

ฉันเขียนบล็อกโพสต์เกี่ยวกับพื้นฐาน กฎของ IPtablesสำหรับผู้ใช้ที่ใช้งานจริงมานานแล้ว และคุณควรอ่านบทความนี้และบทความที่เกี่ยวข้องกับ Stateful Firewall

แต่พรีเคอร์เนล 2.6.39 (ซึ่งรวมถึงและคุณสามารถใช้มันเพื่อไวท์ลิสต์ IP หากคุณมีมากกว่า 10 รายการที่ไวท์ลิสต์ (โดยที่ 10 เป็นรายการที่กำหนดเอง))

การตั้งค่า iptables สำหรับหุ่นจำลอง

สถานะการจัดการแรกที่เรารู้ว่าเราต้องการยอมรับหรือลบและอินเทอร์เฟซ

หากคุณเพียงต้องการอนุญาตเฉพาะ IP เท่านั้นไม่มีสถานะ

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

Iptables มีหน้าที่หลักในการกรองแพ็กเก็ต การตั้งค่า Iptablesด้วยตนเองเป็นงานที่ค่อนข้างยาก อย่าคาดหวังว่าจะเข้าใจสิ่งนี้ "อย่างรีบร้อน" โชคดีที่มีเครื่องมือมากมายที่สามารถช่วยคุณได้หากคุณยังไม่ทราบ iptables แต่จำเป็นต้องรักษาความปลอดภัยระบบอย่างเร่งด่วน: fwbuilder, firestarter, guarddog, arno firewall - โดยพื้นฐานแล้วนี่คือ GUI สำหรับ iptables ไม่มีคำตอบที่ชัดเจนว่าอันไหนดีกว่ากัน ทางเลือกเป็นของคุณ อย่างไรก็ตาม บทความในวันนี้จัดทำขึ้นเพื่อ iptables โดยเฉพาะ และแบ่งออกเป็นสองส่วน: ทฤษฎีและการปฏิบัติ คนที่ใจร้อนที่สุดสามารถทำภาคปฏิบัติให้เสร็จสิ้นได้ทันที แม้ว่าจะไม่แนะนำวิธีนี้ก็ตาม

ความสนใจ!การดำเนินการทั้งหมดกับ iptables ดำเนินการในนามของผู้ใช้ที่มีสิทธิ์!

ทฤษฎี

รูปแบบรายการ iptables iptables [-t table] [คำสั่ง] [การกระทำ] ตัวอย่าง: iptables -t filter -A INPUT ACCEPT

การดำเนินการ

  • ยอมรับ - ยอมรับแพ็คเกจ
  • DROP - วางแพ็กเก็ต
  • DNAT - แปลงที่อยู่ปลายทาง
  • SNAT - เปลี่ยนที่อยู่ IP ขาออกในส่วนหัวของแพ็คเก็ต
  • LOG - การบันทึกแพ็กเก็ตและเหตุการณ์
  • MARK - ทำเครื่องหมายบนบรรจุภัณฑ์
  • MASQUERADE - เปลี่ยนที่อยู่ IP ขาออกในส่วนหัวของแพ็กเก็ต (ความแตกต่างจาก SNAT - ทำงานกับ IP แบบไดนามิก)
  • QUEUE - จัดคิวแพ็กเก็ตเพื่อการประมวลผล
  • เปลี่ยนเส้นทาง - เปลี่ยนเส้นทางแพ็กเก็ต/โฟลว์ไปยังพอร์ตอื่น
  • ปฏิเสธ - วางแพ็กเก็ต + แจ้งเตือน ระบบระยะไกลเกี่ยวกับเรื่องนั้น ว่าพัสดุของเธอถูกปฏิเสธ
  • RETURN - หยุดแพ็กเก็ตที่เคลื่อนที่ไปตามสายโซ่ปัจจุบันและส่งคืนไปยังสายโซ่การโทร

ทีม

  • -A - เพิ่มกฎให้กับเชน
  • -D - ลบกฎออกจากห่วงโซ่
  • -R - แทนที่กฎหนึ่งด้วยอีกกฎหนึ่ง
  • -I - แทรกกฎใหม่
  • -L - แสดงรายการกฎที่มีอยู่
  • -F - รีเซ็ตกฎ
  • -Z - รีเซ็ตตัวนับในห่วงโซ่ที่กำหนด
  • -N - สร้างห่วงโซ่ใหม่ด้วยชื่อที่กำหนด
  • -X - ลบเชน
  • -P - ตั้งค่านโยบายเริ่มต้นสำหรับเชนที่เลือก
  • -E - เปลี่ยนชื่อห่วงโซ่ผู้ใช้

เกณฑ์ (ทั่วไป)

  • -p - ระบุประเภทโปรโตคอล
  • -s - ที่อยู่ IP ของแพ็กเก็ตต้นทาง
  • -d - ที่อยู่ IP ของผู้รับแพ็กเก็ต
  • -j - ระบุการดำเนินการสำหรับกฎ
  • -i - อินเทอร์เฟซที่ได้รับแพ็กเก็ต
  • -o - ระบุชื่อของอินเทอร์เฟซเอาต์พุต
  • -f - เผยแพร่กฎไปยังทุกส่วนของแพ็กเก็ต

เกณฑ์ TCP:

  • –tcp-flags - กำหนดแพ็คเก็ตมาสก์และแฟล็ก

เกณฑ์ UDP:

  • –sport - พอร์ตที่ใช้ส่งแพ็กเก็ต
  • –dport - พอร์ตที่แพ็คเก็ตถูกกำหนดที่อยู่

รายละเอียดเพิ่มเติมใน man iptables

ฝึกฝน

ดู การกำหนดค่าปัจจุบัน

$ sudo iptables -L Chain INPUT (ยอมรับนโยบาย) เป้าหมาย prot เลือกต้นทางปลายทาง Chain FORWARD (ยอมรับนโยบาย) เป้าหมาย prot เลือกต้นทางปลายทาง Chain OUTPUT (ยอมรับนโยบาย) เป้าหมาย prot เลือกปลายทางต้นทาง

หากคุณเห็นสิ่งนี้ แสดงว่าไฟร์วอลล์ของคุณยังไม่ได้กำหนดค่าและอนุญาตทุกอย่าง มาแก้ไขสถานการณ์กันเถอะ

การตั้งค่านโยบายเริ่มต้น

  • iptables -P INPUT DROP - บล็อกแพ็กเก็ตขาเข้า
  • iptables -P OUTPUT ACCEPT - อนุญาตแพ็กเก็ตขาออก
  • iptables -P FORWARD DROP - การประมวลผลแพ็กเก็ตที่เข้าถึงเซิร์ฟเวอร์จากเครื่องอื่นและกำลังรอการส่งต่อเพิ่มเติม ในตัวอย่างมันถูกบล็อก ในกรณีนี้ คุณจะต้องเพิ่มกฎสำหรับเครื่องที่เชื่อถือได้

เนื่องจากแพ็กเก็ต INPUT ขาเข้าถูกบล็อก เราจะเขียนกฎต่อไปนี้:

$ sudo iptables -A อินพุต -m state - สถานะที่เกี่ยวข้อง ก่อตั้งแล้ว -j ยอมรับ

ซึ่งจะอนุญาตให้ยอมรับแพ็กเก็ตจากการเชื่อมต่อที่สร้างไว้ก่อนหน้านี้และยอมรับแพ็กเก็ตใหม่ที่สร้างโดยการเชื่อมต่อนี้

หรือระบุประเภทโปรโตคอล:

$ sudo iptables -A INPUT -p TCP -m state - state ก่อตั้งแล้ว, เกี่ยวข้อง -j ยอมรับ $ sudo iptables -A INPUT -p UDP -m state - state ก่อตั้งแล้ว, เกี่ยวข้อง -j ยอมรับ

ตอนนี้อินเทอร์เฟซท้องถิ่น:

$ sudo iptables -A อินพุต -i lo -j ยอมรับ

  • ใหม่ - ข้อมูลเริ่มต้นการเชื่อมต่อใหม่
  • สร้างขึ้น - แพ็กเก็ตที่มาจากการเชื่อมต่อที่สร้างไว้แล้ว
  • ที่เกี่ยวข้อง - แพ็กเก็ตข้อมูลใหม่ แต่สร้างขึ้นโดยการเชื่อมต่อที่สร้างไว้เก่า
  • ไม่ถูกต้อง - จึงชัดเจน

$ sudo iptables-save > /etc/iptables.up.rules

เปิดใช้งานกฎเหล่านี้:

$sudo iptables-เรียกคืน< /etc/iptables.up.rules

และดูความแตกต่าง:

$sudo iptables -L

เรียกใช้ iptables เมื่อเริ่มต้นระบบ:

ในไดเร็กทอรี /etc/init.d ให้สร้างไฟล์ชื่อ iptables

$ sudo touch /etc/init.d/iptables

เราเขียนสิ่งต่อไปนี้ลงไป:

#!/bin/sh /sbin/iptables-restore< /etc/iptables.up.rules

การทำให้ไฟล์ iptables ปฏิบัติการได้:

$ sudo chmod +x /etc/init.d/iptables

เพิ่มไปที่การทำงานอัตโนมัติ

$ sudo update-rc.d -n ค่าเริ่มต้นของ iptables

เรียกใช้ iptables เมื่อเชื่อมต่อกับเครือข่าย:

$ sudo echo "#! /sbin/iptables-restore"> /etc/network/if-up.d/iptables.up.rules $ sudo iptables-save >> /etc/network/if-up.d/iptables up.rules $ sudo chmod +x /etc/network/if-up.d/iptables.up.rules

บันทึก:คุณสามารถตรวจสอบว่ากฎของคุณโหลดได้ตลอดเวลาหรือไม่โดยเพียงแค่ป้อน iptables-save as root

สำหรับ Archlinux การบันทึกกฎ iptables ทำได้โดยใช้คำสั่ง:

$ sudo rc.d บันทึก iptables