다음은 성공과 실패를 결정하는 1%의 네트워크 원리 를 읽고 정리한 내용입니다. 본 글은 CH5. 서버측의 LAN에는 무엇이 있는가?_방화벽과 캐시 서버의 탐험입니다 🙌



🛺 [Story1] 웹 서버의 설치 장소

1. 사내에 웹 서버를 설치하는 경우

사내 LAN에 서버를 설치하고 인터넷에서 직접 액세스 하는 경우 (a)

  • 이 경우는 현재 주류가 아님
    • IP 부족 - 이 경우 서버와 클라이언트에도 글로벌 주소를 할당해야하는데 IP 주소가 매우 부족하다.
    • 보안상의 이유 - 인터넷에서 들어오는 패킷이 그대로 중계되는데 어플리케이션에 보안 구멍이 있다면 어플리케이션은 무방비 상태가 된다.

방화벽

  • 보안 문제를 해결하기 위해서 방화벽을 두어 관문의 역할을 하도록 한다. (b)
    • 특정 서버에서 동작하는 특정 어플리케이션에 액세스 하는 패킷만 통과시키고 나머지는 차단하도록 한다.
    • 외부 액세스가 허가되지 않은 어플리케이션에 대한 패킷은 차단이 되므로 도착하지 않는다.
    • 액세스가 허가된 어플리케이션에 보안구멍이 있을 수 있기 때문에 완전히 위험이 없어지지 않지만 공격받을 위험성이 훨씬 적다.


출처: 상위 1% 네트워크

2. 데이터센터에 웹 서버를 설치하는 경우

  • 프로바이더가 운영하는 서버를 빌려쓰는 형태로 운영하는 경우 (c)
  • 프로바이더 중심 부분 NOC나 상호 접속 부분 IX에 고속 회선으로 접속되어 있으므로 고속 액세스가 가능하다.
  • 데이터센터는 물리적으로 안전한 건물, 방화벽 설치 운영, 기기 가동 상태 감시, 부정 침입 감시 등등의 부가 서비스를 제공하며 안정성이 높다.
  • 이 경우 패킷은 인터넷 중심 부분에서 데이터센터로 흘러가 서버에 도착한다.

🛺 [Story2] 방화벽의 원리와 동작

1. 패킷 필터링형이 주류이다

  • 방화벽의 기본: 특정 서버와 해당 서버 안의 특정 어플리케이션에 액세스 하는 패킷만 통과하고 나머지는 차단
    • 성능, 가격, 사용 편의성 등에 의해 패킷 필터링형 방화벽이 가장 많이 보급되어 있다.

2. 패킷 필터링의 조건 설정 개념

패킷의 헤더에 들어있는 제어 정보를 통해 패킷 필터링 조건을 설정한다. 이 조건에 따라서 액세스가 허가되지 않으면 해당 패킷을 차단한다.

  • 먼저 패킷의 흐름을 판단한다.
    • 패킷 헤더의 수신처 IP와 송신처 IP 로 종점과 시작점을 판단할 수 있다. 수신처가 해당 웹 서버의 IP 주소와 일치하는 경우에만 패킷을 통과시킨다.
    • 패킷이 들어온 후 응답 패킷(ACK 등)을 다시 클라이언트에게 보내야 하기 때문에 웹 서버에서 인터넷으로 나가는 패킷 중 송신처 IP가 본 서버 IP인 경우 통과시킨다.

3. 어플리케이션을 한정할 때 포트 번호를 사용한다

  • 서버에 보안에 취약한 다양한 어플리케이션이 있을 수 있다. 웹 어플리케이션에 대한 패킷만을 허용하고 나머지를 차단하는 방식으로 보안을 향상시킬 수 있다.
  • TCP 헤더나 UDP 헤더의 포트 번호를 조건으로 추가하여 웹 서버를 지칭하는 80 포트만 통과되도록 설정할 수 있다.

4. 컨트롤 비트로 접속 방향을 판단한다

  • 문제 상황 - 웹 서버에 기생하며 다른 서버에 바이러스를 감염시키는 경우가 많기 때문에 웹 서버 → 인터넷으로 가는 패킷을 차단한다. 그렇지만 패킷은 양방향 프로토콜로 소통하기 때문에 한쪽이 차단되면 소통할 수 없어진다.
    • 웹 서버에서 시작되는 통신을 금지해야하는데, 그렇다고 웹 서버에서 나가는 모든 패킷을 차단할 수 없다. 프로토콜 소통이 전혀 되지 않기 때문이다.
  • 해결 방안 - 액세스 방향을 판단하여 패킷을 필터링 해야한다 → TCP 헤더의 컨트롤 비트로 판단할 수 있다.
    • TCP 접속 시 최초 패킷만 컨트롤 비트의 SYN → 1, ACK → 0 이다.
    • 웹 서버에서 인터넷으로 나가는 패킷 중 위와 같이 컨트롤 비트가 설정된 패킷을 차단하면 웹 서버에서 TCP 접속을 시작하여 인터넷으로 액세스하는 동작을 차단할 수 있다.
  • 이외에도 헤더의 여러 제어 정보들을 활용해서 패킷을 차단시키고 통과시킬 수 있다.
  • 통과시키는 것과 차단하는 것을 선별할 수 없는 경우도 있다.
    • DNS 서버에 대한 액세스와 같이 UDP를 사용하는 경우 접속 단계 동작이 없으므로 필터링 할 수 없다.

5. 사내 LAN에서 공개 서버용 LAN으로 조건을 설정한다


출처: 상위 1% 네트워크

  • 위와 같은 구조에서는 공개 서버용 LAN과 사내 LAN 패킷 조건, 인터넷과 사내 LAN 패킷 조건도 잘 설정해야한다.
    • 잘못 설정하는 경우
      • 사내 LAN과 공개 서버용 LAN의 패킷을 허용하기 위해 수신처 IP가 공개 서버용 LAN과 일치하면 모두 통과하고 송신처 IP 조건을 설정하지 않음
      • 인터넷에서 흘러온 패킷이 무조건 공개 서버용 LAN에 유입되어 서버가 위험해짐

6. 밖에서 사내 LAN으로 액세스할 수 없다

  • 패킷 필터링형 방화벽은 주소 변환 기능도 가지고 있다. 패킷 필터링과 마찬가지로 패킷의 시작점과 종착점을 판단하여 주소변환이 필요한 경우 주소 변환을 하고 아니면 하지 않는다.
    • 주소 변환을 하지 않으면 액세스할 수 없다. 적절한 주소와 포트를 찾지 못하기 때문이다. 따라서 자연스럽게 인터넷에서 사내 LAN에 접근할 수 없는 구조가 된다. (따로 패킷 조건을 설정하지 않아도 된다)

7. 방화벽을 통과한다

  • 방화벽은 차단하는 패킷에 대한 기록을 남긴다.
    • 부정 침입의 흔적이 남아 분석하여 정보로 사용한다.
  • 통과 시킨 후에는 패킷을 라우터와 비슷하게 중계한다.
  • 패킷 필터링은 라우터의 패킷 중계 기능 중 부가기능으로 볼 수 있는데 그 조건 설정이 복잡해지면서 전용 하드웨어나 소프트웨어가 등장한 것이다. 간단한 패킷 필터링을 사용하면 라우터를 방화벽으로 사용할 수도 있다.

8. 방화벽으로 막을 수 없는 공격

  • 특수한 데이터에 의해 서버를 공격하는 경우, 방화벽은 헤더의 정보만으로 필터링하기 때문에 차단할 수 없다.
    • 이 경우 어플리케이션의 버그를 수정하거나 패킷의 내용을 조사하여 위험한 데이터를 차단하는 별도의 소프트웨어를 준비하는 것이다.

🛺 [Story3] 복수 서버에 리퀘스트를 분배한 서버의 부하 분산

1. 처리 능력이 부족하면 복수 서버로 부하 분산된다

회선이 아무리 빨라도 대량의 패킷이 들어오면 처리능력이 부족하다. 이때 복수의 서버를 이용하여 한대의 서버에 몰리는 처리량을 출이는 분산 처리를 할 수 있다.

  • DNS 서버에 IP 주소를 같은 이름으로 여러개 등록하면 DNS 서버는 조회 때마다 라운드 로빈으로 IP를 응답하여 액세스를 균등하게 분산시킨다.
    • 하지만 특정 IP 주소를 가진 서버가 고장나도 DNS 서버는 그대로 응답한다.
    • 또한 복수의 페이지가 하나의 로직을 수행할 수 있는데 매 요청마다 다른 서버가 응답하면 로직이 이어지지 않을 수 있다.

2. 부하 분산 장치를 이용해 복수의 웹 서버로 분할된다

  • 부하 분산 장치나 로드 밸런서를 활용한다.
    • DNS 서버에 로드 밸런서의 IP가 등록된다.
  • 로드 밸런서에서 연결된 서버의 부하 상태를 확인(너무 많이 하면 부하 상태 확인이 부하가 될 수 있다) 하고 요청을 분배한다.
  • 대화가 복수의 페이지에 걸쳐있는 경우 이전 요청과 같은 서버로 요청을 보내도록한다.
    • HTTP는 stateless 하므로 전후 관계를 판단하기 어렵다.
    • 판단하기 위해서 웹 서버에서 정보를 유지해야하지만 그럼 웹 서버에 부담이 간다.
    • 현재는 HTTP 헤더 필드에 정보를 추가할 수 있도록 하거나 데이터가 전후 관계를 확인할 수 있는 정보를 부가하는 방법을 사용한다.
[용어]

POP - Point of Presence 인터넷 사용자가 ISP를 만나는 지점

ISP - Internet Service Provider

방화벽 - 네트워크를 외부의 공격으로부터 지키기 위한 고안된 구조