Profile picture

[Linux] tcpdump를 사용하여 특정 포트로 들어오는 패킷 발신 여부 확인하기

JaehyoJJAng2023년 06월 15일


리눅스 서버 운영 중 특정 포트로 들어오는 외부 패킷이 있는데 발신측 서버에서 해당 패킷을 정상적으로 보낸 것인지 확인이 되지 않아 실제로 패킷이 들어온 것인지 확인이 필요하여 기록함.


tcpdump

tcpdump는 대부분의 유닉스 계열에서 NIC(Network Interface Card)를 통해 송/수신되는 패킷을 가로채고 표시해주는 소프트웨어이다.
참고로 유닉스 계열에서는 TcpDump가 있고, 윈도우 계열에서는 WinDump 라는 것이 있다.


tcpdump 설치

tcpdump가 설치되어 있지 않다면 설치 진행

$ yum install -y tcpdump

네트워크 디바이스 정보 추출

현재 환경에서 어떤 네트워크 디바이스를 사용 중인지 확인해야 한다.
아래 명령어로 디바이스 정보를 얻을 수 있다.

$ nmcli d
DEVICE  TYPE      STATE          CONNECTION
ens33   ethernet  연결됨         ens33
lo      loopback  관리되지 않음  --

image
명령어를 실행해보면 아래 이미지와 같이 DEVICE, TYPE, STATE CONNECTION 정보를 얻을 수 있는데 STATE가 연결됨 상태인 DEVICE(ens33)의 이름을 기억해놓자.


패킷 조회

이제 tcpdump를 사용해서 특정 포트로 발신 중인 패킷을 확인해보자.
필자의 경우 rsyslog 서버를 운영 중이며 위에서 확인한 네트워크 디바이스(ens33)으로부터 rsyslog 패킷이 들어오는지 확인할 것이다.


패킷 조회하는 방법은 아래와 같다

$ tcpdump -i <인터페이스 이름> src port <포트번호>
$ tcpdump -i <인터페이스 이름> src <IP주소>
$ tcpdump -i <인터페이스 이름> dst <IP주소>

ens33 포트로부터 192.168.121.150에서 출발하는 syslog 패킷이 수신되는지 확인해보자.

$ tcpdump -i ens33 src 192.168.121.150
15:40:12.154041 IP 192.168.121.150.41717 > jaehyo-server.syslog: SYSLOG daemon.info, length: 73
15:40:12.154089 IP 192.168.121.150.41717 > jaehyo-server.syslog: SYSLOG syslog.info, length: 166
15:40:12.154111 IP 192.168.121.150.41717 > jaehyo-server.syslog: SYSLOG daemon.info, length: 70
15:40:12.154130 IP 192.168.121.150.41717 > jaehyo-server.syslog: SYSLOG daemon.info, length: 73
15:40:12.154147 IP 192.168.121.150.41717 > jaehyo-server.syslog: SYSLOG syslog.info, length: 150
15:40:12.154163 IP 192.168.121.150.41717 > jaehyo-server.syslog: SYSLOG daemon.info, length: 70
15:40:12.154180 IP 192.168.121.150.41717 > jaehyo-server.syslog: SYSLOG authpriv.notice, length: 238

정상적으로 수신되고 있다.


패킷 조회 예시

1. ens33로 들어오는 출발지 포트가 514인 패킷을 확인하는 방법은 아래와 같다.

$ tcpdump -i ens33 src port 514

2. 특정 IP로 부터 수신되는 패킷을 확인하는 경우

$ tcpdump -i ens33 src 192.168.121.150

3. 특정 IP로 송신되는 패킷을 확인할 경우

$ tcpdump -i ens33 src 192.168.121.149

4. 특정 IP로 들어오거나 나가는 양방향 패킷 조회 (tcpdump host <ip>: 로 나가거나 들어오는 양방향 패킷 모두 출력함.)

$ tcpdump host 192.168.121.149

4. CIDR 대역으로 패킷 조회 (192.168.121.0/24 대역에서 발생되는 모든 패킷 조회)

$ tcpdump net 192.168.121.0/24

5. TCP/UDP 패킷만 조회

$ tcpdump tcp
$ tcpdump udp

6. 특정 포트 번호로 전송되는 첫 번째 패킷의 정보만을 캡처하여 출력

$ tcpdump -n -c 1 -i any port 8211 2>/dev/null
  • -n: 패킷의 주소를 숫자로 표시
  • -c 1: 캡처할 패킷의 수를 1개로 제한.
  • -i any: 모든 인터페이스에서 패킷 캡처
  • port 8211: 목적지 포트가 8211인 패킷만 캡처

Loading script...