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 DROPnftables 예시 (현대적 대안)
# 테이블 생성
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 dropCisco 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 inside2. 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 suricata3. IPS (Intrusion Prevention System)
정의
IDS의 탐지 기능에 공격 방지(자동 차단) 기능을 추가한 시스템입니다.
IDS vs IPS 비교
| 항목 | IDS | IPS |
|---|---|---|
| 작동 | 탐지만 | 탐지 + 차단 |
| 위차 | 네트워크/호스트 | 네트워크/호스트 |
| 배치 | inline/mirrored | inline |
| 성능 영향 | 낮음 | 높음 (트래픽 검증) |
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 suricataSnort 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-server5. 모니터링 및 로깅
로그 수집
# 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 DROP2. 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 고급 설계