방화벽과 접근 제어
방화벽은 네트워크의 관문입니다. 내부 네트워크와 외부 사이를 오가는 트래픽을 검사하고, 허용하거나 차단합니다. 경비원이 건물 출입구에 서서 신분증을 확인하듯, 방화벽은 패킷의 출발지, 목적지, 포트, 프로토콜을 확인합니다.
패킷 필터링 방화벽
가장 단순한 방화벽은 패킷 단위로 규칙을 적용합니다. 각 패킷의 IP 헤더와 TCP/UDP 헤더를 보고 허용 여부를 결정합니다. "192.168.1.0/24에서 오는 패킷 중 목적지 포트가 80이면 허용"처럼 규칙을 나열합니다.
리눅스에서는 iptables나 그 후속인 nftables로 이런 규칙을 구성할 수 있습니다.
# 파일: 터미널# 외부에서 SSH(22번 포트) 접속을 허용하는 예iptables -A INPUT -p tcp --dport 22 -j ACCEPT# 나머지 모든 INPUT 트래픽 차단iptables -A INPUT -j DROP
패킷 필터링은 빠르지만 한계가 있습니다. 각 패킷을 독립적으로 봅니다. 이전 패킷과의 관계를 알지 못합니다.
스테이트풀 방화벽
스테이트풀(stateful) 방화벽은 연결 상태를 추적합니다. TCP 핸드셰이크로 시작된 연결을 기억하고, 그 연결에 속하는 패킷은 개별 검사 없이 통과시킵니다. 클라이언트가 서버에 HTTP 요청을 보내면, 서버의 응답 패킷은 자동으로 허용됩니다. 관리자는 나가는 요청만 규칙으로 명시하면 됩니다.
현대의 엔터프라이즈 방화벽은 여기서 더 나아가 애플리케이션 계층까지 검사합니다. URL, 페이로드 내용, TLS 인증서까지 살펴보는 차세대 방화벽(NGFW)이 표준이 되었습니다.
DMZ와 네트워크 분리
보안 설계에서 DMZ(비무장지대)는 웹 서버처럼 외부에서 접근해야 하는 서버를 내부 네트워크와 분리하는 구간입니다. 외부 방화벽과 내부 방화벽 사이에 DMZ를 두면, 웹 서버가 침해되더라도 공격자가 내부 네트워크로 진입하는 데 추가 장벽이 생깁니다.
접근 제어는 방화벽만으로 완성되지 않습니다. 최소 권한 원칙에 따라 각 서비스가 필요한 포트와 IP에만 접근하도록 제한합니다. 동쪽-서쪽 트래픽, 즉 내부 서버 사이의 통신도 통제 대상으로 삼아야 합니다. 다음 절에서는 방화벽이 통과시킨 트래픽을 안전하게 암호화하는 TLS와 VPN을 살펴봅니다.