네트워크에 연결된 순간 시스템은 외부의 무수한 접속 시도에 노출된다. 어떤 트래픽을 받아들이고 어떤 것을 막을지 결정하는 첫 번째 방어선이 방화벽이다. 리눅스 커널에는 netfilter라는 패킷 필터링 프레임워크가 내장돼 있고, 이를 제어하는 전통적 도구가 iptables다. 그런데 iptables는 규칙이 많아지면 관리가 어렵고 직관적이지 않다. 그래서 RHEL 7 이후로는 iptables 위에 얹은 더 추상적이고 동적인 관리 도구인 firewalld가 기본이 됐다. 오늘은 iptables의 체인·정책·규칙 구조를 정밀하게 파고든 뒤, firewalld의 zone 개념과 firewall-cmd 사용법을 익힌다. 둘은 경쟁 관계가 아니라 "저수준 엔진(iptables)과 고수준 관리자(firewalld)"의 관계임을 이해하는 것이 핵심이다.
iptables는 커널의 netfilter를 제어해 패킷을 검사하고 처리한다. iptables의 구조는 **테이블(table) → 체인(chain) → 규칙(rule)**의 3계층이다.
가장 많이 쓰는 테이블은 filter 테이블(패킷 허용/차단을 결정)이며, 옵션 없이 iptables를 쓰면 이 테이블이 기본 대상이다. 다른 테이블로는 NAT 처리용 nat, 패킷 변조용 mangle이 있다.