[리눅스마스터 1급] 이기적 이론서 15회차 정리 - 네트워크 보안

🏁 이기적 이론서 학습 범위

  • PART 03 네트워크 및 서비스의 활용
    • CHAPTER 01 네트워크 보안 (SECTION 01 네트워크 침해 유형 및 특징, SECTION 02 대처 및 대처 방안)

네트워크 침해 유형 및 특징

☑️ 네트워크 침해 유형 및 특징

스니핑(Sniffing) 공격

  • 개념
    • 한 서브 네트워크 내에서 전송되는 패킷의 내용을 임의로 확인하는 공격 기법
  • 네트워크 무작위 모드(Promiscuous Mode)와 TCP Dump
    • 네트워크 설정을 무작위 모드로 변경한 후 TCP Dump를 이용하면, 네트워크 내의 모든 패킷을 확인할 수 있다.
    • ifconfig [네트워크 인터페이스 이름] promisc 를 통해 무작위 모드로 변경한다.
    • ifconfig [네트워크 인터페이스 이름] -promisc 를 통해 일반 모드(Normal mode)로 다시 전환한다.
    • tcpdump는 네트워크 패킷을 확인하는 명령어이다.

        $ ifconfig eth0 promisc # 무작위 모드로 변경
              
        $ ifconfig
              
        $ tcpdump -ni eth0 # 네트워크 패킷 확인
              
        $ ifconfig eth0 -promisc # 일반 모드로 전환
      
  • 스니핑 공격 대응 방안
    • 중요한 데이터는 SSL(Secure Socket Layer)와 같은 암호화 통신 방식을 이용한다.

스푸핑(Spoofing) 공격

  • 개념
    • 네트워크 서비스 혹은 패킷 정보를 임의로 변경하여 공격에 사용하는 기법
    • IP 주소, DNS 주소, MAC 주소 등의 정보를 변조하여 공격의 탐지 및 역추적을 어렵게 한다.
  • 스푸핑 공격의 세부 기법 및 대응 방안

    세부 기법설명
    IP Spoofing- TCP/IP의 구조적 취약점을 악용하여, 공격자가 자신의 IP를 변조하므로 IP 기반 인증 등의 서비스를 무력화시키는 공격기법
    - 대응 방안: IP 기반 인증을 최소화하고 TCP sequence 번호를 예측하지 못하도록 랜덤하게 구성
    ARP Spoofing- IP 주소를 MAC 주소로 변환하는 ARP 프로토콜의 취약점을 악용한 공격
    - IP 주소와 MAC 주소의 매핑 정보를 네트워크에 브로드캐스트하여 대상 호스트들의 ARP 테이블이 악의적인 정보로 변조되도록 한다.
    - 대응 방안: arp - [IP][MAC] 을 통해 정적 ARP 매핑 정보를 등록
    DNS Spoofing- DNS 요청에 위조된 정보를 응답 패킷으로 보내는 기법
    - DNS Spoofing에 의해 www.youngjin-test.com에 대한 IP 주소가 공격자의 IP 주소로 응답될 경우 사용자는 공격자의 IP에 위치한 악의적인 서비스로 접속하게 된다.

DoS(Denial of Service)와 DDoS(Distributed DoS) 공격

  • DoS
    • 공격 대상의 시스템 및 네트워크 취약점 등을 공격하여 과도한 부하를 발생시키고 정상적인 서비스를 불가능하게 하는 가용성 침해 공격
  • DoS 공격의 유형

    유형설명
    파괴 공격시스템 한계 용량을 초과하는 부하를 발생시켜 연산장치, 저장장치, 데이터 등을 파괴하는 공격
    시스템 자원 고갈 공격반복적인 프로세스 생성, 메모리 할당, 데이터 중복 저장 등을 통해 CPU, 메모리, 디스크 등 주요 자원을 고갈시키는 공격
    네트워크 자원 고갈 공격대용량의 과도한 패킷을 유발하여 네트워크 대역폭을 고갈시키는 공격
    • 시스템 자원 중 프로세스 자원을 공격시키기 위한 공격 코드의 예시

        // 프로세스 생성을 무한 반복 실행해 프로세스 자원을 고갈시킴
        #include <unistd.h>
        main() {
          while(1)
            fork();
          return(0);
        }
      
  • DoS 공격의 세부 기법

    세부 기법설명
    Ping of Death- ICMP Echo 패킷을 정상 크기(64k)보다 매우 크게 전송하여 시스템에 문제를 일으키는 공격 기법
    - 전송한 데이터는 라우팅(Routing)되는 동안 작은 조각으로 분할되어 전송 및 처리되므로 과도한 부하가 발생된다.
    Teardrop Attack- IP fragmentation에 따라 패킷을 재조립할 때 오프셋(offset)을 임의로 변조하여 문제를 일으키는 공격기법
    - 잘못된 오프셋 정보는 재조립 과정에서 과부하 및 시스템 크래쉬(Crash)를 유발한다.
    TCP SYN Flooding- TCP의 3-way 핸드쉐이킹(handshaking) 연결 방식을 악용한 공격 기법
    - 공격자는 TCP 연결 시 사용하는 SYN flag를 대량으로 공격 대상에게 발송하며, SYN-ACK에 대한 최종 응답(ACK)을 전송하지 않는다. - 피해 시스템은 TCP 연결을 처리하기 위해 자원을 계속 할당하게 되므로 정상적인 서비스 수행이 어렵게 된다.
    UDP Flooding- 대량의 UDP 패킷을 전송하여 공격 대상의 자원을 소모시키는 공격 기법
    - 공격받은 시스템은 UDP 패킷을 처리하기 위해 서비스 및 포트를 반복해서 점검하게 되므로 정상적인 서비스 처리에 방해받게 된다.
    - 공격 시 발신자의 IP 주소가 임의로 변조(Spoofing)되므로 응답 메시지는 공격자에게 전달되지 않는다.
    Land Attack- 공격 대상에게 IP 패킷을 보낼 때 발신자 IP, 수신자 IP를 모두 공격 대상의 IP로 하여 문제를 일으키게 하는 공격기법
    Smurf Attack- 공격자는 IP 주소를 공격 대상의 IP 주소로 위장하고 ICMP Request 패킷브로드캐스트(Broadcast)를 통해 다수의 시스템을 전송한다.
    - 브로드캐스트를 수신한 다수의 시스템은 ICMP Echo Reply 패킷을 공격자가 아닌 공격 대상으로 전송하게 되면서 부하를 발생시킨다.
    Mail Bomb- 동일한 이메일 주소를 대상으로 대량의 메일을 동시에 발송하는 공격 기법 - Mail Bomb 공격은 네트워크 자원뿐 아니라 메일 데이터 저장을 위한 디스크 자원도 고갈시킨다.
    NTP 증폭 공격- NTP 서비스의 monlist 요청 방식을 악용한 DDoS 공격 기법 - 공격자(Attacker)의 적은 공격 패킷이 증폭되어 공격 대상(Victim)에 전송되므로 피해가 증가하는 공격 기법
  • DDoS(Distributed Denial of Service)
    • 공격을 위한 에이전트(Agent)를 분산된 시스템에 배치한 후, DoS 공격을 동시에 실행하는 공격 기법
    • Agent에 명령을 내리는 명령 서버(호스트)C&C(Command & Control) 서버라고 한다.
    • Agent가 설치되어 DDoS 공격에 사용되는 호스트좀비 PC라고 하며, 좀비 PC들의 네트워킹을 봇넷(Botnet)이라 한다.
    • DDoS 공격을 위한 다양한 도구

      공격 도구설명
      Stacheldraht- Linux 시스템용 분산 서비스 거부 공격(DDoS)의 에이전트 역할을 하는 악성코드(malware)로 Smurf 공격에 사용될 수 있다.
      - 통신 시 암호화 기능을 지원하며 공격자 확인을 위해 패스워드를 지정한다.
      TFN공격자 시스템과 마스터 시스템 간 연결이 평문으로 되어 있으며 UDP Flooding, TCP SYN Flooding, ICMP 브로드캐스트 공격이 가능하다.
      TFN 2K- TFN의 발전된 형태로 UDP, TCP, ICMP를 복합적으로 사용하고 포트도 임의로 결정되며 암호화를 사용한다.
      - 지정된 TCP 포트에 백도어를 실행할 수 있다.
      TrinooUDP Flooding 분산 서비스 거부 공격을 할 수 있는 통합 도구
  • DoS 및 DDoS 공격 대응 방안
    • 침입 차단 시스템(Intrusion Prevention System)을 이용하여 패킷 및 포트 필터링 수행
    • 침입 탐지 시스템(Intrusion Detection System)을 이용하여 공격 탐지
    • 로드 밸런싱(Load Balancing)을 통한 대용량 트래픽 분산 처리 구성
    • 시스템 최신 패치 적용으로 취약점 제거
    • 불필요한 서비스를 제거하고 포트를 닫음

☑️ 해킹 프로그램을 이용한 공격

무작위 공격(Brute Force Attack) 도구

  • 개념과 특징
    • 무작위 공격은 사전 파일(Dictionary File)을 기반으로 임의의 정보를 무작위로 대입하여 인증을 우회하는 공격 기법
    • root, Administrator와 같이 고정된 아이디를 사용할 경우 패스워드 입력에 무작위 공격을 사용할 수 있으므로 보안에 취약하다.
  • 무작위 공격 도구 및 대응 방안
    • 리눅스 시스템의 대표적인 무작위 공격 도구: John the Ripper
    • 입력 회수 제한 등을 통해 무작위 공격에 대응할 수 있다.

기타 해킹 프로그램 및 악성 코드

프로그램 이름설명
Prorat해킹 대상 시스템에 원격 접속 및 제어하여 해킹을 수행할 수 있는 전용 프로그램
Netbus네트워크를 통해 Microsoft Windows 컴퓨터 시스템을 원격으로 제어하기 위한 소프트웨어
Back orifice- 윈도우의 TCP/IP 기능을 이용해 시스템끼리 원격 제어한다. - 안철수 연구소의 V3 백신에서는 Win-Trojan/BO.57856 트로이목마(해킹툴)로 감지하여 삭제를 권장한다.
랜섬웨어- 시스템을 잠그거나 데이터를 암호화하여 사용할 수 없도록 만든 후 금전을 요구하는 악성 프로그램 - 최근 국내 웹 호스팅 업체가 이 공격으로 인해 큰 비용을 지불하였다.
트로이목마정상적인 프로그램으로 가장하였으나 내부에 악성 코드를 담고 있는 프로그램
웜바이러스스스로 실행되는 악성 소프트웨어로 자기 복제와 다른 시스템으로 전파되는 특징을 가진다.

대비 및 대처 방안

☑️ 보안 솔루션을 이용한 대비 및 대처

방화벽(Firewall)

  • 개념과 주요 기능
    • 외부로부터 들어오는 악의적인 트래픽을 막고, 허가된 트래픽만 내부 네트워크로 유입될 수 있도록 통제하는 하드웨어 혹은 소프트웨어
    • 내부에서 외부로 나가는 패킷도 룰(Rule)에 따라 통제할 수 있다.
    • 접근제어(Access Control), 로깅(Logging) 및 감사 추적(Auditing), 사용자 및 호스트 인증(Authentication) 기능 등을 제공한다.
    • 방화벽 종류

      방화벽 종류설명
      스크리닝 라우터(Screening Router)- 내부 네트워크와 외부 네트워크를 방화벽 기능을 탑재한 라우터로 연결한다.
      - 장점: 필터링 속도 빠름, 네트워크 전체 방어 가능
      - 단점: 패킷 필터링 규칙 구성, 검증 및 로그 관리가 어려움
      베스천 호스트(Bastion Host)- 방화벽 기능을 탑재한 호스트를 이용하여 내부 네트워크와 외부 네트워크를 연결한다.
      - 장점: 호스트 기반의 소프트웨어로 지능적인 정보 분석 지원
      - 단점: Bastion Host 자체에 보안 취약점 존재 가능
      듀얼홈 게이트웨이(Dual-Homed Gateway)- 2개의 네트워크 카드를 내장한 Bastion을 이용하여 외부 네트워크와 내부 네트워크를 각각 연결한다.
      - 장점: 네트워크가 분리되어 내부 IP 주소가 노출 안되므로 높은 보안성을 제공한다.
      - Bastion Host 자체에 보안 취약점 존재 가능
      스크린드 호스트 게이트웨이(Screened Host Gateway)- Dual-Homed Gateway와 Screening Router를 혼합한 형태
      - 장점: 네트워크와 응용 계층에서 함께 방어하므로 높은 보안성 제공
      - 단점: 시스템 구축 비용이 높으며 스크리닝 라우터의 라우팅 테이블 변조 공격에 취약
      스크린드 서브넷 게이트웨이(Screened Subnet Gateway)- Screening Router를 Bastion Host를 중심으로 양쪽에 연결하는 형태
      - Bastion Host는 Proxy 서버를 이용하여 명확하게 허용되지 않은 모든 트래픽을 거부한다.
      - 장점: 다단계로 방어하므로 높은 보안성 제공
      - 단점: 구축 비용이 높으며 서비스 응답성이 낮아질 수 있음

침입 탐지 시스템(IDS: Intrusion Detection System)

  • 개념
    • 네트워크 및 서비스에 대한 공격을 실시간으로 탐지하는 보안 시스템
  • 주요 기능
    • 데이터를 수집 및 분석하여 침입 탐지와 추적 및 보고 기능 제공

      IDS 기능설명
      데이터 수집호스트 혹은 네트워크로부터 분석을 위한 데이터 수집
      정보 분석시스템에 설정한 패턴 DB 및 분석 룰(Rule)을 이용하여 정보 분석
      침입 탐지분석한 정보를 기반으로 침입 여부를 실시간으로 탐지
      추적 및 보고통계적 분석과 보고 기능으로 공격의 근원과 패턴을 리포팅(Reporting)
  • IDS의 시스템 유형
    • 데이터 소스를 기준으로 호스트 기반(HIDS)네트워크 기반(NIDS)으로 구분한다.
    • HIDS와 NIDS의 운영방식

      유형설명
      호스트 기반(HIDS)서버에 직접 설치되어 다양한 정보를 이용한 침입 탐지 수행
      네트워크 기반(NIDS)네트워크 세그먼트별로 탐지 장비를 설치하여 운영
    • 침입 탐지 방식을 기준으로 오용 탐지(Misuse) 방식과 이상 탐지(Anormaly) 방식으로 구분한다.

      유형설명
      오용 탐지(Misuse)- 알려진 공격 패턴을 등록한 후 비교하여 탐지
      - 오탐율은 낮으나 알려지지 않은 공격에 취약
      이상 탐지(Anormaly)- 정상적 패턴 대비 이상한 패턴일 경우 공격으로 판단하는 방식
      - 인공지능 알고리즘 등을 활용하여 새로운 공격 패턴에 대응할 수 있으나, 정상적인 행동을 침입으로 오탐할 가능성이 있음

침입 방지 시스템(IPS: Intrusion Prevention System)

  • 개념
    • 침입 탐지의 수동적인 방어 시스템에서 더 발전하여 능동적인 방어와 차단 등 사전 공격 대응을 중심으로 한 보안 시스템
    • 침입 경고 이전에 공격을 차단하는 것이 목적이다.

☑️ Snort를 이용한 대비 및 대처

Snort

  • 특징
    • 리눅스 시스템에서 사용할 수 있는 공개형 IDS 프로그램
    • 크게 스니퍼(Sniffer), 프리 프로세서(Pre-processor), 탐지 엔진, 로깅(출력)으로 구성된다.
  • 주요 기능
    • 탐지 룰(Rule)을 이용하여 네트워크 트래픽을 분석하고 침입을 방지한다.
    • 주요 기능

      기능설명
      패킷 스니퍼네트워크의 패킷을 읽고 표시
      패킷 로거(Logger)모니터링한 패킷을 저장 및 로그에 기록
      네트워크 IDS- 네트워크 패킷을 분석하여 공격 탐지 - Buffer Overflow 공격, Port Scan 등 다양한 공격을 탐지

Snort의 Rule 설정

  • Snort Rule의 구조
    • 크게 헤더(Header)와 룰 옵션(Rule Options)으로 구성된다.

      구분구성항목
      헤더(Header)- action: 동작방식 - protocol: 점검 대상 프로토콜
      - source IP/Port : 소스 IP 및 포트 - direction: 패킷의 흐름 방향
      - destination IP/Port : 목표 IP 및 포트
      룰 옵션(Rule Options)- General, Payload, non-payload, post-detection의 4가지로 분류
      - 이중 Payload 탐지 룰 옵션을 주로 사용
    • Snort Rule 헤더 예제

      항목actionprotocolsource IPsource Portdirectiondestination IPdestination Port
      예시alerttcp10.0.2.28010.0.2.780
      의미경고발생TCP 프로토콜소스 IP소스 포트데이터 방향목표 IP목표 포트
    • Snort Rule 옵션의 주요 항목

      항목설명
      msg출력할 메시지 지정
      sid설정할 룰의 식별자를 지정하며 사용자가 작성한 룰은 1000000 이상으로 함
      content페이로드(Payload) 내부에서 검색할 문자열 지정
      depth검사할 바이트 수를 지정
      offset검사를 시작할 위치 지정
      distance- 앞에 설정한 룰의 결과에서 지정한 숫자(바이트 수)만큼 떨어진 지점부터 검사
      - ex. content:“Hi”;content:”Hello”:distance:1 이면, Hi 문자를 찾은 뒤 1바이트 이후부터 Hello 문자열 검사
      within시작점부터 검사하되 지정한 바이트 수 내에서만 검사
      nocase문자열 검색 시 대소문자 구별 X
      sameip소스와 목표 IP 주소가 동일함을 검사
  • Snort Rule 설정 예제
    • 외부에서 내부(192.168.10.0/24) 대역의 80 포트로 이동하는 패킷 중 passwd 문자열이 포함된 패킷 발견 시 passwd detected 라는 alert 메시지를 발생시킨다.

        alert tcp any any -> 192.168.10.0/24 (msg:"passwd detected"; content:"passwd"; nocase; sid:1000001;)
      
    • Land Attack을 탐지한다.

        alert ip any -> any any (msg:"Land Attack"; sameip; sid:1000001;)
      
  • Suricata 도구
    • Snort를 베이스로 개발되었고 Snort Rule과 호환된다.
    • 장점: 멀티 코어, GPU(Graphic Process Unit) 기반 가속화 등을 지원하여 처리 속도가 빠르다.

☑️ iptables를 이용한 대비 및 대처

iptables

  • 특징
    • 리눅스의 방화벽이라고도 한다.
    • 패킷 필터링 정책을 사용하여 특정 패킷을 분석하고 허용 또는 차단할 수 있다.
    • NAT(Network Translation Address)에도 사용할 수 있다.
    • 커널의 넷필터(Netfilter) 모듈을 이용하여 네트워크 패킷을 필터링한다.
    • “모든 것을 허용한 후, 일부 패킷 제한 방식” 또는 “모든 것을 거부한 후, 일부 패킷 허용 방식”을 이용할 수 있다.
  • firewalid
    • 최근 리눅스는 firewalid를 기본 방화벽으로 사용하고 iptables 대비 편리한 사용성을 제공한다.
      • iptables를 사용하면 보다 상세하고 명확한 규칙 설정이 가능하여 여전히 중요하다.
      • firewalid도 내부적으로 iptables를 기반으로 동작한다.
    • firewalid 대신 iptables를 기본으로 사용하는 방법

        $ systemctl stop firewalid
              
        $ systemctl disable firewalid
              
        $ yum -y install iptables-service
              
        $ systemctl start iptables
              
        $ systemctl enable iptables
              
        $ systemctl -l status iptables
      
  • iptables의 테이블과 체인 설정에 따른 패킷 흐름

    image.png

iptables의 테이블 구조

  • 테이블 종류
    • filter, nat, mangle, raw, security의 5가지 테이블을 지원한다.
    • 각 테이블 별로 고유한 사슬(Chain)을 지정하고 정책을 설정하며, 필요한 경우 사용자 정의 사슬을 정의한다.

      테이블 이름설명
      filteriptables의 기본 테이블로 패킷 필터링 기능 담당
      nat- Network Address Translation - IP 주소 및 포트를 변환하고 관리한다.
      - 하나의 공인 IP를 여러 호스트가 사용하고자 할 때 주로 사용한다.
      mangle성능 향상을 위한 TOS(Type of Service) 설정과 같이 패킷 데이터를 변경하는 특수 규칙 적용
      raw연결 추적(Connection tracking)을 위한 세부 기능을 제공
      securitySELinux(보안커널)에서 사용하는 접근 제어 규칙 적용
  • iptables의 filter 테이블
    • 미리 정의된 3가지 체인이 있고, 이를 이용하여 네트워크 패킷을 대상으로 정해진 규칙을 수행하며 패킷 필터링 및 방화벽 기능을 수행한다.
    • filter 테이블의 체인

      체인설명
      INPUT호스트를 목적지로 유입되는 패킷을 필터링하는 데 사용
      OUTPUT호스트를 출발지로 하여 나가는 패킷을 필터링하는 데 사용
      FORWARD- 라우터로 사용되는 호스트를 통과하는 패킷 - 호스트 컴퓨터가 목적지가 아닌 패킷을 관리
  • iptables의 nat 테이블
    • 미리 정의된 4가지의 체인이 있다.

      체인설명
      PREROUTING패킷의 도착지 주소를 변경
      POSTROUTING패킷의 출발지 주소를 변경하며 masquerade라고도 함
      OUTPUT호스트에서 밖으로 흐르는 패킷의 도착지 주소를 변경
      INPUT호스트 밖에서 안으로 흐르는 패킷 주소를 변경

iptables 사용하기

  • iptables의 사용법
    • 형식

        [-t 테이블 이름][action][체인 이름][match 규칙][-j 타깃]
      
    • iptables의 명령 형식 구성 항목

      구성 항목설명
      -t 테이블 이름- iptables의 기본 테이블인 filter, nat, mangle, raw 중 하나를 테이블 이름으로 지정한다.
      - 테이블의 기본 설정은 filter 테이블이다.
      - filter 테이블을 대상으로 작업시 -t 항목을 생략 가능
      action체인을 대상으로 수행할 명령을 지정한다.
      체인 이름- -t 테이블이름으로 지정한 테이블의 체인을 지정한다.
      - 체인 이름은 대소문자를 구분하므로 주의
      match 규칙패킷 처리를 위해 점검할 조건을 지정한다.
      -j 타깃규칙 만족 시 처리하는 방식을 지정한다.
    • 체인을 대상으로 한 주요 action 항목

      항목설명
      -N- —new-chain
      - 새로운 정책 체인을 만듦
      -X- --delete-chain
      - INPUT, OUTPUT, FORWARD를 제외한 비어 있는 정책 체인을 제거
      -L- --list
      - 현재 정책 체인 목록 표시
      -F- --flush
      - 지정한 체인에 설정된 모든 정책 삭제
      -C패킷 테스트
      -P- --policy
      - 체인의 기본 정책 설정
      -Z- --zero
      - 체인 내의 모든 규칙들의 패킷과 바이트 카운트를 0으로 설정
    • 체인 내부를 대상으로 한 주요 action 항목

      항목설명
      -A- --append
      - 새로운 정책을 가장 마지막에 추가/등록
      -I [체인][라인번호]- --insert
      - 지정한 라인번호에 추가
      -D [체인][라인번호]- --delete
      - 정책을 제거
      -F [체인][라인번호]- --replace
      - 정책 수정
    • 주요 match 규칙 항목

      match 규칙설명
      -s, —source출발지 IP, 도메인 설정
      -d, —destination목적지 IP, 도메인 설정
      !뒤에 따라오는 규칙 제오
      -p, —protocoltcp, udp, icmp 등 프토토콜 설정
      -i, —in-interface입력 네트워크 인터페이스 선택
      -o, —out-interface출력 네트워크 인터페이스 선택
      —sport- 소스 포트 설정 0
      - : 를 이용하여 포트 범위 설정 가능
      —dport- 타깃 포트 설정
      - : 를 이용하여 포트 범위 설정
      —tcp-flagsSYN, ACK, FIN, RST, URG, PSH, ALL, NONE 등 TCP flag를 지정
      —synTCP flag로 SYN만 가진 것을 지정
      —icmp-type- ICMP 타입 지정
      - echo-request(8), echo-reply(0), destination-unreachable(3) 등이 있음
      -m, —match특정 모듈, 규칙과 매치
      —state연결 상태와 매치
      —string응용 계층의 데이터 바이트 순서와 매치
    • 기타 부가 옵션 항목

      항목설명
      -n, —numeric출력 정보를 숫자로 표시
      -v, —verbose패킷, 바이트 수 등 부가 정보를 함께 표시
      —line-numbers정책 앞에 번호를 붙여 출력
    • -j 타깃에 사용할 수 있는 옵션 항목

      항목설명
      ACCEPT패킷 허가
      REJECT- 패킷을 거부하며 상대에게 응답 메시지 전송
      - TCP 일 경우 리셋(reset) 메시지 전송
      - UDP일 경우 Port Unreachable 메시지 전송
      DROP패킷을 거부하고 버림
      LOG- 패킷을 syslog에 전달하여 기록
      - 로그 파일 경로는 /var/log/message
      RETURN호출 체인 내에서 패킷 처리 계속 진행
  • iptables를 이용한 패킷 필터링 예제
    • INPUT 체인에서 소스 주소가 192.168.10.7이고 목적지 주소가 localhost인 패킷을 거부한다.

        $ iptables -A INPUT -s 192.168.10.7 -d localhost -j DROP
      
    • INPUT 체인에서 소스 주소가 192.168.10.7인 ICMP 패킷을 거부하며 대상 호스트에게 메시지를 전달한다.

        $ iptables -A INPUT -s 192.168.10.7 -p icmp -j REJECT
      
    • INPUT 체인에서 소스 주소가 192.168.10.0 대역이고 ICMP 패킷이 아닌 경우 모든 패킷을 허용한다.

        $ iptables -A INPUT -s 192.168.10.0/24 ! -p icmpt -j ACCEPT
      
    • www.youngin-test.com에 접속하는 것을 차단하기 위해 OUTPUT 체인에 관련 정책을 등록한다.

        $ iptables -A OUTPUT -p tcp -d www.youngjin-test.com --dport 80 -o etho0 -j DROP
      
    • INPUT 체인에 설정된 정책을 번호와 함께 출력한다.

        $ iptables -L INPUT --line-numbers
      
    • INPUT 체인의 3번째 정책을 제거한다.

        $ iptables -D INPUT 3
      
    • 기본 설정으로 들어오는 모든 패킷을 거부하게 되고 192.168.10.7에서 오는 패킷만 허용한다.

        $ iptables -P INPUT DROP
        $ iptaables -A INPUT -s 192.168.10.7 -j ACCEPT
      
    • 기본 설정으로 들어오는 모든 패킷을 허가하고 소스 주소가 192.168.10.7일 경우 거부한다.

        $ iptables -P INPUT ACCEPT
        $ iptables -A INPUT -s 192.168.10.7 -j DROP
      
    • 들어오는 패킷 중 TCP 포트 번호가 10~100번인 것을 거부하나 HTTP 서비스를 위한 80 포트는 허용한다. 중복된 정책이 있을 경우 먼저 등록된 정책이 허용된다.

        $ iptables -A INPUT -p tcp -dport 80 -j ACCEPT
        $ iptables -A INPUT -p tcp -dport 10:100 -j DROP
      
    • 초당 허용 접속 개수를 제한하여 TCP flooding 공격에 대응한다.

        $ iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 100s -j ACCEPT
      
  • iptables 설정 정책 저장과 자동 적용
    • 시스템 리부팅 시 iptables 설정 정책은 사라지게 되므로 파일로 저장하고 부팅과 함께 재설정해야 한다.
    • iptables-save 를 통해 정책을 파일로 저장한다.

        $ iptables-save
              
        $ iptables-save > firewall.sh # iptables-save > 파일명 형식
      
    • iptables-restore 를 통해 저장된 iptables 정책 파일을 읽어들여 적용한다.

        $ iptables-restore < firewall.sh
      
    • service iptables save 를 통해 iptables 정책을 /etc/sysconfig/iptables 에 저장한다.
      • iptables 서비스 시작 시 자동으로 읽어들여 적용된다.
        $ service iptables save
              
        $ systemctl stop iptables
              
        $ systemctl start iptables
      

iptables를 이용한 NAT 구성

  • NAT
    • Network Address Translation
    • 네트워크 주소를 변환한다.
    • 하나의 공인 IP를 다수의 호스트가 공유해서 사용할 수 있다.
    • 운영방식에 따라 여러 종류로 구분한다.

      기준세부 항목
      Network 구분- Normal NAT: 사설 IP를 공인 IP로 변환
      - Reverse NAT : 공인 IP를 사설 IP로 변환
      - Exclude NAT: NAT을 적용하지 않는 host/network를 지정
      - Redirect NAT: 특정 시스템으로 지정한 곳으로 포워딩
      IP 개수, 고정 여부- Dynamic NAT: 다수의 사설 IP와 다수의 공인 IP를 동적으로 매핑
      - Static NAT: 사설 IP와 공인 IP를 1:1로 고정하여 매핑
      주소 변경 여부- SNAT(Source NAT): 소스 IP 주소 변경
      - DNAT(Destination NAT): 목적지 IP 주소 변경
  • iptables의 NAT 지원 방식
    • iptables는 SNATDNAT을 지원한다.
    • iptables의 SNAT을 이용하면 공인 IP 주소 하나를 다수의 호스트가 공유하여 인터넷을 사용할 수 있다.
    • iptables의 DNAT을 이용하면 하나의 공인 IP로 여러 개의 서버에 접속하도록 구성한다.
  • iptables를 이용한 SNAT 구성
    • SNAT소스 IP 주소를 변경하는 것으로 외부 서비스에 연결하여 통신할 때 사설 IP를 공인 IP로 변경한다.
    • NAT 테이블의 POSTROUTING 체인에 정책을 설정한다.
    • SNAT 설정 예제

      iptables SNAT 설정 예제설명
      $ iptables -t nat -A POSTROUTING -o etho0 -j SNAT —to 222.235.10.7- -t nat: nat 테이블 선택
      - -A POSTROUTING: POSTROUTING 체인에 정책 설정
      - -o eth0: etho0 네트워크 인터페이스를 통해 나가는 패킷을 대상으로 함 - -j SNAT: SNAT으로 설정
      - —to 222.235.10.4: SNAT이므로 소스 주소를 222.234.10.4로 변경
      $ iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to 222.235.10.7 -222.234.10.25IP 대역(범위)를 지정하여 소스 주소를 변경
      $ iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to MASQUERADEMASQUERADE는 유동 IP 주소로 소스 주소를 변경
  • iptables를 이용한 DNAT 구성
    • DNAT목적지 IP 주소를 변경하는 것으로 NAT 테이블의 PREROUTING 체인에 정책을 설정한다.
    • DNAT 설정 예제

      iptables DNAT 설정 예제설명
      $ iptables -t nat -A PREROUTING -p tcp -d 222.235.10.7 —dport 80 -j DNAT —to 192.168.10.7:80- -t nat : nat 테이블 선택
      - -A PREROUTING : PREROUTING 체인에 정책을 설정
      - -p tcp : TCP 프로토콜을 대상으로 함
      - -d 222.235.10.7 : 목적지 주소가 22.235.10.7인 경우 점검
      - --dport 80 : 목적지 포트가 80인 경우 점검
      - -j DNAT : DNAT으로 설정
      - --to 192.168.10.7:80: 목적지 주소를 192.168.10.7로, 포트를 80으로 변경하여 연결
      $ iptables -t nat -A PREROUTING -i eth1 -p tcp —dport 80 -j REDIRECT —to-port 8080- 웹 브라우저의 프록시 옵션을 설정하지 않고, 네트워크 상에서 투명하게 동작하는 투명 프록시 설정
      - -i eth1 : eth1 네트워크 인터페이스로 수신되는 모든 ㅐ킷을 대상으로 함
    • 리눅스에서 NAT을 사용하려면 /proc/sys/net/ipv4/ip_forward 의 값이 1로 설정되어야 한다.

        $ cat /proc/sys/net/ipv4/ip_forward
        0
              
        $ echo 1 > /proc/sys/net/ipv4/ip_forward
              
        $ cat /proc/sys/net/ipv4/ip_forward
        1
      

☑️ firewalld 사용하기

firewalld

  • 개념 및 특징
    • 최근 리눅스에서 방화벽 규칙을 관리하는 데몬
    • CentOS 6에서 기본 사용되던 iptables를 대신한다.
    • 동적 관리 방식을 지원하여 firewalld 데몬을 다시 실행하지 않고 방화벽 규칙을 변경할 수 있다.
    • D-Bus(Desktop Bus) 인터페이스를 제공하여 다른 서비스 및 응용 프로그램에서 방화벽 설정을 관리할 수 있다.
      • 같은 시스템에서 실행중인 프로그램 간 통신이 가능하도록 IPC(Inter-Process Communication), RPC(Remote Procedure Call) 메커니즘을 제공한다.
    • GUI(Graphic User Interface) 환경에서는 firewall-config를 이용하여 편리하고 직관적으로 방화벽을 설정한다.
    • CUI(Character/Console User Interface) 환경에서는 firewall-cmd를 이용하여 빠르게 방화벽을 설정한다.

        $ firewall-cmd --version
      
    • 런타임 방식은 firewalld를 재실행하거나 시스템 리부팅 시 설정한 규칙이 사라진다.
    • 영구적 방식은 firewalld를 재실행하거나 시스템 리부팅 시 설장한 규칙이 유지되며, --permanent 옵션을 사용한다.
    • 타임아웃(timeout) 방식은 특정 시간동안만 설정된 규칙이 유지되며, --timeout 옵션을 사용한다.
  • firewalld의 영역과 서비스
    • firewalld는 네트워크 연결의 신뢰도에 따라 영역(zone)을 구분하여 사용하므로 방화벽 규칙(rule)을 효율적으로 관리할 수 있다.

        $ ls -l /user/lib/firewalid/zones/
      
    • firewalld의 주요 영역(zone)
      • 기본적으로 나가는 패킷은 허용(accept)한다.
      영역(zone)설명
      public- ssh, dhcpv6-client를 제외한 들어오는 패킷을 거부(reject)한다.
      - 거부 방식은 상대방에게 ICMP 응답을 보낸다.
      dmzssh를 제외한 들어오는 패킷을 거부한다.
      drop- 들어오는 패킷을 폐기(drop)한다.
      - 폐기된 방식은 별도의 응답을 보내지않는다.
      trusted들어오는 패킷을 허용(accept)한다.
    • firewalld는 프로토콜, 포트, 필요한 모듈 등에 대한 정보를 서비스(service)로 정의하여 사용한다.
      • 특정 서비스에 대한 설정 변경 시 관련 서비스 파일(.xml)을 편집한 후 firewall-cmd —reload 를 실행한다.
        $ ls -l /user/lib/firewalld/services/
              
        $ cat /usr/lib/firewalld/services/http.xml
      
  • firewall-cmd의 주요 예제
    • firewall-cmd —state 을 통해 방화벽 실행 상태를 확인한다.

        $ firewall-cmd --state
        running
      
    • firewall-cmd —reload 을 통해 방화벽 설정을 다시 로드한다.
      • —permanent 옵션 미지정 시 설정한 규칙은 모두 사라진다.
        $ firewall-cmd --reload
        success
      
    • firewall-cmd —get-zones 을 통해 존(zone) 목록을 출력한다.

        $ firewall-cmd --get-zones 
      
    • 기본 존을 출력한다.

        $ firewall-cmd --get-default-zone
      
    • 활성화된 존을 출력한다.

        $ firewall-cmd --get-active-zones
      
    • HTTP 서비스를 추가한다.

        $ firewall-cmd --add-service=http --add-service=https
      
    • TCP/21 포트를 추가한다.

        $ firewall-cmd --add-port=21/tcp
      
    • public zone의 사용 가능한 서비스, 포트 목록을 출력한다.

        $ firewall-cmd --zone=public --list-all
      
    • —zone 옵션을 지정하지 않으면 기본(default) 존을 대상으로 하며, TCP/21 포트를 제거한다.

        $ firewall-cmd --remove-port=21/tcp
        success
      
    • TCP/8080~TCP/8090 포트를 추가한다.

        $ firewall-cmd --add-port=8080-8090/tcp
        success
      
    • FTP 서비스를 영구적으로 추가한다.

        $ firewall-cmd --permanent --add-service=ftp
        success
      
    • 기본 존을 block으로 변경한다.

        $ firewall-cmd --set-default-zone=block
        success 
              
        $ firewall-cmd --get-default-zone
        block
      
    • TCP/80 포트로 들어온 패킷을 8080포트로 포워딩한다.

        $ firewall-cmd --add-forwad-port=port=80:proto=tcp:toport=8080
        success
      
    • —permanent 옵션을 이용하였으므로 firewall-cmd —reload 실행 시에도 내용이 유지된다. 또한 ICMP Echo-Request에 응답하지 않도록 한다.

        $ firewall-cmd --permanent --add-icmp-block=echo-request
        Success
              
        $ firewall-cmd --reload
        Success
              
        $ firewald-cmd --list-all
      

© 2021. All rights reserved.

yaejinkong의 블로그