iptables phản chiếu cổng


8

Tôi cần để có thể nhận được một bản sao của các gói nhận được trên cổng 8001 đến cổng 8002. Tôi đã thử các cách sau nhưng tôi gặp một lỗi mà --tee không xác định.

sudo iptables -t nat -A PREROUTING -p TCP -s 127.0.0.1 --sport 8001 -j DNAT --to-destination 127.0.0.1:8002 --tee


Câu hỏi này được trả lời tại đây: superuser.com/questions/753294/mirror-port-via-iptables/ đá
Pat

Câu trả lời:


6

Các --teecờ không phải là một phần của chuỗi DNAT, nó là một phần của ROUTE. Bạn chỉ có thể sử dụng nó sau một tuyên bố -j ROUTE. Bạn có thể nhận trợ giúp cụ thể từ iptables về chủ đề như thế này:

 $ iptables -j ROUTE help

Tôi đã xem lệnh iptables của bạn và nó không có ý nghĩa gì với tôi. Tại sao bạn lại cố gắng khớp với cổng nguồn và cổng nguồn của gói khi trong câu hỏi của bạn, bạn nói "packess nhận được trên cổng"? Bạn đang cố gắng phân chia lưu lượng truy cập đến để đánh hai cổng hoặc lấy đầu ra của một cổng và buộc nó vào đầu vào của một cổng khác?

Nếu trước đây, thực sự có hai bước. Bạn không thể sử dụng tee để lấy bản sao của gói VÀ xé gói để thay đổi số cổng cùng một lúc. Bạn có thể thử điều này theo hai bước, trước tiên hãy gửi cho mình một bản sao của gói, sau đó chỉ khớp với bản sao và xáo trộn cổng đích. CẢNH BÁO: chưa được kiểm tra, hãy xem xét mã giả này:

$ sudo iptables -A PREROUTING -t mangle -p tcp -s !127.0.0.1/32 --dport 8001 -j ROUTE --gw 127.0.0.1 --tee
$ sudo iptables -A POSTROUTING -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

1
Cảnh báo ... một khách truy cập trang web khác đã lưu ý rằng một phiên bản tương tự của điều này thực sự dẫn đến một vòng lặp vô hạn! Bạn có thể cần phải tìm ra cách gắn thẻ gói trùng lặp trong cùng một hành động, sau đó khớp với thẻ.
Caleb

ROUTE có vẻ lỗi thời, phải không?
cúc

Đó là một lỗi đánh máy, 172.0.0.1 -> 127.0.0.1.
Aki

Độc giả NB đến SE: ROUTEMục tiêu được sử dụng trong câu trả lời ở trên đã lỗi thời khi viết bài này và không có sẵn trong iptables trên hầu hết các bản phát hành gần đây. Xem serverfault.com/questions/333155/ từ
Jonathan Ben-Avraham

6

Hơn nữa với câu trả lời của Caleb , nếu bạn đang làm việc với phiên bản mới hơn iptables(v1.4.14) không còn ROUTEmục tiêu, bạn sẽ cần một cái gì đó như sau, được thử nghiệm trên Debian Wheezy *:

iptables -A PREROUTING -t mangle -p tcp ! -s 127.0.0.1 --dport 8001 -j TEE --gateway 127.0.0.1
iptables -A OUTPUT -t nat -p tcp -s 127.0.0.1/32 --dport 8001 -j DNAT --to 127.0.0.1:8002

Kiểm tra bằng cách sử dụng "netcat" ( man nc). Trong một cửa sổ đầu cuối loại để theo dõi và nhấn Enterphím:

nc -l 8002

Lệnh sẽ đợi đầu vào mà bạn sẽ gõ trong cửa sổ terminal thứ hai.

Trong cửa sổ thiết bị đầu cuối thứ hai, gõ như sau và bấm Enterphím:

nc 127.0.0.1 8001

Lệnh sẽ chờ thêm đầu vào. Nhập bất cứ điều gì và nhấn Enterphím. Sau khi bạn nhấn Enterphím trong cửa sổ terminal thứ hai, văn bản bạn đã nhập trong cửa sổ terminal thứ hai sẽ xuất hiện trong cửa sổ terminal thứ nhất. Nhấn Ctrl-c trong cửa sổ thứ hai để kết thúc phiên.


* Cú pháp này không được hỗ trợ trong RHEL / Centos (6.5 trở về trước) :-( vì vậy bạn cần sử dụng socatđể phát và chuyển các gói đến trên cổng ban đầu sang hai cổng mới. Nếu bạn đã xử lý nghe trên cổng nhận ban đầu thì bạn cần phải cấu hình lại chúng để nghe trên một trong các cổng tee'd như socatbây giờ là trình nghe trên cổng ban đầu. Xem bài đăng SE này để biết ví dụ socatcú pháp cho nhân bản cổng.


Vì một số lý do trên debian, bạn cần xác định rõ ràng cổng với netcatnc -l -p 8002
Marcelo Lacerda

Tôi đã cố gắng sao chép giải pháp này trên Mint 19 Tessa nhưng không có kết quả. Tôi phát hiện ra rằng một số gói chỉ bị trả lại bên trong và chỉ một trong hai cổng nhận được gói. Nếu tôi mắc lỗi thêm ghi nhật ký để cố gắng khắc phục quy tắc, các nhật ký (kernel, syslog, tạp chí) sẽ nhanh chóng ăn hết bộ nhớ của tôi.
hanzo2001

Tôi cũng không hiểu tại sao DNAT được đặt trên chuỗi OUTPUT. Không phải gói đã rời quá trình của tôi ra thế giới bên ngoài sao? hoặc làm địa chỉ loopback hành xử khác nhau?
hanzo2001
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.