Giám sát lưu lượng TCP trên cổng cụ thể


49

Tôi đã tìm kiếm khá nhiều cho việc này, nhưng dường như không thể đưa ra một ví dụ hoạt động.

Mục tiêu của tôi là giám sát lưu lượng TCP trên một cổng cụ thể để xem các kết nối đến và ghi chúng vào một tệp văn bản. Điều hấp dẫn là tôi cũng cần một dấu thời gian trên mỗi hàng để hiển thị chính xác khi máy khách kết nối xuống hàng thứ hai.

Tôi đã cạn kiệt netstat, nmap và tcptrack, nhưng không hỗ trợ dấu thời gian.

Tôi đã nghĩ rằng một kịch bản shell linux có thể hoạt động nếu tôi theo dõi một cổng cục bộ cụ thể và viết văn bản vào một tệp khi kết nối được thực hiện sau đó chỉ nối ngày trên mỗi dòng.

Tôi đã chơi với điều này:

netstat -ano|grep 443|grep ESTABLISHED

cũng như điều này:

tcptrack -i eth0 port 443

nhưng không phù hợp với nhu cầu của tôi vì tôi cần thời gian kết nối đến.

Nếu bạn có bất kỳ đề xuất hoặc có thể chỉ cho tôi đi đúng hướng, nó sẽ được đánh giá rất cao.

Cảm ơn. :)

linux  bash 

Haha đã di chuyển từ stackoverflow nhưng cần di chuyển sang unix / linux
Kolob Canyon

Câu trả lời:


71

chỉnh sửa : Tôi vẫn nhận được upvote cho những năm sau này. Xin đừng đi đến câu trả lời này, theo tôi, câu trả lời sử dụngiptables ở đây vượt trội hơn nhiều.


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

hoặc chỉ tcp-syn, hoặc chỉ tcp-ack(dự đoán của tôi sẽ là cái đó), tùy thuộc vào những gì bạn cần.


Thay vì hiển thị tên máy chủ cho mỗi kết nối, có cách nào để ghi đè lên nó bằng IP không?

Đúng, thêm -nsau tcpdump (man tcpdump: -n Đừng chuyển đổi địa chỉ (ví dụ: địa chỉ máy chủ, số cổng, v.v.) thành tên. )
Wrikken

5
Tôi cho rằng việc spam nhật ký kernel không thực sự vượt trội. ;)
Daniel B

1
À, nhưng tôi sẽ, cung cấp một cấu hình đúng trong đó tất nhiên các bản ghi sẽ đi: P Nhưng này, câu trả lời này vẫn còn ở đây nếu đó là một công cụ thỏa thuận :)
Wrikken

2
@Wrikken vấn đề với việc sử dụng nhật ký kernel cho điều này là, sử dụng giải pháp của bạn khi bạn ctrl + c ra khỏi tcpdump, mọi thứ vẫn như trước. Giải pháp iptables có nghĩa là để lại "bất ngờ" phía sau nếu bạn không xóa quy tắc theo cách thủ công. Điều ngạc nhiên này có thể dịch trong việc có một đĩa gốc đầy đủ trong thời gian không. Xin lỗi, nhưng tôi ủng hộ điều này (:
John Blackberry

31

Bạn có thể sử dụng hỗ trợ iptables trong nhân Linux cho việc này. Ưu điểm là nó không yêu cầu bất kỳ phần mềm bổ sung nào có ích vừa phải. Nhược điểm là nó yêu cầu quyền root để thiết lập (nhưng cho rằng bạn đang nói về cổng 443, đây là một cổng đặc quyền, có lẽ bạn cần quyền root với hầu hết các giải pháp).

Thêm quy tắc iptables với nội dung như:

sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

(Điều chỉnh -I INPUTphần cho phù hợp với khẩu vị của bạn.)

Khi quy tắc được kích hoạt, một mục nhật ký hệ thống sẽ được phát ra bởi kernel. Ví dụ: với quy tắc nhập liệu, mục nhật ký có thể trông giống như:

Ngày 5 tháng 12 09:10:56 nhân tên máy chủ: [1023963.185332] HTTPS SYN: IN = ifX OUT = MAC = 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 08: 00 SRC = ABCD DST = WXYZ LEN = 52 TOS = 0x00 PREC = 0x20 TTL = 119 ID = 11901 DF PROTO = TCP SPT = 37287 DPT = 443 WINDOW = 8192 RES = 0x00 SYN URGP = 0

Sau đó, bạn có thể sử dụng bất kỳ công cụ giám sát nhật ký nào để thực hiện điều gì đó hữu ích với thông tin này. Nếu triển khai nhật ký hệ thống của bạn hỗ trợ nó, bạn thậm chí có thể hướng chúng vào một tệp nhật ký riêng, đáp ứng hiệu quả yêu cầu của bạn để ghi dữ liệu kết nối vào tệp được đánh dấu thời gian đến tệp thứ hai mà không cần phần mềm bổ sung.

Lưu ý rằng LOGmục tiêu là mục tiêu không kết thúc, điều đó có nghĩa là mọi quy tắc theo sau nó vẫn sẽ được đánh giá và gói sẽ không bị từ chối hoặc chấp nhận bởi chính quy tắc LOG. Điều này làm cho LOGmục tiêu cũng hữu ích để gỡ lỗi các quy tắc tường lửa.

Để tránh làm ngập nhật ký của bạn, hãy xem xét sử dụng limitmô-đun kết hợp với điều này. Xem trang người dùng iptables (8) để biết chi tiết.


Có thể thực thi một kịch bản python kích hoạt điều này?
Karl Zillner

Đừng quên xóa các quy tắc bảng IP này sau khi bạn hoàn thành, nếu không chúng sẽ spam nhật ký khá nhiều tùy thuộc vào quy tắc. digitalocean.com/community/tutorials/ từ
Mo Beigi

26

Độ phân giải vi giây

Theo mặc định, tiện ích tcpdump sẽ báo cáo thời gian với độ phân giải micro-giây. Ví dụ:

$ sudo tcpdump -i any port 443

sẽ hiển thị đầu ra tương tự như sau:

12: 08: 14,028945 IP localhost.33255> localhost.https: Flags [S], seq 1828376761, giành chiến thắng 43.690, tùy chọn [MSS 65.495, sackOK, TS val 108.010.971 ECR 0, nop, wscale 7], chiều dài 0
00:08: 14.028959 IP localhost.https> localhost.33255: Cờ [R.], seq 0, ack 1828376762, thắng 0, dài 0

Xem tcpdump (8) để biết danh sách đầy đủ các tùy chọn tcpdump và bộ lọc pcap (7) để biết cú pháp đầy đủ của các bộ lọc bạn có thể sử dụng.


5

443 là lưu lượng được mã hóa - rất khó để tạo ra đầu hoặc đuôi lưu lượng trên cổng này:

bạn có thể làm

yum cài đặt ngrep hoặc apt-get cài đặt ngrep

sau đó chạy

ngrep -W byline -d any port 443 -q

2

Bạn cũng có thể yêu cầu điều này để giám sát các gói đến và đi từ các máy khác.

tcpflow -i eth0 -c port 7891

(tùy chọn -iđề cập đến mạng, tùy chọn -cin các gói trong bảng điều khiển)


Đây thực sự là một bình luận và không phải là một câu trả lời cho câu hỏi ban đầu. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào . Xin vui lòng đọc tại sao tôi cần 50 danh tiếng để bình luận? Tôi có thể làm gì thay thế?
DavidPostill


0

Nếu bạn cần một giải pháp vĩnh viễn sẽ luôn theo dõi lưu lượng trên các cổng quan tâm, tôi khuyên bạn nên sử dụng QoS (lệnh tc trong linux). tc là một chút khó hiểu và không có giấy tờ, vì vậy tôi sử dụng FireQoS để thiết lập QoS và netdata để theo dõi thời gian thực.

Kiểm tra điều này để biết thêm thông tin: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers


Tôi muốn nói rằng điều này hơi quá mức chỉ đơn giản là để ghi lại các kết nối, trong đó iPTables + --log sẽ hoạt động.
djsmiley2k - CoW

Bạn đã đúng, nó là quá mức nếu bạn cần phải đăng nhập các kết nối. Tôi sử dụng giải pháp này không phải để theo dõi khách hàng nào được kết nối, mà dịch vụ sử dụng bao nhiêu băng thông.
Costa Tsaousis
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.