반응형
Linux Netfilter, iptables
- Linux안에 있는 Netfilter Framework를 분석하고 Netfilter를 이용하는 iptables tool을 분석한다.
1. Netfilter
- Netfilter는 Linux를 위한 Network Packet Filtering Framework이다. Linux Application은 Netfilter를 통해서 Linux Kernel로 전달되는 Packet을 변환 및 조작할 수 있다.
1.1 Hooks
- NF_IP_PRE_ROUTING: 외부에서 온 Packet이 Linux Kernel의 Network Stack을 통과하기 전에 발생하는 Hook이다. Packet을 Routing하기 전에 발생
- NF_IP_LOCAL_IN: Packet이 Routing된 후 목적지가 자신일 경우, Packet을 Process에 전달하기 전에 발생
- NF_IP_FORWARD: Packet이 Routing된 후 목적지가 자신이 아닐 경우, Packet을 다른 곳으로 Forwarding하는 경우 발생
- NF_IP_LOCAL_OUT: Packet이 Process에서 나와 Network Stack을 통과하기 전 발생
- NF_IP_POST_ROUTING: Packet이 Network Stack을 통과한 후 밖으로 보내기 전 발생
1.2 시나리오
- 목적지가 자신일 경우: NF_IP_PRE_ROUTING -> NF_IP_LOCAL_IN -> Process
- 목적지가 자신이 아닌경우: NF_IP_PRE_ROUTING -> NF_IP_FORWARD -> NF_IP_POST_ROUTING -> Network Interface
- Process에서 전송하는 Packet: NF_IP_LOCAL_OUT -> NF_IP_POST_ROUTING -> Network Interface
2. iptables
- iptables는 Netfilter Framework를 이용하는 대표 Tool이다.
- iptables를 이용하여 Packet을 제어하거나 조작할 수 잇다.
2.1 tables
- fileter Table: packet을 drop할지 전달할지 결정
- NAT table: Packet NAT(Network Address Translation)을 위한 table. packet의 source/destination address를 변경
- Mangle Table: Packet의 IP header를 바꿈. Packet의 TTL 변경, Marking하여 다른 iptables의 Table이나 Network tool에서 Packet을 구분 할 수 있도록 함
- Raw Table: Netfilter Framework는 Hook 뿐만 아니라 Connection Tracking 기능을 제공한다. 이전에 도착한 Packet들을 바탕으로 방금 도착한 Packet의 Connection을 추적한다. Raw Table은 특정 Packet이 Connection Tracking에서 제외되도록 설정한다.
- Security Table: SELinux에서 Packet을 어떻게 처리할지 결정하기 위한 Table
반응형