방화벽 Firewall
방화벽은 네트워크 접근 제어 장비이다.
서로 다른 네트워크를 지나는 데이터를 허용 및 거부하거나 검열 또는 수정한다.
사전에 정의된 정책 (rule) 에 따라 트래픽을 허용 (Allow) 하거나 차단 (Deny) 한다.
동작 방식
- 출발지 IP / 목적지 IP
- 포트 번호 (80, 443 ..)
- 프로토콜 (TCP, UDP, ICMP ..)
- 세션 상태
이러한 기준을 바탕으로 판단한다.
외부 -> 내부 22번 포트(SSH) 접근 차단
외부 -> 내부 80, 443 포트만 허용
종류
Packet Filtering : 단순 헤더 기반 필터링
Stateful Firewall : 세션 상태 추적
Application Firewall (L7) : HTTP, FTP 등 애플리케이션 분석
NGFW : IDS/IPS, DPI 까지 포함
방화벽은 네트워크 기본 보안의 필수 요소이며, 설정이 명확하고 빠르다.
그러나 공격인지 정상 트래픽인지 내용을 깊게 보지 않고 허용된 포트로 들어오는 공격을 막기 어렵다.
IDS (Instrusion Detection System)
IDS 는 칩입 탐지 시스템이다.
네트워크 트래픽을 모니터링하여 공격을 탐지 (Detection) 만 하고, 차단은 하지 않는다.
공격이라고 알려주기만 한다.
동작 방식
- 트래픽을 미러링 (SPAN) 해서 수동으로 분석
- 공격 패턴과 비교
- 로그 및 알림 발생
탐지 방식
| Signature 기반 | 알려진 공격 패턴 |
| Anomaly 기반 | 비정상 행위 탐지 |
| Behavior 기반 | 행위 흐름 분석 |
[Internet] ── [Firewall] ── [Switch] ── [Server]
│
[IDS]
IDS 는 트래픽 흐름 경로에 직접 개입하지 않는다.
오탐이 발생해도 서비스에 영향이 없고, 공격 분석 및 포렌식에 매우 유리하다.
그러나 공격을 막지 못하고, 실시간 대응이 불가능하다.
IPS (Intrusion Prevention System)
IPS는 칩입 방지 시스템이다.
IDS와 달리 탐지 + 차단을 수행한다.
공격이다 -> 즉시 차단
동작 방식
- 네트워크 인라인(in-line) 배치
- 트래픽 실시간 검사
- 공격 판단 시 패킷 드롭 / 세션 종료
[Internet] ── [IPS] ── [Firewall] ── [Server]
IPS가 할 수 있는 차단은 다음과 같다.
- 패킷 Drop
- TCP Reset
- IP 차단
- 세션 종료
- 임시 블랙리스트
실시간으로 공격을 차단하고 제로데이 공격 대응이 가능하지만 (행위 기반) 오탐 발생 시 정상 트래픽 차단 위험이 크다.
그리고 성능 부담이 크고 튜닝이 필수이다.
비교
IDS vs IPS
| 항목 | IDS | IPS |
| 역할 | 탐지 | 탐지 + 차단 |
| 위치 | 미러링 | 인라인 |
| 트래픽 영향 | 없음 | 있음 |
| 오탐 영향 | 로그만 | 서비스 장애 |
| 운영 난이도 | 낮음 | 높음 |
방화벽 vs IDS/IPS
| 항목 | 방화벽 | IDS/IPS |
| 기준 | 정책 기반 | 공격 패턴 / 행위 |
| 검사 깊이 | L3~L4 | L7 |
| 목적 | 접근 제어 | 공격 탐지 / 방어 |
| 공격 인식 | 거의 없음 | 있음 |
실습
방화벽 실습 - PF(Packet Filter)
PF란 BSD 계열 운영체제 (OpenBSD, macOS)에 기본 탑재된 커널 레벨 방화벽이다.
실제 기업 환경에서도 사용되는 정식 방화벽 엔진이다.
/etc/pf.conf 파일
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
pass in inet proto tcp from any to any port 5173 no state
여기에 아래 문장을 추가해 ssh 접근을 차단해 보았다.
block in proto tcp from any to any port 22
pass out all keep state

위처럼 연결에 실패하게 된다.
따라서 방화벽은 공격 여부를 판단하지 않고 단지 허용된 트래픽인가 만을 정책으로 결정한다.
IDS 실습 - tcpdump 기반 침입 탐지
트래픽 미러링 - 패킷 분석 - 공격 판단 - 로그 / 알림
sudo tcpdump -n 'tcp[tcpflags] & tcp-syn != 0'
위 명령을 입력하면 TCP 연결 요청 (SYN) 만 필터링하며, 포트 스캔, SYN Flood 탐지에 사용 가능하다.
nmap -sS localhost
그리고 다른 터미널 (tty) 에서 포트 스캔을 하면 tcpdump 를 했던 터미널에서 SYN 패킷이 폭증한다.

이런식으로 차단이나 다른 조치 없이 로그만 확인할 수 있다.
IDS 는 네트워크 흐름에 개입하지 않고 공격 징후를 탐지하여 관리자에게 알려주는 역할을 하기 때문이다.
IPS 실습 - 탐지 + 자동 차단
tcpdump (탐지)
↓
조건 만족
↓
pfctl (차단)
이런 식으로 진행한다.
table <blacklist> persist
block in from <blacklist>
pass out all keep state
blacklist PF 테이블을 준비하고 적용한다.
sudo tcpdump -n tcp | while read line; do
SRC=$(echo $line | awk '{print $3}' | cut -d'.' -f1-4)
if echo "$line" | grep "Flags \[S\]"; then
echo "[IPS] SYN detected from $SRC"
sudo pfctl -t blacklist -T add $SRC
fi
done
이렇게 IPS 스크립트를 입력하고 아까와 같이 다른 터미널에서 포트스캔을 날리면

만들어둔 블랙리스트 테이블에 주소가 추가되고 이후 패킷이 차단된다.