컴퓨터에서 나가는 모든 요청 / 연결을 모니터링하려면 어떻게해야합니까?


71

내 컴퓨터는 서버이므로 서버에 대한 연결을 무시하고 싶습니다 (예 : 누군가 내 웹 사이트를 방문 할 때). 서버에서 다른 장소로 연결 / 요청하는 것만 보고 싶습니다 .

나가는 연결 보려면 어떻게합니까 ?

편집 : 나는 이런 종류의 것들을 처음 사용합니다. 내가하려고하는 것은 내 웹 응용 프로그램의 데이터 이외의 서버에서 무언가가 전송되는지 확인하는 것입니다. 예를 들어, 누군가 내 웹 사이트를 방문하는 경우 분명히 내 서버가 클라이언트의 브라우저로 데이터를 보냅니다. 그러나 웹 응용 프로그램의 프레임 워크에 어딘가에 통계 데이터를 보내는 코드가 있다고 가정합니다. 서버가 데이터를 보내는 장소를 알고 싶습니다. 아마 가능성은 없지만 작성하지 않은 PHP 또는 nodejs 프레임 워크를 사용하기로 결정했다고 가정 해보십시오. 어딘가에 어떤 유형의 데이터를 보낼 가능성은 적습니다. 그렇다면, 내가보고 싶은 것입니다.

답변:


76

사용하십시오 netstat. 예를 들어

$ netstat -nputw
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
[...]
tcp        0      0 192.168.25.222:22       192.168.0.134:42903     ESTABLISHED 32663/sshd: gert [p

모든 UDP ( u), TCP ( t) 및 RAW ( w) 나가는 연결 ( l또는 사용하지 않음 a)을 숫자 형식으로 나열하고 ( n, 장기 실행 가능한 DNS 쿼리 방지 p) 이와 관련된 프로그램 ( )을 포함합니다 .

c출력을 지속적으로 업데이트 하려면 옵션을 추가하십시오 .


감사. 좋은 정보입니다. 업데이트 된 질문을 살펴볼 수 있습니까?
trusktr

1
완전히 부적절한 도용 (이 답변이 Google로 제대로 처리 된 것을 제외하고) :이 답변은 Windows에서도 작동합니다. netstat"연속 모드"에서 사용하려면 -c작동하지 않습니다. netstat -na 1 | find "[Scan_Host_IP_Addr]"1초 마다 업데이트하는 것처럼 (이 예에서는) 숫자를 대신 사용합니다 . ( 소스 ).
ruffin

4
이것은 폴링하므로 항상 모든 연결을 잡을 수는 없습니다 .
reinierpost

도메인 이름, IP에 대한 정보와 같이보다 사용자 친화적 인 정보를 표시하는 방법이 있습니까? 아마도 사용자 정의 스크립트를 사용합니까?
awm

@awm 글쎄, 그것은 strace프로세스에서 할 수 있고 네임 서버 조회를 필터링합니다 (세부 사항은 이것에 대한 완전한 대답은 아닙니다). 또는 내 답변에 포함 된 옵션 netstat을 생략하여 나열된 IP의 역방향 DNS를 표시 할 수 n있습니다.
gertvdijk

11

모든 연결 시도 만 기록하려는 경우 가장 쉬운 방법은 iptables LOGLinux (또는 시스템의 동등한 방화벽 로깅 기능)를 대상으로하는 것입니다.

연결 지속 시간 및 양방향으로 교환되는 데이터 양과 같은 추가 정보가 필요한 경우 conntrackd(Linux의 경우) 가장 좋은 옵션 일 수 있습니다.

그러나 위의 두 개는 넷 필터를 통과하는 트래픽 만 기록합니다.이 필터는 일반적으로 모든 트래픽이지만 사용자 공간에서 IP 스택으로 생성 된 트래픽 (가상 컴퓨터 나 원시 소켓을 사용하는 모든 것) 또는 브리지 된 트래픽은 설명하지 않습니다.

보다 일반적인 솔루션의 경우, 같은 것들을 살펴 가질 수 argus, bro-ids, sancp또는 ntop그 그들이 인터페이스에 냄새 트래픽을 기반으로 모든 종류의 정보를 기록합니다.


8

I는 다음과 같은 도구의 무리를 시도했습니다 iftop, ntop, iptraf, 그리고 매우 유용한 내장 물론 netstat -tupln,하지만 내 사용 사례에 대한 가장 실용적인 것으로 밝혀졌다 (지원되는 옵션은 OS에 의존는) nethogs-이 연결을 집계 원래에 의해 app , 그리고 가장 시끄러운 것입니다.

다음을 통해 설치 가능 :

sudo apt-get install nethogs

루트로 실행하십시오.

sudo nethogs

모든 앱에서 시작된 모든 TCP 연결을 보는 것이 목표라면 다음을 사용할 수 있습니다.

sudo tcpdump -i lo -A | grep Host:

6

내가 생각하는 것은 청취 포트 목록을 얻은 다음 다른 TCP 연결에서 제거하면 모든 나가는 연결입니다. ss (소켓 상태) 명령은 "Local Address : Port"및 "Peer Address : Port"열을 출력합니다. "Peer Address : Port"열이 아닌 "Local Address : Port"열에서 수신 포트를 제거해야합니다. 그렇지 않으면 발신 연결이 누락 될 수 있습니다. 따라서 \s{2}+grep의 ": $ port"문자열 뒤에 "Local Address : Port"열 뒤에있는 공백과 일치하도록 사용하고 있습니다. 해당 열 뒤에는 두 개 이상의 공백이 있습니다. 여기서 "Peer Address : Port"에는 공백이 하나 있고 줄 바꿈이 있습니다 (grrr ... 줄 바꿈, IMO,\s+\s{2}+.) 일반적으로와 같이 ss의 필터링 기능을 사용하려고 할 수 있습니다 ss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>. 그러나 문자열이 얼마나 오래 걸릴 수 있는지에 대한 한계가있는 것으로 보이며 많은 청취 포트가있는 시스템에서 폭탄이 터졌습니다. 그래서 나는 grep과 같은 일을하려고합니다. 나는 다음이 효과가 있다고 믿는다.

FILTER=$(ss -tn state listening | gawk 'NR > 1 {n=split($3,A,":"); B[NR-1]=A[n]} END {for (i=1; i<length(B); i++) printf ":%s\\s{2}+|", B[i]; printf ":%s\\s{2}+", B[i]}')

ss -tn state established dst :* | grep -P -v "$FILTER"

이것은 사용중인 ss의 버전에 따라 다르며, 이전 버전 (예 : ss utility, iproute2-ss111117)은 다른 출력 형식을 가지므로 awk에서 $ 4 대신 $ 3을 사용해야 할 수도 있습니다. 또한 참고 ss -tln하고 ss -tn state listening다른 출력을 제공합니다. YMMV.

호스트의 IP를 알 필요가없는 약간 더 우아한 솔루션을 찾았으며 ss -tn state established dst :*잘 작동합니다. 위의 명령 줄을 수정했습니다.


이것이 어떻게 작동하는지에 대한 설명을 추가 하시겠습니까? ( 답변을 편집 하십시오. 명확한 정보를 주석으로 게시하지 마십시오.) 부분적으로 이해했다고 생각합니다. 좀 더 작업이 필요할 것 같습니다. ss -tn state listeningFTP 서버를 실행하는 호스트에서 실행 했는데 당연히이 명령은 컴퓨터가 포트 21에서 수신 대기 중임을 나타 냈습니다. 따라서 egrep -vIP 주소가 "21"( "210"포함) 인 원격 호스트를 필터링 한다는 의미는 아닙니다. ","211 ","212 ", ...)? 또한 asort정말로 필요한가요, 아니면 그냥 창 드레싱입니까?
G-Man

나는 거의 모든 것을 고쳐야했고, 수정 된 스크립트는 위입니다.
Dale

궁극적으로 ss 또는 netstat 가이 기능을 포함하면 훨씬 좋을 것입니다. 를 수행 ss --out나가는 연결의 목록을 얻을 수 있습니다.
Dale

좋아, 나는이 대답을 좋아한다. 서버의 보안 향상으로 돌아 가면 다시 시도하겠습니다. : D
trusktr

UDP에도 사용할 수있는 것처럼 보이지만 물론 다른 플래그와 상태를 사용해야합니다.
Dale

4

tcpdump특정 기준에 따라 필터링 할 수있는 기능을 통해 특정 인터페이스로 /에서 흐르는 모든 IP 트래픽을 볼 수 있습니다. tcpdump일반적으로 특정 배포판을 잡을 수있는 포트가없는 경우 기본적으로 대부분의 * nix 시스템에 설치됩니다.


2

netstat 필요에 따라 매개 변수를 사용하십시오 (매뉴얼 페이지 참조) 예를 들어

netstat -antup

여기서는 모든 (a) 청취 숫자 (n) tcp (t) 및 udp (u) 프로세스 (p)를 모니터링 할 수 있습니다.

ss명령을 시도 할 수도 있습니다 . 참조 용 :

SS Linux TCP / UDP 네트워크 및 소켓 정보


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.