GoGPT Best VPN GoSearch

ไอคอน Fav ของ OnWorks

ferm - ออนไลน์ในคลาวด์

เรียกใช้ ferm ในผู้ให้บริการโฮสต์ฟรีของ OnWorks ผ่าน Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

นี่คือคำสั่ง ferm ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้เวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


ferm - ตัวแยกวิเคราะห์กฎไฟร์วอลล์สำหรับ linux

เรื่องย่อ


เฟิร์ม ตัวเลือก ไฟล์อินพุต

DESCRIPTION


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

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

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

เฟิร์มออกเสียงว่า "มั่นคง" ย่อมาจาก "For Easy Rule Making"

ข้อควรระวัง


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

บทนำ


มาเริ่มกันด้วยตัวอย่างง่ายๆ:

ห่วงโซ่อินพุต {
โปรโต tcp ยอมรับ;
}

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

ห่วงโซ่ (INPUT OUTPUT) {
โปรโต (udp tcp) ยอมรับ;
}

สิ่งนี้จะแทรกกฎ 4 ข้อ ได้แก่ 2 ใน chain input และ 2 ใน chain output การจับคู่และ
ยอมรับทั้งแพ็กเก็ต udp และ tcp โดยปกติคุณจะพิมพ์สิ่งนี้:

iptables -A อินพุต -p tcp -j ยอมรับ
iptables -A OUTPUT -p tcp -j ยอมรับ
iptables -A INPUT -p udp -j ยอมรับ
iptables -A OUTPUT -p udp -j ยอมรับ

สังเกตว่าเราจำเป็นต้องพิมพ์น้อยแค่ไหน? :-)

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

ห่วงโซ่อินพุต {
ยอมรับนโยบาย;
daddr 10.0.0.0/8 โปรโต tcp dport ! ftp กระโดด mychain sport : 1023 TOS 4 ตั้งค่า 8 เครื่องหมาย 2;
daddr 10.0.0.0/8 โปรโต tcp dport ftp ปฏิเสธ;
}

ประเด็นของฉันที่นี่คือ *คุณ* จำเป็นต้องสร้างกฎเกณฑ์ที่ดี ให้คุณอ่านกฎเหล่านี้ได้และ
อื่น ๆ และไม่ทำให้มันเป็นระเบียบ

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

ลองใช้ความคิดเห็นเพื่อแสดงว่าคุณกำลังทำอะไรอยู่:

# บรรทัดนี้เปิดใช้งาน http-proxying โปร่งใสสำหรับเครือข่ายภายใน:
โปรโต tcp ถ้า eth0 daddr ! 192.168.0.0/255.255.255.0
dport http เปลี่ยนเส้นทางไปยังพอร์ต 3128;

คุณจะขอบคุณมันในภายหลัง!

ห่วงโซ่อินพุต {
ยอมรับนโยบาย;
อินเทอร์เฟซ (eth0 ppp0) {
# ปฏิเสธการเข้าถึงแฮกเกอร์ฉาวโฉ่กลับมาที่นี่หากไม่มีการจับคู่
# ถูกพบว่าให้ไฟร์วอลล์กลับมาทำงานตามปกติ
กระโดด badguy;

โปรโตคอล tcp กระโดด fw_tcp;
โปรโตคอล udp กระโดด fw_udp;
}
}

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

โซ่ไปข้างหน้า {
โปรโต ! UDP DROP;
โปรโต tcp dport ftp ยอมรับ;
}

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

โปรโต tcp {
ดีพอร์ต (
ssh http ftp
) ยอมรับ;
dport 1024:65535 ! ซินยอมรับ;
หยด;
}

โครงสร้าง OF A ไฟร์วอลล์ ไฟล์


โครงสร้างของไฟล์ไฟร์วอลล์ที่เหมาะสมดูเหมือนโค้ด C แบบง่าย เพียงไม่กี่
อักขระวากยสัมพันธ์ใช้ในไฟล์การกำหนดค่า ferm นอกจากความพิเศษเหล่านี้แล้ว
caracters, ferm ใช้ 'คีย์' และ 'ค่า' คิดว่ามันเป็นตัวเลือกและพารามิเตอร์หรือเป็น
ตัวแปรและค่าอะไรก็ตาม

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

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

iptables --โปรโตคอล tcp

ใน ferm สิ่งนี้จะกลายเป็น:

โปรโตคอล TCP;

แค่พิมพ์ใน ferm ก็ไม่ช่วยอะไร ต้องบอก ferm (จริงๆ แล้วต้อง
บอก iptables(8) และเคอร์เนล) จะทำอย่างไรกับการรับส่งข้อมูลที่ตรงกับเงื่อนไขนี้:

iptables --โปรโตคอล tcp -j ยอมรับ

หรือแปลเป็น เฟิร์ม:

โปรโตคอล tcp ยอมรับ;

การขอ ; อักขระอยู่ท้ายกฎของเฟิร์มทุกข้อ Ferm ละเว้นการขึ้นบรรทัดใหม่ ซึ่งหมายถึง
ตัวอย่างด้านบนเหมือนกับตัวอย่างต่อไปนี้:

โปรโตคอลtcp
ยอมรับ;

นี่คือรายการของอักขระพิเศษ:

; อักขระนี้สรุปกฎ

คั่นด้วยเครื่องหมายอัฒภาค คุณอาจเขียนกฎหลายข้อในบรรทัดเดียวได้ แม้ว่านี่จะเป็น
ลดความสามารถในการอ่าน:

โปรโตคอล tcp ยอมรับ; โปรโตคอล udp DROP;

{} สัญลักษณ์การซ้อนกำหนด 'บล็อก' ของกฎ

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

วงเล็บปีกกาปิดจะเป็นการสิ้นสุดชุดกฎ คุณไม่ควรเขียน ';' หลังจาก
นั่นเพราะนั่นจะเป็นกฎที่ว่างเปล่า

ตัวอย่าง:

เชน INPUT โปรโต icmp {
icmp-type echo-request ยอมรับ;
หยด;
}

บล็อกนี้แสดงกฎสองข้อภายในบล็อก ซึ่งทั้งสองจะรวมเข้ากับอะไรก็ได้
ข้างหน้าคุณจะได้กฎสองข้อ:

iptables -A INPUT -p icmp --icmp-type echo-request -j ยอมรับ
iptables -A อินพุต -p icmp -j DROP

สามารถวางซ้อนได้หลายระดับ:

ห่วงโซ่อินพุต {
โปรโตไอซีเอ็มพี {
icmp-type echo-request ยอมรับ;
หยด;
}
daddr 172.16.0.0/12 ปฏิเสธ;
}

โปรดทราบว่ากฎ 'ปฏิเสธ' ไม่ได้รับผลกระทบจาก 'proto icmp' แม้ว่าจะไม่มี
';' หลังจากปิดวงเล็บปีกกา แปลเป็น iptables:

iptables -A INPUT -p icmp --icmp-type echo-request -j ยอมรับ
iptables -A อินพุต -p icmp -j DROP
iptables -A INPUT -d 172.16.0.0/12 -j ปฏิเสธ

$ การขยายตัวแปร แทนที่ '$FOO' ด้วยค่าของตัวแปร ดูส่วน
ตัวแปร เพื่อดูรายละเอียด

& เรียกใช้ฟังก์ชัน ดูส่วน ฟังก์ชั่น เพื่อดูรายละเอียด

() สัญลักษณ์อาร์เรย์ คุณสามารถใช้วงเล็บเพื่อกำหนด 'รายการ' ของค่าที่
ควรใช้สำหรับคีย์ทางด้านซ้ายของมัน

ตัวอย่าง:

โปรโตคอล ( tcp udp icmp )

ซึ่งจะส่งผลให้เกิดกฎสามข้อ:

... -p ทีซีพี ...
... -p udp ...
... -p icmp ...

เฉพาะค่าเท่านั้นที่สามารถ 'แสดงรายการ' ดังนั้นคุณจึงไม่สามารถทำสิ่งนี้ได้:

โปรโต tcp ( ยอมรับบันทึก );

แต่คุณสามารถทำได้:

ลูกโซ่ (INPUT OUTPUT FORWARD) โปรโต (icmp udp tcp) DROP;

(ซึ่งจะส่งผลให้เกิดกฎเก้าข้อ!)

ค่าจะถูกคั่นด้วยช่องว่าง สัญลักษณ์อาร์เรย์มีทั้งซ้ายและขวา-
associative ตรงกันข้ามกับ nesting block ซึ่งเชื่อมโยงด้านซ้ายเท่านั้น

" # " สัญลักษณ์ความคิดเห็น อะไรก็ตามที่ตามหลังสัญลักษณ์นี้ไปจนถึงท้ายบรรทัดคือ
ละเว้น

"คำสั่ง"
ดำเนินการคำสั่งในเชลล์ และแทรกเอาต์พุตของกระบวนการ ดูส่วน
แบ็คทิค เพื่อดูรายละเอียด

"สตริง"
อ้างสตริงที่อาจมีช่องว่าง เครื่องหมายดอลลาร์ ฯลฯ

บันทึกคำนำหน้าบันทึก ' เฮ้ นี่คือคำนำหน้าบันทึกของฉัน!';

"สตริง"
อ้างอิงสตริง (ดูด้านบน) แต่การอ้างอิงตัวแปรที่มีเครื่องหมายดอลลาร์เป็น
ประเมิน:

DNAT เป็น "$myhost:$myport";

คำสำคัญ
ในส่วนที่แล้ว เราได้แนะนำคำหลักพื้นฐานบางคำเช่น "โซ่" แล้ว
"โปรโตคอล" และ "ยอมรับ" มาสำรวจธรรมชาติของพวกเขากัน

คำหลักมีสามประเภท:

· ที่ตั้ง คีย์เวิร์ดกำหนดตำแหน่งที่จะสร้างกฎ ตัวอย่าง: "ตาราง", "โซ่"

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

การแข่งขันส่วนใหญ่จะตามด้วยพารามิเตอร์: "proto tcp", "daddr 172.16.0.0/12"

· เป้า คำหลักระบุว่าจะทำอย่างไรกับแพ็กเก็ต ตัวอย่าง: "ยอมรับ", "ปฏิเสธ",
"กระโดด".

เป้าหมายบางเป้าหมายกำหนดคีย์เวิร์ดเพิ่มเติมเพื่อระบุรายละเอียด: "ปฏิเสธด้วย icmp-
เข้าถึงเน็ตไม่ได้"

กฎทุกข้อประกอบด้วย a ที่ตั้ง และ เป้า, บวกจำนวนใดๆ ของ ที่ตรงกัน:

ตัวกรองตาราง # ตำแหน่ง
โปรโต tcp dport (http https) # match
ยอมรับ; # เป้า

พูดอย่างเคร่งครัดมีประเภทที่สี่: เฟิร์ม คีย์เวิร์ด (ซึ่งควบคุมภายในของ ferm
พฤติกรรม) แต่จะอธิบายในภายหลัง

พารามิเตอร์
คำหลักจำนวนมากใช้พารามิเตอร์ สิ่งเหล่านี้สามารถระบุเป็นตัวอักษร การอ้างอิงตัวแปรหรือ
รายการ (อาร์เรย์):

proto udp
เศร้า $TRUSTED_HOSTS;
โปรโต tcp dport (http https ssh);
LOG บันทึกคำนำหน้า "การแจ้งเตือน wardriver ขี้ขลาด:";

บางส่วนสามารถลบล้างได้ (รายการไม่สามารถปฏิเสธได้):

โปรโต !esp;
โปรโต udp dport !โดเมน;

คำหลักที่ไม่มีพารามิเตอร์จะถูกทำให้ไร้ผลโดยคำนำหน้า '!':

โปรโต tcp !syn;

อ่าน iptables(8) เพื่อดูว่า ! สามารถใช้ได้.

พื้นฐาน KEYWORDS


สถานที่ คำหลัก
โดเมน [ไอพี|ไอพี6]
ตั้งค่าโดเมน "ip" เป็นค่าเริ่มต้นและหมายถึง "IPv4" (iptables) "ip6" ใช้สำหรับ IPv6
สนับสนุนโดยใช้ "ip6tables"

ตาราง [ตัวกรอง|แนท|แมงเกิ้ล]
ระบุตาราง netfilter กฎนี้จะถูกแทรกไปที่: "filter" (ค่าเริ่มต้น),
“แนท” หรือ “แมงลัก”

โซ่ [ชื่อลูกโซ่]
ระบุ netfilter chain (ภายในตารางปัจจุบัน) กฎนี้จะเป็น
แทรกไปที่ ชื่อลูกโซ่ที่กำหนดไว้ล่วงหน้าทั่วไปคือ "INPUT", "OUTPUT", "FORWARD",
"PREROUTING", "POSTROUTING" ขึ้นอยู่กับตาราง ดู netfilter
เอกสารสำหรับรายละเอียด

หากคุณระบุ chain ที่ไม่มีอยู่ในนี้ ferm จะเพิ่มกฎให้กับ chain ที่กำหนดเอง
ด้วยชื่อนั้น

นโยบาย [ยอมรับ|วาง|..]
ระบุนโยบายเริ่มต้นสำหรับเชนปัจจุบัน (ในตัวเท่านั้น) สามารถเป็นหนึ่งใน
เป้าหมายในตัว (ACCEPT, DROP, REJECT, ...) แพ็กเก็ตที่ไม่ตรงกฎ
ในห่วงโซ่จะได้รับการปฏิบัติตามที่กำหนดโดยนโยบาย

เพื่อหลีกเลี่ยงความกำกวม ให้ระบุนโยบายของ chains ที่กำหนดไว้ล่วงหน้าทั้งหมดเสมอ
อย่างชัดเจน

@ซับเชน ["ชื่อโซ่"] { ... }
ทำงานเหมือนตัวดำเนินการบล็อกปกติ (เช่น ไม่มี @ซับเชน คีย์เวิร์ด) ยกเว้น
ที่ เฟิร์ม ย้ายกฎภายในวงเล็บปีกกาไปยังห่วงโซ่แบบกำหนดเองใหม่ ชื่อ
สำหรับห่วงโซ่นี้จะถูกเลือกโดยอัตโนมัติโดย ferm

ในหลายกรณี สิ่งนี้เร็วกว่าแค่บล็อก เนื่องจากเคอร์เนลอาจข้าม a
บล็อกกฎขนาดใหญ่เมื่อเงื่อนไขเบื้องต้นเป็นเท็จ ลองนึกภาพตัวอย่างต่อไปนี้:

ห่วงโซ่ตัวกรองตาราง INPUT {
เศร้า (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
โปรโต tcp dport (http https ssh) ยอมรับ;
โปรโต udp dport โดเมน ACCEPT;
}
}

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

ห่วงโซ่ตัวกรองตาราง INPUT {
เศร้า (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain {
โปรโต tcp dport (http https ssh) ยอมรับ;
โปรโต udp dport โดเมน ACCEPT;
}
}

คุณอาจกำหนดชื่อของสายย่อย:

saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
โปรโต tcp dport (http https ssh) ยอมรับ;
โปรโต udp dport โดเมน ACCEPT;
}

ชื่ออาจเป็นตัวอักษรสตริงที่ยกมา หรือนิพจน์ ferm แบบขยาย
เช่น @cat("interface_", $iface) หรือ @substr($var,0,20)

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

ขั้นพื้นฐาน iptables การจับคู่ คำหลัก
อินเตอร์เฟซ [ชื่ออินเทอร์เฟซ]
กำหนดชื่ออินเทอร์เฟซ การ์ดเครือข่ายภายนอกของคุณ เช่น eth0 หรือ dialup like
ppp1 หรืออุปกรณ์ใดก็ตามที่คุณต้องการจับคู่เพื่อส่งแพ็กเก็ต เทียบเท่า
ไปที่สวิตช์ "-i" ใน iptables(8)

ใบหน้าภายนอก [ชื่ออินเทอร์เฟซ]
เช่นเดียวกับอินเทอร์เฟซ สำหรับการจับคู่อินเทอร์เฟซขาออกสำหรับแพ็กเก็ตเท่านั้น เช่น in
iptables(8)

โปรโตคอล [ชื่อโปรโตคอล|หมายเลขโปรโตคอล]
ปัจจุบันเคอร์เนลรองรับคือ tcp, udp และ icmp หรือตามลำดับ
หมายเลข

เศร้า|พ่อ [ที่อยู่-spec]
ตรงกับแพ็กเก็ตที่มาจากที่อยู่ที่ระบุ (saddr) หรือเป้าหมายที่
ที่อยู่ (พ่อ).

ตัวอย่าง:

Saddr 192.168/8 ยอมรับ; # (เหมือนกันกับอันถัดไป :)
ยอมรับ 192.168.0.0/255.255.255.0
daddr my.domain.com ยอมรับ;

ส่วน
ระบุว่าควรจับคู่แพ็กเก็ต IP ที่แยกส่วนเท่านั้น เมื่อแพ็กเก็ตเป็น
ใหญ่กว่าขนาดแพ็กเก็ตสูงสุดที่ระบบของคุณสามารถจัดการได้ (เรียกว่า Maximum
Transmission Unit หรือ MTU) พวกมันจะถูกสับเป็นชิ้นเล็กชิ้นน้อยแล้วส่งทีละตัวเป็น
แพ็คเก็ตเดียว ดู ifconfig(8) หากคุณต้องการค้นหา MTU สำหรับระบบของคุณ (the
ค่าเริ่มต้นคือ 1500 ไบต์)

Fragment มักใช้ในการโจมตี DOS เนื่องจากไม่มีทางที่จะค้นหาได้
ที่มาของแพ็กเก็ตแฟรกเมนต์

กีฬา|dport [พอร์ต-spec]
จับคู่บนแพ็กเก็ตบนพอร์ต TCP หรือ UDP ที่ระบุ "กีฬา" ตรงกับที่มา
พอร์ต และ dport ตรงกับพอร์ตปลายทาง

การจับคู่นี้สามารถใช้ได้หลังจากที่คุณระบุ "protocol tcp" หรือ "protocol udp" แล้วเท่านั้น
เพราะมีเพียงสองโปรโตคอลนี้เท่านั้นที่มีพอร์ต

และตัวอย่างพอร์ต/ช่วงที่ถูกต้องบางส่วน:

dport 80 ยอมรับ;
dport http ยอมรับ;
dport ssh:http ยอมรับ;
dport 0:1023 ยอมรับ; # เทียบเท่ากับ :1023
dport 1023:65535 ยอมรับ;

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

โมดูล [ชื่อโมดูล]
โหลดโมดูล iptables โมดูลส่วนใหญ่มีคีย์เวิร์ดที่ตรงกันมากกว่า เราจะไปถึง
นั้นในภายหลัง

ขั้นพื้นฐาน เป้า คำหลัก
กระโดด [ชื่อโซ่ที่กำหนดเอง]
ข้ามไปที่ห่วงโซ่ที่กำหนดเอง หากไม่มีกฎในห่วงโซ่แบบกำหนดเองที่ตรงกัน netfilter จะส่งคืน
ไปยังกฎถัดไปในสายก่อนหน้า

จริง [ชื่อโซ่ที่กำหนดเอง]
ไปที่ห่วงโซ่ที่กำหนดเอง ไม่เหมือนกับ กระโดด ตัวเลือก กลับ จะไม่ดำเนินการต่อไป
ในสายโซ่นี้ แต่ในสายโซ่ที่เรียกเราผ่านทาง กระโดด.

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

ยอมรับ ยอมรับแพ็กเก็ตที่ตรงกัน

DROP วางแพ็กเก็ตที่ตรงกันโดยไม่ต้องแจ้งให้ทราบล่วงหน้า

ปฏิเสธ ปฏิเสธแพ็กเก็ตที่ตรงกัน เช่น ส่งแพ็กเก็ต ICMP ไปยังผู้ส่ง ซึ่งเป็นพอร์ต
ไม่สามารถเข้าถึงได้โดยค่าเริ่มต้น คุณสามารถระบุประเภท ICMP อื่นได้

ปฏิเสธ; # ค่าเริ่มต้นเป็น icmp-port-unreachable
REJECT ปฏิเสธด้วย icmp-net-unreachable;

พิมพ์ "iptables -j REJECT -h" เพื่อดูรายละเอียด

กลับ เสร็จสิ้นห่วงโซ่ปัจจุบันและกลับไปที่สายการโทร (ถ้า "jump
[custom-chain-name]" ถูกใช้)

NOP ไม่มีการดำเนินการเลย

เพิ่มเติม KEYWORDS


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

iptables การจับคู่ โมดูล
บัญชี ปริมาณการใช้บัญชีสำหรับโฮสต์ทั้งหมดในเครือข่าย/เน็ตมาสก์ที่กำหนด นี่เป็นหนึ่งใน
จับคู่โมดูลที่ทำงานเหมือนเป้าหมาย กล่าวคือ คุณจะต้องใช้ NOP
เป้า

บัญชี mod ชื่อ mynetwork aaddr 192.168.1.0/24 สั้น ๆ NOP;

ประเภทแอดเดรส
ตรวจสอบประเภทที่อยู่ ทั้งที่อยู่ต้นทางหรือที่อยู่ปลายทาง

mod addrtype src-type ออกอากาศ;
mod addrtype dst-type ท้องถิ่น;

พิมพ์ "iptables -m addrtype -h" เพื่อดูรายละเอียด

ah ตรวจสอบส่วนหัว SPI ในแพ็กเก็ต AH

สมัย ahspi 0x101;
mod อา ahspi ! 0x200:0x2ff;

อาร์กิวเมนต์เพิ่มเติมสำหรับ IPv6:

mod ah ahlen 32 ยอมรับ;
mod ah ahlen !32 ยอมรับ;
mod ah ahres ยอมรับ;

ความเห็น เพิ่มความคิดเห็นสูงสุด 256 อักขระในกฎ โดยไม่มีผลกระทบ สังเกตว่า
ไม่เหมือนกับความคิดเห็นของ ferm ('#') ข้อความนี้จะแสดงใน "iptables -L"

mod comment comment "นี่คือความคิดเห็นของฉัน" ยอมรับ;

สภาพ
จับคู่ว่าค่าใน /proc/net/ipt_condition/NAME คือ 1 (เส้นทาง is
/proc/net/ip6t_condition/NAME สำหรับโดเมน ip6)

เงื่อนไขเงื่อนไข mod (abc def) ยอมรับ;
สภาพ mod สภาพ !foo ยอมรับ;

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

mod connbytes connbytes 65536: connbytes-dir ทั้งไบต์โหมด connbytes ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir ตอบกลับแพ็คเก็ตโหมด connbytes ACCEPT;

ค่าที่ถูกต้องสำหรับ connbytes-dir: เป็นต้นฉบับ, ตอบ, ทั้งสอง; สำหรับ connbytes โหมด:
แพ็คเก็ต, ไบต์, เฉลี่ย.

ไม่จำกัด
อนุญาตให้คุณจำกัดจำนวนการเชื่อมต่อ TCP ขนานกับเซิร์ฟเวอร์ต่อ
ที่อยู่ IP ของไคลเอ็นต์ (หรือบล็อกที่อยู่)

mod connlimit connlimit เหนือ 4 REJECT;
mod connlimit connlimit- ด้านบน !4 ACCEPT;
mod connlimit connlimit- เหนือ 4 connlimit-mask 24 REJECT;

คอนมาร์ค
ทำเครื่องหมายในช่องทำเครื่องหมายที่เกี่ยวข้องกับการเชื่อมต่อ ซึ่งกำหนดโดยเป้าหมาย CONNMARK

mod connmark เครื่องหมาย 64;
mod เครื่องหมาย connmark 6/7;

คอนแทรค
ตรวจสอบข้อมูลการติดตามการเชื่อมต่อ

mod conntrack ctstate (จัดตั้งขึ้นที่เกี่ยวข้อง);
mod เชื่อมต่อ ctproto tcp;
mod เชื่อมต่อ ctorigsrc 192.168.0.2;
mod เชื่อมต่อกับ ctorigdst 1.2.3.0/24;
mod เชื่อมต่อ ctorigsrcport 67;
mod เชื่อมต่อ ctorigdstport 22;
mod เชื่อมต่อ ctreplsrc 2.3.4.5;
mod เชื่อมต่อ ctrepldst ! 3.4.5.6;
mod conntrack ctstatus มั่นใจ;
mod เชื่อมต่อ ctexpire 60;
mod เชื่อมต่อ ctexpire 180:240;

พิมพ์ "iptables -m conntrack -h" เพื่อดูรายละเอียด

ดีซีซีพี ตรวจสอบแอตทริบิวต์เฉพาะ DCCP (Datagram Congestion Control Protocol) นี้
โมดูลจะโหลดโดยอัตโนมัติเมื่อคุณใช้ "โปรโตคอล dccp"

โปรโต dccp กีฬา 1234 dport 2345 ยอมรับ;
โปรโต dccp dccp-types (SYNCACK ACK) ยอมรับ;
proto dccp ประเภท dccp !REQUEST DROP;
โปรโต dccp dccp-option 2 ยอมรับ;

ดีเอสพี จับคู่ฟิลด์ DSCP 6 บิตภายในฟิลด์ TOS

ดัดแปลง dscp dscp 11;
mod dscp dscp-คลาส AF41;

ECN จับคู่บิต ECN ของส่วนหัว IPv4 TCP

mod ecn ecn-tcp-cwr;
mod ecn ecn-tcp-ece;
สมัย ecn ecn-ip-ect 2;

พิมพ์ "iptables -m ecn -h" เพื่อดูรายละเอียด

ESP ตรวจสอบส่วนหัว SPI ในแพ็กเก็ต ESP

mod esp esppi 0x101;
mod esp esppi ! 0x200:0x2ff;

eu64 "โมดูลนี้ตรงกับส่วน EUI-64 ของที่อยู่ IPv6 ที่กำหนดค่าอัตโนมัติแบบไร้สัญชาติ
มันเปรียบเทียบ EUI-64 ที่ได้มาจากที่อยู่ MAC ต้นทางในเฟรม Ehternet ด้วย
ที่อยู่ต้นทาง IPv64 6 บิตที่ต่ำกว่า แต่บิต "สากล/ท้องถิ่น" ไม่ใช่
เปรียบเทียบ โมดูลนี้ไม่ตรงกับเฟรมเลเยอร์ลิงก์อื่น และใช้ได้เฉพาะใน
PREROUTING, INPUT และ FORWARD chains"

mod eui64 ยอมรับ;

เลือน "โมดูลนี้ตรงกับขีด จำกัด อัตราตามตัวควบคุมลอจิกคลุมเครือ [FLC]"

mod เลือนขีด จำกัด ล่าง 10 ขีด จำกัด บน 20 ยอมรับ;

ตรงกับส่วนหัวตัวเลือก Hop-by-Hop (ip6)

mod hbh hbh-len 8 ยอมรับ;
mod hbh hbh-len !8 ยอมรับ;
mod hbh hbh-opts (1:4 2:8) ยอมรับ;

hl ตรงกับฟิลด์ Hop Limit (ip6)

mod hl hl-eq (8 10) ยอมรับ;
mod hl hl-eq !5 ยอมรับ;
mod hl hl-gt 15 ยอมรับ;
mod hl hl-lt ​​2 ยอมรับ;

ผู้ช่วย ตรวจสอบโมดูลตัวช่วย conntrack ที่ติดตามการเชื่อมต่อนี้ ท่าเรืออาจจะ
ระบุด้วย "-portnr"

mod helper helper irc ยอมรับ;
ผู้ช่วย mod ผู้ช่วย ftp-21 ยอมรับ;

ไอซีเอ็มพี ตรวจสอบแอตทริบิวต์เฉพาะของ ICMP โมดูลนี้จะโหลดโดยอัตโนมัติเมื่อคุณใช้
"โปรโตคอลไอซีเอ็มพี"

โปรโต icmp icmp-type echo-request ยอมรับ;

ตัวเลือกนี้ยังสามารถใช้ใน be ip6 โดเมนแม้ว่าจะเรียกว่า icmpv6 in
ip6tables.

ใช้ "iptables -p icmp "-h" เพื่อรับรายการประเภท ICMP ที่ถูกต้อง

ไอปราง จับคู่ช่วงที่อยู่ IPv4

mod iprange src-ช่วง 192.168.2.0-192.168.3.255;
mod iprange dst-ช่วง ! 192.168.6.0-192.168.6.255;

ตัวเลือก ipv4
จับคู่กับตัวเลือกส่วนหัวของ IPv4 เช่น การกำหนดเส้นทางต้นทาง บันทึกเส้นทาง การประทับเวลา และ
การแจ้งเตือนเราเตอร์

mod ipv4options ssrr ยอมรับ;
mod ipv4options lsrr ยอมรับ;
mod ipv4options ไม่มี srr ยอมรับ;
mod ipv4options !rr ยอมรับ;
mod ipv4options !ts ยอมรับ;
mod ipv4options !ra ยอมรับ;
mod ipv4options !any-opt ยอมรับ;

ipv6 ส่วนหัว
ตรงกับส่วนหัวส่วนขยาย IPv6 (ip6)

ส่วนหัว mod ipv6header !(hop Frag) ยอมรับ;
ส่วนหัว mod ipv6header (auth dst) ยอมรับ;

แฮชลิมิต
คล้ายกับ 'mod limit' แต่เพิ่มความสามารถในการเพิ่มต่อปลายทางหรือต่อพอร์ต
ขีด จำกัด ที่จัดการในตารางแฮช

mod hashlimit hashlimit 10/นาที hashlimit-burst 30/นาที
hashlimit-mode dstip hashlimit-name foobar ยอมรับ;

ค่าที่เป็นไปได้สำหรับโหมด hashlimit: dstip dstport srcip srcport (หรือรายการที่มี
มากกว่าหนึ่งข้อ)

มีการตั้งค่าที่เป็นไปได้มากกว่านี้ พิมพ์ "iptables -m hashlimit -h" for
เอกสาร

ความยาว ตรวจสอบความยาวของบรรจุภัณฑ์

ความยาวม็อด 128; # 128 ไบต์พอดี
ความยาวม็อด 512:768; # พิสัย
mod ความยาว ความยาว ! 256; #ถูกปฏิเสธ

จำกัด จำกัดอัตราแพ็กเก็ต

จำกัด mod จำกัด 1/วินาที;
ขีด จำกัด ของ mod 15 / นาที จำกัด - ระเบิด 10;

พิมพ์ "iptables -m limit -h" เพื่อดูรายละเอียด

Mac จับคู่ที่อยู่ MAC ต้นทาง

mod mac mac- แหล่งที่มา 01:23:45:67:89;

เครื่องหมาย จับคู่แพ็กเก็ตตามฟิลด์เครื่องหมาย netfilter นี่อาจเป็นจำนวนเต็ม 32 บิต
ระหว่าง 0 และ 4294967295

เครื่องหมาย mod เครื่องหมาย 42;

mh ตรงกับส่วนหัวของการเคลื่อนไหว (domain ip6).

proto mh mh-type Binding-update ACCEPT;

หลายพอร์ต
จับคู่ชุดพอร์ตต้นทางหรือปลายทาง (UDP และ TCP เท่านั้น)

mod หลายพอร์ตซอร์สพอร์ต (https ftp);
mod พอร์ตปลายทางหลายพอร์ต (โดเมน mysql);

กฎนี้มีข้อได้เปรียบเหนือ "dport" และ "sport" อย่างมาก: กฎนี้สร้างกฎเพียงข้อเดียว
มากถึง 15 พอร์ตแทนที่จะเป็นกฎเดียวสำหรับทุกพอร์ต

ที่ n จับคู่ทุกแพ็กเก็ต

mod nth ทุกๆ 3;
mod n ตัวนับ 5 ทุกๆ 2;
mod nth เริ่ม 2 ทุกๆ 3;
mod nth เริ่ม 5 แพ็กเก็ต 2 ทุกๆ 6;

พิมพ์ "iptables -m nth -h" เพื่อดูรายละเอียด

อฟช จับคู่แพ็กเก็ตขึ้นอยู่กับระบบปฏิบัติการของผู้ส่ง

mod osf ประเภท Linux;
mod osf ! ประเภท FreeBSD ttl 1 บันทึก 1;

พิมพ์ "iptables -m osf -h" เพื่อดูรายละเอียด

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

เจ้าของ mod เจ้าของ uid 0;
เจ้าของ mod เจ้าของ gid 1000;
เจ้าของ mod เจ้าของ pid 5432;
เจ้าของ mod เจ้าของซิด 6543;
เจ้าของ mod cmd เจ้าของ "sendmail";

("cmd-owner", "pid-owner" และ "sid-owner" ไม่ต้องการแพตช์เคอร์เนลพิเศษ
รวมอยู่ในเคอร์เนล vanilla Linux)

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

mod physdev physdev ใน ppp1;
mod physdev physdev ออก eth2;
mod physdev physdev-อยู่ใน;
mod physdev physdev-is-ออก;
mod physdev physdev-is-สะพาน;

pkttype ตรวจสอบประเภทแพ็กเก็ตลิงค์เลเยอร์

mod pkttype pkt ชนิด unicast;
mod pkttype pkt-type ออกอากาศ;
mod pkttype มัลติคาสต์ประเภท pkt;

นโยบาย ตรงกับนโยบาย IPsec ที่ใช้กับแพ็กเก็ตนี้

นโยบาย mod dir ออก pol ipsec ยอมรับ;
mod นโยบายที่เข้มงวด reqid 23 spi 0x10 โปรโต ah ยอมรับ;
โหมดนโยบาย mod tunnel tunnel-src 192.168.1.2 ยอมรับ;
โหมดนโยบาย mod tunnel tunnel-dst 192.168.2.1 ยอมรับ;
นโยบาย mod ที่เข้มงวด ต่อไป reqid 24 spi 0x11 ยอมรับ;

โปรดทราบว่าคำหลัก โปรโต ยังใช้เป็นชวเลขรุ่นของ โปรโตคอล
(โมดูลการแข่งขันในตัว) คุณแก้ไขข้อขัดแย้งนี้ได้โดยใช้คำสั่ง long . เสมอ
คีย์เวิร์ด โปรโตคอล.

PSD ตรวจจับการสแกนพอร์ต TCP/UDP

mod psd psd- น้ำหนัก- เกณฑ์ 21 psd- ล่าช้า- เกณฑ์ 300
psd-lo-ports-weight 3 psd-hi-ports-weight 1 DROP;

ส่วนแบ่ง ใช้โควต้าเครือข่ายโดยการลดจำนวนตัวนับไบต์กับแต่ละแพ็กเก็ต

ม็อด โควต้า โควต้า 65536 ยอมรับ;

สุ่ม จับคู่เปอร์เซ็นต์แบบสุ่มของแพ็กเก็ตทั้งหมด

mod สุ่มเฉลี่ย 70;

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

อาณาจักร mod อาณาจักร 3;

เมื่อเร็ว ๆ นี้ ทำเครื่องหมายที่อยู่ IP ต้นทางชั่วคราว

mod ชุดล่าสุด;
mod ตรวจสอบล่าสุด วินาที 60;
mod ตั้งชื่อ rsource ล่าสุด "badguy";
mod ชุดล่าสุด rdest;
mod ล่าสุด ตรวจสอบชื่อ rsource "badguy" วินาที 60;
mod อัปเดตล่าสุด วินาที 120 hitcount 3 rttl;

โมดูล netfilter นี้มีข้อบกพร่องในการออกแบบ: แม้ว่าจะใช้งานเป็นแบบที่ตรงกัน
โมดูลมีพฤติกรรมเหมือนเป้าหมายเมื่อใช้คำหลัก "set"

<http://snowman.net/projects/ipt_recent/>

rt จับคู่ส่วนหัวการกำหนดเส้นทาง IPv6 (ip6 เท่านั้น)

mod rt rt-type 2 rt-len 20 ยอมรับ;
mod rt rt-type !2 rt-len !20 ยอมรับ;
mod rt rt-segsleft 2:3 ยอมรับ;
mod rt rt-segsleft !4:5 ยอมรับ;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-ไม่เข้มงวด ยอมรับ;

สคป ตรวจสอบแอตทริบิวต์เฉพาะของ SCTP (Stream Control Transmission Protocol) นี้
โมดูลจะโหลดโดยอัตโนมัติเมื่อคุณใช้ "โปรโตคอล sctp"

โปรโต sctp sport 1234 dport 2345 ยอมรับ;
proto sctp ชนิดก้อนเท่านั้น DATA:Be ACCEPT;
โปรโต sctp ชนิดก้อนใด ๆ (INIT INIT_ACK) ยอมรับ;
โปรโต sctp ชนิดก้อน !all (HEARTBEAT) ยอมรับ;

ใช้ "iptables -p sctp "-h"" เพื่อรับรายการประเภทอันที่ถูกต้อง

เซ็ต ตรวจสอบ IP/พอร์ต/MAC ต้นทางหรือปลายทางกับชุด

ชุด mod ชุด badguys src DROP;

ดูhttp://ipset.netfilter.org/> สำหรับข้อมูลเพิ่มเติม

รัฐ ตรวจสอบสถานะการติดตามการเชื่อมต่อ

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

พิมพ์ "iptables -m state -h" เพื่อดูรายละเอียด

สถิติ
ทายาทของ ที่ n และ สุ่ม, ขณะนี้ไม่มีเอกสารใน iptables(8) หน้าคน

โหมดสถิติ mod ความน่าจะเป็นแบบสุ่ม 0.8 ยอมรับ;
โหมดสถิติ mod nth ทุกๆ 5 แพ็กเก็ต 0 DROP;

เชือก ตรงกับสตริง

สตริงสตริง mod "foo bar" ยอมรับ;
mod string algo kmp จาก 64 ถึง 128 hex-string "deadbeef" ยอมรับ;

TCP ตรวจสอบแอตทริบิวต์เฉพาะของ TCP โมดูลนี้จะโหลดโดยอัตโนมัติเมื่อคุณใช้
"โปรโตคอล TCP"

โปรโต tcp กีฬา 1234;
โปรโต tcp dport 2345;
โปรโต tcp tcp-flags (SYN ACK) SYN;
โปรโต tcp tcp-flags ! (SYN ACK) ซิน;
โปรโต tcp tcp-flags ทั้งหมด (RST ACK);
โปรโต tcp syn;
โปรโต tcp tcp-ตัวเลือก 2;
โปรโต tcp mss 512;

พิมพ์ "iptables -p tcp -h" เพื่อดูรายละเอียด

tcpmss ตรวจสอบฟิลด์ TCP MSS ของแพ็กเก็ต SYN หรือ SYN/ACK

mod tcpmss mss 123 ยอมรับ;
mod tcpmss mss 234:567 ยอมรับ;

เวลา ตรวจสอบว่าเวลาที่แพ็คเก็ตมาถึงอยู่ในช่วงที่กำหนดหรือไม่

เวลา mod เริ่มเวลา 12:00 น.;
ม็อด ไทม์สต็อป 13:30 น.;
ม็อด วัน (จันทร์ พุธ ศุกร์);
เวลา mod วันที่เริ่มต้น 2005:01:01;
เวลา mod วันที่เริ่มต้น 2005:01:01:23:59:59 น.;
เวลาม็อด datestop 2005:04:01;
เวลา mod ของเดือน (30 31);
mod เวลา วันธรรมดา (พุธ พฤ);
เวลา mod เริ่มเวลา 12:00 utc;
เวลา mod เริ่มเวลา 12:00 localtz;

พิมพ์ "iptables -m time -h" เพื่อดูรายละเอียด

TOS จับคู่แพ็กเก็ตบนค่า TOS ที่ระบุ

mod tos tos ลดค่าใช้จ่ายยอมรับ;
mod tos tos !ยอมรับบริการปกติ;

พิมพ์ "iptables -m tos -h" เพื่อดูรายละเอียด

TTL จับคู่ฟิลด์ ttl (time to live) ในส่วนหัว IP

mod ttl ttl-eq 12; # ttl เท่ากับ
mod ttl ttl-gt 10; # ttl มากกว่า
mod ttl ttl-lt 16; # ttl น้อยกว่า

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

mod u32 u32 '6&0xFF=1' ยอมรับ;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') วาง;

ไม่สะอาด จับคู่แพ็กเก็ตที่ดูเหมือนผิดรูปแบบหรือผิดปกติ แมทช์นี้ไม่มีอีกแล้ว
พารามิเตอร์

iptables เป้า โมดูล
เป้าหมายเพิ่มเติมต่อไปนี้มีอยู่ใน ferm โดยที่คุณเปิดใช้งานใน
เคอร์เนลของคุณ:

จัดประเภท
ตั้งค่าคลาส CBQ

CLASSIFY ชุดคลาส 3:50;

คลัสเตอร์
กำหนดค่าคลัสเตอร์อย่างง่ายของโหนดที่ใช้ที่อยู่ IP และ MAC ร่วมกัน
การเชื่อมต่อมีการกระจายแบบคงที่ระหว่างโหนด

CLUSTERIP ใหม่ hashmode sourceip clustermac 00:12:34:45:67:89
โหนดทั้งหมด 4 โหนดในเครื่อง 2 hash-init 12345;

คอนมาร์ค
ตั้งค่าเครื่องหมาย netfilter ที่เกี่ยวข้องกับการเชื่อมต่อ

CONNMARK ชุดเครื่องหมาย 42;
CONNMARK บันทึกเครื่องหมาย;
CONNMARK เรียกคืนเครื่องหมาย;
CONNMARK บันทึกมาร์คมาสก์ 0x7fff;
CONNMARK คืนค่ามาร์คมาสก์ 0x8000;

คอนเซคมาร์ค
โมดูลนี้คัดลอกเครื่องหมายการรักษาความปลอดภัยจากแพ็กเก็ตไปยังการเชื่อมต่อ (หากไม่มีป้ายกำกับ)
และจากการเชื่อมต่อกลับไปยังแพ็กเก็ต (เฉพาะในกรณีที่ไม่มีป้ายกำกับ) มักใช้ใน
ร่วมกับ SECMARK จะใช้ได้เฉพาะในตาราง mangle

CONNSECMARK บันทึก;
CONNSECMARK คืนค่า;

ดีเอ็นเอท ไปยัง [ที่อยู่ IP|ช่วง IP|ช่วงพอร์ต IP]
เปลี่ยนที่อยู่ปลายทางของแพ็กเก็ต

DNAT ถึง 10.0.0.4;
DNAT ถึง 10.0.0.4:80;
DNAT ถึง 10.0.0.4: 1024-2048;
DNAT ถึง 10.0.1.1-10.0.1.20;

ECN เป้าหมายนี้ช่วยให้สามารถเลือกแก้ไขหลุมดำ ECN ที่รู้จักได้ ทำได้เท่านั้น
ใช้ในตาราง mangle

ECN ecn-tcp-ลบ;

HL แก้ไขฟิลด์ IPv6 Hop Limit (ip6/mangle เท่านั้น)

HL hl-ชุด 5;
HL hl-ธันวาคม 2;
HL hl-inc 1;

IPV4OPTSSTRIP
ดึงตัวเลือก IP ทั้งหมดออกจากแพ็กเก็ต โมดูลนี้ไม่มีตัวเลือกใดๆ

IPV4OPTSSTRIP;

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

บันทึกคำนำหน้าบันทึกคำเตือนระดับบันทึก "ดูนี่: ";
บันทึกล็อก-tcp-ลำดับ บันทึก-tcp-ตัวเลือก;
บันทึกล็อก-ip-ตัวเลือก;

เครื่องหมาย ตั้งค่าฟิลด์เครื่องหมาย netfilter สำหรับแพ็กเก็ต (จำนวนเต็ม 32 บิตระหว่าง 0 ถึง
4294967295):

MARK ชุดเครื่องหมาย 42;
มาร์ค ชุด-xmark 7/3;
MARK และ-mark 31;
MARK หรือเครื่องหมาย 1;
มาร์ก ซอร์-มาร์ก 12;

สวมหน้ากาก
Masquerades จับคู่แพ็กเก็ต ตามด้วยพอร์ตหรือช่วงพอร์ตสำหรับ
iptables ระบุเป็น "123", "123-456" หรือ "123:456" พารามิเตอร์ช่วงพอร์ต
ระบุพอร์ตท้องถิ่นที่ปลอมแปลงการเชื่อมต่อที่ควรจะมาจาก

หน้ากาก;
MASQUERADE ไปยังพอร์ต 1234:2345;
MASQUERADE ไปยังพอร์ต 1234:2345 สุ่ม;

กระจก เป้าหมายการสาธิตทดลองซึ่งสลับช่องต้นทางและปลายทาง
ในส่วนหัวของ IP

กระจก;

เน็ตแมป แมปเครือข่ายทั้งหมดไปยังเครือข่ายอื่นใน แน็ต ตาราง

NETMAP ถึง 192.168.2.0/24;

นอแทรค ปิดใช้งานการติดตามการเชื่อมต่อสำหรับแพ็กเก็ตทั้งหมดที่ตรงกับกฎนั้น

โปรโต tcp dport (135:139 445) โนแทรค;

เอ็นเอฟล็อก บันทึกแพ็กเก็ตผ่าน netlink; นี่คือทายาทของ ยูล็อก.

NFLOG nflog-group 5 nflog-prefix "ดูนี่: ";
NFLOG ช่วง nflog 256;
NFLOG เกณฑ์ nflog 10;

เอ็นคิว การจัดคิว Userspace ต้องการการสนับสนุนเคอร์เนล nfnetlink_queue

โปรโต tcp dport ftp NFQUEUE คิว-หมายเลข 20;

คิว การจัดคิว Userspace ก่อนหน้าไปยัง เอ็นคิว. แพ็กเก็ตทั้งหมดไปที่คิว 0

โปรโต tcp dport ftp คิว;

เปลี่ยนเส้นทาง ไปยังพอร์ต [พอร์ต]
พร็อกซี่โปร่งใส: เปลี่ยน IP ปลายทางของแพ็กเก็ตไปยังเครื่อง
ตัวเอง

โปรโต tcp dport http เปลี่ยนเส้นทางไปยังพอร์ต 3128;
โปรโต tcp dport http เปลี่ยนเส้นทางไปยังพอร์ต 3128 สุ่ม;

เหมือนกัน คล้ายกับ SNAT แต่ไคลเอ็นต์ถูกแมปกับ IP ต้นทางเดียวกันสำหรับทั้งหมด
การเชื่อมต่อ

เหมือนกับ 1.2.3.4-1.2.3.7;
เหมือนกันถึง 1.2.3.8-1.2.3.15 พยักหน้า;
เหมือนกันถึง 1.2.3.16-1.2.3.31 สุ่ม;

เซคมาร์ค ใช้เพื่อตั้งค่าเครื่องหมายความปลอดภัยที่เกี่ยวข้องกับแพ็กเก็ตสำหรับใช้งานโดย
ระบบย่อยความปลอดภัยเช่น SELinux ใช้ได้เฉพาะในตาราง mangle

SECMARK selctx "system_u:object_r:httpd_packet_t:s0";

ตลาดหลักทรัพย์ [เพิ่มชุด|ลบชุด] [ชื่อชุด] [ธง]
เพิ่ม IP ให้กับชุดที่ระบุ ดูhttp://ipset.netfilter.org/>

โปรโต icmp icmp-type echo-request SET add-set badguys src;

สแนท ไปยัง [ที่อยู่ IP|ช่วง IP|ช่วงพอร์ต IP]
เปลี่ยนที่อยู่ต้นทางของแพ็กเก็ต

SNAT ถึง 1.2.3.4;
SNAT ถึง 1.2.3.4:20000-30000;
SNAT ถึง 1.2.3.4 สุ่ม;

ทีซีพีเอ็มเอส แก้ไขค่า MSS ของแพ็กเก็ต TCP SYN

TCPMSS ชุด-mss 1400;
TCPMSS แคลมป์-mss-to-pmtu;

ไอ ตั้งค่า [ค่า]
ตั้งค่า tcp package Type Of Service bit เป็นค่านี้ นี้จะถูกใช้โดย
ตัวกำหนดตารางเวลาการรับส่งข้อมูลใด ๆ ก็ตามส่วนใหญ่เป็นเครื่อง linux ของคุณเอง แต่บางที
มากกว่า. tos-bits ดั้งเดิมจะเว้นว่างไว้และเขียนทับด้วยค่านี้

TOS set-tos เพิ่มปริมาณงานสูงสุด;
TOS และ -tos 7;
TOS หรือ -tos 1;
TOS xor-tos 4;

พิมพ์ "iptables -j TOS -h" เพื่อดูรายละเอียด

TTL แก้ไขฟิลด์ส่วนหัว TTL

TTL ttl-ชุด 16;
TTL ttl-ธันวาคม 1; # ลดลง 1
TTL ttl-inc 4; # เพิ่มขึ้น 4

ยูล็อก บันทึกแพ็กเก็ตไปยังโปรแกรม userspace

ULOG ulog-nlgroup 5 ulog-prefix "ดูนี่: ";
ULOG ulog-crange 256;
ULOG ulog-qthreshold 10;

อื่น ๆ โดเมน


ตั้งแต่เวอร์ชั่น 2.0 เฟิร์ม รองรับไม่เพียงเท่านั้น ip และ ip6แต่ยัง ARP (ตาราง ARP) และ eb
(ตารางการเชื่อมต่ออีเธอร์เน็ต) แนวความคิดคล้ายกับ iptables.

aptables คำหลัก
แหล่งที่มา-ip, ปลายทาง-ip
จับคู่ที่อยู่ IPv4 ต้นทางหรือปลายทาง เหมือนกับ เศร้า และ พ่อ ที่ ip
โดเมน.

ที่มา-mac, ปลายทาง-mac
จับคู่ที่อยู่ MAC ต้นทางหรือปลายทาง

อินเตอร์เฟซ, ใบหน้าภายนอก
อินพุตและเอาต์พุตอินเทอร์เฟซ

h-ความยาว
ความยาวฮาร์ดแวร์ของแพ็กเก็ต

ห่วงโซ่อินพุต h-ความยาว 64 ยอมรับ;

opcode รหัสการทำงาน สำหรับรายละเอียด โปรดดูที่ iptables(8)

opcode 9 ยอมรับ;

h-ประเภท ประเภทฮาร์ดแวร์

h-type 1 ยอมรับ;

โปรโตไทป์
ประเภทโปรโตคอล

โปรโตประเภท 0x800 ยอมรับ;

แมงป่อง
คีย์เวิร์ด มะม่วง-ip-s, มะม่วง-ip-d, มะม่วง-mac-s, มะม่วง-mac-d, mangle-เป้าหมาย
อาจใช้สำหรับ ARP mangling ดู iptables(8) สำหรับรายละเอียด

EBtables คำหลัก
โปรโต จับคู่โปรโตคอลที่สร้างเฟรม เช่น IPv4 or พรรคพลังประชาชน. ดูรายชื่อได้ที่
/etc/ethertypes.

อินเตอร์เฟซ, ใบหน้าภายนอก
อินพุตทางกายภาพและอินเทอร์เฟซเอาต์พุต

ตรรกะใน, ตรรกะออก
อินเตอร์เฟสลอจิคัลบริดจ์

เศร้า, พ่อ
จับคู่ที่อยู่ MAC ต้นทางหรือปลายทาง

การจับคู่ โมดูล
รองรับโมดูลการจับคู่ต่อไปนี้: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, ล็อก

เป้าหมาย (Target) ส่วนขยาย
รองรับส่วนขยายเป้าหมายต่อไปนี้: arpreply, dnat, mark, redirect,
ฉูดฉาด

โปรดทราบว่ามีความขัดแย้งระหว่าง --เครื่องหมาย จาก มาร์ค_ม โมดูลการแข่งขัน
และ -j เครื่องหมาย. เนื่องจากทั้งสองจะถูกนำไปใช้กับ ferm keyword เครื่องหมายเรา
ตัดสินใจแก้ปัญหานี้โดยการเขียนชื่อเป้าหมายเป็นตัวพิมพ์ใหญ่เหมือนอย่างอื่น
โดเมน ตัวอย่างต่อไปนี้เขียนเครื่องหมาย 1 ถึง 2:

มาร์ค 1 มาร์ค 2;

ADVANCED คุณลักษณะเด่น


ตัวแปร
ในไฟล์ไฟร์วอลล์ที่ซับซ้อน การใช้ตัวแปรจะเป็นประโยชน์ เช่น การให้เครือข่าย
อินเทอร์เฟซชื่อที่มีความหมาย

ในการตั้งค่าตัวแปร ให้เขียน:

@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $MORE_PORTS = ($พอร์ต 8080);

ในโค้ด ferm จริง ตัวแปรจะถูกใช้เหมือนกับพารามิเตอร์คีย์เวิร์ดอื่นๆ:

อินเตอร์เฟสอินพุตลูกโซ่ $DEV_INTERNET โปรโต tcp dport $MORE_PORTS ยอมรับ;

โปรดทราบว่าตัวแปรสามารถใช้ได้ในพารามิเตอร์คำหลักเท่านั้น ("192.168.1.1", "http"); พวกเขา
ต้องไม่มีคีย์เวิร์ด ferm เช่น "proto" หรือ "interface"

ตัวแปรใช้ได้เฉพาะในบล็อกปัจจุบัน:

@def $DEV_INTERNET = eth1;
ห่วงโซ่อินพุต {
โปรโต tcp {
@def $DEV_INTERNET = ppp0;
อินเทอร์เฟซ $DEV_INTERNET dport http ยอมรับ;
}
อินเทอร์เฟซ $DEV_INTERNET DROP;
}

จะขยายเป็น:

ห่วงโซ่อินพุต {
โปรโต tcp {
อินเทอร์เฟซ ppp0 dport http ยอมรับ;
}
อินเตอร์เฟส eth1 DROP;
}

"def $DEV_INTERNET = ppp0" ใช้ได้เฉพาะในบล็อก "proto tcp" บล็อกหลัก
ยังคงรู้ว่า "set $DEV_INTERNET = eth1"

ไฟล์รวมเป็นแบบพิเศษ - ตัวแปรที่ประกาศในไฟล์ที่รวมจะยังคงอยู่ใน
บล็อกการโทร สิ่งนี้มีประโยชน์เมื่อคุณรวมไฟล์ที่ประกาศตัวแปรเท่านั้น

อัตโนมัติ ตัวแปร
ตัวแปรบางตัวถูกตั้งค่าภายในโดย ferm สคริปต์ Ferm ใช้งานได้เหมือนกับสคริปต์อื่นๆ
ตัวแปร

$FILENAME
ชื่อของไฟล์คอนฟิกูเรชันที่สัมพันธ์กับไดเร็กทอรี ferm เริ่มต้นขึ้น

$FILEBNAME
ชื่อฐานของไฟล์การกำหนดค่า

$DIRNAME
ไดเร็กทอรีของไฟล์คอนฟิกูเรชัน

$โดเมน โดเมนปัจจุบัน หนึ่งใน ip, ip6, ARP, eb.

$ตาราง ตาราง netfilter ปัจจุบัน

$เชน ห่วงโซ่ netfilter ปัจจุบัน

$ไลน์ บรรทัดของสคริปต์ปัจจุบัน สามารถใช้ได้ดังนี้:

@def &log($msg) = {
บันทึกคำนำหน้าบันทึก "rule=$msg:$LINE";
}
.
.
.
&log("ข้อความบันทึก");

ฟังก์ชั่น
ฟังก์ชันคล้ายกับตัวแปร ยกเว้นว่าอาจมีพารามิเตอร์และให้
คำสั่ง ferm ไม่ใช่ค่า

@def &FOO() = โปรโต (tcp udp) โดเมน dport;
&FOO() ยอมรับ;

@def &TCP_TUNNEL(พอร์ต $, $dest) = {
ห่วงโซ่ตัวกรองตาราง FORWARD อินเทอร์เฟซ ppp0 โปรโต tcp dport $ port daddr $dest outerface eth0 ยอมรับ;
ตาราง nat chain PREROUTING อินเตอร์เฟส ppp0 โปรโต tcp dport $port daddr 1.2.3.4 DNAT ถึง $dest;
}

&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);

การเรียกใช้ฟังก์ชันซึ่งมีบล็อก (เช่น '{...}') ต้องเป็นคำสั่งสุดท้ายใน ferm
กฎคือต้องตามด้วย ';' NS '&เอฟโอ()' ตัวอย่างไม่มีบล็อก ดังนั้น
คุณสามารถเขียน 'ยอมรับ' หลังจากการโทร เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถเรียงลำดับคำหลักใหม่ได้:

@def &IPSEC() = { โปรโต (โดยเฉพาะ ah); โปรโต udp dport 500; }
ห่วงโซ่อินพุตยอมรับ & IPSEC();

แบคทิค
ด้วย backticks คุณสามารถใช้ผลลัพธ์ของคำสั่งภายนอก:

@def $DNSSERVERS = `grep เนมเซิร์ฟเวอร์ / etc / resolv.conf | awk '{พิมพ์ $2}'';
chain INPUT proto tcp saddr $ DNSSERVERS ยอมรับ;

คำสั่งดำเนินการกับเชลล์ (bin / sh /) เช่นเดียวกับ backticks ใน perl เฟิร์มทำ
ไม่ทำการขยายตัวแปรใด ๆ ที่นี่

ผลลัพธ์จะถูก tokenized และบันทึกเป็นรายการ ferm (array) บรรทัดที่ขึ้นต้นด้วย '#'
ถูกละเลย; บรรทัดอื่นๆ อาจมีค่าจำนวนเท่าใดก็ได้ คั่นด้วยช่องว่าง

รวมในแพ็กเกจ
การขอ @รวม คำหลักช่วยให้คุณสามารถรวมไฟล์ภายนอก:

@รวม 'vars.ferm';

ชื่อไฟล์สัมพันธ์กับไฟล์ที่เรียก เช่น เมื่อรวม from
/etc/ferm/ferm.conf, ข้อความข้างต้นรวมถึง /etc/ferm/vars.ferm. ตัวแปรและ
ฟังก์ชันที่ประกาศในไฟล์ที่รวมไว้ยังคงมีอยู่ในไฟล์การเรียก

ประกอบด้วย ทำงานภายในบล็อก:

ห่วงโซ่อินพุต {
@include 'input.ferm';
}

หากคุณระบุไดเร็กทอรี (โดยมี '/' ต่อท้าย) ไฟล์ทั้งหมดในไดเร็กทอรีนี้จะเป็น
รวม เรียงตามตัวอักษร:

@รวม 'ferm.d/';

ด้วยสัญลักษณ์ท่อต่อท้าย เฟิร์ม รันคำสั่งเชลล์และแยกวิเคราะห์เอาต์พุต:

@include '/root/generate_ferm_rules.sh $HOSTNAME|'

เงื่อนไข
คีย์เวิร์ด @ถ้า แนะนำนิพจน์เงื่อนไข:

@if $เงื่อนไข DROP;

ค่าจะถูกประเมินว่าเป็นจริงเช่นเดียวกับใน Perl: ศูนย์, รายการว่าง, สตริงว่างเป็นเท็จ,
ทุกสิ่งทุกอย่างเป็นความจริง ตัวอย่างค่าจริง:

(แอ๊บ); 1; 'ฟู'; (0 0)

ตัวอย่างค่าเท็จ:

(); 0; '0'; ''

นอกจากนี้ยังมี @อื่น:

@if $เงื่อนไข DROP; @else ปฏิเสธ;

สังเกตเครื่องหมายอัฒภาคก่อน @อื่น.

สามารถใช้เหล็กจัดฟันแบบหยิกได้หลังอย่างใดอย่างหนึ่ง @ถ้า or @อื่น:

@ ถ้าเงื่อนไข $ {
MARK ชุดเครื่องหมาย 2;
กลับ;
} @อื่น {
MARK ชุดเครื่องหมาย 3;
}

เนื่องจากวงเล็บปีกกาปิดทำให้คำสั่งเสร็จสิ้นด้วย จึงไม่จำเป็นต้องมีอัฒภาค

ไม่มี @เอลซิฟ, ใช้ @อื่น @ถ้า แทน.

ตัวอย่าง:

@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || ก้อง';
@ ถ้า $have_ipv6 {
โดเมน ip6 {
-
}
}

ตะขอ
ในการรันคำสั่งแบบกำหนดเอง คุณสามารถติดตั้ง hooks:

@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/การส่งต่อ";
@hook โพสต์ "echo 1 >/proc/sys/net/ipv4/conf/eth0/การส่งต่อ";
@hook flush "echo 0 >/proc/sys/net/ipv4/conf/eth0/การส่งต่อ";

คำสั่งที่ระบุดำเนินการโดยใช้เชลล์ "pre" หมายถึง รันคำสั่ง before
ใช้กฎไฟร์วอลล์ และ "โพสต์" หมายถึงเรียกใช้คำสั่งในภายหลัง ตะขอ "ล้าง"
ทำงานหลังจาก ferm ล้างกฎไฟร์วอลล์ (ตัวเลือก --flush) คุณสามารถติดตั้งใด ๆ
จำนวนตะขอ

ในตัว ฟังก์ชั่น


มีฟังก์ชันในตัวหลายอย่างที่คุณอาจพบว่ามีประโยชน์

@eq(ก,ข)
ทดสอบค่าความเท่าเทียมกันสองค่า ตัวอย่าง:

@if @eq($DOMAIN, ip6) วาง;

@เน่(a,b)
คล้ายกับ @eq การทดสอบความไม่เท่าเทียมกัน

@ไม่(x)
ปฏิเสธค่าบูลีน

@resolve((ชื่อโฮสต์1 ชื่อโฮสต์2 ...) [พิมพ์])
โดยปกติ ชื่อโฮสต์จะได้รับการแก้ไขโดย iptables หากต้องการให้ ferm แก้ไขชื่อโฮสต์ ให้ใช้
ฟังก์ชั่น @แก้ไข:

saddr @resolve (my.host.foo) โปรโต tcp dport ssh ยอมรับ;
saddr @resolve((another.host.foo third.host.foo)) โปรโต tcp dport openvpn ACCEPT;
daddr @resolve(ipv6.google.com, AAAA) โปรโต tcp dport http ACCEPT;

สังเกตวงเล็บคู่ในบรรทัดที่สอง: คู่ภายในสำหรับสร้างรายการ ferm
และคู่ภายนอกเป็นตัวคั่นพารามิเตอร์ฟังก์ชัน

พารามิเตอร์ที่สองเป็นทางเลือก และระบุประเภทระเบียน DNS ค่าเริ่มต้นคือ "A"

โปรดใช้ความระมัดระวังด้วยการแก้ไขชื่อโฮสต์ในการกำหนดค่าไฟร์วอลล์ คำขอ DNS อาจบล็อก
การกำหนดค่าไฟร์วอลล์เป็นเวลานาน ทำให้เครื่องมีช่องโหว่ หรืออาจล้มเหลว

@แมว(ก, b, ... )
เชื่อมพารามิเตอร์ทั้งหมดเป็นสตริงเดียว

@substr (นิพจน์, ชดเชย ความยาว)
แยกสตริงย่อยออกจากนิพจน์และส่งกลับ อักขระตัวแรกอยู่ที่ออฟเซ็ต 0 ถ้า
OFFSET เป็นค่าลบ โดยเริ่มจากจุดสิ้นสุดของสตริงนั้น

@ความยาว(นิพจน์)
ส่งกลับความยาวเป็นอักขระของค่า EXPR

@basename(เส้นทาง)
ส่งกลับชื่อฐานของไฟล์สำหรับพาธที่กำหนด (File::Spec::splitpath)

@dirname(เส้นทาง)
ส่งกลับชื่อของไดเร็กทอรีสุดท้ายสำหรับพาธที่กำหนด โดยสมมติว่าองค์ประกอบสุดท้ายคือa
ชื่อไฟล์ (ไฟล์::Spec::splitpath)

@ipfilter (รายการ)
กรองที่อยู่ IP ที่ไม่ตรงกับโดเมนปัจจุบันอย่างชัดเจน นั่นคือ
มีประโยชน์ในการสร้างตัวแปรและกฎทั่วไปสำหรับ IPv4 และ IPv6:

@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);

โดเมน (ip ip6) เชน INPUT {
saddr @ipfilter($TRUSTED_HOSTS) โปรโต tcp dport ssh ยอมรับ;
}

สูตรอาหาร


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

สะดวกสบาย พอร์ต ส่งต่อ
ฟังก์ชัน Ferm ทำให้งานประจำทำได้ง่ายและรวดเร็ว:

@def &FORWARD_TCP($โปรโต, $พอร์ต, $dest) = {
ห่วงโซ่ตัวกรองตาราง อินเทอร์เฟซ FORWARD $DEV_WORLD ด้านนอก $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
ตาราง nat chain PREROUTING อินเตอร์เฟส $DEV_WORLD daddr $HOST_STATIC proto $proto dport $พอร์ต DNAT ถึง $dest;
}

&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), โดเมน, 192.168.1.4);

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

ตัวอย่างสำหรับ OpenWRT:

ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user
chmod +x mywrt/firewall.user
scp mywrt/firewall.user mywrt.local.net:/ etc /
ssh mywrt.local.net /etc/firewall.user

OPTIONS


--noexec อย่าดำเนินการ iptables(8) คำสั่ง แต่ข้ามไปแทน ด้วยวิธีนี้คุณสามารถ
แยกวิเคราะห์ข้อมูลของคุณ ใช้ --เส้น เพื่อดูผลลัพธ์

--ล้าง ล้างกฎไฟร์วอลล์และตั้งค่านโยบายของทุกเครือข่ายเป็น ACCEPT เฟิร์ม
ต้องการไฟล์การกำหนดค่าเพื่อกำหนดโดเมนและตารางต่างๆ
ได้รับผล

--เส้น แสดงบรรทัดไฟร์วอลล์ที่สร้างขึ้นจากกฎ พวกเขาจะแสดงให้เห็น
ก่อนดำเนินการ ดังนั้นหากคุณได้รับข้อความแสดงข้อผิดพลาดจาก iptables(8)
ฯลฯ คุณสามารถดูว่ากฎใดทำให้เกิดข้อผิดพลาด

--เชิงโต้ตอบ
ใช้กฎไฟร์วอลล์และขอให้ผู้ใช้ยืนยัน เปลี่ยนกลับเป็น
ชุดกฎก่อนหน้าหากไม่มีการตอบสนองของผู้ใช้ที่ถูกต้องภายใน 30 วินาที (ดู
--หมดเวลา). สิ่งนี้มีประโยชน์สำหรับการดูแลไฟร์วอลล์ระยะไกล: คุณสามารถทดสอบได้
กฎเกณฑ์โดยไม่ต้องกลัวปิดกั้นตัวเอง

--หมดเวลา S If --เชิงโต้ตอบ ใช้แล้วย้อนกลับหากไม่มีการตอบสนองของผู้ใช้ที่ถูกต้อง
หลังจากจำนวนวินาทีนี้ ค่าเริ่มต้นคือ 30

--ช่วยด้วย แสดงรายการตัวเลือกบรรทัดคำสั่งโดยย่อที่มี

--รุ่น แสดงหมายเลขเวอร์ชันของโปรแกรม

--เร็ว เปิดใช้งานโหมดเร็ว: ferm สร้าง an iptables-บันทึก(8) ไฟล์ และติดตั้ง
สีสดสวย iptables กู้คืน(8). เร็วกว่านี้มากเพราะ Ferm โทร iptables(8)
หนึ่งครั้งสำหรับทุกกฎโดยค่าเริ่มต้น

โหมดเร็วถูกเปิดใช้งานโดยค่าเริ่มต้นตั้งแต่ เฟิร์ม 2.0 เลิกใช้ตัวเลือกนี้

--ช้า ปิดการใช้งานโหมดเร็ว เช่น run iptables(8) สำหรับทุกกฎและอย่าใช้
iptables กู้คืน(8)

--เปลือก สร้างเชลล์สคริปต์ที่เรียกใช้ iptables กู้คืน(8) และพิมพ์
หมายถึง --fast --lines

--ระยะไกล สร้างกฎสำหรับเครื่องระยะไกล หมายถึง --noexec และ --เส้น. เป็นไปได้
รวมกับ --เปลือก.

--โดเมน {ไอพี|ip6}
จัดการเฉพาะโดเมนที่ระบุ เฟิร์ม เอาต์พุตอาจว่างเปล่าหากโดเมนเป็น
ไม่ได้กำหนดค่าในไฟล์อินพุต

--def '$name=value'
แทนที่ตัวแปรที่กำหนดไว้ในไฟล์การกำหนดค่า

ใช้ ferm ออนไลน์โดยใช้บริการ onworks.net


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

คำสั่ง Linux

Ad




×
โฆษณา
❤️ช้อป จอง หรือซื้อที่นี่โดยไม่เสียค่าใช้จ่าย ช่วยให้บริการต่างๆ ฟรี