Làm cách nào để chặn các địa chỉ IP lạm dụng với pf trong OpenBSD?


14

Chúng ta có thể thấy từ nhật ký nginx rằng có một địa chỉ IP đang làm những điều khó chịu.

Làm thế nào chúng ta có thể chặn nó bằng một pflệnh và sau đó vĩnh viễn với /etc/pf.log? Làm thế nào chúng ta có thể chặn một x.x.x.x/24IP cho? Đây là ví dụ: 1.2.3.4

CẬP NHẬT: không, có vẻ như OpenBSD không có tệp cho phép / từ chối trong / etc. Và AFAIK lời khuyên tốt nhất để chặn các địa chỉ IP lạm dụng đang sử dụng pf.

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

Bạn có tập tin hosts.deny trong thư mục / etc không?
ryekayo

Câu trả lời:


13

Cách tốt nhất để làm điều này là xác định bảng và tạo quy tắc để chặn máy chủ, trong pf.conf:

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

Và sau đó tự động thêm / xóa địa chỉ IP khỏi nó:

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

Các lệnh 'bảng' khác bao gồm flush(xóa tất cả) replaceshow. Xem man pfctlđể biết thêm.

Nếu bạn muốn một danh sách lâu dài hơn, bạn có thể giữ nó trong một (hoặc nhiều) tệp. Trong pf.conf:

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

Bạn cũng có thể thêm tên máy chủ thay vì địa chỉ IP. Xem phần "Bảng" của man pf.confman pfctl.

Lưu ý : Các ví dụ trên giả định rằng giao diện truy cập internet là fxp0, vui lòng thay đổi theo thiết lập của bạn. Ngoài ra, hãy nhớ rằng các quy tắc trong pf.confđược đánh giá tuần tự và cho blockhoặc passquy tắc quy tắc phù hợp cuối cùng áp dụng. Với quy tắc này

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

và sau khi thêm 1.2.3.4 và 192.168.0.10 vào badhostsbảng

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

tất cả lưu lượng truy cập từ 1.2.3.4 và 192.168.0.10 sẽ bị chặn nhưng máy chủ thứ hai sẽ có thể thực hiện kết nối với cổng 80 của các máy khác vì passquy tắc khớp và ghi đè blockquy tắc.


4
Quy tắc khối có thể được chỉ định dễ dàng hơn như block in from <badhosts>. Bạn không cần chỉ định giao diện hoặc to anyphần.
kurtm

4

Không rõ ràng từ các câu trả lời khác mà bạn cần để tạo một bảng thực tế của các badhost mà bạn đang cố gắng chặn.

Điều này có trong tệp pf.conf, ví dụ: tôi có hai tệp badguys, 1 & 2 badguys1 dành cho những người đến và đi, và badguys2 dành cho danh sách đen vĩnh viễn.

Vì vậy, nếu bạn cần thêm một ip của ai đó gây phiền toái trong một khoảng thời gian, hãy thêm họ vào badguys1.

Bây giờ, trong tệp pf.conf của bạn, bạn có cái này. Trong ví dụ của tôi, tôi sử dụng en1, vì đó là giao diện WiFi của tôi. Đặt giao diện đó thành giao diện mạng của bạn.

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

Bây giờ bạn có thể thêm địa chỉ tạm thời vào badguys1. (KHÔNG phải badhost, đó là tên của các bảng)

sudo pfctl -t badguys1 -T add 185.130.5.160

1 table created.
1/1 addresses added.

Mặc dù nó nói 1 bảng được tạo - nó thực sự thêm ip, không tạo bảng mới. Bây giờ nếu bạn nhìn vào badguys1, bạn sẽ thấy IP mới.

sudo pfctl -t badhosts -T show

3

Tôi đã nhận được thông tin này từ trang web và tha thứ cho tôi về kiến ​​thức không tốt của tôi OpenBSD, nhưng ở đây nó đi. Hãy xem URL này . Theo đó, nó tuyên bố chặn một IP bạn sẽ:

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

Sau đó, bạn sẽ khởi động lại tường lửa:

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

Hoặc, để thêm mà không cần khởi động lại loại tường lửa:

pfctl -t blockedips -T add 111.222.333.444

Bây giờ để kiểm tra nếu nó đã được thêm loại:

pfctl -t blockedips -T show

Cập nhật: Có lẽ điều này sẽ giúp.

  • Mở tệp sau trong vi:

    vi /etc/pf.conf

  • Thêm dòng mã sau:

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

  • Sau thời điểm đó, tôi sẽ thử khởi động lại tường lửa và xác nhận rằng IP bị chặn bằng cách gõ:

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

1
Tôi nghĩ rằng bảng cần phải được đặt thành chặn, nhưng phần đó không rõ ràng trong hướng dẫn, tôi đã làm theo, nhưng IP vẫn không bị chặn
somelooser28533

Hãy để tôi xem nếu tôi có thể tìm kiếm làm thế nào để làm như vậy.
ryekayo

2
Không cần phải vô hiệu hóa và pf có thể tải lại để tải lại pf.conf. pfctl -f /etc/pf.confLà đủ.
Zé Loff

1
(Xấu) CÁCH KHÔNG khuyến khích suy nghĩ và khuyến khích sao chép. Đọc man pf.conf, bạn sẽ ngạc nhiên về các trang man OpenBSD tốt như thế nào. Thêm vào đó, pf.confcác tệp cần phải được đọc toàn bộ (thứ tự đặt quy tắc là rất quan trọng) vì vậy sao chép và dán các dòng đơn thường là một ý tưởng tồi. Tạo tệp và tablequy tắc (điều đó là chính xác) nhưng bạn chia sẻ toàn bộ pf.conftệp của mình hoặc tùy thuộc vào bạn để tìm ra blockquy tắc phù hợp và vị trí của tệp trong tệp.
Zé Loff

1
@ryekayo Trừ khi bạn có thể biện minh cho việc bao gồm ext_if="bge0"macro và tại sao bạn không có quy tắc chặn thì tôi sẽ chỉ trích câu trả lời của bạn, vì nó không đầy đủ (nghĩa là không phải là câu trả lời thích hợp), bất kể bạn đã nỗ lực như thế nào. Cộng với nhận xét của tôi về HOWTO đã được giải quyết tại OP, không phải bạn (xin lỗi, tôi nên nói rõ điều đó).
Zé Loff
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.