리눅스 네트워크 모니터링

지정온·2023년 9월 21일
0
post-thumbnail

ifconfig : 네트워크 기본 모니터링

  • 시스템에 설정된 네트워크 인터페이스의 상태를 확인 및 변경할 수

    [ens5, docker0, ens3 : 랜 카드 라고 불리는 유선 네트워크 인터페이스(이름)]
    [lo : 루프 백 인터페이스로 자기자신과 통신하는데 사용하는 가상 장치 ip 127.0.0.1.
    	ip주소는 서버에 하나씩 부여되는 것이 아니라 네트워크 인터페이스에 할당되기 떄문에
        각 네트워크 인터페이스 마다 다른 ip주소를 가지고 있습니다]
    [ether : 네트워크 인터페이스의 하드웨어 주소(MAC Address)]
    [inet : 네트워크 인터페이스에 할당된 ip주소]
    [broadcast : 브로드캐스트 주소]
    [netmask : 넷마스크]
    [mtu : 네트워크 최대 전송 단위(Maxium Transfer Unit)]
    [RX packets : 받은 패킷 정보]
    [TX packets : 보낸 패킷 정보]
    [collisions : 충돌된 패킷 수]
    브로드 캐스트 주소 : 특정 네트워크에 속하는 모든 호스트들이 듣게되는 주소를 의미합니다. 
    				: 네트워크 주소와는 반대로 특정 네트워크의 맨 마지막 주소를 브로드캐스트
    넷마스크 : 네트워크 주소 부분의 비트를 1로 치환한 것이 넷마스크 
    	   : ip주소와 넷마스크를 and 연산 -> 네트워크 주소!

netstat : 네트워크 상태 모니터링

  • 현재 시스템에 연결된 네트워크 상태, 라우팅 테이블, 인터페이스 상태 등을 볼 수 있습니다

    2개의 영역으로 나누어져 보여진다.
    [Active Internet connections] : TCP, UDP, raw로 연결된 목록만 보여진다.
    [Active UNIX domain sockets] : 도메인 소켓으로 연결된 목록만 보여진다.
  • 옵션

    [-n] : 호스트명, 포트명을 lookup(도메인으로 보이지 x), IP,PORT로 보여진다.
    [-a] : 모든 네트워크상태를 보여준다.
    [-t] : tcp 프로토콜만 보여준다.
    [-u] : udp 프로토콜만 보여준다.
    [-p] : 해당 포트를 사용하는 프로그램과 프로세스ID(PID)를 보여준다.
    [-r] : 라우팅 테이블 출력
    [-s] : 프로토콜 별(IP, ICMP, TCP, UDP)로 통계를 보여준다.
    [-c] : 연속적으로 상태를 보여준다.
    [-l] : 대기중인 소켓 목록을 보여준다.
    
  • State

    공백 : 연결되어 있지 않음
    Free : socket은 존재하지만 할당되어 있지 않다.
    LISTENING : 연결요청에 대한 응답준비가 되어 있는 상태
    CONNECTING : 연결이 막 이루어진 상태
    DISCONNECTING : 연결해제 되고 있는 상태
    UNKNOWN : 알 수 없는 연결, 알려지지 않은 연결 상태
    LISTEN : 연결 가능하도록 daemon이 떠있으며 연결이 가능한 상태
    SYS-SENT : 연결을 요청한 상태
    SYN_RECEIVED : 연결요구에 응답 후 확인 메시지 대기중인 상태
    ESTABLISHED : 연결이 완료된 상태
    FIN-WAIT1 : 소켓이 닫히고 연결이 종료되고 있는 상태
    FIN-WAIT2 : 로컬이 원격으로부터 연결 종료 요구를 기다리는 상태
    CLOE-WAIT : 종료 대기중
    CLOSING : 전송된 메세지가 유실되었음
    TIME-WAIT : 연결종료 후 한동안 유지되어 있음
    CLOSED : 연결이 완전히 종료
    
  • 옵션에 따라 다른 정보를 확인

    -r : 서버의 라우팅 테이블 출력
    -na --ip : tcp/udp의 세션 목록 표시
    -na | grep ESTABLISHED | wc -l 활성화된 세션 수
    -nap | grep :80 | grep ESTABLISHED | wc -l : 80포트 동시 접속자 수
    		-nltp 리슨중인 포트정보 표시   

  • 라우팅 테이블 해석 (route -n 으로도 확인 가능)

    Destination : 목적지 네트워크
    Gateway : 목적지로 가기위한 게이트웨이 주소
    Genmask : 목적지 네트워크의 넷마스크 주소
    Flags : 해당 경로에 대한 정보를 알려주는 기호/U -up H -목적지, G -게이트웨이
    Metric : 목적지 네트워크까지의 거리
    Ref : 경로 참조수
    Use : 경로를 탐색한 횟수
    IFace : 네트워크 인터페이스    
  • 라우팅 설정 예제

라우팅

  • 한 네트워크에서 다른 네트워크로 패킷을 이동시키는 과정과 네트워크 안의 호스트에게 패킷들을 전달 하는 과정. 리눅스는 미리 설정되어 있는 라우팅 테이블이라는 지도를 보고 패킷을 어떤 네트워크 인터페이스를 거쳐 목적지로 보낼지 결정
    Destination : 목적지
    Gateway : 외부 네트워크와 연결학 위한 게이트웨이 주소
    Genmask : 목적지 네트워크의 넷마스크 주소.
    		"255.255.255.255"로 지정되어 있으면 목적지 호스트의 주소
            "0.0.0.0"으로 지정되어 있으면 기본 게이트웨이 주소
    Flags: 해당 경로에 대한 정보를 알려주는 기호
    		U : 이 경로가 살아있다
            H : 목적지가 호스트 주소
            G : 게이트웨이를 향하는 경로
    Metric : 목적지 네트워크까지의 거리
    Ref : 경로를 참조한 횟수
    Use : 경로를 탐색한 횟수
    Iface : 패킷이 오가는 데 사용할 네트워크 인터페이스
    라우팅 설정 예제
    라우팅 커맨드

tcpdump

tcpdump 사용법

내 공인 ip 확인하는 방법

curl ifconfig.me

내 private ip 확인하는 방법

ifconfig

네트워크 명령어

host : 원격시스템의 ip주소 확인

nslookup : dns조회 서비스를 제공하는 시스템에 대한 정보 제공(서버의 네트워크가 제대로 설정되어있는지 확인하는 용도)

  • nslookup : 도메인네임, ip주소, 기타 DNS레코드 알 수 있다

  • A레코드

특정도메인에 매핑되는 ipv4
	"lifeoncloud.kr"의 ip주소가 183.111.199.159이다 라고 말하는 중
Server, Address는 제 컴퓨터에 연결된 DNS 서버의 주소
아래의 Name, Address는 lifeoncloud.kr의 ip를 보여준다

nslookup -type=a {domain} 으로 도메인의 A레코드를 바로 확인 가능

일대다, 다대일도 가능 도메인 하나에 ip주소 여러개 할당 가능
반대로 도메인 여러개에 ip주소 할당가능
이때 http헤더의 host필드에 도메인을 명시하여 웹서버를 구분하여 서비스 할 수!
  • NS 네임서버
'lifeoncloud.kr' 도메인을 관리하는 네임서버는 'ns2.cafe24.co.kr'이다 라고 말하는 역할을 한다.

네임서버란 도메인 이름과 ip주소를 서로 상호전환 시켜주는 서버

lifeoncloud.kr의 ip를 해당 네임서버에 직접 물어보자
Non-authoritative answer 없이 바로 a레코드가 나오는 것을 확인할 수 있다.

  • Non-authoritative answer?
현재 도메인이 실제로 사용하고 있는 dns서버가 아닌, 다른 dns서버에서 저장한 캐시를 보여주었다. 
실제로 사용하고 있는 네임서버를 지정해서 보여주니 신뢰할 수 없는 답변이 나올 수 밖에
  • AAAA 레코드
A레코드와 같은 역할 ipv6에서 쓰인다는 점!
  • CNAME 레코드
'test.lifeoncloud.kr'는 'lifeoncloud.kr'를 바라보고 있습니다의 의미

cname에 의해 test.lifeoncloud.kr > lifeoncloud를 가리키고
a레코드에 의해 lifeoncloud.kr > 183.111.199.159 를 가리킨다

test.lifeoncloud.kr > lifeoncloud > 183.111.199.159
  • CNAME 레코드 용도
lifeonclod.kr의 ip주소인 183.111.199.159가 서버이동으로 변경되었다

test, mail도 각각 a레코드를 지정해 주었다면 세개의 레코드를 변경해주었어야 함

CNAME을 이용하여 test, mail이 lifecloud.kr을 가리키게만 한다면 
lifecloud.kr의 A레코드만 변경하면 된다.
  • MX
해당 도메인을 메일 주소로 갖는 메일 서버
  • SOA
Start of Authority의 약어
네임서버가 해당 도메인에 관하여 인증된 데이터를 가지고 있다.
SOA가 없는 도메인은 네임서버에서 정상적으로 동작하지 X
  • PTR
Pointer 레코드
A레코드의 반대 방향인 레코드 ip >> 도메인 네임으로
  • TXT : 목적과 용도가 여러개
TeXT 레코드
DKIM, DMARC, SPF레코드를 설정하거나 사이트 확인용, 여러목적
  • SPF란?
도메인의 이메일을 보내도록 승인된 메일 서버를 명시하는 이메일 인증 방법

SPF레코드를 사전에 설정하여 메일 서버 정보를 공개하면, 스푸핑 방지, 수신자 측에서 스팸메일로 분류 방지

SPF는 중단 > TXT에서 설정

dig : 통신중인 네임 서버, 쿼리 응답까지 소요되는 시간 등 원격 시스템 연결에 대한 여러 정보를 제공하며 문제 해결에 자주 사용!

dig 간단한 사용법 1
dig 간단한 사용법 2
dig command 간단 응용

dig [@네임서버] 도메인 [쿼리타입]
  • [@global-server] 도메인 질의를 전송할 dns 서버를 지정한다.
  • [domain] 질의 대상 도메인 이름이다.
  • [q-type] 질의하는 쿼리타입. MX, A, PTR, SOA를 사용한다.
  • @global-server를 지정하지 않으면 네트워크 설정에서 지정한 DNS로 질의한다.
  • naver.com만 검색
> dig naver.com
# [명령어] [조회하려는 도메인 이름]

; <<>> DiG 9.10.6 <<>> naver.com
# dig version
;; global options: +cmd
# dns 결과를 표시하도록 설정됨

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35602
# opcode : 이 요청이 DNS 서버에 대한 쿼리
# status : 도메인 "naver.com"의 조회 결과에 오류가 없다는 뜻, "NOERROR"은 해당 도메인이 존재하고 ipv4주소를 가지고 있다
# id : 요청의 고유 식별자
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
# flags : 요청의 상태와 특성. qr은 응답. rd는 재귀적 조회
# QUERY : 총 1개의 질문이 있다. 여기서 질문은 "naver.com"의 A 레코드를 조회하고 있다는 것!
# ANSWER : 답변이 4개이다. "naver.com"의 ipv4 주소에 대한 4개의 답변이 포함
# AUTHORITY : 권한이 있는 서버가 없다
# ADDITIONAL : 추가정보가 1개 있다.

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
# DNS의 확장 옵션
;; QUESTION SECTION:
;naver.com.			IN	A
# DNS 쿼리의 질문 섹션

;; ANSWER SECTION:
# naver.com의 A레코드에 대한 답변 ipv4주소가 4개
naver.com.		262	IN	A	223.130.195.95
naver.com.		262	IN	A	223.130.195.200
naver.com.		262	IN	A	223.130.200.104
naver.com.		262	IN	A	223.130.200.107

;; Query time: 76 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
# DNS 서버의 IP 주소와 포트 번호
;; WHEN: Thu Nov 02 14:54:18 KST 2023
;; MSG SIZE  rcvd: 102
  • naver.com을 8.8.8.8에 검색 x -> 두개를 검색하는 것
dig 8.8.8.8 naver.com
# [] [dns 서버주소][]
# 어떻게 naver.com 으로 넘어가지 생각했었는데
# 요청을 잘 못 날려서 dns로 보낸게 아님!
; <<>> DiG 9.10.6 <<>> 8.8.8.8 naver.com
;; global options: +cmd

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 13759
# status : NXDOMAIN은 해당 도메인이 존재하지 않는다
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
# ANSWER : 답변이 0개
# AUTHORITY : 권한이 있는 서버가 1개

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;8.8.8.8.			IN	A

;; AUTHORITY SECTION:
.			1855	IN	SOA	a.root-servers.net. nstld.verisign-grs.com. 2023110100 1800 900 604800 86400

;; Query time: 79 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Thu Nov 02 14:54:56 KST 2023
;; MSG SIZE  rcvd: 111

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14319
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
# 이어서 naver.com의 ip주소를 찾는 두 번째 쿼리 결과 표시

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;naver.com.			IN	A
# QUESTION SECTION : 질문 부분에서 naver.com의 A 레코드를 조회하고 있다는 것! A레코드는 도메인의 ipv4 주소

;; ANSWER SECTION:
# naver.com의 A레코드에 대한 답변 부분. ipv4주소가 4개 제공
naver.com.		4	IN	A	223.130.195.95
naver.com.		4	IN	A	223.130.195.200
naver.com.		4	IN	A	223.130.200.104
naver.com.		4	IN	A	223.130.200.107

;; Query time: 74 msec
# 마지막 부분에서는 요청을 처리한 DNS 서버의 정보와 시간 정보가 표시
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Thu Nov 02 14:54:56 KST 2023
;; MSG SIZE  rcvd: 102

# naver.com 의 ipv4주소를 google public dns 서버를 통해 조회하려고 시도한 것으로 해석! x -> 2개 검색한 것
  • naver.com의 DNS 찾기
dig naver.com NS +short
ns1.naver.com.
ns2.naver.com.

# naver.com 도메인에 대한 네임 서버의 이름을 나타낸다.
# 이 네임 서버들은 naver.com 도메인의 dns 관리를 담당한다.
# DNS 네임 서버는 도메인 이름을 ip주소로 해석하는 역할을 수행
# 이 경우에는 "ns1.naver.com" "ns2.naver.com" 두개의 네임 서버가 관련되어 있다.
  • naver.com을 해당 DNS에서 찾기 x -> 2개를 검색하는 것
> dig ns1.naver.com naver.com

; <<>> DiG 9.10.6 <<>> ns1.naver.com naver.com
;; global options: +cmd
# 여기에 ns1.naver.com 하나
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4741
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ns1.naver.com.			IN	A

;; ANSWER SECTION:
ns1.naver.com.		64333	IN	A	125.209.248.6

;; Query time: 77 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Thu Nov 02 14:55:38 KST 2023
;; MSG SIZE  rcvd: 58

# 여기에 naver.com 
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49696
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;naver.com.			IN	A

;; ANSWER SECTION:
naver.com.		26	IN	A	223.130.200.107
naver.com.		26	IN	A	223.130.195.95
naver.com.		26	IN	A	223.130.195.200
naver.com.		26	IN	A	223.130.200.104

;; Query time: 71 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Thu Nov 02 14:55:38 KST 2023
;; MSG SIZE  rcvd: 102
  • 이게 dns에 naver.com 찾기
> dig @1.1.1.1 naver.com

; <<>> DiG 9.10.6 <<>> @1.1.1.1 naver.com
; (1 server found)
;; global options: +cmd
# 여기에 naver.com 하나에 대한 결과
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5566
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;naver.com.			IN	A

;; ANSWER SECTION:
naver.com.		52	IN	A	223.130.200.107
naver.com.		52	IN	A	223.130.195.95
naver.com.		52	IN	A	223.130.200.104
naver.com.		52	IN	A	223.130.195.200

;; Query time: 11 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Thu Nov 02 15:31:58 KST 2023
;; MSG SIZE  rcvd: 102

nmap : 원격 시스템 탐지, 로컬 시스템이 제공하는 서비스에 대한 보고!

http, https를 이용할 수 있다.

참고할 만한 링크

profile
가보쟈고

0개의 댓글