EtherChannel

EtherChannel은 스위치/라우터 간 연결에서 여러 물리적인 이더넷 링크(케이블)를 묶어서 하나의 논리적인 링크로 만들어서 데이터를 전송함으로써 고속으로 통신을 수행시키는 기법이다. 여러 회선이 묶여 있으므로 라우터/스위치 간 통신에서

오류를 감당할 수 있는 폴트 톨러런스(fault–tolerance)
잉여의 장비로 즉시 대체할 수 있는 리던던시(redundancy),
부하를 분산해서 각 노드가 최선의 서비스를 제공하게 하는 로드밸런싱(load-balancing),
한가한 노드가 먼저 서비스를 제공하는 라우드로빈(round robin) 등이 가능하고 WAN의 ISP나 TelCO(CO)에서 사용하는 컨센트레이터(Concentrator)와 같은 장치에서 주로 사용된다. 중요 서버나 네트워크 장비에서도 설정한다.
NIC를 여러 개 묶어서(multi-homed machine) 하나로 서비스하는 Channel Bonding 혹은
하나의 NIC에 여러 IP를 주는 IP Binding, 그리고
HDD를 여러 개 묶어서 디스크의 데이터 보존하는 RAID, 그리고
HDD를 추가해서 별도의 조치 없이 바로 용량을 증가시키는 LVM(Logical Volume Management)를 구축하는 것들과 유사하게 이더넷 케이블을 여럿 묶어서 하나의 케이블처럼 서비스하게 하는 기법이다. 10G 하나 + 10G 하나 =>20G 하나로 운영
스위치의 트렁크 부분에 EtherChannel로 설정한다면 먼저 회선이 묶일 이름을 지정하고, 회선의 mode를 auto나 desirable로 설정할 수 있는데 양 스위치에 모두 auto로 설정하지 않고 어느 한 쪽을 desirable로 구성해야 EtherChannel이 설정된다.

Port Security

스위치는 L2 장비이기 때문에 노드의 MAC주소로 노드를 구분하므로 별도의 구성없이 바로 노드를 연결해서 사용할 수 있다. 하지만 이런 쉽게 접근할 수 있기 때문에 스위치 포트에 스위치가 알지 못하는 MAC주소를 가지고 있는 외부 해커 노드가 연결되었을 때 이를 규제하는 포트 보안을 설정 해두는 것이 좋다. 어느 한 포트에서 설정해 주어도 스위치 전체 포트로 포트 보안이 적용될 수도 있다. 포트 보안은 노드의 MAC_주소로 규제한다.
하드웨어 노드에 대한 규제이기 때문에 네트워크에서 승인되지 않는 노드의 연결을 감지해내는
PacketFence의 NAC(Network Access Control)라는 도구와 역할과 유사하다고 볼 수 있다.

스위치 포트에는 대부분 지정된 노드가 연결되어서 스위치의 CAM 메모리에 스위칭 테이블로 저장된다. 포트 보안은 스위치에 연결된 노드들의 MAC_주소가 변경되는 일이 별로 많지 않지만 스위치 포트에 새로운 노드가 가입되면 스위치가 인지하고 어떤 규제를 가하게 하는 기법이다. 보통 중요한 서버나 데이터베이스 등이 연결된 스위치 포트에 포트 보안을 설정해준다. 하지만 Trunk 설정 회선, EtherChannel 회선, 그리고 Switch port Analyzer의 port에는 포트 보안을 걸 수 없다.

설정 방법
1. static : switch(port) port(-security) mac(-address) MACaddress식으로 모든 호스트의 MAC주소를 일일이 스위치 포트에 지정 해 주어야 하는 불편함이 있지만 가장 안전한 방식이다. nvram에 저장할 수 있다.
2. dynamic : 자동으로 MAC주소를 알아서 인식해주는데 switch port max 2식으로 포트 당 최대 허용할 호스트 숫자만 지정하는 방 식이다. 디폴트 설정이고, nvram에 저장할 수 없으며 별도의 명령어로 설정하지 못한다. 리부팅되면 설정된 정보가 사라 진다.
3. sticky : dynamic처럼 동적으로 MAC
주소를 학습하게 하지만 nvram에 저장되므로 재부팅되어도 정보가 유지된다. switch port mac sticky 해서 설정한다.

그리고 보안 위반 시 취할 행동으로 protect, restrict, 그리고 shutdown이 있는데 다음과 같이 표로 정리해 두었다.

액션 설명
1. protect : sticky모드에서만 작동하며 위반 포트에서 들어오는 프레임을 버리고 로그를 만들지 않음.
2. restrict : 위반 포트에서 들어오는 프레임을 버리고 로그와 경고를 남긴다.
3. shutdown : 위반 포트에서 들어오는 프레임에 경고를 내고 해당 포트를 shutdown 시킴. 디폴트 설정.

TCP/IP 프로토콜 그룹(suite)

IP(Internet Protocol)

IP는 네트워크층에서 정의되는데 네트워크층은 데이터를 네트워크 간에 라우트(경로 찾기) 할 책임이 있다. 이 역할을 IP가 하는 것이다. IP는 각 호스트에 네트워크주소를 정의해주는데 이 IP주소는 네트워크 부분(Net ID)과 호스트 부분(Host ID)으로 나눈다. 라우터는 IP_주소 중 네트워크 부분만 보고 데이터를 목적지로 보내는 경로를 결정한다. 상위 전송층의 TCP가 연결설정, 흐름제어 등을 정의해주면 하위 네트워크층의 IP가 실제 데이터를 비연결지향적으로 전송한다.
IP는 Host-Host/Transport층으로부터 데이터가 클 경우 연결지향적일 때는 패킷으로, 비연결지향적일 때는 데이터그램으로 조각내서(fragmentation) 주고받는다. 이 조각들은 순서번호(sequence number)가 붙여져 데이터링크층을 지나서 물리층에서 매체를 타고 목적지로 흘러가게 된다. Wireshark와 같은 프로토콜 분석 프로그램을 사용해서 관찰해보면 IP 데이터그램을 조사할 수 있다. 네트워크 층에서의 데이터를 OSI 모델에서는 패킷으로 부르고 DoD에서는 데이터그램으로 부른다. 또는 연결지향적인 TCP에서는 패킷으로 부르고, 비연결지향적인 UDP에서는 데이터그램으로 부른다.

ARP(Address Resolution Protocol)와 RARP(Reverse ARP)

IP는 타겟과 효율적으로 통신하기 위해서 많은 정보를 필요로 하지만 보통 상위 TCP에서 이미 설정한 출발지와 목적지의 IP주소 필드만 있으면 데이터는 전송될 수 된다. 네트워크층은 IP주소의 네트워크주소를 보고 목적지 네트워크를 찾지만 실제로 로컬에서 호스트간의 통신은 그 호스트에 붙어있는 네트워크 카드에 설정된 IP주소를 실제 NIC의 MAC주소와 매핑해서 MAC주소로 상대방을 인식하고 통신한다.
LAN에서는 IP주소를 MAC주소로 매핑해서 MAC주소로 상대방을 찾고, WAN에서는 IP주소의 네트워크주소로 상대방(에 이르는 경로)을 찾는다. 따라서 TCP/IP 그룹은 IP주소(논리적 주소)를 MAC주소(물리적 주소)로 매핑해주는 ARP라는 프로토콜을 정의하고 있다. IP는 로컬에서 데이터를 목적지로 보낼 때 목적지 노드의 MAC주소를 알아야 하는데 이 MAC주소를 찾을 때 ARP 프로토콜이 필요하다. ARP 프로토콜은 로컬에서 IP주소로 MAC_주소를 찾을 때 사용되고, 브로드캐스트의 속성이 ARP이다.

=>RARP와 BootP

ARP와 유사하게 작동하는 RARP(Reverse ARP) 프로토콜은 OS가 없는 상황에서 처음 호스트가 네트워크에 가입될 때-이를 보통 디스크가 없는 호스트(diskless host)로 부른다-IP주소를 가지지 못한 호스트는 MAC주소만으로 호스트를 구별해야 한다. 이때 각 호스트들은 RARP를 브로드캐스트로 뿌려서 범위 내에 있는 배포 서버(deployment server)나 DHCP 서버의 IP주소를 알아낸 뒤 이들로부터 가용한 IP주소 등을 얻어서 네트워크에 가입되게 된다. 여기서 실패하면 PXE[픽서로 발음]를 통해서 운영체제를 설치할 수 있는지 체크하게 되어 있다.

DHCP 서버는 호스트에게 ip address, subnet mask, gateway address, dns address, and dhcp address를 알려주고 관리자는 workgroup(domain) name과 hostname 두개만 따로 설정해 주면 된다.

∎ ARP는 로컬에서 ‘IP주소 =>MAC주소’로 변환해서 상대방 노드를 알아내는 프로토콜로 브로드캐스트와 유니캐스트에서 사용되고,
∎ RARP는 로컬에서 ‘MAC주소 =>IP주소’로 변환해서 DHCP 서버를 알아내는 프로토콜로써 BootP도 이와 유사한 역할을 한다. 이 BootP와 RARP 프로토콜이 발전해서 DHCP 프로토콜이 되었다.
=>ARP가 노드의 IP주소로부터 MAC주소를 알려준다면, RARP는 노드의 MAC주소로 부터 (DHCP 등의) IP주소를 알아낸다.
∎ BootP(Booting Protocol)프로토콜은 RARP와 매우 유사한데 BootP를 사용하도록 설정된 컴퓨터를 부팅시키면 부팅될 때 배포 서버로부터 IP_주소를 부여받고 파일이나 운영체제까지 로드해 올 수 있다.
=>이들은 무인 설치(Unattended Installation)에서 응답 파일(Answer file)과 더불어 자주 사용된다. 먼저 RARP로 DHCP 서버를 찾은 뒤 실패하면 OS를 찾기 위해서 PXE[픽서]를 실행한다.

DHCP(Dynamic Host Configuration Protocol)

DHCP는 RARP와 BootP와 유사하지만 이보다 개선된 구조이다. OS가 설치되어 있고 DHCP 서버가 설정되어 있으면 DHCP 서버는 클라이언트 호스트들에게 DNS 서버, DHCP 서버, 게이트웨이, 그리고 클라이언트의 IP주소와 서브넷마스크를 자동으로 할당해준다. 관리자는 작업그룹과 호스트명만 나중에 지정해주면 된다.

ICMP(Internet Control Message Protocol)

네트워크층에서 실행되는 이 ICMP 프로토콜도 중요하다. 한 노드가 다른 노드와 데이터를 송수신할 때 사용되는 제어 메시지 프로토콜로써 흐름 제어나 상태를 메시지로 표시한다. 예를 들어 라우터가 데이터를 처리하고 있을 때 더 많은 데이터가 너무 빠르게 들어오면 라우터는 source quench 메시지를 발생시켜서 흐름 제어를 하는데 이럴 때 사용되는 프로토콜이 ICMP이다.

또 데이터그램 내에서 TTL도 이 ICMP 프로토콜을 사용하는데 데이터그램이 최종 목적지까지 가는데 너무 많은 라우터를 지나게 되어서(최대 15개) TTL이 0이 되면 해당 데이터그램을 버리고 다시 보내라고 알리는 메시지 전송에도 이 프로토콜이 사용된다. ICMP redirect 메시지는 라우터가 어떤 노드로부터 데이터그램을 받았을 때 표시된 경로보다 더 좋은 경로가 있다는 것을 알고 있다면 송신 노드에게 ICMP redirect 메시지를 보내서 더 좋은 경로로 오라고 알리기도 한다. 이 새로운 정보를 기반으로 새롭게 라우팅할 여부는 라우터의 설정 여하에 달려있는데 라우팅 정보를 static으로 했다면 업데이트된 정보를 무시하고 자신이 가지고 있는 경로대로만 데이터를 전송할 것이다.
연결을 확인하는 ping과 목적지까지의 경로를 확인하는 traceroute(tracert)도 이 ICMP 프로토콜을 사용한다.

ICMP 패킷 헤더의 destination unreachable 메시지에서
▪ Network Unreachable(Code0),
▪ Host Unreachable(Code1), 그리고
▪ Protocol Unreachable(Code2)와
▪ Port Unreachable(Code3)은 원격 호스트가 발생시킨 메시지이다.
▪ Can't Fragment(Code4)는 라우터가 발생시킨 메시지이다.

라우터에서 타겟에게 ICMP의 ping 했을 때 응답하는 기호나 문자 메시지를 정리한 것

응답코드

! ICMP Echo 응답을 수신함
. 응답을 기다리는 동안 ping 명령어가 타임아웃 됨을 수신함
U ICMP가 목적지-호스트 도달불가(ICMP Type3 Code1) 메시지를 수신함
P ICMP 목적지-포트 도달불가(ICMP Type3 Code3) 메시지를 수신함
A ACL(Access Control List)에 의해 패킷이 거부됨
& 패킷의 TTL(Time To Live)이 초과되었음
? 알 수 없는 패킷을 수신함

TCP(Transmission Control Protocol)

TCP는 신뢰성 있는 연결지향적(connect-oriented) 프로토콜이다. IP는 데이터를 목적지 네트워크로 보낼 때 그 데이터가 제대로 도착됐는지 여부에 신경 쓰지 않는 UDP와 같은 비연결지향적 프로토콜이다(이런 종류의 프로토콜은 ‘최선의 노력’ 프로토콜이라고 부르기도 한다). TCP 프로토콜은 데이터가 제대로 타겟에 도착되었는지 확인을 받고, 손상되었을 때에는 재전송한다든지 등의 대처방법을 정의해 놓았다. 데이터 전송여부를 확인하는 일 외에도 TCP는 수신노드와 초기연결을 수립하고 여러 응용층 프로토콜에서 온 데이터를 하나의 연결로 보내는 멀티플렉싱(multiplexing) 책임도 가지고 있다. 멀티플렉싱은 동일한 목적지 노드와 통신하고자 하는 다수의 어플리케이션들 패킷들을 한 번에 묶어서 빠르게 보내주므로 네트워크가 효율적으로 작동되게 한다.

> TCP는 3단계 협상(3-way handshakes)을 통해서 클라이언트 노드 A가 원격 서버 노드 B와 연결을 초기화할 때

① 노드 A가 세그먼트에 일련번호를 정해서 노드 B에게 SYN request(SEQ=0)를 보내고, 수신측 노드 B로부터 응답 Sequence(순서 번호)가 예측한대로(‘보낸 SEQ+1’) 오기를 기다린다.
② 수신측 노드 B로부터 SYN+ACK reply(SEQ=0, ACK=1)를 받으면 일련번호가 예상대로 맞으므로
③ 송신측 노드 A가 ACK reply(SEQ=1, ACK=1)를 보내서 3단계 협상을 완결해서 노드 B와 연결을 이루고 데이터 송수신이 시작된다.

이런 과정 때문에 TCP를 연결지향적(connection- oriented) 프로토콜이라고 부른다. 여기서 SYN는 SYNchronization이고 ACK는 ACKnowledgement, SEQ는 SEQuence를 줄인 말이다. 패킷 전송은 패킷 스위칭 방식을 주로 사용한다. 송신자는 패킷을 분할해서 시퀀스 번호를 매겨서 수신자에게에게 보내는데 순서 없이 각자 바른 경로로 전송시킨 뒤, 수신자에서 시퀀스 번호에 맞춰서 재조립을 한 다음 데이터를 받는다. 이런 프로세스가 되어야만 재전송(retransmission), 재조립(reassemble), 그리고 확인(acknowledgment) 등이 가능하다.

TCP는 네트워크의 전송속도를 높이기 위해서 슬라이딩 윈도우(sliding window:송수신 데이터량 조절)를 사용하는데 슬라이딩 윈도우는 수신자가 송신자에게 데이터 수신을 확인해주는 ACK를 보내기 전에 네트워크의 상태에 따라서 송수신되는 데이터 전송량을 Nagle 알고리즘을 사용해서 유동적으로 흐름제어(flow control)를 한다.

TCP 프로토콜의 헤더이다. 중간에 PSH, ACK, ... 등 6개의 Flag가 있다.
TCP 세그먼트는 세그먼트 헤더와 데이터의 두 섹션으로 구성된다. TCP 헤더는 10개의 필수 필드 및 옵션 확장 필드들을 포함되어 있고, 헤더 뒤에는 데이터 섹션이 따라 온다. 그 내용은 애플리케이션의 페이로드 데이터이다. 데이터 섹션의 길이는 TCP 세그먼트 헤더에서 결정되지 않으며, 전체 IP 데이터그램의 길이에서 TCP 헤더와 캡슐화된 IP 헤더의 길이를 뺀 값으로 계산하게 된다. 즉, 데이터 섹션의 길이는 IP 헤더에 의해 결정된다.
TCP 헤더에는 중간에 URG(Urgent: 다른 패킷보다 먼저 처리 요청), ACK(Acknowledge: 데이터 송수신에 대한 확인), PSH(Push:데이터 즉시 송신), RST(Reset: 오류에 대한 응답으로 연결 종료 후 재설정), SYN(Synchronization: 연결 시작), 그리고 FIN(Finish: 연결 종료) 등의 플래그(flags)가 있는데 패킷의 동작을 제어하는 요소들이다. 어느 입력 패킷에 RST이나 FIN 등의 플래그가 설정되어 들어오면 연결되는 서버를 다운시키려는 의도이기 때문에 해당 입력 연결을 즉시 끊는 설정이 보안상 필요하다.

포트를 표로 정리해 두었다.


포트_명			포트번호		설명
Well-Known 
or System		1~1,023		대부분의 중요한 서버 서비스의 포트로 지정되어 있으며 클라이언트는 이 포트로 서비스
							를 요청한다. IANA에서 규정한 포트여서 함부로 변경할 수 없다. less /etc/services
                            로 전체 서비스를 확인하거나, grep -w 80 /etc/services식으로 특정 서비스를 확인할
                            수 있다.
Static or 
Registered		1,024~49,151	벤더들이 자신들의 솔루션 서비스에 대한 포트를 ICANN에게 등록해서 얻은 포트이다. 

Dynamic or 
Private 		49,152~65,535	서버에게 서비스를 요청한 클라이언트에게 서버가 임의적으로 할당하는 포트이다.
								예를 들어서 웹 서버에게 80번 포트로 접속한 클라이언트는 서버에게서 51002식의
                                포트를 통해서 연결되게 한다. 
                                

연결방식			설명
PASSIVE 방식		FTP나 Telnet 연결 시 클라이언트가 서버에게 192.168.100.100:23식으로 연결을 요청하면 서버가
				임의로 50001식의 포트를 할당해서 연결시키는 디폴트 연결방식이다.
ACTIVE 방식		클라이언트가 Dynamic Port 중 한 번호를 지정해서 50001식으로 연결을 요청하면 서버가 요청된 포트
				50001으로 클라이언트를 연결시켜주는 방식으로 연결 보안을 좋게 한다. 
=>해커가 NetCat과 같은 백도어를 서버의 Dynamic port 중 특정 포트에서 실행되게 해두면
  해커는 이 지정된 포트를 통해서 은밀히 서버에 접속할 수 있다!!  


사용 프로그램		프로토콜		포트_번호
HTTP 			TCP			80
FTP				TCP			20/21
Telnet			TCP			23
TFTP			UDP			69
DNS				TCP/UDP		53	** TCP는 두 DNS 서버간의 zone transfer, UDP는 name resolution
DHCP			UDP			67/68
SMTP			TCP			25
POP3			TCP			110
SNMP			UDP			161
HTTPS			TCP			443

  

0개의 댓글