[TIL] Linux 에서 특정 서비스가 외부에서 호출되고 있는 서비스인지 확인하는 방법

반응형

1. 상황

A: 저희 172.21.x.x redis 서버를 다른 서비스에서 사용하고 있는 곳이 있나요..? 확인 한번 부탁드립니다. 사용하는곳이 없다면 해당 장비를 제거하려고 합니다.

위의 작업 지시를 받고, 코드 저장소를 확인해보니.. 분명 코드에는 해당 장비의 ip 가 config 에 명시되어 있는 서비스가 있었다.

redis 
 ip : 172.21.x.x

하지만. 해당 코드가 레거시이며.. 실제로는 해당 장비의 redis를 사용하고 있는 서비스는 없을 것 같다는 의구심이 굉장히.. 많이 든다.

그렇다면 어떻게 해당 장비의 사용 유무를 확실히 할 수 있을까?

2. 진행

특정 장비의 서비스를 외부에서 사용하고 있는 곳이 있는지 (호출하고 있는 서비스가 있는지) 확인 해보기 위해 다음과 같은 절차를 수행할 수 있다.

1) 먼저, 172.21.x.x 장비에 접속해 redis 가 실제로 떠있는지 부터 확인해보자.

ps -ef | grep redis

음.. 일단 잘떠있군?!

2) 그렇담 다음으로 해당 서비스가 떠있는 포트에 대한 네트워크 통계치를 확인해보자. redis의 port인 6379 이므로 다음과 같은 명령어를 입력한다.

netstat -anp | grep 6379

뭐야.. 아무런 결과도 안나오잖아? 그렇담 위의 redis는 현재 외부에서 사용하고 있는 서비스가 없다고 판단할 수 있다.

무슨말이냐고..?

만약. 특정 port로 떠있는 서비스를 외부에서 호출하고 있다면. 다음과 같이 netstat (네트워크 통계치) 명령어 실행시 어떤 ip 에서 해당 port 의 서비스를 호출하고 있는지 확인할 수 있다.

위의 내용을 해석해보자면.

현재 접속해 있는 장비가 172.21.101.107 이며 WAS 장비의 port 인 8080 으로 netstat (네트워트 통계치)를 조회했을 때

172.21.100.xx / 172.21.101.xx 등의 IP 를 사용하고 있는 장비가 172.21.101.107 장비의 8080 port 즉 WAS 와 통신을 하고 있다고 이해 할 수 있다.

netstat의 결과는 왼쪽부터 프로토콜, 로컬 IP, 리모트 IP, 상태 정보를 보여준다.

이때 상태 정보는 다음과 같이 구분 된다 (출처)

1) LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태

2) SYN-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태

3) SYN_RECEIVED : 서버가 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만 아직 클라이언트에게 확인 메시지는 받지 않은 상태

4) ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태

5) FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청하고 회신을 받아 종료하는 과정의 상태

6) CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태

7) TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그먼트를 위해 당분간 소켓을 열어두고 있는 상태

8) CLOSED : 완전히 종료


반응형

댓글

Designed by JB FACTORY