Quy tắc PF sử dụng return-rst trên Mac OS X không trả lời với thiết lập lại TCP


2

Tôi đang cố gắng thêm một quy tắc PF đơn giản:

block return-rst out proto tcp from any to any port 33128

để lọc tất cả lưu lượng đi đến cổng TCP 33128 và tôi muốn nó phản hồi với thiết lập lại. Tuy nhiên, khi tôi kiểm tra nó với nc, hết thời gian, thay vì quay lại ngay với lỗi từ chối kết nối, điều này cho thấy các gói sẽ chuyển đến cổng 33128 được loại bỏ mà không cần thiết lập lại TCP được gửi:

$ nc -v 172.22.2.2 33128
nc: connectx to 172.22.2.2 port 33128 (tcp) failed: Operation timed out

Cách tôi kích hoạt PF và thêm quy tắc này:

$ echo "block return-rst out proto tcp from any to any port 33128" > pf.conf
$ sudo pfctl -f pf.conf
$ sudo pfctl -e

Có gì sai với quy tắc này?


có cùng một vấn đề. Tôi đang cố gắng sử dụng pfctl để mô phỏng kết nối hoàn toàn chết với một miền cụ thể cho một số thử nghiệm, nhưng tất cả những gì tôi nhận được là thời gian chờ
Fernando Mazzon

Phiên bản MacOS nào bạn đang chạy? Điều này hoạt động hoàn hảo cho tôi vào ngày 10.10. Tôi giả sử pfctl -e Trả lại không có lỗi?
eradman

@eradman Chạy 10.10 cũng vậy. $ sudo pfctl -e Không hỗ trợ ALTQ trong các chức năng liên quan đến ALTQ kernel đã tắt pfctl: pf đã được bật. Các quy tắc khác chỉ hoạt động tốt, đó chỉ là quy tắc này có vấn đề, nhận được thời gian chờ thay vì đặt lại
Fernando Mazzon

Câu trả lời:


0

Tôi thấy rằng một số quy tắc tường lửa PF hoạt động không chính xác sau khi Thunderbolt Ethernet được kết nối, nhưng hoạt động chính xác khi WiFi là bộ điều hợp mạng duy nhất. Ví dụ: hành động "return-rst" không trả về các gói TCP RST.

Cập nhật
Tôi đã tìm ra rằng lỗi này ảnh hưởng đến bất kỳ kết nối ethernet có dây . Ngay cả bộ điều hợp ethernet iMac tích hợp so với bộ điều hợp WiFi tích hợp. Đã thử nghiệm trên iMac cũ và mới hơn.

Các bước để sinh sản: Trong bước đầu tiên, hãy thử hành vi đúng. Để làm như vậy, chúng tôi cần macbook / iMac chỉ có kết nối WiFi, không có kết nối Ethernet Thunderbolt.

  1. Xóa tất cả các quy tắc PF
    sudo pfctl -F all

  2. Tạo quy tắc đơn giản để chặn kết nối TCP tới cổng 81, sẽ trả lại gói TCP RST để hủy kết nối ngay lập tức.
    echo "block return-rst out proto tcp from any to any port 81" | sudo pfctl -e -f -

  3. Kiểm tra nếu quy tắc mới đã được thêm chính xác.
    Ở đây chúng ta có thể thấy bộ đếm của các gói phù hợp với quy tắc tường lửa.
    pfctl -vsr Packets: 0 Bytes: 0

  4. Bây giờ đang thử kiểm tra quy tắc tường lửa bằng cách sử dụng curl kết nối với cổng 81
    curl http://example.com:81 curl: (7) Failed to connect to example.com port 81: Connection refused

Xem kết nối đó bị từ chối ngay lập tức bởi quy tắc tường lửa như mong đợi. Đó là một hành vi đúng.

Bây giờ kiểm tra hành vi không chính xác. Để làm như vậy, chúng ta cần kết nối Ethernet chính hãng Apple Thunderbolt với kết nối có dây hoạt động. Kết nối WiFi có thể bị vô hiệu hóa hoặc duy trì kích hoạt, điều này không quan trọng, lỗi sẽ xuất hiện trong cả hai trường hợp.

  1. Giữ nguyên quy tắc tường lửa

  2. Cố gắng sử dụng curl một lần nữa
    curl http://example.com:81 .....waiting.... curl: (28) Connection timed out
    Bây giờ kết nối bị treo và đóng lại sau một thời gian chờ. Nhưng quy tắc tường lửa vẫn hoạt động và làm việc.

  3. Chúng ta có thể nhìn vào quầy tính tiền pfctl -vsr và xem quy tắc đó phù hợp và vẫn chặn kết nối. Nhưng không có trả lời TCP RST.

Thiết lập của tôi:
macOS: 10.14.1 (18B75)
MacBook Pro (Retina, 15 inch, giữa năm 2015)
Bộ điều hợp Ethernet Apple Thunderbolt 2 (57762)

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.