네트워크 보안 기술
침입 탐지 시스템(IDS):
- 네트워크 접근을 차단하지 않음
- 내부/외부 네트워크 위협 상황을 수치화 및 위치 파악
- 주로 경고 및 사후 감시 기능 제공
침입 방지 시스템(IPS):
- 투명 모드로 작동
- 데이터 패킷 내용 분석 (오버플로우 공격, 서비스 거부 공격, 트로이 목마 등)
- 능동적이고 효과적인 네트워크 보호 제공
방화벽:
- 격리 기능 수행
- 네트워크 또는 호스트 경계에서 작동
- 외부에서 내부로의 접근 차단
데이터 유출 방지 시스템:
- 방화벽과 반대 개념
- 내부 정보가 외부로 전송되는 것 방지
방화벽 분류
보호 범위 기준:
- 호스트 방화벽: 단일 호스트 서비스
- 네트워크 방화벽: 로컬 네트워크 서비스
구현 방식 기준:
- 하드웨어 방화벽: 전용 하드웨어에서 구현
- 소프트웨어 방화벽
네트워크 프로토콜 기준:
- 네트워크 계층 방화벽: OSI 모델 하위 4계층 (패킷 필터링)
- 애플리케이션 계층 방화벽: 프록시 게이트웨이 (실제 데이터 제어)
패킷 구조:
- MAC 헤더 → IP 헤더 → 프로토콜/포트 → 7계층 프로토콜 (HTTP, SSH) → 실제 데이터 → 체크섬
방화벽 기능:
- 패킷 수신 → 해체 → 검사 → 재조립 (문제 없을 경우)
- 패킷 수신 → 해체 → 검사 → 폐기/격리 (문제 있을 경우)
프록시 서버 유형:
- 포워드 프록시: 클라이언트 대신 작동 (방화벽 제한 우회, 접속 속도 향상)
- 리버스 프록시: 서버 대신 작동 (로드 밸런싱, 고가용성 제공)
리눅스 방화벽 도구
netfilter 컴포넌트 기반:
- iptables: 명령줄 도구 (사용자 공간에서 규칙 작성)
- firewalld: 최신 프론트엔드 관리 도구
- nftables: CentOS 8의 새로운 기능
iptables 구조와 개념
5가지 체인 (트래픽 제어 시점):
- PREROUTING: 라우팅 결정 전
- POSTROUTING: 라우팅 결정 후
- INPUT: 로컬 시스템으로 유입
- OUTPUT: 로컬 시스템에서 유출
- FORWARD: 패킷 전달
4가지 테이블 (규칙 저장):
- raw: 상태 추적 여부 결정
- mangle: 패킷 태그 설정
- nat: IP 주소/포트 변환
- filter: 패킷 허용/차단 결정
기본 명령어 예제:
iptables -vnL --line-numbers
# -v: 상세 정보
# -n: 숫자 형식
# -L: 규칙 목록
# --line-numbers: 줄 번호 표시
iptables -A INPUT -s 192.168.0.1 -j DROP
# -A: 규칙 추가
# -D: 규칙 삭제
# -I: 규칙 삽입 (지정 위치)
# -F: 모든 규칙 삭제
기본 액션:
- DROP: 무응답
- REJECT: 명시적 거부
- ACCEPT: 허용
- LOG: 로깅
주요 옵션:
- -s: 출발지 주소
- -d: 목적지 주소
- -p: 프로토콜 (tcp/udp/icmp)
- --sport/--dport: 출발/목적지 포트
- -i/-o: 입력/출력 인터페이스
실제 적용 예시:
# 특정 IP 차단
iptables -A INPUT -s 192.168.116.10 -j DROP
# ICMP 프로토콜 차단
iptables -A INPUT -s 192.168.116.10 -p icmp -j DROP
# 웹 서비스 포트 차단
iptables -A INPUT -s 192.168.116.10 -p tcp --dport 80 -j DROP
# 로컬 인터페이스 허용
iptables -A INPUT -i lo -j ACCEPT
보안 정책 유형:
- 화이트리스트: 기본 차단 + 특정 허용
- 블랙리스트: 기본 허용 + 특정 차단
고급 기능 예제:
# 다중 포트 차단
iptables -A INPUT -s 192.168.116.10 -p tcp -m multiport --dports 80,8080 -j DROP
# IP 범위 차단
iptables -A INPUT -m iprange --src-range 192.168.116.10-192.168.116.15 -j DROP
# 문자열 필터링
iptables -A INPUT -p tcp --dport 80 -m string --string "bilibili" --algo bm -j DROP
# 연결 상태 기반 필터링
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -j DROP