특정 포트에서 TCP 트래픽 모니터링


49

나는 이것을 광범위하게 검색했지만 실제 예를 제시 할 수는 없습니다.

내 목표는 특정 포트에서 TCP 트래픽을 모니터링하여 들어오는 연결을보고 텍스트 파일에 쓰는 것입니다. 캐치는 또한 클라이언트가 두 번째로 연결했을 때 정확하게 표시하려면 각 행에 타임 스탬프가 필요하다는 것입니다.

netstat, nmap 및 tcptrack을 이미 사용했지만 타임 스탬프를 지원하지 않습니다.

특정 로컬 포트를 모니터링하고 연결 할 때 파일에 텍스트를 쓴 다음 각 줄의 날짜를 연결하면 Linux 쉘 스크립트가 작동 할 수 있다고 생각했습니다.

나는 이것을 가지고 놀고 있었다 :

netstat -ano|grep 443|grep ESTABLISHED

뿐만 아니라 :

tcptrack -i eth0 port 443

그러나 연결이 시작되는 시간이 필요하기 때문에 어느 것도 내 요구에 맞지 않습니다.

당신이 어떤 제안이 있거나 올바른 방향으로 나를 가리킬 수 있다면 그것은 크게 감사하겠습니다.

감사. :)

linux  bash 

Haha는 stackoverflow에서 마이그레이션했지만 unix / linux로 마이그레이션해야합니다.
Kolob Canyon

답변:


70

편집 : 나는 아직도 몇 년 동안 여전히 투표를 받고 있습니다. 이 답변을 사용iptables 하지 마십시오. 여기를 사용 하는 대답 은 내 의견보다 훨씬 우수합니다.


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

또는 당신이 필요로하는 것에 따라 tcp-syn또는 오직 tcp-ack(나의 추측 일 것입니다).


각 연결에 대한 호스트 이름을 표시하는 대신 IP로 호스트 이름을 재정의하는 방법이 있습니까?

예, -ntcpdump 뒤에 추가하십시오 (man tcpdump : -n 주소 (예 : 호스트 주소, 포트 번호 등)를 이름으로 변환하지 마십시오 )
Wrikken

5
커널 로그 스팸 처리가 실제로는 우수하지 않다고 주장합니다. ;)
Daniel B

1
아, 그러나, 어느 로그가 어디로 가야 하는지를 적절히 설정하면 다음과 같이 할 수있다. : P 그러나,이 답변은 거래 차단기 인 경우에도 여전히 여기에있다 :)
Wrikken

1
@ 커널 로그를 사용할 때의 문제는 tcpdump에서 ctrl + c를 사용할 때 모든 것을 이전과 같이 유지한다는 것입니다. iptables 솔루션은 규칙을 수동으로 제거하지 않으면 "놀람"을 남기는 것을 의미합니다. 이러한 놀라움은 곧 전체 루트 디스크를 갖는 것으로 해석 될 수 있습니다. 미안하지만, 나는 이것을 찬성한다 (:
John Blackberry

31

이를 위해 Linux 커널에서 iptables 지원을 사용할 수 있습니다. 단점은 적당히 유용한 추가 소프트웨어가 필요하지 않다는 것입니다. 단점은 설정하기 위해 루트 권한이 필요하다는 것입니다 (그러나 권한이있는 포트 인 포트 443에 대해 이야기하고 있다면 아마도 대부분의 솔루션에 루트 권한이 필요할 것입니다).

다음과 같이 iptables 규칙을 추가하십시오.

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

( -I INPUT맛에 맞게 부분을 조정하십시오 .)

규칙이 트리거되면 커널에서 syslog 항목을 생성합니다. 예를 들어 입력 규칙의 경우 로그 항목은 다음과 같습니다.

12 월 5 일 09:10:56 호스트 이름 커널 : [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 창 = 8192 RES = 0x00 SYN URGP = 0

그런 다음 모든 실행 로그 모니터링 도구를 사용하여이 정보에 유용한 작업을 수행 할 수 있습니다. syslog 구현이이를 지원하는 경우 별도의 로그 파일로 지정하여 추가 소프트웨어없이 두 번째로 타임 스탬프 된 파일에 연결 데이터를 작성해야하는 요구 사항을 효과적으로 충족 할 수 있습니다.

참고 것이 LOG대상이 어떤 규칙이 여전히 평가되는 것을 의미 다음 비 착신 대상이고, 상기 패킷 중 하나를 거부하거나 LOG 규칙 자체가 허용되지 않을 것이다. 따라서 LOG방화벽 규칙을 디버깅 할 때도 대상이 유용합니다.

로그가 넘치지 않게하려면 limit이와 함께 모듈을 사용하는 것이 좋습니다. 자세한 내용은 iptables (8) 매뉴얼 페이지를 참조하십시오.


이것을 트리거하는 파이썬 스크립트를 실행할 수 있습니까?
Karl Zillner

완료 한 후 이러한 IP 테이블 규칙을 삭제하는 것을 잊지 마십시오. 그렇지 않으면 규칙에 따라 로그를 상당히 많이 스팸으로 보냅니다. digitalocean.com/community/tutorials/…
Mo Beigi

26

마이크로 초 해상도

기본적으로 tcpdump 유틸리티는 마이크로 초 분해능으로 시간을보고합니다. 예를 들면 다음과 같습니다.

$ sudo tcpdump -i any port 443

다음과 유사한 출력이 표시됩니다.

12 : 08 : 14.028945 IP localhost.33255> localhost.https : 플래그 [S], seq 1828376761, win 43690, 옵션 [mss 65495, sackOK, TS val 108010971 ecr 0, nop, wscale 7], 길이 0
12:08 : 14.028959 IP localhost.https> localhost.33255 : 플래그 [R.], seq 0, ack 1828376762, 승리 0, 길이 0

tcpdump 옵션의 전체 목록은 tcpdump (8) 및 사용 가능한 필터의 전체 구문은 pcap-filter (7)를 참조하십시오.


5

443은 암호화 된 트래픽이므로이 포트에서 트래픽을 발생시키기 어렵습니다.

넌 할 수있어

yum 설치 ngrep 또는 apt-get 설치 ngrep

그런 다음 실행

ngrep -W byline -d any port 443 -q

2

다른 시스템에서 들어오고 나가는 패킷을 모니터링하기 위해이 작업이 필요할 수도 있습니다.

tcpflow -i eth0 -c port 7891

( -i네트워크 언급 옵션 , -c콘솔에서 패킷을 인쇄하는 옵션 )


이것은 실제로 주석이며 원래 질문에 대한 답변이 아닙니다 . 작성자의 의견을 비판하거나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요. 언제든지 자신의 게시물 에 댓글 수 있으며 평판 이 충분 하면 게시물댓글 수 있습니다 . 댓글을 작성하려면 50 개의 평판이 필요한 이유를
DavidPostill


0

관심있는 포트의 트래픽을 항상 모니터링하는 영구적 인 솔루션이 필요한 경우 QoS (linux의 tc 명령)를 사용하는 것이 좋습니다. tc는 약간 비밀스럽고 문서화되어 있지 않기 때문에 FireQoS를 사용하여 실시간 모니터링을 위해 QoS 및 netdata를 설정합니다.

자세한 내용은 https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers에서 확인하십시오.


iPTables + --log가 작동하는 연결 로깅을 위해 간단히 죽이는 것이라고 말했습니다.
djsmiley2k-CoW

당신이 옳습니다, 당신이 연결을 기록해야한다면 그것은 과잉입니다. 이 솔루션을 사용하여 연결된 클라이언트가 아니라 서비스가 사용하는 대역폭의 양을 모니터링합니다.
Costa Tsaousis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.