IT Knowledge/Security/images/25-방화벽과-ips-ids-venn.svg

방화벽과 IPS/IDS (Firewall & IPS/IDS)

네트워크 보안 시스템인 방화벽, IDS, IPS를 이해하고 구성합니다.

📌 학습 목표

  • 방화벽 기본 원리 이해
  • 방화벽 규칙 설정 방법 습득
  • IDS와 IPS 차이점 이해
  • 방화벽/IDS/IPS 구성 능력 습득

1. 방화벽 (Firewall)

정의

네트워크 트래픽을 모니터링하고 제어하는 보안 시스템입니다.

방화벽 유형

1. 패킷 필터링 방화벽 (Packet Filtering)

작동 원리:
인터페이스 → 헤더 검증 → 규칙 매칭 → 통합/거부

검증 항목:
- 소스 IP, 목적지 IP
- 소스 포트, 목적지 포트
- 프로토콜 (TCP/UDP/ICMP)
- 플래그 (SYN, ACK, FIN)

장점:

  • 빠름
  • 구현 간단
  • 낮은 비용

단점:

  • 상태 정보 없음
  • 취약점 (IP 스푸핑, 포트 스캔 우회 가능)

2. 상태 검사 방화벽 (Stateful Inspection)

작동 원리:
패킷 → 상태 테이블 점검 → 규칙 매칭 → 통합/거부

상태 테이블:
- 연결 상태 추적
- SYN, SYN-ACK, ACK 추적
- 세션 타임아웃 관리

장점:

  • 연결 상태 인지
  • IP 스푸핑 방지
  • 더 안전

단점:

  • 더 많은 리소스 소모

3. 애플리케이션 게이트웨이 (Application Gateway)

작동 원리:
클라이언트 → 프락시/게이트웨이 → 내부 서버
               (애플리케이션 레벨 검증)

검증 내용:

  • HTTP 메소드
  • URL 패턴
  • 파일 유형
  • 쿠키, 헤더

장점:

  • 애플리케이션 레벨 보안
  • 캐싱 가능

단점:

  • 느림
  • 애플리케이션별 구현 필요

방화벽 규칙 구조

규칙 매칭 순서

규칙 1 → 매칭? → 통합/거부 (종료)
       ↓
    아니오
       ↓
규칙 2 → 매칭? → 통합/거부 (종료)
       ↓
    아니오
       ↓
...
       ↓
기본 정책 (Default Policy)

규칙 구성 요소

요소설명예시
Source소스 IP 주소192.168.1.0/24
Destination목적지 IP 주소10.0.0.1
Source Port소스 포트any
Destination Port목적지 포트80, 443
Protocol프로토콜tcp, udp, icmp
Action동작accept, drop, reject
Log로깅 여부yes, no

iptables 예시

# 기본 정책: 거부
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
 
# 루프백 허용
iptables -A INPUT -i lo -j ACCEPT
 
# 확립된 연결 허용
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# SSH 허용 (특정 IP)
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
 
# HTTP 허용
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 
# HTTPS 허용
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
# ICMP 허용 (Ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
 
# 거부된 패킷 로깅
iptables -A INPUT -j LOG --log-prefix "[FIREWALL DROP] "
iptables -A INPUT -j DROP

nftables 예시 (현대적 대안)

# 테이블 생성
nft add table inet filter
 
# 체인 생성
nft add chain inet filter input { type filter hook input priority 0 \; }
 
# 루프백 허용
nft add rule inet filter input iif lo accept
 
# 확립된 연결 허용
nft add rule inet filter input ct state established,related accept
 
# SSH 허용
nft add rule inet filter input tcp dport 22 accept
 
# HTTP/HTTPS 허용
nft add rule inet filter input tcp dport {80,443} accept
 
# ICMP 허용
nft add rule inet filter input icmp type echo-request accept
 
# 거부
nft add rule inet filter input drop

Cisco ASA 방화벽

! 관리자 계정
username admin password Admin123 privilege 15
 
! 인터페이스 설정
interface GigabitEthernet0/0
 nameif outside
 security-level 0
 ip address dhcp
exit
 
interface GigabitEthernet0/1
 nameif inside
 security-level 100
 ip address 192.168.1.1 255.255.255.0
exit
 
! NAT 설정
nat (inside,outside) after-auto source dynamic any interface
 
! 규칙 설정
access-list OUTSIDE_IN extended permit tcp any host 203.0.113.1 eq 80
access-list OUTSIDE_IN extended permit tcp any host 203.0.113.1 eq 443
access-group OUTSIDE_IN in interface outside
 
! SSH 허용
ssh 192.168.1.0 255.255.255.0 inside

2. IDS (Intrusion Detection System)

정의

네트워크 트래픽을 모니터링하여 공격을 탐지하는 시스템입니다.

IDS 유형

1. 네트워크 IDS (NIDS)

  • 위치: 네트워크 경로상 (라우터/스위치 포트)
  • 방식: 패킷 캡처 및 분석
  • 예시: Snort, Suricata

2. 호스트 IDS (HIDS)

  • 위치: 개별 호스트
  • 방식: 시스템 로그/파일 시스템 모니터링
  • 예시: OSSEC, Wazuh

탐지 방식

1. 시그너처 기반 (Signature-Based)

작동 원리:
알려진 공격 패턴(시그너처)와 비교
   ↓
매칭 시 경보 발생

장점: 빠른 탐지
단점: 새로운 공격 탐지 불가

시그너처 예시 (Snort):

alert tcp any any -> any 80 (msg:"HTTP Attempt"; content:"GET"; sid:1000001;)

2. 이상 탐지 기반 (Anomaly-Based)

작동 원리:
정상 행동 학습 → 베이스라인 설정
   ↓
이상 탐지 → 경보 발생

장점: 새로운 공격 탐지 가능
단점: 오탐지(가짐 경보) 높음

Snort 구성

# Snort 설치
sudo apt-get install snort
 
# 인터페이스 설정
export INTERFACE=eth0
 
# Snort 실행 (네트워크 모드)
sudo snort -i $INTERFACE -A console -q -c /etc/snort/snort.conf
 
# Snort 규칙 예시
alert icmp any any -> any any (msg:"ICMP Ping Detected"; itype:8; sid:1000001;)
alert tcp any any -> any 22 (msg:"SSH Connection Attempt"; sid:1000002;)

Suricata 구성

# Suricata 설치
sudo apt-get install suricata
 
# 인터페이스 설정
suricata -i eth0 -c /etc/suricata/suricata.yaml
 
# 규칙 파일
echo 'alert http any any -> any 80 (msg:"HTTP Attack"; http.uri; content:"attack"; sid:1;)' >> /etc/suricata/rules/custom.rules
 
# Suricata 재시작
sudo systemctl restart suricata

3. IPS (Intrusion Prevention System)

정의

IDS의 탐지 기능에 공격 방지(자동 차단) 기능을 추가한 시스템입니다.

IDS vs IPS 비교

항목IDSIPS
작동탐지만탐지 + 차단
위차네트워크/호스트네트워크/호스트
배치inline/mirroredinline
성능 영향낮음높음 (트래픽 검증)

Suricata IPS 모드

# IPS 모드 설정
suricata -i eth0 --set ips-mode=inline
 
# Suricata 설정 파일 수정
cat >> /etc/suricata/suricata.yaml <<EOF
# IPS 모드 활성화
ips:
  mode: inline
  enable: true
EOF
 
# 규칙에 drop 동작 추가
echo 'drop tcp any any -> any 22 (msg:"Block SSH"; sid:1;)' >> /etc/suricata/rules/custom.rules
 
# Suricata 재시작
sudo systemctl restart suricata

Snort IPS (Snort Inline)

# DAQ (Data Acquisition) 라이브러리 설치
sudo apt-get install libdaq-dev
 
# Snort IPS 모드 실행
sudo snort -Q -i eth0 -A console -c /etc/snort/snort.conf
 
# IPS 규칙
drop tcp any any -> any 22 (msg:"Drop SSH"; sid:2;)

4. 방화벽/IDS/IPS 통합 구성

네트워크 아키텍처

┌─────────────────────────────────────────────────┐
│            인터넷 (ISP)                   │
└────────────────┬────────────────────────────┘
                 │
        ┌────────┴────────┐
        │  방화벽 (FW1)  │
        └────────┬────────┘
                 │
        ┌────────┴────────┐
        │   DMZ 네트워크  │
        │  [Web Server]   │
        └────────┬────────┘
                 │
        ┌────────┴────────┐
        │  스위치 (S1)   │
        └────┬─────┬─────┘
             │     │
        ┌────┴─┐ ┌──┴───┐
        │ HIDS │ │ IPS  │
        │(NIDS)│ │(NIDS)│
        └──────┘ └──────┘
             │     │
        ┌────┴─┐ ┌──┴───┐
        │ PC1 │ │ PC2  │
        └──────┘ └──────┘

통합 구성 예시

# 방화벽: iptables
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
# IPS: Suricata (inline 모드)
suricata -i eth0 --set ips-mode=inline
 
# HIDS: OSSEC
sudo apt-get install ossec-hids-server

5. 모니터링 및 로깅

로그 수집

# iptables 로그
iptables -A INPUT -j LOG --log-prefix "[FIREWALL] "
tail -f /var/log/kern.log | grep FIREWALL
 
# Suricata 로그
tail -f /var/log/suricata/fast.log
 
# OSSEC 로그
tail -f /var/ossec/logs/ossec.log

그라파나 대시보드 (시각화)

OSSEC/Suricata → Elasticsearch → Kibana
           ↓
       Logstash

6. 방화벽/IPS/IDS 구성 사례

사례 1: 웹 서버 보호

# 방화벽: HTTP/HTTPS만 허용
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP
 
# IPS: 웹 공격 탐지
alert http any any -> any 80 (msg:"SQL Injection"; pcre:"union.*select"; sid:3;)
alert http any any -> any 80 (msg:"XSS Attack"; content:"<script>"; sid:4;)

사례 2: 내부 네트워크 보호

# 방화벽: 내부 → 외부 통합, 외부 → 내부 거부
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.1.0/24 -j DROP
 
# HIDS: 파일 무결성 검증
# OSSEC에서 파일 무결성 규칙 설정

🎯 실습 과제

1. iptables 방화벽 구성

# 실습 1: 기본 방화벽 구성
# 1. SSH 허용 (특정 IP)
# 2. HTTP/HTTPS 허용
# 3. 나머지 거부
 
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP

2. Snort IDS 구성

# 실습 2: Snort NIDS 구성
# 1. Snort 설치
# 2. ICMP 탐지 규칙 추가
# 3. Ping 테스트 후 로그 확인
 
echo 'alert icmp any any -> any any (msg:"ICMP Detected"; itype:8; sid:1;)' > /etc/snort/rules/local.rules
sudo snort -i eth0 -A console -c /etc/snort/snort.conf
 
# 다른 터미널에서
ping <snort_host_ip>

3. Suricata IPS 구성

# 실습 3: Suricata IPS 구성
# 1. Suricata 설치
# 2. IPS 모드 설정
# 3. SSH 차단 규칙 추가
# 4. SSH 접속 시도
 
suricata -i eth0 --set ips-mode=inline
echo 'drop tcp any any -> any 22 (msg:"Block SSH"; sid:1;)' >> /etc/suricata/rules/custom.rules

✅ 학습 체크리스트

  • 방화벽 유형 식별
  • iptables 규칙 설정
  • 상태 검사 방화벽 이해
  • IDS와 IPS 차이점 이해
  • 시그너처/이상 탐지 방식 이해
  • Snort/Suricata 구성
  • 방화벽/IDS/IPS 통합 구성

🔗 관련 노트

📚 참고 자료


다음 학습: VPN 고급 설계