SharedIT | 묻고 답하기(AMP)

리눅스 트래픽 모니터링 관련 질문



안녕하세요.


리눅스에서 일정 수치 이상의 inbound/outbound 트래픽이 발생할 때 어떤 ip가 어떤 port와 통신하여 얼만큼의 트래픽이 발생되었는지에 대한 내역을 남기고 싶습니다.


cacti, zabbix, observium, vnstat 등 트래픽 모니터링 툴을 다 사용해봤는데 얻고자 하는 정보를 확인하긴 어렵더라구요

(평균 얼마정도의 트래픽이 발생하였는지 정도만 확인이 가능하고 ip, port 등은 확인불가)


그래서 현재 bash로 스크립트를 짜서 screen에 걸어놓고 특정 트래픽 이상이면 tcpdump를 파일로 떨구는 정도로 구성을 해놓았는데요.


스크립트, 명령어나 개발언어의 라이브러리 등 어떤 방법이라도 좋으니 더 좋은 방안이 있다면 조언 부탁드립니다.





Tags : 태그가 없습니다.

9개의 답변이 있습니다.

쿨가이
  0 추천 | 약 2년 전

혹시 방화벽이나 IPS장비에서는 지원이 안되나요? 

특정 IP와 포트에 대한 트래픽 통계를 확인할 수  있는 기능이 있을수 있습니다.

wansoo
  0 추천 | 약 2년 전

1초전과 비교해서 일정 수치 이상의 트래픽이 발생했을때 원인을 찾기 위한 로그를 생성하고 싶고,

로그량이 너무 많이 생성되어서 저장 공간 문제가 발생한다는 내용으로  시스템을 만든다면...

3가지 작업을 분리해서 처리하도록 만드는 게 좋을 것 같네요.

  • 1.tcpdump로 트래픽을 캡쳐한 파일을 임시 파일로 생성하는 작업 ( 분당 또는 시간당 구분하여 로그 파일 생성되게 )

  • 2.1초전과 비교하여 트래픽이 일정 수치 이상 발생했는지 점검하여 조건에 해당될 경우에 tcpdump에 의해 생성된 임시 파일에서 1초전에 기록된 트래픽들만 추출하여 log 파일 생성하는 작업

  • 3.몇 시간 또는 하루 단위로 tcpdump에 의해 생성된 임시 로그들을 제거하는 작업

wansoo
  0 추천 | 약 2년 전

jutting0229준성 님이 언급하신 iftop 명령도 유용하게 활용할 수 있을 걸로 보여지고요.

이외에도 iptraf-ng, bwm-ng 명령도 유용하게 활용할 수 있을거라 보여지네요.


1초전 값과 비교한다는 것은 1초마다 반복 실행하게 한다는 의미가 되겠고요.

while 문을 사용해서 무한 반복되게 해서 loop 문 안에 sleep 문을 넣어서 1초간 쉬었다 반복되게 처리하면 되겠고...


/proc/net/dev 로 부터 receive, transmitt 값을 가져 오는 건...


pkt=$(cat /proc/net/dev | grep {네트워크인터레이스이름})

r=$(echo $pkt | cut -f 2 -d ' ')

t=$(echo $pkt | cut -f 10 -d ' ')


와 같이 명령을 사용하면  r 환경 변수에 receive byte값을, t 환경 변수에 transmitt byte 값을 저장하게 되겠고요.


while loop 문 밖에서 r0, t0 라는 수신, 송신 이전 값을 저장할 환경 변수를 0으로 먼저 초기화 시켜 둔 후에...


1초전과 지금 측정한 송수신 byte 값이 변화된 정도는

expr 문을 사용해서...

예를 들어

dr=`expr $r - $r0`

dt=`expr $t - $t0`

와 같이 처리 하면 되겠고요.


특정 바이트 이상이 변했는지는 if 문을 사용해서 계산된 dr 및 dt 환경 변수 값이 특정 값보다 큰지를 기준으로 처리하면 되겠고요.

if 문 안에서 tcpdump를 실행해서 원하는 값을 가져오는 명령을 넣어 주는 형식으로...


그리고, dr, dt 가 계산되고 난 이후에 t0, r0에 t와 r 값으로 갱신 시켜 1초전 값이 최신 값으로 유지되게 만들어 주면 되겠고요.


모든걸 다 만들어 주는 것 보다는 설명한 개념들을 기반으로 스스로 직접 한번 해 보다가 막히는 부분에 있어서 다시 질문 남기시면 도움을 드려 볼께요~ ^^

찌롱 | 약 2년 전

답변에 약간의 오해가 있었습니다..!

맞습니다. wansoo님이 말씀하신 것과 거의 유사하게 스크립트는 이미 다 짜놨습니다.


의견을 여쭸던 목적은 이렇게 스크립트로 계속적으로 체크를 하는 방법이 과연 트래픽 체크를 하는데에 있어 좋은 방법인지? 에 대한 피드백을 듣고자 질문을 한 것입니다..!

찌롱 | 약 2년 전

본문 글에도 보면 이미 스크립트를 다 짜놓았다고 적어놓았고, 스크립트를 어떻게 짜야하는지에 대한 질문은 아니었습니다..!

차바라기
  0 추천 | 약 2년 전

무료가 아닌 유료 NMS퉅을 이용하셔야 할듯하네요

jutting0229준성
  0 추천 | 약 2년 전

답변 달라고 회원 가입 했습니다.

iftop이라는 패키지로 가능 합니다.

https://serverfault.com/questions/379469/iftop-how-to-generate-text-file-with-its-output


iftop loging -> elastic agent -> ElasticSearch  -> kibana로 시각화 해서 보시면 되시겠네요...

smilefor
  0 추천 | 약 2년 전

MRTG까진 가능하겠으나 어떤 IP가 트래픽저옫까지 상세한건 솔루션을 찾아 봐야 할거 샅습니다.

Simon.Park
  0 추천 | 약 2년 전

비용을 들여서 모니터링 솔루션을 도입하면 가능할지 모르겠으나,

무료로 먼가를 해 보실려고 한다면, 여러가지 방법을 복합적으로 사용하셔야 할 듯 합니다. 

지금 하시는 방법과 wireshark 를 조합해서 사용해서 나올 듯 한데요.

모니터링은 항상 느끼지만 사용자의 요구에 딱 맞게 나오는게 별로 없더라구요.

찌롱 | 약 2년 전

답변이늦었습니다.


네 그래서 오픈소스도 여러가지 테스트 해보는 중입니다

wansoo
  0 추천 | 약 2년 전

ip, port 별로 트래픽을 확인해 보고 싶다면 tcpdump가 낫지 않을까 싶어 보이네요.

wireshark는 gui interface이다 보니... script 등으로 처리하기에는 적절하지 않겠고...

wireshark의 포함되어 있는 tshark를 사용하거나 tcpdump를 사용하는게 맞지 않을까 싶어 보이고...

말씀하신 내용 정도는 tcpdump가 더 낫지 않을까 싶어 보이네요.


지금 사용하고 있는 스크립트 내용과, 개선되었으면 하는 내용등을 좀 더 구체적으로 알려 줘 보시면, 능력이 된다면 추가적으로 검토 한번 해 봐 드리겠습니다.


찌롱 | 약 2년 전

답변이 늦었습니다.

스크립트 내용에 대해 간략히 설명드립니다.


/proc/net/dev 쪽 트래픽양을 1초에 한번씩 체크하여 무한루프 돌립니다.

(최근값) - (1초전 값) > 특정값 조건이 되면 tcpdump를 실행하는 스크립트입니다.

근데 tcpdump를 파일로 떨구게되면 pcap파일의 용량이 너무 커서 디스크용량 증가가 너무 커져서 고민입니다.

wansoo | 약 2년 전

/proc/net/dev 의 어떤 값을 체크하나요?

그리고, 어떤 조건일때 tcpdump를 실행 시키며, tcpdump로 부터 어떤 내용을 가져 오고 싶으신가요?

생성되는 파일의 용량이 너무 크다면 적정 주기로 파일을 분리 저장하는 방법을 고려해 볼 수 있을 것 같고요.

디스크 용량 부족 문제가 있다면, 일정 시간 지난 파일을 제거하거나, 압축 저장, 또는 SMB, NFS  등을 이용해서 네트워크 상의 다른 큰 용량의 저장공간에 이동 보관 하는 방법도 검토해 볼 수 있을 것 같고요.

찌롱 | 약 2년 전

/proc/net/dev 에 receive/transmit 의 각각 bytes 부분을 가져옵니다.

해당 값들은 누적되는 값으로 1초전 값과 비교하여 특정 bytes 이상이 될때 명령어를 실행시킵니다.


여기서 tcpdump로 pcap 파일을 계속적으로 떨구게되면 파일의 용량이 너무 커서 iftop 명령어를 실행시키도록 수정했습니다.


가져오고 싶은 내용은 트래픽값이 설정해놓은 bytes 이상 탐지되면 해당 트래픽이 왜 발생했는지에 대한 원인을 로그로 남기고자 하는 것 입니다.

(IP, PORT, PROTOCOL, B/s 등)


Genghis Khan
  0 추천 | 약 2년 전

https://atlantic88.tistory.com/153

nmap과 wireshark 사용해 보세요

아니면 nms 툴을 이용해야하는데

외부망 열러 있다면 클라우드형 nms

로도 테스트 해보세요

찌롱 | 약 2년 전

답변이 늦었습니다.

nmap으로 트래픽 양 체크가 가능한가요??