จะบล็อก IP address ที่ไม่เหมาะสมด้วย pf ใน OpenBSD ได้อย่างไร?


13

เราสามารถเห็นได้จากบันทึกของ nginx ว่ามีที่อยู่ IP ที่ทำสิ่งที่น่ารังเกียจ

เราจะปิดกั้นมันด้วยpfคำสั่งและจากนั้นอย่างถาวรด้วย/etc/pf.log? เราจะบล็อก a x.x.x.x/24สำหรับ IP นั้นได้อย่างไร มันเป็นตัวอย่าง: 1.2.3.4

อัปเดต: ไม่ดูเหมือนว่า OpenBSD ไม่มีไฟล์อนุญาต / ปฏิเสธใน / etc และ AFAIK คำแนะนำที่ดีที่สุดสำหรับการปิดกั้นที่อยู่ IP ที่ไม่เหมาะสมกำลังใช้ pf

# cd /etc 
# ls -la|egrep -i 'deny|allow'
# uname -a
OpenBSD foo.com 5.4 GENERIC.MP#0 amd64
# 

คุณมีไฟล์ hosts.deny ในไดเร็กทอรี / etc หรือไม่
ryekayo

คำตอบ:


13

วิธีที่ดีที่สุดในการทำเช่นนี้คือการกำหนดตารางและสร้างกฎเพื่อบล็อกโฮสต์ในpf.conf:

table <badhosts> persist
block on fxp0 from <badhosts> to any

จากนั้นเพิ่ม / ลบที่อยู่ IP แบบไดนามิก:

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4

คำสั่งอื่น ๆ 'ตาราง' รวมflush(ลบทั้งหมด) และreplace showดูman pfctlเพิ่มเติม

หากคุณต้องการรายการที่ถาวรมากขึ้นคุณสามารถเก็บไว้ในหนึ่ง (หรือมากกว่า) ไฟล์ ในpf.conf:

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any

คุณสามารถเพิ่มชื่อโฮสต์แทนที่อยู่ IP ดูส่วน "ตาราง" ของและman pf.confman pfctl

หมายเหตุ : ตัวอย่างด้านบนถือว่าเป็นส่วนต่อประสานกับอินเทอร์เน็ตfxp0โปรดเปลี่ยนตามการตั้งค่าของคุณ นอกจากนี้โปรดทราบว่ากฎในpf.confจะได้รับการประเมินตามลำดับและสำหรับblockหรือpassกฎของกฎการจับคู่ล่าสุดที่ใช้ ด้วยกฎนี้

table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80

และหลังจากเพิ่ม 1.2.3.4 และ 192.168.0.10 ไปยังbadhostsตาราง

$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10

การรับส่งข้อมูลทั้งหมดจาก 1.2.3.4 และ 192.168.0.10 จะถูกบล็อก แต่โฮสต์ที่สองจะสามารถทำการเชื่อมต่อกับพอร์ต 80 ของเครื่องอื่นได้เนื่องจากpassกฎจะจับคู่และแทนที่blockกฎ


4
block in from <badhosts>กฎบล็อกสามารถระบุได้อย่างง่ายดายมากขึ้นเป็น คุณไม่จำเป็นต้องระบุส่วนต่อประสานหรือto anyส่วนใดส่วนหนึ่ง
kurtm

4

ยังไม่ชัดเจนจากคำตอบอื่น ๆ ที่คุณต้องสร้างตารางจริงของ badhosts ที่คุณพยายามบล็อก

สิ่งนี้จะอยู่ในไฟล์ pf.conf ตัวอย่างเช่นฉันมีไฟล์ badguys สองไฟล์, 1 & 2 badguys1 สำหรับผู้ที่มาแล้วและ badguys2 สำหรับการขึ้นบัญชีดำแบบถาวร

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

ตอนนี้ในไฟล์ pf.conf ของคุณคุณมีสิ่งนี้ ในตัวอย่างของฉันฉันใช้ en1 เพราะนั่นคือส่วนต่อประสาน WiFi ของฉัน ตั้งค่าสิ่งที่เชื่อมต่อกับเครือข่ายของคุณ

table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on en1 from <badhosts> to any

ตอนนี้คุณสามารถเพิ่มที่อยู่ชั่วคราวเพื่อ badguys1 (ไม่ใช่ badhosts นั่นเป็นชื่อของตาราง)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

แม้ว่ามันจะบอกว่าสร้าง 1 ตาราง - จริง ๆ แล้วมันเพิ่ม ip ไม่ใช่สร้างตารางใหม่ ตอนนี้ถ้าคุณดูใน badguys1 คุณจะเห็น IP ใหม่

sudo pfctl -t badhosts -T show

3

ฉันได้รับข้อมูลนี้จากเว็บไซต์และยกโทษให้ฉันสำหรับความรู้ที่ไม่ดีของฉันOpenBSDแต่ที่นี่มันไป ดูURLนี้ ตามที่ระบุไว้มันจะบล็อก IP ที่คุณต้องการ:

echo '123.123.123.123' >> /etc/pf.blocked.ip.conf

จากนั้นคุณจะรีสตาร์ทไฟร์วอลล์:

pfctl -d
pfctl -e -f /etc/pf.conf

หรือเพิ่มโดยไม่ต้องรีสตาร์ทไฟร์วอลล์ชนิด:

pfctl -t blockedips -T add 111.222.333.444

ตอนนี้เพื่อตรวจสอบว่ามันได้รับการเพิ่มประเภท:

pfctl -t blockedips -T show

อัปเดต: บางทีนี่อาจช่วยได้

  • เปิดไฟล์ต่อไปนี้ใน vi:

    vi /etc/pf.conf

  • เพิ่มบรรทัดของรหัสต่อไปนี้:

    table <blockedips> persist file "/etc/pf.blocked.ip.conf" ext_if="bge0" # interface connected to internet

  • หลังจากจุดนั้นฉันจะลองรีสตาร์ทไฟร์วอลล์และยืนยันว่า IP ถูกบล็อกโดยการพิมพ์:

    pfctl -d
    pfctl -e -f /etc/pf.conf
    pfctl -t blockedips -T show
    

1
ฉันคิดว่าตารางจะต้องมีการตั้งค่าให้บล็อก แต่ส่วนนั้นไม่ชัดเจนในวิธีการฉันตามมัน แต่ IP ยังไม่ถูกบล็อก
somelooser28533

ให้ฉันดูว่าฉันสามารถค้นหาวิธีการทำ
ryekayo

2
ไม่จำเป็นต้องปิดใช้งานและเปิดใช้งาน pf อีกครั้งเพื่อโหลด pf.conf pfctl -f /etc/pf.confก็เพียงพอแล้ว
Zé Loff

1
(ไม่ดี) HOWTO ไม่สนับสนุนการคิดและกระตุ้นการคัดลอก อ่านman pf.confแล้วคุณจะประหลาดใจเมื่อเห็นหน้าคนของ OpenBSD ที่ดีเพียงใด นอกจากนี้pf.confไฟล์ต้องอ่านโดยรวม (ลำดับที่วางกฎเป็นสิ่งสำคัญ) ดังนั้นการคัดลอกและวางบรรทัดเดียวจึงเป็นความคิดที่ไม่ดี สร้างไฟล์และtableกฎ (ที่ถูกต้องมาก) แต่คุณแชร์pf.confไฟล์ทั้งหมดหรือขึ้นอยู่กับคุณเพื่อหากฎที่เหมาะสมblockและที่ตั้งในไฟล์
Zé Loff

1
@ryekayo หากคุณไม่สามารถพิสูจน์ได้ว่ามีการรวมext_if="bge0"มาโครไว้แล้วและทำไมคุณไม่มีกฎบล็อกฉันจะวิจารณ์คำตอบของคุณเพราะมันไม่สมบูรณ์ (เช่นไม่ใช่คำตอบที่เหมาะสม) โดยไม่คำนึงถึงความพยายามของคุณ รวมถึงความคิดเห็นของฉันเกี่ยวกับ HOWTO ได้รับการกล่าวถึงใน OP ไม่ใช่คุณ (ขอโทษด้วยฉันควรทำให้ชัดเจน)
Zé Loff
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.