📄 2025.12.02 (Day 27) [TCP/IP 네트워크 종합: 애플리케이션 계층 & 네트워크 보안 (방화벽, IDS/IPS)]

1. 핵심 개념 정리 (Concepts & Theory)

#핵심 개념간결한 설명
1애플리케이션 계층 (Application Layer)OSI 7계층으로 최종 사용자 서비스를 제공합니다. HTTP, HTTPS, FTP, SMTP, DNS, DHCP, SSH, Telnet 등의 프로토콜이 동작하며, 포트 번호를 통해 서비스를 식별합니다. 사용자와 직접 상호작용하는 계층입니다.
2HTTP/HTTPSHTTP(HyperText Transfer Protocol)는 웹 브라우저와 웹 서버 간 통신 프로토콜입니다. 80번 포트 사용. 평문 전송으로 도청/변조 취약. HTTPS는 SSL/TLS로 암호화한 HTTP로 443번 포트 사용. GET, POST, PUT, DELETE 등 메서드로 요청합니다.
3DNS (Domain Name System)도메인 이름을 IP 주소로 변환하는 시스템입니다. 53번 포트(UDP 주로 사용, TCP는 Zone Transfer). 계층적 구조: 루트 DNS → TLD DNS → 권한 있는 DNS → 재귀 DNS. A 레코드(IPv4), AAAA 레코드(IPv6), MX 레코드(메일 서버), CNAME(별칭) 등의 레코드 타입이 존재합니다.
4DHCP (Dynamic Host Configuration Protocol)IP 주소를 자동으로 할당하는 프로토콜입니다. 67번(서버), 68번(클라이언트) 포트 사용. DORA 과정: (1) Discover (클라이언트 브로드캐스트), (2) Offer (서버가 IP 제안), (3) Request (클라이언트 IP 요청), (4) Acknowledge (서버 확인).
5방화벽 (Firewall)네트워크 트래픽을 정책(Rule) 기반으로 허용/차단하는 보안 장비입니다. 패킷 필터링 방화벽(L3/L4: IP/포트 기반), 상태 기반 방화벽(Stateful: 세션 추적), 애플리케이션 방화벽(L7: 프로토콜 분석), 차세대 방화벽(NGFW: IPS, 애플리케이션 인식, 사용자 인증 통합)으로 발전했습니다.
6IDS/IPS (Intrusion Detection/Prevention System)IDS는 침입을 탐지하여 알림만 제공하고, IPS는 침입을 탐지 + 차단합니다. 시그니처 기반(알려진 공격 패턴 매칭)과 이상 징후 기반(정상 행위에서 벗어난 패턴 탐지)으로 나뉩니다. Suricata, Snort가 대표적인 오픈소스 IDS/IPS입니다.

2. 실습 코드 & 응용 (Practice & Code Walkthrough)

(A) 애플리케이션 계층 프로토콜 실습

HTTP/HTTPS 요청 분석 (Wireshark):

#GHUAACW#CSKEWEosccoileeniHTseccnrHirycrTtreeneTevre(T/:-ppesTneEysPAttchPtrxphHeg:-taSctaTxeLirHHherTantaok(eeadkPPmtennllnr(/p:xg:llgAi1ltu,(ooepv.eMak:,p:Wa)1.hge(litczteehTCitreoim:pt)Leclemll-tSrassKleaptt.heanl.,Hiihay/-irafoar5Uveninnk.Seqdcd0usaDsehtahs)aetatkakee).typ)e==1(ClientHello)

DNS 쿼리 분석:

# Linux에서 DNS 쿼리
nslookup google.com
dig google.com
dig google.com +short        # IP만 출력
dig google.com ANY           # 모든 레코드
dig google.com MX            # 메일 서버
dig @8.8.8.8 google.com      # 특정 DNS 서버 지정

# Windows
nslookup google.com
nslookup google.com 8.8.8.8  # 특정 DNS 서버 지정

# Wireshark에서 DNS 패킷 분석
Domain Name System (query)
    Transaction ID: 0x1234
    Flags: 0x0100 (Standard query)
    Questions: 1
    Answer RRs: 0
    Queries:
        google.com: type A, class IN

Domain Name System (response)
    Transaction ID: 0x1234
    Flags: 0x8180 (Standard query response, No error)
    Questions: 1
    Answer RRs: 1
    Answers:
        google.com: type A, class IN, addr 142.250.185.46

DHCP DORA 과정 (Wireshark):

패킷 1: DHCP Discover Bootstrap Protocol (Discover) Client MAC address: 00:0c:29:3a:2f:1a DHCP: Discover Option: (53) DHCP Message Type = Discover

패킷 2: DHCP Offer Bootstrap Protocol (Offer) Your (client) IP address: 192.168.1.100 Next server IP address: 192.168.1.1 DHCP: Offer Option: (53) DHCP Message Type = Offer Option: (54) DHCP Server Identifier = 192.168.1.1 Option: (51) IP Address Lease Time = 86400 sec

패킷 3: DHCP Request Bootstrap Protocol (Request) DHCP: Request Option: (53) DHCP Message Type = Request Option: (50) Requested IP Address = 192.168.1.100 Option: (54) DHCP Server Identifier = 192.168.1.1

패킷 4: DHCP Acknowledge Bootstrap Protocol (ACK) Your (client) IP address: 192.168.1.100 DHCP: ACK Option: (53) DHCP Message Type = ACK Option: (51) IP Address Lease Time = 86400 sec Option: (1) Subnet Mask = 255.255.255.0 Option: (3) Router = 192.168.1.1 Option: (6) Domain Name Server = 8.8.8.8, 8.8.4.4

(B) Untangle 방화벽 실습

네트워크 토폴로지:

[로컬 PC] ←(NAT 포트포워딩: 3030→80)→ [Untangle Firewall: WAN=10.0.2.10, Internal=192.168.2.1, DMZ=192.168.3.1] ←→ [Internal Server: 192.168.2.80] / [Web Server: 192.168.3.90]

방화벽 룰 설정 실습:

1. Server → Web Server HTTP 차단:

Description: Block HTTP from Server to Web Server Source Address: 192.168.2.80 Destination Address: 192.168.3.90 Destination Port: 80 Protocol: TCP Action: Block Flag: Enabled

결과: Server에서 http://192.168.3.90 접속 → 연결 시간 초과

2. Server → Web Server SSH 허용, 나머지 차단:

룰 1 (우선순위 높음): Description: Allow SSH from Server to Web Server Source Address: 192.168.2.80 Destination Address: 192.168.3.90 Destination Port: 22 Protocol: TCP Action: Pass Flag: Enabled

룰 2: Description: Block all services from Server to Web Server Source Address: 192.168.2.80 Destination Address: 192.168.3.90 Protocol: Any Action: Block Flag: Enabled

결과: Server에서 ssh ubuntu@192.168.3.90 → 접속 성공 Server에서 http://192.168.3.90 → 차단

3. 외부 → Web Server HTTP 접속 (포트 포워딩):

VirtualBox NAT 포트 포워딩 설정

Name: http_port_forward Protocol: TCP Host Port: 3030 Guest IP: 10.0.2.10 (방화벽 WAN IP) Guest Port: 80

Untangle 포트 포워딩 룰

Enable: Checked Description: HTTP port forward to Web Server Protocol: TCP Destination Port: 80 Source Interface: External New Destination: 192.168.3.90 (Web Server IP) New Port: 80

방화벽 룰 (외부 → Web Server HTTP 허용)

Description: Allow external HTTP to Web Server Source Address: 0.0.0.0/0 (Any) Destination Address: 192.168.3.90 Destination Port: 80 Protocol: TCP Action: Pass Flag: Enabled

결과: 로컬 PC 브라우저에서 http://127.0.0.1:3030 → Web Server 접속 성공

4. Outbound Traffic 허용:

Description: Allow outbound traffic Source Interface: Internal, Interface3 (DMZ) Destination Interface: External Protocol: Any Action: Pass Flag: Enabled

결과: Server/Web Server에서 외부 인터넷(www.wikipedia.org 등) 접속 성공

(C) Suricata IDS/IPS 실습

Suricata 설치 및 설정 (Web Server):

# Suricata 설치
sudo apt update
sudo apt install -y suricata

# 버전 확인
suricata -V

# 기본 룰셋 다운로드 (Emerging Threats Open)
sudo suricata-update

# 설정 파일 편집
sudo vi /etc/suricata/suricata.yaml

# 네트워크 인터페이스 지정
af-packet:
  - interface: enp0s3   # 모니터링할 인터페이스

# 사용자 정의 룰 파일 추가
rule-files:
  - suricata.rules      # 기본 룰셋
  - local.rules         # 사용자 정의 룰

# Suricata 재시작
sudo systemctl restart suricata
sudo systemctl status suricata

Suricata 룰 문법:

Action Protocol Source_IP Source_Port Direction Dest_IP Dest_Port (Rule_Options)

Action:

  • alert: 탐지 시 로그 기록
  • drop: 패킷 차단 (IPS 모드)
  • reject: 패킷 차단 + RST 전송
  • pass: 허용

Direction:

  • -> : 단방향
  • <> : 양방향

Rule_Options:

  • msg: “경고 메시지”; # 로그에 기록될 메시지
  • sid: 100001; # 룰 고유 ID
  • rev: 1; # 룰 버전
  • classtype: trojan-activity; # 위협 분류
  • content: “GET /admin”; # 페이로드 검색
  • nocase; # 대소문자 구분 안 함
  • flow: to_server, established; # 트래픽 방향 및 세션 상태

실습 룰 작성:

1. ICMP 연결 시도 탐지:

sudo vi /etc/suricata/rules/local.rules

alert icmp any any -> $HOME_NET any (msg:"ICMP connecting test"; sid:100001; rev:1;)

sudo systemctl reload suricata

# 다른 터미널에서 로그 실시간 모니터링
sudo tail -f /var/log/suricata/fast.log

# Server에서 Web Server로 ping
ping 192.168.3.90

# 로그 확인
# [**] [1:100001:1] ICMP connecting test [**] [Priority: 3] {ICMP} 192.168.2.80:8 -> 192.168.3.90:0

2. 특정 도메인 접속 탐지 (tistory.com):

sudo vi /etc/suricata/rules/local.rules

alert tcp any any -> any 80 (msg:"tistory.com access detected"; content:"GET /"; content:"Host: "; content:"tistory.com"; nocase; sid:100002; rev:1;)

sudo systemctl reload suricata

# Firefox에서 http://tistory.com 접속

# 로그 확인
# [**] [1:100002:1] tistory.com access detected [**] [Priority: 3] {TCP} 192.168.3.90:59068 -> 211.183.210.24:80

3. SQL Injection 공격 탐지:

alert tcp any any -> any 80 (msg:"Possible SQL Injection attack"; content:"' OR '1'='1"; nocase; flow:to_server, established; classtype:web-application-attack; sid:100003; rev:1;)

alert tcp any any -> any 80 (msg:"SQL Injection - UNION SELECT"; content:"UNION"; nocase; content:"SELECT"; nocase; distance:0; within:20; flow:to_server, established; classtype:web-application-attack; sid:100004; rev:1;)

4. Port Scanning 탐지:

alert tcp any any -> $HOME_NET any (msg:"Possible Port Scan detected"; flags:S; threshold:type both, track by_src, count 20, seconds 10; classtype:attempted-recon; sid:100005; rev:1;)

# 짧은 시간(10초) 내 동일 출발지에서 20개 이상 SYN 패킷 전송 시 탐지

5. C&C 통신 탐지 (DGA 도메인):

alert dns any any -> any 53 (msg:"Possible DGA domain - Random string pattern"; dns_query; content:".com"; pcre:"/[a-z]{10,}\.com/i"; threshold:type both, track by_src, count 5, seconds 60; classtype:trojan-activity; sid:100006; rev:1;)

# 10글자 이상의 무작위 문자열 도메인을 1분 내 5회 이상 조회 시 의심

Suricata 로그 분석:

# 실시간 로그 (간단)
sudo tail -f /var/log/suricata/fast.log

# 상세 로그 (EVE JSON)
sudo tail -f /var/log/suricata/eve.json | jq '.'

# 특정 SID만 필터링
sudo grep "sid:100002" /var/log/suricata/fast.log

# 특정 IP에서 발생한 이벤트
sudo grep "192.168.2.80" /var/log/suricata/fast.log

3. 실무/보안 관점 분석 (Insight & Scenario Mapping)

분야적용 시나리오
SOC / 관제계층별 방어 전략: 방화벽(L3/L4)으로 불필요한 포트 차단 → IPS(L7)로 허용된 포트 내 악성 트래픽 탐지 → WAF로 웹 애플리케이션 공격 차단 → SIEM에서 로그 통합 분석. 실시간 모니터링: Suricata/Snort 이벤트를 SIEM(Splunk, ELK)으로 전송하여 대시보드 구성. 임계값 기반 알림(예: 1분 내 동일 출발지에서 100개 이상 차단 이벤트 → 자동 IP 차단). 오탐 튜닝: 정상 트래픽이 오탐되면 룰 수정 또는 화이트리스트 추가. 예: 내부 개발 서버의 정상적인 SQL 쿼리가 SQL Injection으로 오탐 → suppress 사용하여 해당 IP 예외 처리.
CERT / 사고 대응침해 사고 분석: 방화벽/IPS 로그에서 공격 타임라인 재구성. (1) 포트 스캔 로그 → (2) 취약점 익스플로잇 시도 → (3) 초기 침투 성공 → (4) 권한 상승 → (5) C&C 통신 → (6) 데이터 유출. 차단 규칙 긴급 배포: 공격 패턴 식별 후 Suricata 룰 긴급 작성 및 배포. 예: 특정 악성 도메인으로의 DNS 쿼리 차단 alert dns any any -> any 53 (msg:"Block malicious C&C"; dns_query; content:"evil.com"; nocase; drop; sid:999001; rev:1;). 포렌식 패킷 분석: PCAP 파일에서 Wireshark와 Suricata를 결합하여 공격 페이로드 추출.
네트워크 운영방화벽 정책 최적화: 불필요한 룰 제거, 룰 순서 최적화(자주 매칭되는 룰을 상단으로), 로그 레벨 조정. DMZ 설계: 공개 서비스(웹, 메일)는 DMZ에 배치하고, 내부 네트워크와 분리. 방화벽 룰: (1) 외부 → DMZ: 필요 포트만 허용, (2) DMZ → 내부: 최소 권한(DB 쿼리 포트만), (3) 내부 → DMZ: 관리 포트(SSH)만. IDS/IPS 성능 튜닝: 네트워크 대역폭이 높으면 패킷 드롭 발생 가능. 불필요한 룰 비활성화, 하드웨어 성능 향상(멀티코어, NIC 오프로드), AF_PACKET 모드 사용.

4. 개인 인사이트 및 다음 단계 (Reflection & Next Steps)

  • 배운 점/느낀 점:

    • 계층별 방어의 중요성: 방화벽만으로는 부족하고, IDS/IPS, WAF, SIEM을 결합한 **다층 방어(Defense in Depth)**가 필수임을 깨달았습니다. 방화벽은 “문지기"이고, IPS는 “내부 경비원"인 셈입니다.
    • 룰 작성의 예술: Suricata 룰을 직접 작성하며, 시그니처 기반 탐지의 강력함과 한계를 동시에 느꼈습니다. 너무 엄격하면 오탐, 너무 느슨하면 미탐. 정교한 룰 작성과 지속적인 튜닝이 핵심입니다.
    • 방화벽 룰 순서의 중요성: First Match 원칙 때문에 룰 순서가 틀리면 의도와 다르게 동작합니다. “허용 → 차단” 순서를 명확히 하고, 가장 구체적인 룰을 상단에 배치해야 합니다.
    • 포트 포워딩의 위험성: 내부 서버를 외부에 노출할 때 단순 포트 포워딩은 공격 표면을 넓힙니다. Reverse Proxy나 VPN을 통한 접근이 안전합니다.
    • DNS의 중요성: 모든 통신이 DNS로 시작되므로, DNS 로그 분석으로 C&C 통신, DGA 멀웨어, DNS Tunneling을 조기 탐지할 수 있습니다.
  • 심화 방향:

    • SIEM 통합: Suricata 로그를 ELK Stack(Elasticsearch, Logstash, Kibana)으로 전송하여 대시보드 구축. 실시간 알림 설정 및 통계 분석.
    • WAF 실습: ModSecurity를 설치하여 웹 애플리케이션 방화벽 룰(OWASP CRS) 적용. SQL Injection, XSS 차단 실습.
    • Zeek(Bro) 학습: 네트워크 트래픽을 메타데이터로 변환하여 분석하는 도구. Suricata와 결합하여 더 깊은 네트워크 가시성 확보.
    • Threat Hunting: MITRE ATT&CK 프레임워크 기반으로 능동적 위협 사냥. 특정 TTP(Tactics, Techniques, Procedures)를 Suricata 룰로 구현.
    • 고급 공격 시나리오 재현: Metasploit으로 취약점 익스플로잇 → Suricata로 탐지 → 룰 최적화. 실제 공격-방어 사이클 경험.

5. 추가 참고사항 (Quick Reference)

주요 애플리케이션 계층 프로토콜 & 포트

프로토콜포트설명보안 고려사항
HTTP80웹 브라우징 (평문)평문 전송, 중간자 공격 취약. HTTPS 사용 필수
HTTPS443암호화된 웹 브라우징 (SSL/TLS)인증서 검증, TLS 1.2+ 사용, 약한 암호화 금지
FTP20, 21파일 전송 (평문)평문 전송, 익명 로그인. SFTP/FTPS 사용 권장
SFTP22SSH 기반 암호화 파일 전송SSH 키 관리, 강력한 비밀번호
SSH22원격 접속 (암호화)키 기반 인증, root 직접 로그인 금지, 포트 변경
Telnet23원격 접속 (평문)절대 사용 금지, SSH로 대체
SMTP25메일 전송SMTP Relay 방지, SPF/DKIM/DMARC 설정
DNS53도메인 이름 해석DNSSEC, DNS Spoofing 방어, 재귀 쿼리 제한
DHCP67, 68IP 자동 할당DHCP Snooping, Rogue DHCP 방어
SNMP161, 162네트워크 장비 관리SNMPv3 사용(암호화 및 인증), v1/v2c 금지
RDP3389Windows 원격 데스크톱NLA 활성화, 강력한 비밀번호, VPN 통해서만 접근
SMB445Windows 파일 공유SMBv1 비활성화, 방화벽으로 외부 차단
MySQL3306MySQL 데이터베이스외부 접근 차단, 강력한 비밀번호, 최소 권한

Suricata 룰 키워드 정리

카테고리키워드설명예시
메타정보msg로그에 표시될 메시지msg:"SQL Injection detected";
sid룰 고유 ID (사용자 정의는 1000000부터)sid:100001;
rev룰 버전rev:1;
classtype위협 분류classtype:web-application-attack;
페이로드content페이로드 내용 검색content:"password";
nocase대소문자 구분 안 함content:"admin"; nocase;
distance이전 매칭 후 N바이트 이동content:"OR"; distance:0; within:10;
pcre정규표현식pcre:"/[0-9]{4}-[0-9]{4}/";
DNSdns_queryDNS 쿼리dns_query; content:".tk";
Flowflow트래픽 방향 및 세션 상태flow:to_server,established;
Thresholdthreshold임계값 기반 탐지threshold:type both, track by_src, count 10, seconds 60;

방화벽 정책 설계 원칙

  1. Default Deny (기본 차단)

    • 모든 트래픽을 차단한 후, 필요한 것만 허용
    • 마지막 룰: “모두 차단”
  2. Least Privilege (최소 권한)

    • 필요한 최소한의 포트/프로토콜만 허용
    • 특정 출발지/목적지로 제한 (Any → Any 지양)
  3. 계층별 분리

    • DMZ: 외부에 노출되는 서비스 (웹, 메일)
    • Internal: 내부 업무 네트워크
    • Management: 관리 네트워크 (별도 분리)
  4. 룰 순서 최적화

    • 구체적인 룰 → 일반적인 룰
    • 자주 매칭되는 룰을 상단으로
    • 예: (1) 특정 IP 차단, (2) SSH 허용, (3) HTTP/HTTPS 허용, (4) 모두 차단
  5. 로깅 전략

    • 허용 룰: 필요시만 로깅 (트래픽 과다)
    • 차단 룰: 모두 로깅 (공격 시도 분석)
  6. 정기 검토

    • 분기별 불필요한 룰 제거
    • 로그 분석 후 정책 최적화

Wireshark 필터 (애플리케이션 계층)

#hhhhhh#ttt#dddddd#dbbbb#fff#ss#ttttttttlllnnnnnnhooootttssecHttttttHsssDssssssDcooooFpppShhTlpTppppppT...N.....HpttttT..S.en.T.....ThhhSqffqqCppppPrrHplepPrrrrcPaaarllrrP....eerntoeeeeoSnnnyaayyooooqqoerqqqso/ddd.gg..ppppuutttuuupkTsssnsstttttteeoeeeoiLhhha..yyiiiissc(=sssneSaaamrrppooootto=tttskkkeeeeennnn..l..eceeess....cc2mu.o...cpp==ddddooc3ercntttooo==hhhhmmotiotyyynnnccccmmn!hdappptss12ppppaat)oceieeeaee8nnadoni====ddin=s===n======n=t====s====s=a"1235==i2s121"01""n0e1g""2Ps0soUP.OsoSA0S"igES"TaolRS"dne""m""in###########"CSCAADORAleeAifeCirrAsfqKevtAceuneioretrfvsietHHcreealltlleoo

보안 체크리스트

웹 서버:

☑ HTTPS 적용 (인증서 유효성 확인) ☑ HTTP → HTTPS 리다이렉션 ☑ HSTS 헤더 설정 ☑ 불필요한 HTTP 메서드 비활성화 (OPTIONS, TRACE) ☑ Directory Listing 비활성화 ☑ 에러 메시지에서 버전 정보 숨김 ☑ 최신 보안 패치 적용

방화벽:

☑ Default Deny 정책 ☑ 관리 인터페이스 내부망에서만 접근 ☑ 불필요한 포트 모두 차단 ☑ 로그 레벨 적절히 설정 ☑ 룰 순서 검증 ☑ 변경 이력 관리

IDS/IPS:

☑ 최신 룰셋 업데이트 ☑ 오탐 룰 튜닝 ☑ 임계값 설정 ☑ 로그 정기 검토 ☑ SIEM 연동 ☑ 성능 모니터링 (패킷 드롭 확인)