[부트캠프 - 25일차] 1/26.월 - Network

developowl·2026년 1월 26일

부트캠프

목록 보기
16/29
post-thumbnail

Firewall

네트워크 중간에 위치해서 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞추어서 허용하거나 차단하는 장비

  • 방화벽은 네트워크 3, 4 계층에서 동작하며 세션을 인지하는 상태 기반 엔진(Stateful Packet Inspection - SPI) 으로 동작

초기 방화벽

  • SPI 엔진이 없었음

  • 초기 방화벽에서는 패킷의 인과관계를 확인하지 못하고 장비에 등록된 정책만으로 단순히 패킷을 필터링 했음

  • 패킷의 세션 정보나 방향성과 상관없이 순수하게 방화벽에 설정된 정책에 따라 동작하는데, 이러한 방식을 Stateless 또는 패킷 필터 방화벽이라고 함.

  • 패킷이 인입되면 해당 패킷이 방화벽에 설정된 정책에 일치하는지 확인을 하는데 이때 참고하는 조건을 5-Tuple 이라고 함

  • 5-Tuple

    • Source IP
    • Destination IP
    • Protocol No
    • Source Port
    • Destination Port
  • 방화벽에 일치된 정책이 있으면 해당 정책에 따라 그 패킷을 허용하거나 차단

    • 지정된 구간에서 간단한 정책을 정의할 때는 큰 문제가 없는데, 인터넷 통신과 같이 불특정 다수 기반의 정책을 할 때는 복잡함
  • 패킷 단위의 필터링이므로 5-Tuple 이외의 3, 4계층 헤더를 변조해서 공격하면 적절한 방어가 불가능

  • 패킷 필터링 자체는 이후에 등장한 방화벽 엔진들보다 부하가 적고 간단한 동작으로 네트워크 장비에서 사용되거나 현대적인 일부 방화벽에서도 특수한 기능을 위해서 사용

  • 지정된 IP들을 방어하는데는 간단한 패킷 필터링이 부하가 적어 블랙리스트 처리를 위해 방화벽 내부에 패킷 필터링 엔진과 SPI 엔진을 함께 동작시킴

SPI 엔진

패킷 필터링 엔진

  • 기존 패킷 필터 방화벽이 상태값 없이 순수하게 정책만으로 제어하던 한계를 극복하기 위해서 개발된 것이 Stateful Inspection Firewall (상태 기반 방화벽)
  • 패킷 필터는 가볍고 빠르지만, 인터넷과 같이 불특정 다수와 통신할 때는 정책 관리가 어려움
  • 통신은 대부분 양방향으로 이루어지는데 패킷 필터 엔진은 양방향성을 인지하지 못하고 단순하게 패킷이 조건과 일치하는지만 확인함
  • 내부 사용자가 외부의 특정 웹 페이지에 접속할 때 3-way 핸드셰이크를 거친 후 HTTP 요청과 응답 과정을 거침
    • 패킷 필터 방화벽에서 이런 트래픽을 처리하기 위해 정책을 선언하려면 목적지가 불특정 다수의 웹이 될 수 있으므로 외부로 나가는 목적지에 대해서는 모든 패킷을 허용해야 함
    • 이렇게 정책을 설정하면 내부에서 외부 웹 사이트로 나갈 수는 있지만, 외부에서 내부로 들어오는 응답에 대한 정책이 없어서 정상적인 통신이 되지 않을 수 있음
  • 응답에 대한 정책을 설정하느 경우 외부 웹 사이트는 불특정 다수이기 때문에 출발지가 IP여야 하고, 목적지 서비스 포트는 내부에서 외부 호출 시 랜덤 포트를 지정하므로 마찬가지로 모든 포트가 되어야 하기 때문에 보안상 매우 취약
  • 이러한 문제 때문에 패킷 상태를 인지해 패킷의 인과 관계를 파악할 수 있는 상태 기반 SPI 엔진이 나오게 됨

SPI 엔진

패킷의 인과 관계와 방향성을 인지해 정책을 적용할 수 있어서 내부 네트워크에서 인터넷으로 통신할 때 유용하게 사용

방화벽이 패킷을 처리하는 순서

  1. 장비에 패킷이 들어오면 우선 세션 상태 테이블을 확인
  2. 조건에 맞는 세션 정보가 세션 테이블에 있을 때 포워딩 테이블을 확인(라우팅 ARP 포함)
  3. 조건에 맞는 세션 정보가 세션 테이블에 없을 때 방화벽 정책을 확인
  4. 방화벽 정책은 맨 위의 정책부터 확인해 최종 정책까지 확인한 후 없을 때 암시적인 거부(implicit Denial) 규칙을 참고해 차단됨
  5. 허용 규칙이 있으면 내용을 세션 테이블에 적어 넣음
  6. 포워딩 테이블을 확인(라우팅, ARP 포함)
  7. 조건에 맞는 정보가 포워딩 테이블에 있을 때 적절한 인터페이스로 패킷을 포워딩
  8. 조건에 맞는 정보가 포워딩 테이블에 없을 때 패킷을 폐기
  • SPI 엔진을 가진 방화벽은 세션 인지 기능이 있어서 5-Tuple 조건만 확이놯는 것이 아니라 OSI 3, 4 계층의 세부적인 필드도 같이 확인함
  • 세션을 추가로 인지하고 세션 테이블에 저장하므로 로깅하기가 쉬운데 대부분의 방화벽은 통신 전체의 세션을 로그로 저장해서 보안 사고 시 이런 세션 로그를 기반으로 어떤 통신에 문제가 있었는지 판단

ALG

  • 방화벽은 패킷 필터 엔진보다 헤더 정보를 상세히 확인하고 세션을 인지할 수 있지만 애플리케이션 헤더 정보를 인지하지는 못함
  • 세션 방화벽 이전에 개발된 고대 프로토콜은 방화벽과 같은 세션 장비를 고려하지 못해 통신 중간에 방화벽이 있으면 정상적인 통신이 불가능한 경우가 발생하는데, 가장 대표적인 프로토콜이 FTP
    • FTP는 컨트롤 프로토콜과 데이터를 보내는 데이터 프로토콜이 분리되어 동작하는데, FTP 서버는 컨트롤 프로토콜과 데이터 프로토콜이 반대로 세션을 맺으므로 방화벽이 FTP 프로토콜을 이해해서 동작하지 않으면 정상적인 서비스가 불가능
  • 세션 기반으로 동작하는 방화벽은 세션의 방향성이 매우 중요한데, FTP Active Mode 에서는 초기 접속 방향과 반대로 데이터 프로토콜이 동작하므로 방화벽을 통과하지 못했는데 이 문제를 해결하기 위해서 FTP 통신 방식을 패시브 모드로 변경해서 해결
  • 패시브 모드 자체를 제공하지 못하는 컴포넌트가 있을 수 있고 이미 개발 애플리케이션의 경우는 변경이 불가능할 수 있음
  • 방화벽에서 FTP 액티브 모드를 통과시키기 위해 애플리케이션 프로토콜을 확인하고 필요에 따라 세션을 인지해 포트를 자동으로 열어줌 → ALG(Application Layer Gateway)
  • ALG 기능은 PAT(Port Address Translation) 기능이 동작하는 방화벽에서 PAT를 정상적으로 통과하지 못하는 프로토콜들을 자동으로 인지해서 애플리케이션 정보를 변경하거나 세션 테이블을 만들어주는 역할을 수행
  • FTP ALG 기능이 동작하려면 패킷이 방화벽을 지나갈 때 방화벽이나 해당 패킷이 참조되는 정책에 ALG 기능이 활성화 되어 있어야 한다.
  • 최근 대부분의 애플리케이션이 이런 방화벽이나 NAT를 고려해서 개발되고 있고, STUN(Session Traversal Utilities for NAT) 과 같은 Hole Punching 기술들도 발전해서 오래된 프로토콜을 제외하면 ALG 기능을 사용하지 않는 추세

Router의 ACL

ACL(Access Control List) 은 라우터에서 사용할 수 있는데 트래픽을 식별하고 필터링하고 분류하고 변환 작업을 수행할 수 있는 List

  • 데이터 네트워크에서는 라우터가 트래픽 연결점 역할을 수행
  • 라우터에서 나가고 들어오는 패킷을 필터링하는 기능을 제공
  • 네트워크 트래픽을 제한하고 특정 사용자나 특정 장비의 네트워크 사용을 제한할 수 있음

ACL의 주요 기능

  • 패킷 필터링
    • 라우터를 통과하는 패킷의 허용 또는 거부를 결정하는 것
  • 패킷 분류
  • IP ACL은 허용 조건(Permit Condition) 이나 거부 조건(Deny Condition) 을 순차적으로 나열한 것으로 이들 조건을 IP 주소나 상위 계층의 IP 프로토콜에 적용
  • ACL은 라우터를 통과하여 지나가는 트래픽을 필터링하지만 라우터에서 출발하는 트래픽은 필터링 하지 않음
  • 라우터가 라우터에서 출발하는 패킷을 차단할 수 없기 때문에 라우터로부터 시작하는 telnet 접속을 차단할 수는 없음

동작

  • ACL의 허용 또는 거부 동작은 입력 ACL과 출력 ACL로 구분
  • 입력 ACL은 입력되는 패킷들이 라우팅 되기 전에 처리(출력 ACL 보다 효율적)
  • 입력 ACL은 매우 효율적인데 그 이유는 필터링 조건에 의해 패킷이 라우팅 되기 전에 패킷의 거부가 결정되기 때문에 라우팅을 위한 오버헤드를 줄일 수 있음
  • 입력 ACL에서 패킷이 허용되면 그 다음에 라우팅 과정을 거치게 됨

특징

  • 출력 ACL은 출력 인터페이스로 라우팅 된 후에 패킷의 허용 또는 거부를 결정
  • 패킷이 인터페이스에 입력되면 라우터는 라우팅 테이블을 참조해서 패킷이 라우팅 될 수 있는지를 결정하는데, 라우팅 테이블에 해당 목적지로 가는 경로가 명시되어 있지 않으면 그 패킷은 라우팅 될 수 없으므로 폐기됨
  • 라우터는 패킷이 전달되는 출력 인터페이스에 ACL이 적용되어 있는지를 검사하고 ACL이 없으면 출력 버퍼에 저장
  • ACL이 존재하면 ACL 구문에 의해서 검사될 때까지 출력 인터페이스에 전달되지 않음
  • ACL은 여러 인터페이스에 적용이 가능하기 때문에 동일한 ACL을 하나의 인터페이스 입력에 적용하고 다른 인터페이스의 출력에 적용이 가능하지만, 하나의 인터페이스의 입력 또는 출력 ACL은 하나만 적용 가능
  • ACL은 프로토콜 마다 적용할 수 있는데, 이 경우에도 하나의 프로토콜에는 하나의 ACL 만 적용이 가능
  • ACL은 위에서부터 아래로 각각의 구문을 빠짐없이 패킷에 적용하여 검사 수행
  • 패킷과 ACL 구문이 일치하면 나머지 구문은 검사하지 않음
  • 일치하는 구문이 있으면 조건에 따라 허용되거나 거부됨
  • 마지막 구문까지 검사한 후 마지막 구문까지 일치하지 않으면 패킷은 폐기됨
  • 마지막 구문은 묵시적 거부

ACL의 종류

  • 표준 ACL

    • 패킷의 발신지 IP 주소를 검사해서 패킷을 필터링 함
    • 10.1.1.1 에서 출발한 모든 패킷은 허용하고 10.1.1.2 에서 출발한 모든 패킷은 거부합니다. 형태로 작성
  • 확장 ACL

    • 패킷의 발신지 IP와 수신지 IP를 모두 검사해서 필터링 함
    • 10.1.1.1 에서 출발하여 10.1.1.3으로 가는 패킷은 거부
  • 번호 ACL

    • ACL의 번호에 따라 표준 ACL과 확장 ACL을 구분
    • 1~99 또는 1300~1999가 표준 IPv4 ACL
    • 확장 IPv4 ACL은 2000~2699번
  • 이름 ACL

    • 문자를 사용하기 때문에 구별이 쉬움
    • 이름 ACL은 ACL 구문을 한 줄씩 삭제할 수 있는 장점이 있음

와일드카드 마스크

  • 여러 개의 IP 주소를 하나로 표현하기 위한 방법
  • 와일드카드 마스크는 각각 8비트씩으로 된 4개의 옥텟으로 이루어진 32비트의 수
  • 와일드카드 마스크 비트 0은 대응하는 비트값을 검사하라는 의미고, 와일드카드 마스크의 비트 1은 대응하는 비트값을 무시하라는 의미
  • 와일드카드 마스크는 서브넷 마스크와 유사하게 IP 마스크와 쌍을 이루고 있으며, 둘 다 32비트
  • 서브넷 마스크에서 0과 1인 IP 주소의 호스트 부분과 네트워크 부분을 결정하는데, 와일드카드 마스크는 대응하는 IP 주소가 일치하는지 / 무시해도 되는지를 결정
  • 192.168.1.0, 192.168.1.1, 192.168.1.2, 192.168.1.3 네 개의 주소를 와일드카드 마스크 하나로 표기
    • 앞의 3개는 전부 동일하므로 0
      • 00000000
      • 00000001
      • 00000010
      • 00000011
      • 앞의 6자리는 모두 0으로 동일하고 뒤의 두자리가 서로 다름
    • 192.168.1.0 0.0.0.3
  • 와일드카드 마스크는 2의 지수승으로 IP를 묶음
    • 2의 지수승이 아니면 하나의 와일드카드 마스크로 표현할 수 없음
  • 10.1.4.0/24 부터 10.1.8.0/24 까지를 와일드카드 마스크로 표현
    • 서브넷 마스크: 10.1.4.0 255.255.247.0
    • 와일드카드 마스크: 10.1.4.0 0.0.8.0 (이렇게 남는 대역을 포함시키지 않음)
      → 10.1.4.0 0.0.3.255
      10.1.8.0 0.0.0.255
      - → 와일드카드 마스크에서는 없는 대역은 제외하고 여러 개로 구성할 수 있음

특별한 와일드카드 마스크

  • host는 전체 IP 주소의 모든 비트가 일치하는 것을 의미
  • 172.23.16.29 하나만을 의미: 172.23.16.29 0.0.0.0 또는 host 172.23.16.29

모든 host를 의미하는 any

  • 모든 호스트를 의미할 때는 0.0.0.0 255.255.255.255 또는 any

ACL 설정

표준 번호 ACL의 설정

  • 출발지 IP 주소를 기반으로 패킷을 필터링 하는데 TCP/IP 프로토콜 전체를 허용하거나 거부

  • 표준 번호 ACL은 1~99, 1300~1999 의 번호를 사용

  • 과정

    • ACL을 작성
      • access-list 번호 {permit | deny | remark} ‘네트워크 주소’ ‘와일드카드마스크’
      • access-list 1 permit 172.16.0.0 0.0.255.255
    • 인터페이스에 적용
      • ip access-group 번호 {in | out}
  • 실습

    • 라우터 3개 배치
    • R1과 R2는 Ethernet2/0 으로 연결
    • R2와 R3는 Ethernet2/1 로 연결
    • IP 할당
      • R1의 Ethernet2/0에 192.168.0.1/24 를 할당
        • R1#configure terminal
        • R1(config)#interface ethernet2/0
        • R1(config)#ip address 192.168.0.1 255.255.255.0
        • R1(config-if)#no shutdown
        • R1(config-if)#exit
        • R1(config)#exit
        • R1#show ip interface brief
      • R2의 Ethernet2/0에 192.168.0.254/24 를 할당
      • R2의 Ethernet2/1에 172.16.0.254/24 를 할당
        • R2#configure terminal
        • R2(config)#interface ethernet2/0
        • R2(config)#ip address 192.168.0.254 255.255.255.0
        • R2(config-if)#no shutdown
        • R2(config-if)#interface ethernet2/1
        • R2(config-if)#ip address 172.16.0.254 255.255.255.0
        • R2(config-if)#np shutdown
        • R2(config-if)#exit
        • R2(config)#exit
        • R2#show ip interface brief
      • R3의 Ethernet2/1에 172.16.0.1/24를 할당
        • R3#configure terminal
        • R3(config)#interface ethernet2/1
        • R3(config)#ip address 172.16.0.1 255.255.255.0
        • R3(config-if)#no shutdown
        • R3(config-if)#exit
        • R3(config)#exit
        • R3#show ip interface brief
      • 통신이 가능하도록 라우팅
        • R1# configure terminal
        • R1(config)# router ospf 1
        • R1(config-router) # network 192.168.0.0 0.0.0.255 area 0
        • R1(config-router) # exit
        • R1(config) # exit
        • R1# show ip route
        • R2# configure terminal
        • R2(config)# router ospf 1
        • R2(config-router) # network 192.168.0.0 0.0.0.255 area 0
        • R2(config-router) # network 172.16.0.0 0.0.0.255 area 0
        • R2(config-router) # exit
        • R2(config) # exit
        • R2# show ip route
        • R3# configure terminal
        • R3(config)# router ospf 1
        • R3(config-router) # network 172.16.0.0 0.0.0.255 area 0
        • R3(config-router) # exit
        • R3(config) # exit
        • R3# show ip route
  • 표준 ACL을 이용해서 R2에서 192.168.0.1 에서 172.16.0.1 로 통신이 되지 않도록 설정

    • R2#configure terminal
    • R2(config)# access-list 1 deny 192.168.0.1 0.0.0.0
    • R2(config)# interface ethernet2/1
    • R2(config-if)# ip access-group 1 out
    • R1#ping 172.16.0.1 #UUUUU

확장 번호 ACL 설정

  • 발신지와 목적지 IP 주소를 모두 검사하고 프로토콜과 TCP나 UDP 포트 번호를 검사할 수 있음
  • 패킷의 출발지, 목적지, 프로토콜 유형, 포트 주소, 응용 등을 기반으로 접속을 허용하거나 거부할 수 있음
  • HTTP는 허용하고 FTP는 거부
  • 번호를 100~199, 2000~2699 번 사이로 작성해야 함
  • 설정 과정
    • ACL 구문을 작성
      • access-list 번호 {permit | deny} 프로토콜 출발지네트워크주소 와일드카드마스크 {operator port} 목적지네트워크주소 와일드카드마스크 {operator port}
    • 인터페이스에 적용하는 것은 동일

이름을 이용하는 방법

  • ip access-list extended 이름
  • ip access-list standard 이름
profile
Don’t get mad at the computer.

0개의 댓글