보안 솔루션 엔지니어로 새롭게 취업하게 되었다. 그동안 배워왔던 클라우드/인프라 개념과는 결이 조금 다른, 네트워크 장비와 보안 기술들을 이번 기회에 한번 제대로 정리해보았다.
방화벽은 네트워크 트래픽을 허용(Allow) 또는 차단(Deny) 하는 보안 장비다.
미리 정의된 정책(Rule)에 따라 출발지 IP, 목적지 IP, 포트, 프로토콜을 기준으로 패킷을 필터링한다.
Linux 환경에서는 iptables 또는 nftables를 이용해 소프트웨어 방화벽을 구성할 수 있다.
# 특정 포트 허용 예시 (iptables)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 특정 IP 차단
iptables -A INPUT -s 192.168.1.100 -j DROP
| 구분 | 설명 |
|---|---|
| 패킷 필터링 | IP/Port 기반 단순 차단 |
| 상태 기반(Stateful) | 세션 상태를 추적해 허용된 연결의 응답 트래픽은 자동 허용 |
| 애플리케이션 방화벽(WAF) | HTTP/HTTPS 레벨까지 분석, 웹 공격 차단 |
IDS는 Intrusion Detection System의 약자로, 네트워크 또는 시스템에서 발생하는 비정상적인 행위를 탐지하고 관리자에게 알림을 주는 시스템이다.
직접 차단하지는 않고 탐지 및 경보 역할만 수행한다.
🔍 비유하자면, CCTV처럼 이상한 행동을 감지하고 알려주지만 직접 막지는 않는다.
IPS는 Intrusion Prevention System의 약자로, IDS의 탐지 기능에 능동적인 차단 기능이 추가된 시스템이다.
이상 트래픽을 감지하면 실시간으로 세션을 끊거나 패킷을 드롭한다.
🛡️ 비유하자면, 경비원처럼 이상한 행동을 감지하는 동시에 직접 제지한다.
| 구분 | 탐지 | 차단 | 배치 위치 |
|---|---|---|---|
| IDS | ✅ | ❌ | 네트워크 미러링(Out-of-band) |
| IPS | ✅ | ✅ | 트래픽 경로 상(In-line) |
L2 스위치는 MAC 주소 기반으로 동작하는 스위치다.
같은 네트워크(동일 서브넷) 내의 장비들이 통신할 수 있도록 프레임을 전달한다.
MAC 주소 테이블을 학습해 목적지 포트로만 트래픽을 전송하며, VLAN 구성이 가능하다.
L3 스위치는 IP 주소 기반으로 라우팅 기능까지 수행하는 스위치다.
서로 다른 서브넷(VLAN 간) 통신을 처리할 수 있어, 소규모~중규모 네트워크에서 라우터 역할을 대신하기도 한다.
| 구분 | 기준 | 주요 기능 |
|---|---|---|
| L2 스위치 | MAC 주소 | 동일 서브넷 통신, VLAN |
| L3 스위치 | IP 주소 | VLAN 간 라우팅, 정적/동적 라우팅 |
SIP는 VoIP(인터넷 전화), 영상통화 등 멀티미디어 세션을 개시·종료하는 애플리케이션 계층 프로토콜이다.
텍스트 기반 프로토콜로 HTTP와 구조가 유사하며, 기본 포트는 UDP/TCP 5060, TLS 사용 시 5061을 사용한다.
기본 흐름 (콜 설정)
Client --INVITE--> Server
Client <--100 Trying--
Client <--180 Ringing--
Client <--200 OK--
Client --ACK--> Server
(통화 중)
Client --BYE--> Server
Client <--200 OK--
보안 관점에서는 SIP Flooding, SIP Spoofing 같은 공격이 발생할 수 있어, SBC(Session Border Controller) 장비로 보호하는 경우가 많다.
보안 장비(IDS, 패킷 분석 등)가 트래픽을 수집하기 위해 사용하는 방법이다.
물리 장비로, 네트워크 케이블 사이에 인라인으로 설치해 트래픽을 복사해서 별도 장비로 전달한다.
원본 트래픽에 영향을 주지 않으며, 전원이 꺼져도 통신이 유지된다는 장점이 있다.
스위치 기능으로, 특정 포트의 트래픽을 다른 모니터링 포트로 복사한다.
별도 장비 없이 설정만으로 구성 가능하지만, 스위치 부하가 증가할 수 있다.
| 구분 | Network TAP | Port Mirroring (SPAN) |
|---|---|---|
| 방식 | 물리 장비 | 스위치 소프트웨어 설정 |
| 트래픽 영향 | 없음 | 스위치 부하 발생 가능 |
| 비용 | 높음 | 낮음 (스위치 기능 활용) |
NAS는 네트워크에 연결된 파일 스토리지 장비다.
여러 서버/클라이언트가 네트워크를 통해 공유 스토리지에 접근할 수 있도록 한다.
주요 프로토콜
| 프로토콜 | 설명 | 주로 사용 환경 |
|---|---|---|
| NFS | Network File System | Linux/Unix 환경 |
| SMB/CIFS | Server Message Block | Windows 환경 |
| iSCSI | 블록 스토리지 접근 | DB 서버 등 고성능 |
SAN vs NAS
| 구분 | NAS | SAN |
|---|---|---|
| 접근 방식 | 파일 단위 | 블록 단위 |
| 프로토콜 | NFS, SMB | iSCSI, Fibre Channel |
| 구축 비용 | 낮음 | 높음 |
| 성능 | 보통 | 고성능 |
보안 관점에서는 접근 제어(ACL), 스냅샷, 암호화 설정이 중요하다.
(이 개념은 조금 어렵게 느껴져서 ai의 도움을 많이 받았다.)
스니핑은 네트워크 상에서 자신에게 오지 않는 패킷을 몰래 엿보는 행위다.
네트워크에서 패킷은 목적지 주소가 적혀 있어서, 원래는 내 컴퓨터로 온 패킷만 수신한다.
그런데 랜카드(NIC)를 Promiscuous Mode(무차별 모드) 로 설정하면,
목적지가 나 아닌 패킷도 전부 수신하도록 필터를 꺼버릴 수 있다.
이를 이용해 같은 네트워크 대역에 흘러다니는 트래픽을 몽땅 캡처하는 것이 스니핑이다.
대표적인 도구로는 tcpdump, Wireshark가 있다.
이 글로만 보면 tcpdump와 Wireshark는 나쁜 해킹 도구인가? 했는데, 찾아보니 양날의 검이라는 것을 알 수 있었다.
예를 들어, 다음과 같은 용도에서 tcpdump와 Wireshark는 사용이 가능하다.
| 상황 | 예시 |
|---|---|
| 네트워크 디버깅 | "왜 이 서버가 응답을 안 하지?" 패킷 확인 |
| 보안 모니터링 | 비정상 트래픽 탐지, 침입 흔적 분석 |
| 개발/테스트 | API 통신이 제대로 가는지 확인 |
| 보안 공부 | 패킷 구조 학습, 네트워크 흐름 이해 |
반면, 공격자가 허가 없이 남의 네트워크에서 사용하면 스니핑 공격이 된다.
칼이 요리도구냐 흉기냐는 누가, 어디서, 어떤 목적으로 쓰느냐에 달린 것처럼 tcpdump와 Wireshark도 마찬가지인 것이다.
출발지 주소를 위조해 다른 시스템인 척 통신하는 공격이다.
| 종류 | 설명 |
|---|---|
| IP Spoofing | 출발지 IP 위조 |
| ARP Spoofing | ARP 응답을 위조해 트래픽을 가로챔 (MITM 공격의 기반) |
| DNS Spoofing | DNS 응답을 위조해 잘못된 IP로 유도 |
ARP(Address Resolution Protocol) 는 IP 주소를 MAC 주소로 변환하는 프로토콜이다.
ARP는 인증이 없기 때문에, 공격자가 위조된 ARP Reply를 브로드캐스트하면 피해자의 ARP 테이블을 오염시킬 수 있다.
이를 통해 MITM(Man In The Middle) 공격이 가능해진다.
정상: 피해자 ---> 게이트웨이
공격: 피해자 ---> 공격자 ---> 게이트웨이 (공격자가 중간에서 트래픽 감청)
대응 방법
스니핑 도구에서 tcpdump를 보면서 패킷을 떠본다는 것이 어떤 의미인지 잘 납득이 가질 않았다. 그래서 이해하기 위해 글을 작성하게 되었다.
처음에 이 말이 와닿지 않았다. 패킷을 떠본다는 게 도대체 뭘 보겠다는 건지.
쉽게 말하면 이렇다.
네트워크는 편지가 오가는 우체국 같은 곳이고,
패킷은 그 편지 한 장 한 장이다.
tcpdump는 그 편지들을 중간에서 복사해서 내용을 들여다보는 행위다.
아래는 tcpdump를 실행했을 때 나오는 출력 예시다.
$ sudo tcpdump -i eth0
-i는 interface의 약자로, 어떤 네트워크 인터페이스(랜카드)에서 패킷을 캡처할지 지정하는 옵션이다.
eth0은 리눅스에서 첫 번째 유선 랜카드를 부르는 이름이다. (ethernet 0번)
쉽게 말해 "현관문, 뒷문, 창문 중 어느 쪽을 감시할지" 고르는 것과 같다.
요즘 리눅스는eth0대신ens33,enp0s3같은 이름을 쓰기도 하니,ip a명령어로 먼저 내 인터페이스 이름을 확인한다.
위 명령어를 실행하면 다음과 같이 나온다.
14:23:01.123456 IP 192.168.1.10.54321 > 142.250.196.142.443: Flags [S], seq 123456, win 64240
14:23:01.124000 IP 142.250.196.142.443 > 192.168.1.10.54321: Flags [S.], seq 654321, ack 123457
14:23:01.124100 IP 192.168.1.10.54321 > 142.250.196.142.443: Flags [.], ack 654322
한 줄이 패킷 하나다. 처음 보면 암호처럼 느껴지는데, 구조를 알면 읽힌다.
[시간] [출발지IP.포트] > [목적지IP.포트] [플래그]
14:23:01 192.168.1.10.54321 > 142.250.196.142.443 Flags [S]
| 항목 | 의미 |
|---|---|
192.168.1.10 | 내 컴퓨터 IP |
142.250.196.142 | 목적지 서버 IP (구글 등) |
.443 | HTTPS 포트 → 웹 통신 |
Flags [S] | SYN → 연결 요청 |
Flags [S.] | SYN-ACK → 연결 수락 |
Flags [.] | ACK → 연결 완료 |
위 3줄이 바로 TCP 3-way handshake 과정이다.
실무에서 tcpdump를 꺼내드는 상황은 보통 이렇다.
1. 통신이 되는지 안 되는지 확인할 때
sudo tcpdump -i eth0 host 192.168.1.1
특정 IP와 패킷이 오가는지 눈으로 확인한다. 패킷이 아예 안 잡히면 네트워크 단에서 막힌 것.
2. 특정 포트로 트래픽이 들어오는지 확인할 때
sudo tcpdump -i eth0 port 443
HTTPS 트래픽만 필터링해서 본다.
3. 비정상적인 트래픽을 잡을 때
평소에 없던 IP로 대량의 패킷이 나가고 있다면? 악성코드나 공격 징후일 수 있다.
tcpdump가 터미널에서 텍스트로 패킷을 보여준다면,
Wireshark는 같은 정보를 GUI로 시각화해서 보여준다.
초보자라면 Wireshark가 훨씬 보기 편하다. 색깔로 프로토콜을 구분해주고, 클릭하면 패킷 내부 구조를 트리 형태로 펼쳐볼 수 있다.
패킷을 떠본다는 건 결국 "지금 이 네트워크에서 무슨 대화가 오가고 있는지 들여다보는 것" 이다.
장애가 났을 때, 보안 이슈가 생겼을 때, 통신 흐름을 이해하고 싶을 때 — 앞으로 실무에서 자주 쓰게 될 도구다.
보안솔루션 엔지니어로 일하다 보면 고객사에서 "갑자기 통신이 안 된다"는 연락이 많이 온다는 것을 주변 실무자들을 통해 알게되었다. 그래서 처음 연락을 받았을 때 어떻게 하면 될지
이 추가 글도 작성하게 되었다. 배우면서 느낀것은,
이때 무작정 tcpdump부터 뜨는 게 아니라, 계층별로 좁혀가는 것이 핵심이라는 것을 알게되었다.
네트워크는 L1(물리) → L2(데이터링크) → L3(네트워크) → L4(전송) 순으로 쌓여있기 때문에,
아래 계층부터 위로 올라가며 하나씩 확인한다.
가장 먼저, 케이블이 꽂혀있긴 한지부터 본다.
ip link show # 인터페이스 상태 확인
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ← UP이면 물리 연결 OK
eth0: <BROADCAST,MULTICAST> ← LOWER_UP 없으면 케이블 문제
| 확인 항목 | 의심 원인 |
|---|---|
| 인터페이스가 DOWN | 케이블 불량, 포트 비활성화 |
| Link LED 꺼짐 | 물리적 단선, 스위치 포트 문제 |
물리 연결은 됐는데 통신이 안 된다면, 같은 스위치에 연결된 장비끼리 통신이 되는지 확인한다.
ping 192.168.1.1 # 같은 대역 게이트웨이에 ping
arp -n # ARP 테이블 확인 (MAC 주소 학습 여부)
192.168.1.1 ether aa:bb:cc:dd:ee:ff ← ARP 있으면 L2 통신 OK
192.168.1.1 (incomplete) ← ARP 없으면 L2 문제
| 확인 항목 | 의심 원인 |
|---|---|
| ping 응답 없음 | VLAN 설정 오류, 스위치 포트 문제 |
| ARP incomplete | ARP Spoofing, 잘못된 IP 설정 |
게이트웨이까지는 되는데 외부가 안 된다면, 라우팅 문제다.
ping 8.8.8.8 # 외부 IP로 ping (구글 DNS)
traceroute 8.8.8.8 # 어디서 끊기는지 경로 추적
ip route show # 라우팅 테이블 확인
$ traceroute 8.8.8.8
1 192.168.1.1 1ms ← 게이트웨이 (L3 스위치/라우터)
2 10.0.0.1 5ms ← ISP 구간
3 * * * ← 여기서 끊김 → 이 구간 문제
| 확인 항목 | 의심 원인 |
|---|---|
| 게이트웨이 ping 안 됨 | 라우팅 테이블 오류, 방화벽 차단 |
| traceroute 중간 끊김 | 해당 구간 라우터/방화벽 문제 |
IP는 되는데 특정 서비스만 안 된다면, 포트 차단 문제다.
telnet 192.168.1.10 443 # 특정 포트 열려있는지 확인
nc -zv 192.168.1.10 443 # netcat으로 포트 확인
curl -v https://example.com # HTTP/HTTPS 응답 확인
$ telnet 192.168.1.10 443
Connected to 192.168.1.10 ← 포트 열려있음
Connection refused ← 포트 막혀있음 또는 서비스 미실행
| 확인 항목 | 의심 원인 |
|---|---|
| Connection refused | 방화벽 정책 차단, 서비스 미실행 |
| 응답 없음(timeout) | 방화벽이 패킷을 DROP |
위 단계를 다 해도 원인을 못 잡겠을 때 tcpdump를 뜬다.
"패킷이 실제로 오가고 있는지" 를 눈으로 직접 확인하는 것이다.
# 특정 호스트와의 패킷만 캡처
sudo tcpdump -i eth0 host 192.168.1.10
# 특정 포트만 캡처
sudo tcpdump -i eth0 port 443
# 패킷 내용까지 출력
sudo tcpdump -i eth0 -X port 80
패킷이 아예 안 잡힌다 → 내 쪽에서 패킷을 못 보내고 있는 것
패킷은 나가는데 응답이 없다 → 상대방 쪽 또는 중간 경로 문제
통신 안 됨
│
├── 케이블/인터페이스 확인 (L1) → ip link show
│
├── 같은 대역 ping 확인 (L2) → ping 게이트웨이, arp -n
│
├── 외부 ping 확인 (L3) → ping 8.8.8.8, traceroute
│
├── 포트 확인 (L4) → telnet, nc, curl
│
└── 그래도 모르겠으면 → tcpdump로 패킷 직접 확인
계층을 건너뛰지 않고 L1부터 차근차근 올라가는 것이 핵심이다.