1,2,3 계층의 경우 신호와 데이터를 올바른 위치로 보내고 실제 신호를 잘 만들어 보내는데 집중
4계층의 경우 실제 해당 데이터들이 정상적으로 잘 보내지는지 확인하는 역할
데이터를 분할해 패킷에 실어보내기 때문에 패킷이 유실되거나 순서가 바뀔 경우 바로 잡아주는 역할
세션 장비의 경우 2,3 계층 네트워크 장비와 다르게 운용해야함.
세션 테이블과 그 안에서 관리하는 세션 정보가 가장 중요
세션 장비에서 고려해야할 요소
세션 장비는 세션 테이블 기반으로 운영
세션 정보를 저장, 확인하는 작업 전반에 대한 이해 필요
세션 정보는 라이프타임이 존재 -> 고려해야함
Inbound와 Outbound 경로가 일치해야함
IP주소가 변경되며 확장된 L7 로드 밸런서(ADC)는 애플리케이션 프로토콜 정보도 변경
+세션 장비의 여러 요소가 미치는 영향 때문에 네트워크 인프라뿐만 아니라 시스템 설계와 애플리케이션 개발에도 세션 장비에 대한 고려 필요
4계층 이상에서 동작하면서 IP주소나 4계층 정보, 애플리케이션 정보를 확인 수정하는 기능
+ 가장 많이 쓰이는 기능으로 웹 서버의 부하 분산
로드 밸런서의 기능
NAT(Network Address Translation)
사설 IP 주소를 공인 IP 주소로 바꾸는 데 사용하는 통신망의 주소 변조기
Tunneling
인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념
데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.
DSR(Dynamic Source Routing protocol)
로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP 주소가 아닌 클라이언트의 IP 주소로 전달해서 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아가는 개념
로드 밸런서의 동작하는 계층에 따라 L4, L7 로드 밸런싱으로 나뉨
일반적인 로드 밸런서 동작방식
TCP, UDP 정보를 기반으로 로드 밸런싱 수행
4계층에 대한 정보로만 분산 처리를 하는 경우 L4 로드 밸런싱이라고함
HTTP, FTP, SMTP 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱을 수행
HTTP 헤더 정보나, URI와 같은 정보를 기반으로 프로토콜을 이해한 후 부하를 분산
layer 4에서 패킷을 확인하고 세션을 관리하며, 로드밸런싱을 제공하는 스위치
TCP/UDP 패킷 정보를 분석해서 해당 패킷이 사용하는 서비스 종류 별로 처리(HTTP, FTP, SMTP…)
세션관리, 서버/방화벽 로드밸런싱, 네트워크 서비스 품질 보장
참고
로드 밸런싱 알고리즘
Round Robin(순차방식)
사용자 요구를 차례대로 각 서버에 균등하게 분배하는 방식으로 서버 커넥션 수나 응답시간에 상관없이 그룹내의 모든 서버를 동일하게 처리하여 일반적인 구성에 있어서 다른 알고리즘에 비해서 가장 빠르다는 장점을 가진다.
Least Connection(최소접속방식)
오픈 커넥션이 가장 적은 서버로 사용자 요구를 연결하는 방식으로 모든 서버가 균등한 트래픽을 유지하기 위해서 처리 속도가 빠른 서버가 더 많은 접속을 받게 된다. 최소접속 알고리즘은 서버들의 성능이 비슷하게 구성되었을 경우에 가장 효과적인 트래픽 분산이 가능하다.
Weighted Least Connections(가중치 최소접속방식)
이 알고리즘은 최소접속 알고리즘에 서버의 성능 가중치를 추가한 것으로, 요구가 동일한 경우 가중치가 높은 서버에서 더 많은 요구를 받게 설계되어 있다.
Fastest Response Time(응답시간방식)
가장 빨리 응답하는 서버에 이용자 요구를 연결하는 방법. 응답시간은 각 서버가 패킷 형태의 요구를 송수신하는데 걸리는 시간을 측정한 것이다.
Adaptive(최소대기방식)
이 알고리즘은 Open또는 Pending커넥션을 적게 가지고 있는 서버로 네트웍 커넥션 방향을 지정한다. Pending 커넥션은 Full TCP Handshake를 완성하지 않은 것으로, 이것은 초당 클라이언트 Thread의 수가 증가할 때 더욱 잘 수행된다.
Fixed(고정방식)
어떤 서버가 커넥션 요청을 받는지를 결정하기 위해 각 유입요청의 소스 IP어드레스를 사용한다. 이 알고리즘은 여러종류의 어드레스로부터 많은 양의 요구가 있을 경우 더 잘 작동한다. 이것은 동일한 게이트웨이를 통하여 들어오는 많은 요구보다 여러 종류의 혼합된 소스 IP 어드레스의 요구일 경우 더 잘 수행한다.기타 Hashing, Min Misses, Random, URL-based, Cookie, SSL session ID 와 같은 방식의 알고리즘이 있다. 또한 로드밸런싱정책은 장비의 Vender에 따라 지원하는 정책이 조금씩 달라 질 수 있다.
L4 + L7 로드 밸런서
L4 스위치와 다르게 애플리케이션 프로토콜의 헤더와 내용을 이해하고 동작
-> 다향한 부하 분산, 정보 수정, 정보 필터링 가능
L7 Layer만 다루지 않고 L2, L3기능을 포함하고 부분적인 L4 스위치 기능을 지원
콘텐츠(HTTP, FTP, Telnet, Email 등)를 인지하여 원하는 포트로 전달하는 스위치(콘텐츠 기반 스위칭)
L5 ~ L7(Session, Presentation, Application) packet payload를 분석하여 스위칭 하는 장비
payload — 흥미, 관심있는 데이터로 해석
URL-based
TCP/UDP port(0–65535)에 대한 인지
쿠키(Cookie) 기반 연결지속성
-클라이언트 IP가 공인 IP 치환되어 전송(X-Forwarded-For에 client ip기록)
패킷 분석을 통한 바이러스 감염 패킷 필터링
4계층에서 7계층에 이르는 리다이렉션 및 로드밸런싱과 페일오버
전송 제어 프로토콜(TCP) 연결 다중화
서버 오프로드(부하 이동) (예: SSL 터미네이션 및 TCP 연결 관리)
데이터 압축
네트워크 주소 변환
네트워크 레벨 보안 기능, 분산 서비스 거부 보호 및 서버 정보 은폐
선택적 압축
캐싱
컨텐츠 변환 및 재 작성
웹 애플리케이션 방화벽
트랜잭션 보장
Rule 및 프로그램이 가능한 인터페이스
HTML(및 기타 애플리케이션 프로토콜) 최적화 – 사전 경로 설정(pre-fetching) 혹은 선택적 인코딩
공통점
L4스위치 : TCP/UDP 포트 정보를 분석해 해당 패킷이 현재 사용하는 서비스 종류(HTTP, FTP, 텔넷, SMTP, POP3, SSL등)별로 PACKET을 처리
L7스위치 : 트래픽의 내용(e-mail제목/내용의 문자열, HTTP컨텐츠URL, FTP파일 제목, SSL ID, Cookie 정보, 특정 바이러스(e.g. CodeRed, Nimda)패턴등을 분석해 Packet을 처리
보다 높은 수준의 Intelligence를 갖춘 스위치일수록 더 정교한 패킷의 부하분산(Load Ballancing)및 Qos기능 구현이 가능함.
L7스위치는 다음과 같은 기능을 통해 네트워크 시스템의 보안성 강화가 가능함.
1) Dos/SYN Attack에 대한 방어
2) CodeRed/Nimda등 바이러스 감염 패킷의 필터링
3) 네트워크 자원의 독점 방지를 통한 네트워크 시스템의 보안성 강화가 가능함.
외부 네트워크(악의적인 해커, 공격자 등)로부터 내부 네트워크 혹은 내부자산(PC, 서버, DB 등)을 보호하는 보안장비
방화벽의 주요기능
외부에서 내부 네트워크로 접근하는 것을 패킷필터링*을 통해 통제하는 기능입니다.
* 패킷필터링: 내부 네트워크로 접근하는 패킷의 IP, Port 등 검열하여 내,외부 네트워크에 대한 접근을 통제
1) 메시지 인증: VPN과 같은 신뢰할 수 있는 통신선을 통해 전송되는 메시지 신뢰성 보장
2) 사용자 인증: 방화벽을 지나가는 트래픽에 대한 사용자가 누군지에 대해 증명하는 기능(OTP, 토큰기반 인증, 패스워드 인증 등)
3) 클라이언트 인증: 모바일 사용자처럼 특수한 경우에 접속을 요구하는 호스트 자체에 대해 인가된 호스트인지 확인
세션 장비는 세션 테이블 정보를 이용해 패킷을 변경하거나 애플리케이션 성능을 최적화하고 보한을 강화하기 위해 패킷을 포워드하거나 드롭할 수 있음
이런 기능을 활용하기 위해서 세션 장비를 고려해 여러가지 기능을 추가해야함.
네트워크 세션 장비가 중간에 있을 때 생기는 대부분의 문제는 세션 장비를 고려하지 않고 기능을 추가하지 않아서 생김
애플리케이션의 세션 시간과 서비스 방향성을 고려하고 비대칭 경로를 피하는 것이 중요
세션 테이블의 세션 정보에는 라이프 타임이 존재하고 라이프 타임이 다되면 세션 테이블의 세션 정보가 만료됨.
세션 테이블이 메모리에 저장되기 때문에 메모리 사용률을 유지하기 위해
악의적인 공격으로 시스템을 보호하기 위해
등 여러가지 이유로 세션 장비는 세션 정보를 무제한으로 저장할 수 없고 적당한 세션 타임아웃 값을 유지
일부 애플리케이션은 세션이 끊기지 않도록 타임아웃값을 길게 설정하기도 하는데 세션 장비의 타임아웃 값이 애플리케이션의 타임아웃 값보다 짧아지면서 통신에 문제가 발생
중간 세션 장비의 세션 유지 시간이 지나 세션 테이블에 있는 세션 정보가 사라져도 애플리케이션에서는 세션이 유지되고 있어서 데이터를 보낼 때 세션 장비에서 막히는 문제가 생김
이런 문제를 해결하기 위해 세션 장비 운영자와 개발자의 입장으로 해결법이 나뉨
애플리케이션의 세션 유지시간에 맞춰서 세션 장비의 만료시간을 늘림
대부분의 세션 장비는 포트 번호나 IP 주소마다 별도의 세션 만료 시간을 설정 가능
-> 세션 장비 운영자가 애플리케이션 세션 만료시간을 정확히 알아야하기 때문에 애플리케이션 개발자나 관계자와 관련 사항에 대해 논의가 필요함.
세션 테이블에 정보가 없는 ACK 패킷이 방화벽에 들어오면 방화벽은 패킷을 차단하지만 방화벽 옵셧 조정을 통해 정보가 없는 ACK 패킷이 들어오더라도 세션을 새로 만들어 통과시킬 수 있는 옵션 존재
하지만 보안이 취약해지는 문제가 있어서 가능하면 적용하지 않는 편이 좋음
세션 장비 세션 타임아웃 시 양 종단 장비에 세션 정보 만료를 통보하고 애플리케이션에서 추가적인 통신이 필요하면 새로운 세션을 맺어 통신
동작 과정
1) 세션 설정
2) 일정 시간 통신 없음
3) 세션 장비 세션 타임아웃
4) 방화벽에서 양 종단 장비에 RST(세션정보만료)패킷 전송
5) RST패킷을 받은 양 종단 장비는 해당 프로세스 종료
5-1) 추가 전송 시 새로운 세션 생성
통신이 없더라도 주기적으로 세션 상태 정보를 체크하는 더미 패킷을 전송하는 기능을 추가하면 세션 장비에서 세션 타임아웃이 발생하지 않게 유지 가능
현재로선 중간 세션 장비의 세션 만료 시간으로 인한 문제를 해결하는 가장 좋은 방법
네트워크의 안정성을 높이기 위해 네트워크 회선과 장비를 이중화
인바운드 패킷과 아웃바운드 패킷이 같은 경우 대칭경로
인바운드 패킷과 아웃바운드 패킷이 다른 경우 비대칭경로
세션 장비는 세션 테이블을 만들어서 관리해야하기 때문에 패킷이 들어오고 나갈 때 동일한 장비를 통과해야함.
패킷이 들어올 때와 나갈 때 경로가 일정하게 유지되지 않으면 정상적인 서비스 작동X
비대칭 경로의 경우 패킷이 한 장비를 통과하지 않아서 세션정보가 없기 때문에 패킷 드롭
애초에 비대칭 경로를 만들지 않게 할 수 있다. 네트워크 효율성에만 초점을 맞춘 경로 설정이 아닌 비대칭 경로가 생기지 않도록 네트워크와 경로를 디자인하는것
어쩔 수 없이 비대칭 경로가 생기면 세션 장비는 비대칭 경로를 처리하는 기능을 이용할 수 있으나 비대칭 패킷을 처리하기 위한 노력이 필요, 장비의 성능이 저하되거나 보안이 약화될 수 있다.
문제를 해결하기 위한 방법
세션 테이블을 동기화하면 세션 테이블이 없어서 패킷이 드롭되는 현상이 발생하지 않고 정상적으로 동작
패킷 경로를 변경하지 않고 동작한다는 장점이 있지만 세션 동기화시간이 패킷 응답시간보다 느리면 동작하지 않을 수 있는 단점 존재.
응답시간이 비교적 긴 인터넷 게이트웨이로 방화벽이 사용될 때 유용하게 사용
인바운드 패킷이 통과하지 않았지만 아웃바운드 패킷이 장비로 들어온 경우, 인바운드 패킷이 통과한 세션 장비로 패킷을 보내주는 경로로 보내줌. 강제로 대칭 경로를 만들어서 비대칭 경로 문제 해결 가능
강제로 다른 방화벽으로 패킷을 보내기 위해 방화벽 간 통신용 링크가 필요
MAC 주소를 변경하는 MAC 리라이팅 이나 기존 패킷에 MAC 주소를 한 번 더 인캡슐레이션하는 터널링 기법으로 경로를 보장
보통은 하나의 통신을 위해 하나의 세션만 사용하지만 특별한 목적이 있거나 오래된 프로토콜은 두 개의 프로토콜을 분리하여 사용.
대표적인 경우 FTP 프로토콜.
FTP 프로토콜의 경우 컨트롤 프로토콜과 데이터 프로토콜을 분리하여 사용하는데 통신 방법이 Active 모드와 Passive 모드로 나뉨
기본적인 구동 방식은 Active 모드
Active 모드의 경우
클라이언트가 데이터를 수신할 포트번호를 서버에 전송하고
서버의 컨트롤 프로토콜은 해당 포트를 사용하겠다고 응답한 뒤
데이터 프로토콜이 데이터를 전송하고 클라이언트가 응답하고 데이터를 수신한다.
Active 모드의 경우 클라이언트가 데이터에 대해 요청을 하면서 서버 역시 데이터를 보낼 때 요청을 하게됨.
그렇기 때문에 방화벽이 서버에서 클라이언트로 요청을 보낼 때도 열려있어야함. NAT 환경의 경우 FTP가 동작하는 프로토콜을 이해할 수 있는 별도 기능을 동작시켜야함.
이 기능을 ALG라고 하며 ALG가 동작하는 방화벽은 FTP 명령어를 이해하고 반대 방향으로 시작하는 데이터 세션을 인지해 방화벽과 NAT를 자동적으로 동작시켜줌.
Passive 모드의 경우 Active모드의 단점을 보완하기 위해 만들어짐.
컨트롤 프로토콜과 데이터 프로토콜의 방향이 반대인 단점을 해결
클라이언트가 Passive 모드를 사용하겠다고 알리면
컨트롤 프로토콜이 데이터 수신에 사용할 포트를 알려주고
클라이언트가 서버에 데이터를 요청할 때 서버에서 알려준 포트에 요청을 하게 되고
서버는 데이터를 전송하게 됨.
Passive 모드에서는 클라이언트 방화벽은 특별한 작업 없이 동작하지만 서버 방화벽이 있으면 데이터 다운로드를 위해 추가 포트를 열어야함. FTP 서버에서 Passive 모드에서 사용하는 데이터 포트의 범위를 설정할 수 있음.
참고자료
4계층, 7계층 장비 : 로드 밸런서 (GW, NLB, ALB etc...)
방화벽(firewall) 소개 및 정의
로드밸런서란?(L4, L7)
L4스위치와 L7스위치의 차이점
L4/L7 스위치 개요 (로드밸런서)
로드 밸런서(Load Balancer)란?
ADC(Application Delivery Controller)란?
네트워크 효율적 이용, QoS로 구현 가능