Search
✴️

네트워크 장치의 구조

Category
BlogPost
Venue
Backbone
Text
PPT

네트워크 장치의 구조

3가지 네트워크 장치 구조
⇒ 장치의 특성에 따라 아래의 장치 중 1 or 1+n개로 분류가 가능
Inline (e.g., Router)
Packet + Drop(차단)/Bypass(허용) + Filtering
Out of path
Packet + Read Only, Sensor (+ Tab Switch)
Proxy
Socker stream + Filtering

Inline 구조

→ packet이 통과하는 구조
공유기
Router
Firewall, IPS
→ Router의 내부 구조를 이해하면 Inline 구조를 보다 더 잘 이해할 수 있다.
Router 내부 유입되는 흐름을 Inbound, 외부로 유출되는 흐름을 Outbound
Router도 LAN카드가 여러개 삽입된 컴퓨터로,
frame 단위의 정보가 LAN카드에서 process단까지 처리되어서 올라가는게 아니라
kernel mode에서 바로 outbound로 나가도록 소프트웨어가 설계됨
(빠르게 정보가 통과되도록 설계되어야 함으로)

Out of path 구조 (i.e., Sensor)

→ Out of path 구조는 센서나 모니터링 장비가 실제 네트워크 트래픽의 주요 경로에서 벗어나 있는 형태 (미러링=복사된 후 주요 경로에서 벗어남)
네트워크의 주요 경로상의 스위치나 라우터의 미러링 포트(SPAN 포트)를 통해 트래픽의 복사본을 받음
TAP(Test Access Point) 스위치를 통해 네트워크 트래픽을 복제하여 수신
수신한 트래픽을 분석하여 모니터링, 보안 감시 등의 기능을 수행
수집한 트레픽을 모두 저장하려면 많은 비용이 수반됨
→ Out of path 구조를 활용해 유해사이트를 차단하는 방법
Client -> ISP Network ↳ Traffic Mirror -> Out of path 장비 ↳ Policy Enforcement Point(PEP)
Python
복사
Client가 유해사이트 접속 시도
packet 전달
ISP Network의 Out of path 장비는 미러링된 트래픽을 실시간으로 분석
SPI(Shallow Packet Inspection)
패킷의 헤더뿐만 아니라 페이로드(내용) 부분까지 검사하는 기술
HTTP 요청의 경우 URL, 호스트 정보 등을 확인
(망 중립성의 원칙)
DPI 디스크 저장할 경우 법적 문제 초래
유해사이트 접속 시도를 감지하면 내부 API나 별도의 제어 채널을 통해 ISP의 PEP에 신호를 전송
PEP가 실제 리다이렉트 응답을 생성하여 클라이언트에게 전송

Proxy 구조

#### 우회
→ In-path 방식의 대표적인 예시
클라이언트와 서버 사이에 직접 위치하여 트래픽을 중계
클라이언트의 요청을 받아서 서버에 전달하고, 서버의 응답을 다시 클라이언트에게 전달
(위의 그림에서) 192.168.0.10이 10.10.10.20으로 접속하려는데 ISP가 직접적인 접속을 차단했을 때, 192.168.0.10가 Proxy 서버인 50.50.50.50나 70.70.70.70에 접속 한 후 우회적으로 10.10.10.10에 접속
#### 보호와 감시 (Forward Proxy)
→ 직접적인 인터넷 접속을 물리적/논리적으로 차단하고 네트워크 정책상 모든 아웃바운드 트래픽이 proxy를 통과하도록 강제 (기업이나 학교 같은 조직에서 내부 사용자들의 인터넷 접속을 통제하고 보안을 강화하는데 활용)
접속 기록 모니터링
악성코드 차단
데이터 유출 방지
#### 서버 보호 Reverse Proxy
→ 실제 서버(웹/애플리케이션) 앞에 위치해 외부 사용자의 요청을 최초로 수신하는 서버
외부 클라이언트 -> Reverse Proxy -> 내부 서버 1) 클라이언트가 www.abc.com 접속 요청 2) DNS가 Reverse Proxy IP로 연결 3) Reverse Proxy가 요청 분석 (SSL Accelerator > WAF) 4) 적절한 내부 서버로 요청 전달 5) 서버 응답을 클라이언트에게 전달
Python
복사
#### Local Proxy (e.g., Fiddler)
Local에서 https 분석을 위해
Browser -> Local Proxy(Fiddler) -> Internet - 브라우저의 프록시 설정을 localhost:8888(기본포트)로 지정 - HTTPS 통신을 위해 Fiddler의 인증서를 로컬에 설치 - 모든 웹 트래픽이 Fiddler를 통과
Python
복사

인터넷 공유기 작동원리

공유기 작동원리 및 개요

일반적인 인터넷 공유기는 NAT (Network Address Translation) 기술이 적용된 장치이다.
Private IP → NAT → Public IP
(실제로는 IP주소와 port 모두 변환)
공유기 구조에 따른 분류
Cone NAT
Host 단위로 외부포트 지정
Symmetric NAT
TCP 세션마다 외부 포트 지정

Symmetric NAT

1.
192.168.0.10 (private IP)가 15.15.15.15 (web server)에 접속하고자 할때 private ip와 host에서 open한 host 번호 3000을 직접적으로 사용하진 않음
→ 하지만 192.168.0.10 pc에서 webserver에 최초로 접속하고자 할때 생성한 packet은 아래와 같음
2.
하지만 실질적으로 Internet과 통신을 위해서는 Global IP를 통해야 함
3.
이를 위해 Inline 장비인 NAT는 web server와의 통신을 위해 수신받은 traffic을 변조
(ip주소를 변조; 출발지 ip/port 변조)
4.
webserver는 3.3.3.3이랑 TCP연결이 되었다고 인식
5.
3과 같이 outbound traffic이 발생(inbound시 기록 X)할 때 NAT memory에 NAT Table 기록
(Local IP/Port를 어떤 Port로 바꿨는지 기록)
→ 3-way hand shaking때 NAT-table search해서 연결
6.
아래 192.168.0.10~12가 모두 15.15.15.15로 접속했을때 서로 다른 3개의 host가 접속했음에도 15.15.15.15는 3.3.3.3이 3번 접속했다고 착각
outbound traffic이 발생시에 NAT Table 기록
NAT Table에 없는 외부 web server에서 packet을 보내올 경우 filtering

Full Cone NAT

Full Cone NAT은 192.168.0.10 → 15.15.15.15로 접속시 (Host IP & Post→) External Port만 Mapping하는 기술
Remote IP, Remote Port는 Any
9.9.9.9가 3.3.3.3:8080으로 접속하면 192.168.0.10으로 접속이 가능
게임에서 유리한 구조
host가 다른 web server랑 통신한 기록 때문에 또 다른 web server가 즉시 통신이 가능함
(당연히 보안성은 취약)
Restricted Cone NAT
Full Cone에서 IP/Port에 제한을 둔 방식 (일반적으로는 IP)
Inbound traffic에서 External Port와 상대방의 IP주소를 기반으로 식별
(9.9.9.9에서 오는 packet는 NAT에서 drop)
Port Restricted Cone NAT
192.168.0.10:3001이 15.15.15.15:7777에 접속할때 Port Restricted Cone NAT는 External Port 8080을 할당해 NAT table에 추가한다.
Symmetric NAT이랑 무엇이 다른가?
Symmetric NAT는 host ip/port별로 external port를 계속 할당
하지만 Port Restricted Cone NAT은 중복된 external port 할당

Port Forwarding

Outbound traffic이 있어야 NAT Table이 수정된다.
그렇다면, host가 이전에 접속하지 않은 ip주소로부터 접속을 허용하도록 하는 방법이 없을까?
⇒ Port Forwarding
⇒ 출발지 ip 주소가 어디든, DST External port가 80이면 192.168.0.12:80으로 forwarding해주겠다는 규칙을 추가
⇒ Port Forwarding을 해주면 P2P 연결이 용이

UPnP와 NAT

UPnP (Universal Plug and Play)
네트워크 장치 간의 자동 발견과 제어를 위한 네트워크 프로토콜 집합
쉽게 말해 P2P 통신을 자동으로 제어해주는 기술
작동방식:
1. 장치가 네트워크에 연결 2. IP 주소 자동 할당 (DHCP) 3. 자신의 존재를 알림 (SSDP) 4. 다른 장치들과 통신 시작
Python
복사
SSDP (Simple Service Discovery Protocol)
UPnP의 Discovery 단계에서 사용되는 프로토콜
UDP 기반으로 동작 (기본 포트: 1900)
두 가지 주요 메시지 타입:
1.
검색요청 (M-SEARCH): 특정 서비스나 장치를 찾을 때
2.
알림(NOTIFY): 장치가 자신의 존재를 알릴 때

부하분산 시스템 작동원리

L4 부하분산과 무정지 시스템

NAT가 port까지 translate → port는 tcp/ip → tcp/ip는 L4수준
L4 Switch → port 번호를 기준으로 switch → Load Balancing 하는데 활용
host가 www.abc.com으로 접속하면 DNS가 15.15.15.15:80으로 접속하라고 알려줌
하지만 15.15.15.15는 Load Balancer로 Web Server #1로 Forwarding
모든 Web Server들은 주소만 다를 뿐이고 clone들 (content가 동일)
Load Balancing
host가 접속할 때마다 Web Server #i로 Forwarding
부하분산
Health check
제 3의 서버 (manager)를 통해 web server의 부하량(cpu, memory, disk)의 감시
Load Balanacer가 manager를 통해 적잘한 Web Server Forwarding
무정지 시스템
Load Balancer가 살아있는한 정지되지 않는 Web Server
Load Balancer를 이중화해서 안정성 강화

대규모 부하분산을 위한 GSLB

Global Server Load Balancing
DNS 체계를 활용하는 구조
각서버들의 콘텐츠는 CDN을 활용해 동기화
부하상태, Health check 결과, 클라이언트의 지리적위치 등을 고려
(위의 그림을 예시로 들면) Web server #3가 모든 요청을 커버하지 못할때, GSLB를 적용해 ISP 마다 Web Server를 따로 운용
→ 당연히 동일한 ISP에 속한 host는 network 입출력이 빠를것
→ 3.3.3.100이 www.abc.com이 DNS에 IP주소를 물어보면 alias를 반환
(i.e., a.www.abc.com → 동일 ISP내 IP 주소를 반환)
Alias(별칭)는 하나의 네트워크 인터페이스에 여러 IP 주소를 할당하는 기술
물리적 인터페이스: eth0 (192.168.1.10) 별칭 인터페이스: - eth0:0 (192.168.1.11) - eth0:1 (192.168.1.12) - eth0:2 (192.168.1.13)
Python
복사
하나의 서버에서 여러 서비스 호스팅
가상 호스팅 환경 구성
IP 기반 서비스 분리
네트워크 마이그레이션
결론적으로 각 ISP마다 트래픽이 발생, 입출력 성능 향상
하지만, 각 Web server를 동기화해주는게 매우 중요한 이슈
CDN으로 각 서버를 동기화
Manager로 각 서버를 관리
각 서버를 LB로 부하관리

VPN과 네트워크 보안 솔루션

PN과 VPN

Private Network (PN)
물리적 통제가 가능한 Network
→ 어떤 회사가 서울에서 LAN을 구축했다고 하자 (server, db 포함)
→ 해당 회사가 부산에서 지사를 세우고, 서울에 있는 db에 접속하고자할 때 어떤 망을 이용해야 하는가?
Internet → Public → Fast & Cost Efficient
ISP에서 할당받은 Private Network → PN → Slow & Cost Intensive
VPN
open된 network인 internet을 쓰되, private network가 요구하는 보안성을 구현하는 network
private network를 논리적으로 구현
1.
내부사설망을 외부로부터 스스로 보호하고, 사용자 인증을 통한 접근통제가 가능해야 한다.
2.
사설망 간의 Traffic을 무결성기밀성을 유지하기 위해서, 모든 Traffic에 인증 메커니즘을 적용하거나, 정보 유출의 방지를 위해서 암호화가 가능해야 함

IPSec VPN과 터널링 개념

IPSec (IPSecurity)
IPSec은 네트워크계층에 보안서비스를 제공하며 패킷단위에 적용
Protocol
ISAKMP
Gateway끼리 암호화
SSL/TLS
PKI (Public Key Infrastructure)
IP AH
IP ESP
VPN Tunneling
→ packet 암호화 과정
1.
3.3.3.10에서 5.5.5.100이라는 내부망과만 연결된 서버와 연결하고 싶을때 vpn으로 구축해야 함
2.
우선 3.3.3.10과 5.5.5.100이랑 연결되어 있는 gateway간에 tunneling이 되어있어야 함
3.
3.3.3.10이 5.5.5.100와 통신을 시도할 때 packet을 반드는데
4.
3.3.3.1 (gateway)에 도달하면 기존에 만든 packet을 암호화하고 ip header의 src/dst를 gateway로 변경 (tunneling 규칙에 따라 다름)
5.
5.5.5.1로 packet 전달.
6.
5.5.5.1 gateway에서 암호화된 packet 복호화 후 5.5.5.100로 전달
⇒ Internet상에서 3.3.3.1과 5.5.5.1이 통신한다는 정보는 노출 불가피

VPN과 재택근무 (GtoE)

VPN Gateway to EndPoint를 활용하면 재택근무가 가능하다.
부산지역에 있는 9.9.9.9 IP주소를 가진 host가 서울지역에 있는 5.5.5.100 서버에 접속하려면 어떻게 해야할까?
1.
9.9.9.9에서 VPN 프로그램을 깔면 3.3.3.1 SG는 9.9.9.9에 3.3.3.40이라는 3.3.3.X대역(부산지사에서 쓰는 IP대역)에 있는 IP주소를 반환
2.
9.9.9.9가 최초 packet을 보낼때 다음과 같이 만들어진다.
-------------------------- src:3.3.3.40 | payload dst:5.5.5.100 | --------------------------
Python
복사
3.
L3 수준에서 tunneling을 해서 3.3.3.1에 보내야 하기 때문에, IPSec (VPN Client)이 위의 packet을 암호화함
<암호화> => ----------------------------------------- src:9.9.9.9 | src:3.3.3.40 | payload dst:3.3.3.1 | dst:5.5.5.100 | -----------------------------------------
Python
복사
4.
3.3.3.1에 도착하면 암호화 된 부분 말고 앞에 (1) IP header를 버리고 (2) 암호화 복호화 (3) 재 암호화
<암호화> => ----------------------------------------- src:3.3.3.3 | src:3.3.3.40 | payload dst:5.5.5.1 | dst:5.5.5.100 | -----------------------------------------
Python
복사
5.
위의 packet이 5.5.5.1로 보내지고, IP header가 뜯겨지고 복화화되면 아래와 같아짐
-------------------------- src:3.3.3.40 | payload dst:5.5.5.100 | --------------------------
Python
복사
6.
위의 Packet을 5.5.5.100에 보내고 5.5.5.100은 당연히 3.3.3.40에 답변하는 packet을 만듦
⇒ vpn 사용시 server는 실제로 어떤 물리적 host에서 접속했는지 알 수가 없음

VPN의 악용

IP주소 세탁
<host->SG> <SG->Final> ----------------------------------------- src:9.9.9.9 | src:3.3.3.40 | payload dst:3.3.3.1 | dst:5.5.5.100 | -----------------------------------------
Python
복사
→ 원칙적으로는 9.9.9.9에서 5.5.5.5.100이 차단되었으나, VPN Client를 통해 3.3.3.40을 할당받으면 9.9.9.9에 접속이 가능 (3.3.3.40이 5.5.5.100에 접속이 가능하다는 가정하에)
→ 위처럼 VPN IP주소를 여러번 우회하면 역추적이 어려움

References