ไฟร์วอลล์ ferm ที่ใช้ iptables ของ Linux คืออะไรและจะกำหนดค่าอย่างไร

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

ไฟร์วอลล์ Ferm คืออะไรและมีไว้เพื่ออะไร

ไฟร์วอลล์ ferm ที่ใช้ iptables ของ Linux คืออะไร

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

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

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

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

การติดตั้งและการว่าจ้างของFerm

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

sudo apt install ferm

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

โปรแกรมติดตั้ง Ferm จะบอกเราว่าจะโหลดกฎไฟร์วอลล์ระหว่างการเริ่มต้นระบบจากพาธ /etc/ferm/ferm.conf นั่นคือทุกอย่างในไฟล์นี้จะถูกส่งต่อไปยัง iptables โดยอัตโนมัติเพื่ออนุญาตหรือปฏิเสธเครือข่ายการรับส่งข้อมูล การกำหนดค่าเริ่มต้นของไฟร์วอลล์นี้ทำให้เราสามารถเข้าถึง SSH จากระยะไกลผ่านพอร์ต 22 หากคุณไม่ได้กำหนดค่า SSH บนพอร์ตนี้ คุณจะต้องแก้ไขค่าเริ่มต้นและคลิกที่ "ไม่" เพื่อไม่ให้เริ่มทำงาน มิฉะนั้น คุณจะสูญเสียการเชื่อมต่อ

เมื่อเราเลือกใช่หรือไม่ใช่แล้ว apt จะเสร็จสิ้นการติดตั้งแพ็คเกจเพิ่มเติมทั้งหมดที่เราจำเป็นต้องใช้เพื่อให้โปรแกรมนี้ทำงานได้

เมื่อติดตั้งแล้ว เราสามารถไปที่พาธ / etc / ferm / และเราจะเห็นทั้งไฟล์การกำหนดค่าที่เรียกว่า ferm.conf รวมถึงไดเร็กทอรีชื่อ ferm.d ซึ่งเราสามารถรวมไฟล์การกำหนดค่า ferm ของเราเพื่อนำเข้าได้ เรามีโมดูลาร์ที่มากขึ้น

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

ในภาพหน้าจอต่อไปนี้ คุณสามารถดูวิธีกำหนดโดเมนที่จะกำหนดค่า (iptables หรือ ip6tables) ตารางและเชน รวมถึงกฎที่เรามีภายในเชนต่างๆ

เรายังเห็นว่าเรามีกฎหลายข้อตามค่าเริ่มต้น:

  • ในห่วงโซ่ INPUT นโยบายคือ DROP อนุญาตการรับส่งข้อมูล localhost การรับส่งข้อมูล ICMP และการเชื่อมต่อได้รับอนุญาตผ่าน IPsec และผ่าน SSH ด้วยพอร์ตเริ่มต้น เกี่ยวกับสถานะของการเชื่อมต่อ การเชื่อมต่อที่ไม่ถูกต้องจะถูก DROPED และอนุญาตการเชื่อมต่อที่สร้างขึ้นและที่เกี่ยวข้อง แต่ไม่อนุญาตให้เชื่อมต่อใหม่ ยกเว้นที่กำหนดไว้โดยเฉพาะ

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

ถัดไป คุณสามารถดูไฟล์การกำหนดค่านี้ในรูปแบบข้อความ:

# -*- shell-script -*-
#
# Configuration file for ferm(1).
#
domain (ip ip6) {
table filter {
chain INPUT {
policy DROP;

# การติดตามการเชื่อมต่อ
สถานะ mod สถานะ INVALID DROP;
สถานะสถานะ mod (ที่เกี่ยวข้องที่จัดตั้งขึ้น) ยอมรับ;

# อนุญาตแพ็กเก็ตท้องถิ่น
อินเทอร์เฟซสิ่งที่ยอมรับ;

# ตอบกลับ ping
โปรโต icmp ยอมรับ;

# อนุญาต IPsec
โปรโต udp dport 500 ยอมรับ;
@if @eq ($ โดเมน, ip) {
โปรโต (esp ah) ยอมรับ;
} @อื่น {
โปรโต (esp) ยอมรับ;
}

# อนุญาตการเชื่อมต่อ SSH
โปรโต tcp dport ssh ยอมรับ;
}
เอาต์พุตลูกโซ่ {
ยอมรับนโยบาย;

# การติดตามการเชื่อมต่อ
#mod state state วางไม่ถูกต้อง;
สถานะสถานะ mod (ที่เกี่ยวข้องที่จัดตั้งขึ้น) ยอมรับ;
}
โซ่ไปข้างหน้า {
นโยบาย DROP;

# การติดตามการเชื่อมต่อ
สถานะ mod สถานะ INVALID DROP;
สถานะสถานะ mod (ที่เกี่ยวข้องที่จัดตั้งขึ้น) ยอมรับ;
}
}
}

@รวม ferm.d /;

ส่วนที่น่าสนใจที่สุดคือ "@include ferm.d /" ที่เรามีในส่วนสุดท้าย ซึ่งหมายความว่าจะนำเข้าไฟล์การกำหนดค่าทั้งหมดที่เรามีในไดเร็กทอรีที่เป็นปัญหา

ไฟร์วอลล์ Ferm ด้านล่างนี้ใช้ iptables ดังนั้นหากเรารันคำสั่งต่อไปนี้:

iptables -L

เราสามารถเห็นสถานะปัจจุบันของ iptables ด้วยกฎทั้งหมดที่รวมอยู่ในไฟร์วอลล์:

เมื่อเราได้เห็นการกำหนดค่าเริ่มต้นของ Ferm แล้ว เราจะดูตัวอย่างการกำหนดค่าต่างๆ ที่เราสามารถทำได้

การกำหนดค่าพื้นฐานของ Ferm

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

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

เกี่ยวกับไวยากรณ์ของ iptables และ ferm เรามีความแตกต่างบางประการ:

  • เพื่อกำหนดอินพุตอินเทอร์เฟซ: อินเทอร์เฟซ (ถ้า)
  • เพื่อกำหนดอินเทอร์เฟซทางออก: ด้านนอก (ของ)
  • เพื่อกำหนดแหล่งกำเนิด: saddr
  • เพื่อกำหนดปลายทาง: daddr
  • เพื่อกำหนดโปรโตคอล: proto
  • พอร์ตต้นทาง: sport
  • พอร์ตปลายทาง: dport
  • โหลดโมดูล: mod
  • ข้ามไปที่กฎที่กำหนดเอง: jump

ใน Ferm ไม่มีคำสั่งเช่น -A, -I, -C, -R หรือ -D เนื่องจากทุกอย่างถูกเขียนในไฟล์การกำหนดค่า สิ่งเดียวกันนี้จะเกิดขึ้นกับคำสั่งเพื่อเพิ่มสตริงใหม่ เปลี่ยนชื่อหรือลบมัน ตอนนี้ที่นี่หายไปอย่างสมบูรณ์ คุณสมบัติอื่น ๆ คือ ferm อนุญาตให้คุณสืบทอดกฎที่แตกต่างกันเพื่อใช้ภายในกฎอื่น โดยซ้อนอยู่ในไฟล์การกำหนดค่า

เมื่อเรารู้คร่าวๆ ว่าไวยากรณ์เป็นอย่างไร เราจะดูตัวอย่างบางส่วนที่เปรียบเทียบกับ iptables ในตัวอย่างทั้งหมด เราจะทำงานในตาราง «ตัวกรอง» ในกลุ่ม «INPUT»

iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp -j ACCEPT

ใน ferm สิ่งนี้จะถูกเขียนดังนี้ (เพิ่มนโยบายของเชน OUTPUT และ FORWARD จากตารางตัวกรอง):

domain ip {
table filter {
chain INPUT {
policy DROP;
proto tcp ACCEPT;
}
chain OUTPUT {
policy ACCEPT;
}
chain FORWARD {
policy DROP;
}
}
}

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

iptables -A INPUT -p tcp -j ACCEPT
iptables -A OUTPUT -p tcp -j ACCEPT
iptables -A INPUT -p udp -j ACCEPT
iptables -A OUTPUT -p udp -j ACCEPT

ด้วย Ferm มันง่ายเหมือนทำสิ่งต่อไปนี้:

domain ip {
table filter {
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
}

อย่างที่คุณเห็น การใช้กฎเดียวกันนี้กับทั้ง INPUT และ OUTPUT จะเร็วและง่ายกว่ามาก

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

Ferm ยังอนุญาตให้คุณ "โหลด" โมดูล iptables เพื่อใช้งาน และกำหนดค่าไฟร์วอลล์ในวิธีขั้นสูง ตัวอย่างเช่น เรามีดังต่อไปนี้:

mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;

ที่เราใส่ได้ตลอดทั้งไฟล์คอนฟิก

ในการใช้กฎที่แนะนำใน Ferm เราจะต้องดำเนินการคำสั่งต่อไปนี้:

ferm -i -t 10 /etc/ferm/ferm.conf

นำเข้ากฎ iptables ลงใน Ferm

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

import-ferm > /etc/ferm/ferm.d/reglas-iptables.conf

เมื่อเราเรียกใช้ เราจะเห็นกฎ iptables ได้โดยตรงในไวยากรณ์ของ Ferm

หากคุณต้องการแปลงกฎ iptables ที่คุณมีในไฟล์ข้อความเป็น Ferm คุณสามารถดำเนินการคำสั่งต่อไปนี้:

import-ferm origen de las reglas de iptables > /etc/ferm/ferm.d/reglas-iptables.conf

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