📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 12편
이전 글: 11. Unicast, Broadcast, Multicast · 다음 글: 13. Network Address와 Host Address

1. 개념

서브넷 마스크(Subnet Mask) 는 IP 주소 32비트 중 어디까지가 네트워크 부분이고 어디부터가 호스트 부분인지 표시하는 32비트 값입니다.

  • 네트워크 부분에 해당하는 비트는 1, 호스트 부분은 0
  • 1은 반드시 왼쪽부터 연속해서 채워집니다 (11111111.11111111.11111111.00000000)
  • 1의 개수를 프리픽스 길이라고 하며 /24처럼 표기합니다
서브넷 마스크프리픽스네트워크 비트호스트 비트사용 가능한 호스트 수
255.0.0.0/882416,777,214
255.255.0.0/16161665,534
255.255.255.0/24248254
255.255.255.128/25257126
255.255.255.192/2626662
255.255.255.224/2727530
255.255.255.240/2828414
255.255.255.252/303022
255.255.255.255/32320단일 호스트 지정

사용 가능한 호스트 수는 2^(호스트 비트) − 2입니다. 2를 빼는 이유(네트워크 주소·브로드캐스트 주소)는 13. Network Address와 Host Address에서 다룹니다. /31은 점대점 링크에서 두 주소를 모두 쓰는 예외(RFC 3021)입니다. /24 같은 표기법 자체의 규칙은 14. IPv4 주소와 서브넷(CIDR) — 같은 네트워크인지 판단하는 법에서 다룹니다.


2. 동작 원리

호스트는 패킷을 보내기 전에 "목적지가 나와 같은 네트워크인가?" 를 판단합니다. 방법은 IP 주소와 마스크의 비트 단위 AND 연산입니다(둘 다 1일 때만 1).

 내 주소    192.168.10.25   = 11000000.10101000.00001010.00011001
 마스크     255.255.255.0   = 11111111.11111111.11111111.00000000
                              ─────────────── AND ───────────────
 내 네트워크                = 11000000.10101000.00001010.00000000 = 192.168.10.0

 목적지 A   192.168.10.80   AND 마스크 = 192.168.10.0   → 같음 → LAN에서 직접 전달 (ARP로 A의 MAC)
 목적지 B   192.168.20.5    AND 마스크 = 192.168.20.0   → 다름 → 기본 게이트웨이로 전달 (ARP로 게이트웨이 MAC)

즉 서브넷 마스크는 "직접 보낼지, 게이트웨이에 맡길지"를 결정하는 기준입니다. 게이트웨이로 넘긴 이후 과정은 16. Default Gateway에서 다룹니다.


3. 주요 특징

① 마스크는 주소가 아니라 해석 규칙입니다. 같은 192.168.10.25라도 /24와 /26에서는 속한 네트워크가 달라집니다.

② 표기 방식이 장비·용도마다 다릅니다.

표기예주로 쓰는 곳
점 10진 마스크255.255.255.0Windows ipconfig, 구형 설정 파일
프리픽스 길이/24Linux ip, 방화벽·클라우드 정책, IDS 설정
와일드카드 마스크(반전)0.0.0.255Cisco ACL·OSPF 설정 (0 = 일치해야 하는 비트)

와일드카드 마스크는 서브넷 마스크의 비트를 뒤집은 값이므로, 방화벽·라우터 설정을 검토할 때 둘을 혼동하지 않아야 합니다.

③ 양쪽 마스크가 다르면 통신이 비대칭이 됩니다. 한 호스트는 상대를 같은 네트워크로, 상대는 다른 네트워크로 판단하면 한 방향은 직접, 다른 방향은 게이트웨이로 가는 등 간헐적인 장애가 생깁니다.


4. 예시

실습 예시 — 마스크 확인 (Rocky Linux / Ubuntu 공통)

ip -4 addr show ens33
# 출력 형식 예시(값은 환경마다 다름)
    inet 192.168.10.25/24 brd 192.168.10.255 scope global dynamic ens33

Linux는 /24 형태로, Windows ipconfig는 서브넷 마스크 . . . : 255.255.255.0 형태로 보여 줍니다.

마스크 계산은 ipcalc로도 할 수 있지만, Rocky(RHEL 계열 ipcalc)와 Ubuntu(apt install ipcalc로 설치하는 별도 구현)의 옵션·출력 형식이 다릅니다. 배포판과 무관하게 같은 결과를 보려면 Python을 쓰는 방법이 있습니다.

# 예시(값은 환경마다 다름)
python3 - <<'EOF'
import ipaddress
for s in ["192.168.10.25/24", "192.168.10.25/26"]:
    n = ipaddress.ip_interface(s).network
    print(s, "→ 마스크", n.netmask, "/ 와일드카드", n.hostmask, "/ 네트워크", n)
EOF
# 출력 예시
192.168.10.25/24 → 마스크 255.255.255.0 / 와일드카드 0.0.0.255 / 네트워크 192.168.10.0/24
192.168.10.25/26 → 마스크 255.255.255.192 / 와일드카드 0.0.0.63 / 네트워크 192.168.10.0/26

5. 보안 관점

  • 과도하게 넓은 대역 정책: 방화벽 허용 규칙에 /32(단일 호스트) 대신 /16을 쓰면, 의도한 한 대가 아니라 65,536개 주소가 허용됩니다. 규칙 검토 시 프리픽스 길이는 가장 먼저 확인할 항목입니다.
  • 마스크 오설정으로 인한 분리 무력화: 호스트 마스크를 넓게 잡으면 다른 서브넷을 같은 LAN으로 착각해 게이트웨이(내부 방화벽)를 거치지 않고 직접 통신을 시도할 수 있습니다. 실제 분리는 스위치·VLAN에서 강제되어야 하는 이유입니다.
  • 와일드카드·서브넷 마스크 혼동: ACL에 서브넷 마스크를 와일드카드 자리에 넣으면 의도와 전혀 다른 범위가 매칭됩니다.

6. SOC 관점

관제 업무에서 마스크(프리픽스)는 주소 묶음을 해석하는 단위로 자주 등장합니다.

  • 방화벽·IDS 설정의 HOME_NET, 허용 대역, 차단 목록은 대부분 프리픽스로 작성됩니다.
  • 자산 대역표(서버망 /24, 사용자망 /22 등)를 알면 IP만 보고 어느 구역인지 판별할 수 있습니다.
  • 스캔 분석에서 대상 IP를 /24 단위로 묶으면 "한 대역 전체를 훑었는가"를 빠르게 볼 수 있습니다.

관제자가 확인할 질문은 다음과 같습니다.

  • 이 룰·정책의 대역은 의도한 범위와 정확히 일치하는가? 너무 넓거나 좁지 않은가?
  • IDS의 내부 대역(HOME_NET) 정의가 실제 자산 대역과 맞는가?

⚠️ 오탐 주의: IDS의 HOME_NET이 실제보다 좁게 정의되어 있으면 내부 호스트가 "외부"로 취급되어 방향 기반 룰이 잘못 동작합니다. 알림의 방향(내부→외부/외부→내부)이 이상하게 보이면 대역 정의부터 확인해야 합니다(06 영역 288. Snort Rule 기초에서 다룸).


7. 핵심 정리

  • 서브넷 마스크는 IP 주소의 네트워크 부분(1)과 호스트 부분(0)을 가르는 32비트 값입니다.
  • 호스트는 IP AND 마스크 결과를 비교해 직접 전달할지 게이트웨이로 보낼지 결정합니다.
  • 같은 마스크를 점 10진, 프리픽스 길이, 와일드카드(반전) 등 여러 형태로 표기합니다.
  • 방화벽 정책의 프리픽스 길이는 허용 범위를 결정하므로 가장 먼저 검토해야 합니다.
  • 관제에서는 프리픽스 단위로 자산 구역을 판별하고, IDS 내부 대역 정의가 정확한지 확인합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글