오늘은 간단하게 tcpdump와 wireshark를 이용해서 내 패킷이 loss가 되고 있는건지 확인해보려고 한다.
그러기 위해선 acl을 수정하면서 가동할 서버가 필요하고 이를 위해 AWS EC2를 활용해서 진행해보려고 한다.
먼저 들어가기 앞서 tcpdump와 wireshark에 대해 알아보자.
TCPdump란?
tcpdump란 unix 계열 운영체제에서 제공해주는 커맨드로 네트워크 인터페이스를 통과하는 패킷의 내용을 캡처하고 분석할 수 있게 해주는 도구이다.
그러면 tcpdump는 어떻게 사용하는 걸까? 리눅스에서 사용하는 커맨드는 주로 man이라는 명령어를 이용해서 해당 커맨드에 대한 옵션 정보나 디테일 한 정보를 볼 수 있다. 커맨드 창으로 보기 좀 불편한 경우엔 해당 링크를 통해 tcpdump에 자세한 내용을 볼 수 있다.
오늘은 wireshark를 이용해서 로컬에서 보내는 요청이 EC2 인스턴스로 잘 전송되는지 확인하기 위해서 아래와 같은 명령어를 사용해서 패킷 파일을 저장하려고 한다.
sudo tcpdump -i en0 -w test-ec2.pcap # 이때 permission 문제로 sudo로 해야 사용할 수 있다.
이렇게 저장된 파일을 wireshark를 이용해서 네트워크 패킷을 분석할 수 있다.
Wireshark란?
tcpdump가 CLI로 네트워크 패킷을 봤다면 wireshark는 사용자에게 더 나은 편리성을 제공하기 위해 GUI 기반으로 분석 도구를 제공해주고 있다. wireshark를 이용해서 특정 네트워크 인터페이스에서 지나가는 패킷을 볼 수도 있고 저장된 파일을 이용해서 분석할 수도 있다.
wireshark는 해당 링크를 통해 window, macOS에서 다운받을 수 있다.
패킷 분석 과정
패킷을 분석해보기 앞서 일단 EC2 하나를 public 노출을 시켜서 띄울 수 있도록 구성하였다.
보안 그룹은 아래처럼 ssh를 이용해서 접근만 가능하도록 구성을 하였다. (추후 80번 포트에 대해 추가할 예정이다)
그 다음 위에서 언급했던 tcpdump 명령어를 떠서 패킷을 캡쳐할 수 있도록 하고 패킷 캡처를 중단하고 싶다면 ctrl+c를 누르면된다.
이젠 ssh로 해당 서버에 접속한 후 아래 명령어를 통해 간단한 80번 포트의 채널을 띄워서 telnet 명령어로 해당 서버의 80번 포트에 접근이 가능한지 확인해보도록 한다.
이후 아래처럼 다른 커맨드 창을 띄워서 해당 서버 포트로 telnet을 날려보면 응답이 떨어지지 않을텐데 시간이 조금 지났다면 ctrl+c로 시도를 중단하도록 해서 wireshark로 패킷을 한번 보도록 한다.
아래처럼 wireshark를 실행시킨 후 파일 버튼을 눌러서 저장했던 패킷 파일을 open하도록 한다.
먼저 ssh 연결을 맺었기 때문에 아래처럼 ssh 연결에 대한 네트워크 패킷이 나오게 되고 자세한 info를 보면 client와 server간의 보안을 위한 연결을 설정한 것을 알 수 있다. (이외에도 네트워크 인터페이스에는 많은 패킷이 왔다갔다 하므로 filtering을 거는 것을 추천한다)
좀 더 아래로 내려보면 내가 telnet으로 80번 포트에 대한 요청을 보냈던 패킷의 내용을 볼 수 있다. 아래처럼 계속 재전송 요청이 되고 있고 seq number가 초기의 0값으로 계속 보내고 있다는 것을 미루어 보아 나의 요청이 막히고 있다는 것을 알 수 있다.
이제 다시 AWS 보안 그룹으로 넘어가서 80번 포트에 대한 요청을 허용하고 다시 telnet을 날려서 패킷을 분석해보자.
위처럼 보안 그룹을 설정하고 다시 똑같이 tcpdump 명령어를 실행하고 telnet을 실행해보면 이번에 커맨드 창에서 Connected가 됐다는 것을 확인할 수 있다.
wireshark로 해당 패킷 파일을 확인해보면 아래처럼 EC2서버로부터 SYN와 ACK를 받았다는 것을 알 수 있다. 이는 내가 telnet으로 연결 설정에 성공했다는 것을 의미하며 이는 더이상 나의 패킷이 loss되지 않았다는 것을 알 수 있다.
결론 및 생각 정리
이외에도 wireshark를 이용해서 다양한 분석을 할 수 있는 것 같다. 송수신 패킷 양과 속도 등 다양한 정보를 볼 수 있다.(패킷을 분석할 수 있는게 다양해서 필요에 따라 보고 활용하면 좋을 것 같다.. 계층 별로도 패킷 정보를 볼 수 있다)
Kubernetes 환경 구축하는 과정에서 네트워킹 트러블슈팅 할 때 패킷 분석에 대해 좀 더 알고 미리 공부했으면 쉽게 패킷 까보고 트러블 슈팅할 수 있었을텐데.. 미리 알았으면 좋았을걸이라는 생각이 들었다.
그래도 학생일때 이렇게 패킷을 까보고 뭐가 문젠지 분석하기보다는 이론 공부만 했던 것 같은데 알고 있던 내용을 이렇게 한번씩 해보는 것도 좋은 시도인 것 같다라는 생각이 들었다. 이외에도 리눅스에서 트러블슈팅하는 것이 궁금해서 DevOps와 SE를 위한 리눅스 커널 이야기라는 책을 사서 보고 있는데 해당 내용이 실무에서 리눅스에서 트러블 슈팅하기 위해서 어떤 커맨드를 사용하고 분석하는지 잘 알려주어서 좋은 책인 것 같다(비록 내용이 아직 나에겐 넘 어려워서 일단 읽고 이런게 있구나..하는 정도로만 이해하고 있다..)
'기타' 카테고리의 다른 글
리눅스에서 ln과 ln -s의 차이 (0) | 2024.05.13 |
---|---|
CI / CD 에 대해서.. (0) | 2023.06.04 |
QUIC HTTP/3 내용 정리 (0) | 2022.12.08 |
WebRTC 내용 정리 (0) | 2022.12.08 |
HTTP2 정리 내용 (0) | 2022.12.08 |