리눅스 커널 2.4버전 이후로 사용하고 있는 iptables는 패킷 필터링 도구로
방화벽 구성이나 NAT(Network Address Translation )에 사용됩니다
사용자는 iptables라는 명령으로 정책을 설정하면 해당 정책에 의거해 동작합니다
iptables는 패킷 필터링을 직접적으로 수행하지 않고,
커널에 있는 넷필터(netfilter)라는 모듈이 필터링을 수행합니다
넷필터는 리눅스가 제공하는 모든 종류의 패킷 필터링과 맹글링(mangling) 도구로
네트워크 스택 함수를 hooking하는데 사용할 수 있는 커널 내부 프레임워크입니다
iptables는 패킷에 대한 필터링을 수행하게 설계된 함수를 스택으로 후킹하기 위해
넷필터 프레임워크를 사용합니다
넷필터는 iptables가 방화벽 기능을 구현할 수 있게 프레임워크를 제공합니다
iptables는 커널 2.2에서 사용되던 ipchains의 chain 구조를 그대로 승계했습니다
ipchains와 유사하게 사슬에 정책을 설정해서 사용하지만, 기능과 역할을 강화하기 위해
테이블로 확장해서 테이블별 사슬을 지정하고 해당 사슬에 정책을 설정하도록 되어 있습니다
iptables는 filter, nat, mangle, raw, security와 같은 5개의 테이블이 있습니다
filter는 iptables의 기본 테이블로 패킷 필터링을 사용합니다
nat 테이블은 IP주소를 변환시키는 역할을 수행합니다
한개의 공인 ip주소를 가지고 여러 대의 컴퓨터나 서버를 운영하고자 할 때 사용합니다
mangle은 패킷 데이터를 변경하는 특수 규칙을 적용하는 테이블로 성능 향상을 위한
TOS(Type Of Service)를 설정합니다
raw는 넷필터의 연결 추적 하위 시스템과 독립적으로 동작해야하는 규칙을 설정하는 테이블입니다
각 테이블은 자신만의 고유한 사슬 집합을 가지고 있지만,
사용자가 INPUT_ESTABLISHED나 DMZ_NETWORK와 같은 공통 태그와 관련된 규칙집합을 만들 기 위해
사용자 정의 사슬을 생성할 수 있습니다
리눅스 보안 모듈인 SELinux에 의해 사용되는 MAC 네트워크 관련 규칙이 적용됩니다
SECMARK 및 CONNSECMARK에 의해 활성화된 규칙이 등록됩니다
현재 security는 filter 테이블 다음에 호출되어 DAC 규칙이 MAC 규칙보다
먼저 적용될 수 있습니다
chain | filter | nat | mangle | raw | security |
---|---|---|---|---|---|
INPUT | O | O | O | ||
FORWARD | O | O | O | ||
OUTPUT | O | O | O | O | O |
PREROUTING | O | O | O | ||
POSTROUTING | O | O |
패킷 필터링 및 방화벽 구성은 기본 테이블인 Filter의 3개 체인에 정책을 설정하면 되고,
다수의 서버 관리를 할 때 Filter 및 NAT 테이블을 연동해서 사용합니다
특히 NAT 테이블의 PREROUTING 및 POSTROUTING 사슬은 커널 내부에서
IP 라우팅 계산을 수행하기 전후에 패킷 헤더를 수정하기 위해 사용합니다
INPUT: 패킷 필터링 및 방화벽 관련 정책들을 설정하는 사슬로 실제적인 접근 통제를 담당하는 역할을 수행합니다
커널 내부에서 라우팅 계산을 마친 후 로컬 리눅스 시스템이 목적지인 패킷에 적용됩니다
OUTPUT: 다른 시스템으로의 접근을 차단할 때 사용하는 사슬로 리눅스 시스템 자체가 생성하는
패킷을 제어하는 사슬입니다
FORWARD: 리눅스 시스템을 통과하는 패킷을 관리하는 사슬로 한 네트워크를 다른 네트워크와
연결하기 위해 iptables 방화벽을 사용해서, 두 네트워크 간의 패킷이 방화벽을 통과하는 경우에 사용되고,
NAT 기반으로 하나의 공인 IP를 여러 대의 사설 IP를 사용하는 시스템들을 공유해서 사용할 경우
사설 IP를 사용하는 시스템의 접근 제어 정책을 설정할 때 사용합니다