Linux 시스템 보안 기초 · 39/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
방화벽은 네트워크 통제의 중심입니다. 그런데 리눅스 방화벽은 iptables, nftables, firewalld, ufw가 얽혀 있어 혼란스럽습니다. 이번 편은 이들의 관계를 정리하고, 방화벽 정책을 보안 관점에서 점검합니다.
계층 관계를 이해하면 명확합니다.
[ 관리 도구 ] firewalld / ufw ← 사용자 친화 프론트엔드
│ 규칙을 변환
[ 규칙 엔진 ] nftables (신) / iptables (구)
│
[ 커널 훅 ] Netfilter ← 실제 패킷 검사
firewalld/ufw는 결국 nftables(또는 iptables)로 규칙을 만들고, 그것이 커널 Netfilter에서 동작합니다. 현대 배포판(RHEL9, Ubuntu 최신)은 백엔드가 nftables입니다.
firewalld ─┐
ufw ─┼─▶ nftables (또는 iptables) ─▶ Netfilter(커널) ─▶ 허용/차단
직접 nft ─┘
관리 도구로 만든 규칙이든 직접 만든 규칙이든, 최종적으로 Netfilter 훅에서 패킷마다 평가됩니다. 보안의 핵심은 기본 정책(default policy) 입니다. 기본을 'drop/deny'로 두고 필요한 것만 허용하는 화이트리스트 방식이 안전합니다. 기본이 'accept'면 규칙에서 빠진 모든 것이 통과됩니다.
또한 대부분 inbound만 신경 쓰지만, egress(outbound) 필터링도 중요합니다. outbound를 제한하면 C2 통신·데이터 유출(38편)을 원천 차단할 수 있습니다.
# nftables 전체 규칙
sudo nft list ruleset
# iptables 규칙(구형/호환)
sudo iptables -S; sudo iptables -L -n -v
# firewalld 상태·존·규칙 (RHEL 계열)
sudo firewall-cmd --state; sudo firewall-cmd --list-all
# ufw 상태 (Ubuntu)
sudo ufw status verbose
실습 컨테이너의 iptables 정책 확인 형식입니다. (실제 캡처 — 컨테이너 기본 정책)
$ sudo iptables -S | head
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
여기서 -P INPUT ACCEPT는 기본 정책이 '허용'이라는 뜻으로, 운영 서버라면 위험합니다. 안전한 구성은 기본을 DROP으로 두고(-P INPUT DROP) 필요한 포트만 명시 허용하는 것입니다. (컨테이너 환경은 호스트 방화벽에 의존하므로 내부 정책이 느슨할 수 있습니다.)
방화벽 규칙 변경은 방어 태세 변화이므로 반드시 감사해야 합니다.
방화벽 규칙 변경은 auditd로 관련 명령(nft, iptables, firewall-cmd) 실행을 감사하고, 설정 파일 변경을 FIM으로 감시합니다. SIEM에서는 '방화벽 규칙 완화 → 신규 포트 노출 → 외부 연결'을 상관분석해 공격자의 통로 개설을 탐지합니다. egress 정책은 C2 차단의 마지막 방어선입니다.
[ ] 방화벽 백엔드(nftables/iptables) 확인
[ ] 기본 정책이 drop인지 확인
[ ] 허용 규칙의 과도함 점검
[ ] egress 제한 여부 확인
다음 편에서는 40. Linux 네트워크 공격 흔적 분석 를 다룹니다. Part 5를 마무리하며, 네트워크 공격 흔적(스캔·brute force)을 로그와 연결로 분석합니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.