Điểm:0

Cách ngăn netfilter tự động thay đổi cổng nguồn

lá cờ jp

Tôi đã quan sát thấy rằng bộ lọc mạng thay đổi cổng nguồn khi kết nối được thiết lập trong mô-đun conntrack. Tôi cần phải ngăn chặn hành vi này.

Đây là những gì tôi đã làm để tái tạo vấn đề của mình:

  1. Tôi tạo quy tắc bộ lọc mạng sẽ thực hiện DNAT từ cổng 2002 đến 2003

Sudo iptables -w -t nat -A OUTPUT -s 192.168.30.3 -d 192.168.30.1 -p udp --sport 2001 --dport 2002 -j DNAT --to-destination :2003

  1. Sau đó, tôi tạo một mục conntrack để mô phỏng kết nối từ 192.168.30.1:2001 (Máy tính của tôi) đến 192.168.30.1:2003

sudo /sbin/conntrack -I -s 192.168.30.1 -d 192.168.30.3 -p udp --sport 2003 --dport 2001 --timeout 100000

  1. Cuối cùng, tôi thực hiện kết nối tới 192.168.30.1:2002 từ máy tính của mình với cổng nguồn 2001:

Sudo nc -u -p 2001 192.168.30.1 2002

Do quy tắc DNAT của bộ lọc mạng, tôi mong đợi một gói đầu ra có cổng đích 2003 và cổng nguồn 2001. Tuy nhiên, trên Wireshark, tôi quan sát thấy cổng nguồn đã thay đổi thành một số ngẫu nhiên. Tôi đoán điều này là do máy tính của tôi cho rằng có một kết nối hiện có trên cổng 2001 (do mục conntrack) và sau đó ngăn cổng nguồn thành 2001 (phải không?). Nhưng tôi không muốn hành vi này? Làm cách nào tôi có thể buộc sử dụng số cổng 2001?

Tom Yan avatar
lá cờ in
Tôi không nghĩ điều này có liên quan gì đến DNAT hoặc netfilter. Thay vào đó, đó chỉ là hành vi của `nc`.
sebastien dontneedtoknowthat avatar
lá cờ jp
Tôi khá chắc chắn rằng đó không phải là hành vi của `nc` (ít nhất là do gói của tôi đạt đến quy tắc DNAT của tôi với cổng nguồn ban đầu. )
Điểm:0
lá cờ in

Để DNAT hoạt động (theo nghĩa là để chương trình bật có thể nhận ra các câu trả lời), "NAT đảo ngược" sẽ thay đổi cổng nguồn của các lưu lượng trả lời từ 192.168.30.1 (đến 192.168.30.3:2001) từ 2003 đến 2002 sẽ cần phải được thực hiện.

Tuy nhiên, khi có lưu lượng truy cập đến từ 192.168.30.1:2003 đến 192.168.30.3:2001 rằng theo quan điểm của conntrack không phải là hệ quả của DNAT (vì theo mục nhập conntrack được tạo, máy chủ lưu trữ không phải là thiết bị khởi tạo kết nối), NAT ngược sẽ không phù hợp.

Do đó, bộ lọc mạng bị "buộc" phải thực hiện SNAT đối với lưu lượng truy cập phù hợp với quy tắc DNAT, để nó có thể phân biệt lưu lượng truy cập trả lời (cũng là từ 192.168.30.1:2003) theo điểm đến 192.168.30.3:$ngẫu nhiên.

Tôi cho rằng bộ lọc mạng sẽ thực hiện NAT ngược cho DNAT (là SNAT) trước NAT ngược cho SNAT (là DNAT) hoặc quản lý để sử dụng đích trước NAT ngược cho SNAT (tức là 192.168.30.3:$ngẫu nhiên) để khớp với NAT ngược cho DNAT, nếu không thì SNAT bắt buộc sẽ vô nghĩa.(Tuy nhiên, trong trường hợp không đảo ngược, cả hai điều này đều không đúng AFAIK: DNAT sẽ được thực hiện trong PREROUTING trước SNAT trong INPUT và đối sánh đích trong quy tắc SNAT, nếu có, sẽ sử dụng giá trị tạo ra trong DNAT)


Vấn đề là, câu chuyện trên/"vấn đề" trong câu hỏi của bạn hầu như không có ý nghĩa gì trong thực tế. Lấy VPN bảo vệ dây hai máy chủ làm ví dụ: giả sử bạn muốn có điểm cuối = được đặt trên cả hai máy chủ (để một trong hai máy chủ có thể bắt đầu giao tiếp) và không muốn các giá trị được "cập nhật" bất ngờ do SNAT bắt buộc (giả sử rằng điều đó thực sự có thể được kích hoạt), điều bạn nên làm chỉ đơn giản là "luôn luôn -on" SNAT "bổ sung" DNAT / tương đương với NAT dự trữ:

iptables -t nat -A INPUT -s 192.168.30.1 -d 192.168.30.3 -p udp --sport 2003 --dport 2001 -j SNAT --to-source :2002

điều này thường không cần thiết trong mô hình máy khách-máy chủ vì NAT đảo ngược tự động cho DNAT.

Tái bút Bạn vẫn chưa đạt được 192.168.30.1:2003 qua 192.168.30.1:2003 tuy nhiên, nếu không, NAT nguồn bắt buộc cũng sẽ xảy ra nếu bạn truy cập lại bằng cách 192.168.30.1:2002 trước khi mục conntrack của cái cũ bị loại bỏ. Quy tắc SNAT bổ sung trong INPUT cũng sẽ không gây thêm rắc rối cho bạn.

Điểm:0
lá cờ cl
A.B

Bạn có thể đặt hai luồng thường xung đột trong theo dõi bảng tra cứu (do đó thường kích hoạt ghi lại cổng nguồn trên luồng mới để tránh xung đột) ở dạng khác khu vực conntrack. Thuộc tính vùng bổ sung này làm cho theo dõi không khớp/va chạm với một luồng hiện có trong một vùng theo dõi khác: sẽ không xảy ra việc ghi lại cổng nguồn.

Đối với ví dụ cụ thể của bạn, đây là một quy tắc cụ thể sẽ ngăn xung đột và do đó ngăn việc ghi lại cổng nguồn:

iptables -t raw -A OUTPUT -s 192.168.30.3 -d 192.168.30.1 -p udp --sport 2001 --dport 2002 -j CT --zone-orig 1

Thông thường, tùy thuộc vào trường hợp sử dụng, bộ chọn hợp lý hơn được sử dụng. Nó thường được sử dụng trong chuỗi PREROUTING với giao diện đầu vào làm bộ chọn khi định tuyến và thường được liên kết với một giá trị đánh dấu để việc định tuyến cũng có thể bị ảnh hưởng.


Trường hợp sử dụng ban đầu khiến tùy chọn này xuất hiện là khi theo dõi trên cùng một ngăn xếp mạng (không có không gian tên mạng bổ sung) với thiết lập định tuyến phức tạp (ví dụ: định tuyến giữa 4 mạng LAN riêng khác nhau sử dụng cùng một địa chỉ IP. ví dụ: giữa 192.168.1.0/24 eth0 <-> eth1 10.1.0.0/24 và lần nữa 192.168.1.0/24 eth2 <-> 10.1.0.0/24 eth3) có thể thấy hai luồng không liên quan có cùng địa chỉ/cổng. Như bộ lọc mạngtheo dõi không biết gì về định tuyến (các theo dõi bảng tra cứu chỉ bao gồm các địa chỉ), chúng phải được dạy để xem xét các luồng này một cách riêng biệt bằng cách thêm thuộc tính vùng được liên kết thủ công với cấu trúc liên kết định tuyến trong theo dõi bảng tra cứu.

(Đây là một liên kết LWN khi tính năng này được đề xuất ban đầu.)

Điểm:0
lá cờ in

NAT thay đổi cổng nguồn để giảm nguy cơ xung đột cổng, điều gì sẽ xảy ra nếu môn thể thao đó 2002 đang bận trên máy NAT?

Nếu bạn có các yêu cầu cụ thể đối với các cổng cụ thể thì bạn có thể thêm các cổng cụ thể SNAT quy tắc cho điều đó, nhưng một lần nữa, điều gì sẽ xảy ra nếu nhiều máy khách nội bộ cố gắng sử dụng cùng một cổng nguồn?

Ở đây chúng ta nên quay lại và thừa nhận rằng NAT là một bản hack được tạo ra để giảm vấn đề thiếu địa chỉ IP công cộng. Cách khắc phục thực sự ở đây là dành cho mọi người có IP công khai không NAT.

Khi nói về NAT ngày nay, chúng tôi thường đề cập đến các địa chỉ IP riêng đằng sau một IP, Trong những trường hợp này, thực tế là giấc ngủ trưa một câu hỏi tương tự liên quan đến điều đó, tôi đã nghĩ về MẶT NẠ mục tiêu và không ADNT

Tom Yan avatar
lá cờ in
Không có cách nào DNAT sẽ khiến cổng nguồn thay đổi (không dành cho lưu lượng truy cập *gốc*) vì điều đó có nghĩa là nó ngụ ý SNAT. Giả sử nếu nó đã làm như vậy, điều đó có nghĩa là SNAT do bạn đề xuất/được người dùng yêu cầu trở thành SNAT "lần thứ hai", điều này hoàn toàn không có ý nghĩa gì (đối với * một * "máy NAT"). Đừng quên rằng đối với mọi SNAT đều cần "DNAT ngược" cho các câu trả lời. Câu chuyện bạn đang kể ở đây là về SNAT, nhưng bạn đề xuất SNAT là giải pháp (hoặc cách giải quyết; sao cũng được).
lá cờ in
Nếu bạn thực hiện NAT, việc xáo trộn được thực hiện đối với các gói đầy đủ khi cần, ngay cả khi bạn chỉ có ý định sử dụng DNAT hoặc SNAT.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.