Tôi mới đọc một cuốn sách về PF (Cuốn sách của PF, Không có tinh bột), nhưng có một câu hỏi không được trả lời bởi nó.
Nếu tôi có một máy cổng sử dụng hai giao diện, $ int_if và $ ext_if và tôi NAT các gói đến từ $ int_if: net (nghĩa là, 10.0.0.0/24) đến $ ext_if sử dụng match
, khi NAT được áp dụng ? Trước hay sau quy tắc lọc?
Thí dụ:
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
pass out on $ext_if from 10.0.0.0/24
block drop out on $ext_if from 10.0.0.23
Nó có hoạt động không? Hoặc lấy IP nguồn của gói đến từ 10.0.0.23 NATed đến địa chỉ của $ ext_if trước khi kiểm tra nếu nó từ 10.0.0.23 được đánh giá?
Sơ đồ này không hữu ích để trả lời câu hỏi này, tôi nghĩ vậy, tuy nhiên nó rất thú vị: [ http://www.benzedrine.cx/pf_flow.png ]
Nếu bạn đọc Câu hỏi thường gặp về PF NAT [ http://www.openbsd.org/faq/pf/nat.html ], đặc biệt là phần "Định cấu hình NAT", bạn sẽ bắt gặp câu này:
Khi một gói được chọn theo quy tắc khớp, các tham số (ví dụ: nat-to) trong quy tắc đó được ghi nhớ và được áp dụng cho gói khi đạt được quy tắc phù hợp với gói. Điều này cho phép cả lớp các gói được xử lý theo một quy tắc khớp duy nhất và sau đó đưa ra các quyết định cụ thể về việc có cho phép lưu lượng truy cập có thể được thực hiện với các quy tắc chặn và vượt qua hay không.
Tôi nghĩ rằng âm thanh như thể nó không như tôi đã nêu trong đoạn trên, vì vậy IP nguồn sẽ được "ghi nhớ" cho đến khi có quyết định về hành động được thực hiện với gói. Nếu quyết định được đưa ra, NATting sẽ được áp dụng.
Bạn nghĩ sao?
PS: Đây là một câu hỏi khá lý thuyết. Nếu bạn hơi thực dụng một chút, bạn sẽ làm theo cách này:
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
block drop from 10.0.0.23
# or, explicitly,
# block drop in on $int_if from 10.0.0.23
Vì vậy, block
quy tắc đã được áp dụng khi gói đến trong $ int_if.
EDIT: Tất nhiên, một khả năng khác là quyết định trước NAT:
pass from 10.0.0.0/24
block drop from 10.0.0.23
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
Nếu một gói từ 0,23 đến, đầu tiên nó khớp với quy tắc đầu tiên, sau đó khớp với quy tắc thứ hai và "quy tắc" thứ ba. Nhưng vì quy tắc thứ hai là quyết định cuối cùng về việc truyền / chặn, gói bị chặn. Đúng?
quick
từ khóa nhưng tôi không thực sự thích nó - Tôi luôn cố gắng sử dụng thứ tự đánh giá của pf;) Btw, tôi đã tìm thấy câu trả lời trên trang Câu hỏi thường gặp của OpenBSD: "NAT được chỉ định làm tham số tùy chọn tự nhiên cho Thông thường, thay vì được đặt trực tiếp trên quy tắc vượt qua, quy tắc đối sánh được sử dụng. Khi gói được chọn theo quy tắc khớp, các tham số (ví dụ: nat-to) trong quy tắc đó được ghi nhớ và được áp dụng cho gói khi đạt được quy tắc phù hợp với gói. ". Vì vậy, bộ quy tắc của tôi sẽ không gây ra bất kỳ vấn đề nào và chặn chính xác .23