우분투 리눅스 기반의 IDS / IPS 설치와 운영 (pg. 29 ~ 43)
Chapter 1. TCP/IP 방식의 계층적 구조
통신이란?
전송과 제어로 이루어져 기본 원리에 따라 아래와 같은 계층적 구조를 제시하였다.
TCP/IP 프로토콜
프로토콜이란?
- 호스트와 호스트 사이에서 사용하는 일종의 언어와 같은 개념
- 송신자와 수신자 사이에서 프로토콜 설정을 동일하게 해야 통신이 가능함
- 초반엔 표준 프로토콜이 없어 업체마다 자신들의 프로토콜을 만들어 이용했음
- 그러던 중 TCP/IP 프로토콜이 제시되면서 표준 프로토콜로 자리잡았다
TCP/IP 프로토콜의 계층
- 오늘날 4계층으로 이루어진 구조로 성장했지만 해당 프로토콜 구조와 기능을 설명할 땐 일반적으로 5계층 구조로 설명된다.
- 4계층으로 설명될 땐 데이터 링크 계층과 물리 계층을 통합해 네트워크 인터페이스 계층 또는 네트워크 접근 계층이라 부른다.
- 응용에서 물리 게층까지 하위 계층으로 내려갈수록 물리적이고 구체적인 속성이 강해지고 반대로 물리에서 응용 계층으로 올라갈수록 논리적이고 추상적인 속성이 강해진다.
- 일련의 송신이란 상위 계층에서 하위 계층으로 전환하는 과정으로 논리적 속성이 물리적 속성으로 전환하는 과정, 일련의 부가 정보를 추가하는 과정이다
계층이란?
- 비음성 통신에서 데이터를 전송하기 위한 일련의 과정이나 단계 또는 절차를 뜻한다
- 송신자의 운영 체제 : 응용 계층 -> 전송 계층 -> 네트워크 계층 -> 데이터 링크 계층 -> 물리 계층
- 수신자의 운영 체제 : 물리 계층 -> 데이터 링크 계층 -> 네트워크 계층 -> 전송 계층 -> 응용 계층
- 송신자와 수신자의 운영 체제는 역순으로 이루어진다.
송신
- 응용 계층에서 전송하고자 할 UDP 기반의 페이로드를 생성해 실제 정보를 저장한다. 이때, 응용 계층에서 생성한 전송 단위를 메시지(Message)라고 한다.
- 응용 계층에서 완성된 메시지는 다음 계층인 전송 계층으로 넘어가 첫 번째 헤더의 주요한 정보인 포트 번호와 결합한다. 이에 대한 전송 단위를 데이터그램(Datagram)이라고 한다.
- 데이터그램은 네트워크 계층으로 넘어가 두 번째 헤더를 통해 주요 정보인 IP 주소와 결합한다. 이에 대한 전송 단위를 패킷(Packet)이라고 한다.
- 패킷은 데이터 링크 계층으로 넘어와 세 번째 헤더의 주요 정보인 맥 주소와 결합한다. 이에 대한 전송 단위를 프레임(Frame)이라고 한다.
* 프레임의 크기가 늘 일정한 경우 셀(Cell)이라고 부르며 이는 ATM 전송 기법에서 사용하는 전송단위이다.
- 위 절차로 만들어진 프레임은 물리 계층으로 넘어가 비트(Bit) 전송 단위로 전환된다.
정리하면 아래와 같다.
Chapter 2. 네트워크 계층의 헤더 기능
IP 헤더 구조
- IP 헤더 크기는 일반적으로 20byte 크기를 사용한다. 하지만 경우에 따라 IP 추가 항목을 통해 21byte 이상 사용할 수 있다.
- Version (4 bit)
- IPv4 주소라면 4가 IPv6 주소라면 6이 들어간다. - Header Length (4 bit)
- IP 헤더의 크기가 들어간다. 일반적으로 20 byte 크기를 사용하므로 보통 20이 들어간다. - Type of Service
- 패킷의 전송 우선 순위를 저장한다.
- IPv4에만 해당. 이 설정은 더 이상 사용되지 않으며 IP 헤더의 서비스 종류 필드에 영향을 주지 않음
- Total Length
- IP 헤더를 포함한 패킷 전체의 길이 정보를 담는다.
- 만약 항목에 100이 저장되면 헤더 길이 항목에 담긴 20이란 정보를 통해 남은 크기를 추론할 수 있다. - ID / Flags / Fragment Offset
- MTU에 따른 패킷 분할 정보를 담는다
* MTU : TCP/IP 네트워크 등 패킷 또는 프레임 기반의 네트워크에서 전송될 수 있는 최대 크기의 패킷 또는 프레임
- 만약 MTU보다 큰 크기의 데이터가 생기면 ID 항목, 플래그 항목, 플래그먼트 오프셋 항목이 필요하다.
- TCP 헤더의 플래그 항목은 제어 신호를 설정하고 IP 헤더의 플래그 항목은 두 개의 비트를 이용해 패킷의 분할 유무를 표시한다.
- MTU가 1,500 byte인 경우 1,400 byte의 패킷과 5,900 byte 패킷이 있다고 가정
1) 1,400 byte 크기의 패킷은 MTU가 1,500 byte인 이더넷 구간을 통과할 수 있으며 패킷 분할이 필요하지 않으며 패킷 분할 항목의 설정이 아래 표와 같다. D와 M 비트는 플래그 항목에서 사용하는 두 개의 비트로 D는 Do not fragment 비트이고 M은 More fragments 비트이다. 이때, D 비트가 1이라는 것은 패킷 분할이 없는 것이고 이때 ID 항목과 프래그먼트 오프셋은 의미가 없다.
2) 5,900 byte 크기의 패킷은 이더넷 구간을 통과할 수 없어 패킷 분할이 필요하다. MTU에 적합할 수 있도록 패딩을 통해 100byte를 채워 6,000 byte 크기의 패킷으로 만든다. 그리고 1,500 byte로 분할하여 이더넷 구간을 통과할 수 있도록 만든다. 이때 패킷 분할의 설정 내용은 아래 표와 같다. 첫 번째 패킷 헤더에서 ID와 D 비트가 0이 아닌 1임을 통해 해당 패킷이 분할 패킷인 것을 알 수 있다. 그리고 M 비트가 1인 것은 해당 패킷 외에 또 다른 분할 패킷이 있다는 것을 의미한다. 그리고 플래그먼트 오프셋은 시작 위치로 0 byte이다. 두 번째 패킷은 첫 번째와 마찬가지로 ID 항목이 동일하며 D와 M 비트가 각각 0과 1로 분할 패킷이며 또 다른 분할 패킷이 있다는 것을 의미한다. 그리고 첫 번째 패킷 바로 다음인 1,500이 플래그먼트 오프셋임을 알 수 있다. 세 번째 패킷 역시 같고 마지막 패킷의 경우 이전 패킷들과 같지만 더 이상 분할 패킷이 없으므로 M 비트는 1이 아닌 0이 된다.
- 수신 측에선 송신 측에서 부여한 내용을 기반으로 네 개의 분할 패킷을 순서에 따라 재조립한다. 하지만 빈번한 패킷 분할은 과부하를 유발의 요인이 될 수도 있다.
- Time to Live
- 라우팅 루프가 일어나 구간에서 패킷을 폐기하기 위한 용도로 해당 패킷이 통과할 수 있는 라우터의 개수 정보를 담는다.
- 만약 해당 정보가 10이라면 이 패킷은 10대의 라우터를 통과할 수 있지만 그 이상은 통과할 수 없다. - Protocol
- 상위 계층에 속한 프로토콜 번호를 저장한다.
- 송신 측에서 UDP 페이로드를 생성했다면 17로 TCP 페이로드를 생성했다면 6으로 설정한다. 이를 통해 수신 측에서 패킷의 속성을 파악한다.
- 프로토콜 항목에서 사용하는 프로토콜 번호는 아래 링크를 통해 확인할 수 있다.
https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
- Header Checksum
- 해당 항목은 비활성화 상태로 헤더 오류 검사는 보통 사용하지 않는다. - Source Address / Destination Address
- 출발지 주소와 목적지 주소를 32 bit의 출발지 IP와 목적지 IP 주소를 저장한다.
IP 주소
- IP 주소는 A 등급부터 C 등급까지(원래는 E까지) 사용되며 첫 번째 자리를 통해 등급을 구분한다.
- 서브넷 마스크 표기에 써있는 IP 주소는 등급에 따라 네트워크 ID와 호스트 ID가 다르다.
- 네트워크 ID : LAN 영역에 대한 고유한 식별자
- 호스트 ID : 해당 LAN 영역에 속한 호스트에 대한 공유한 식별자
- 호스트 ID에서 모든 비트가 0인 경우를 네트워크 주소라고, 모든 비트가 1인 경우를 브로드캐스트 IP 주소라고 한다.
ICMP (Internet Control Message Protocl)
- IP 등장 이후 전송 작업을 화면에 출력하기 위한 용도로 등장하여 화면 출력 메시지에 기반해 오류 통보 기능과 질의 응답 기능 등을 수행하기 위한 프로토콜이다
- 오류 통보 : 전송 중 일어날 수 있는 목적지 도달 불가나 발신지 억제 또는 시간 초과나 매개 변소의 문제 등을 사용자 화면에 출력하기 위한 기능이다.
- 질의 응답 : 목적지 호스트가 출발지 호스트를 직접 확인할 수 없는 경우 임의의 쓰레기 값으로 이루어진 데이터를 생성한 ping 명령어로 전송한다. 만약 목적지 호스트가 동작 중이라면 응답이 온다. 사용자가 목적지 호스트로 ICMP 질의를 요청하면 네트워크 계층에 기반하여 쓰레기 값으로 채워진 페이로드를 생성한다. 그러면 ICMP 프로토콜은 네트워크 계층에서부터 페이로드를 생성한다.
- Type
- 해당 ICMP가 요청인지 응답인지 구분하기 위한 정보가 담긴다.
- 요청은 8을 응답은 0을 담는다. - ICMP 페이로드에 ICMP 헤더를 추가해 ICMP 패킷을 생성해 앞에 IP 헤더를 붙인다. 이때, IP 헤더가 있어야 라우팅이 가능하기 때문에 ICMP 패킷은 네트워크 계층에서 시작해 데이터 링크 계층과 물리 계층으로 넘어간다.
- ICMP 방식에 기반해 구현한 명령어 중 tracert 명령어는 출발지와 목적지 사이의 라우팅 과정을 확인하기 위한 용도이다. (ping은 출발지와 목적지 사이의 통신 여부를 점검하기 위한 용도) 이를 통해 구글 DNS 서버까지 몇 개의 LAN 영역을 통과했는지 알 수 있으며 오른쪽의 IP 주소는 라우터 IP 주소에 해당하고 첫 번째로 찍히 IP 주소는 나의 로컬 라우터 IP 주소이다.
- 위와 같은 명령어를 입력하면 TTL 값을 1로 설정한 ICMP 패킷이 발생한다. 해당 ICMP 패킷은 로컬 라우터에 도달하자마자 TTL 값을 0으로 바꿔 더 이상 로컬 라우터 뒤에 있는 라우터로 넘어갈 수 없다. 그리고 로컬 라우터는 출발지 호스트에서 ICMP의 오류 통보 기능을 이용해 목적지 도달 불가라고 응답을 보내 출발지 호스트 측에서 TTL 값을 2로 설정해 다시 ICMP 패킷을 전송한다. 두 번째 라우터에 이르면 TTL 값이 0으로 바뀌고 세 번째 라우터로 넘어갈 수 없다. 그럼 다시 목적지 도달 불가라는 응답을 보내고 계속 출발지 호스트는 ICMP 패킷을 TTL 값을 다시 늘리는 작업을 반복적으로 수행하다 TTL 값이 10이 된다면 목적지 호스트로부터 추적을 완료했다는 응답이 돌아오고 출발지에서 목적지까지의 경로를 확인할 수 있다.
- tracert 명령어는 일반적인 윈도우 계열에서 ICMP 방식을 이용하고 유닉스/리눅스 계열에서는 UDP 방식을 이용한다. UDP 방식의 경우 포트 번호 33435번을 이용하기 때문에 라우팅 상황에 따라 이전과 다른 경로가 나올 수도 있다. 이는 동적으로 동작하는 라우팅 알고리즘 때문이며 목적지까지 도달하기 위해 여러 경로 중 최적의 경로는 상황에 따라 변하기 때문이다.
- IPv6 환경에서는 ICMP가 IGMP와 ARP 기능까지 수행한다.
< 참고 자료 >
우분투 리눅스 기반의 IDS / IPS 설치와 운영 - 오동진, 추다영 저
ming9mon.tistory.com/13
'Study > Network' 카테고리의 다른 글
AWS (0) | 2020.11.26 |
---|---|
Google Cloud Platform 인스턴스 생성하기 (0) | 2020.11.09 |
[Network] TCP 프로토콜 개념 정리 (0) | 2020.09.20 |
[Network] ARP spoofing 개념 정리 (0) | 2020.09.20 |
[Network] ARP 프로토콜 개념과 실습 (0) | 2020.09.20 |
댓글