카테고리 없음

netfilter

TechNote.kr 2018. 5. 27. 01:54
728x90

iptables : linux kernel의 firewall (netfilter) 를 설정하는 user-space program로 netfilter core 팀에 의해 작성


좀 더 구체적으로 protocol에 따라 아래와 같다.

iptables : IPv4

ip6tables : IPv6

arptables : ARP

ebtables : ethernet frames bridge


iptables 는 user-space program을 말할 때 사용되기도 하지만 kernel-space의 IPv4 firewall을 말할 때도 사용된다.

4개의 방화벽 구조를 통틀어 Xtables 라고 하기도 한다. 

 

kernel 3.13 이후 new packet classification framework라고 해서 ntftables가 기존 Xtables infrastructure 를 대신하기도 한다. 

ntftables는 ntf 라는 user-space program 으로 설정한다.

compatibility layer를 통해 iptables command 사용이 가능하다.

기존 iptables 의 3/4 정도의 기능을 제공하고, 새로운 기능을 제공하기도 한다. 


Xtables는 system administrator가 packet을 다루기 위한 rule의 chain을 포함하는 table을 정의할 수 있도록 한다. 

각 Table의 chain내 rule들은 순차적으로 수행된다.


packet 은 처음에 어떤 chain을 수행할지 정한다. table이 모든 chain을 가지고 있지 않을 수도 있지만 일반적으로 5개 종류의 predefine된 chain 이 존재한다.   


5개의 predefine chain

PREROUTING: 외부에서 패킷이 들어오고 routing (input or forward) 이 되기 전에 마주하는 chain

INPUT: Host로 전달되는 모든 패킷이 마주하는 chain

FORWARD: 목적지가 Host가 아닌 packet으로 host를 통과하는 패킷들이 마주하는 chain

OUTPUT: Host에서 발생하는 모든 패킷들이 마주하는 chain

POSTROUTING: forward or output 이후 패킷들의 routing이 결정된 이후 마주하는 chain


netfilter 입장에서 5개의 Hook point

    NF_INET_PRE_ROUTING,

    NF_INET_LOCAL_IN,

    NF_INET_FORWARD,

    NF_INET_LOCAL_OUT,

    NF_INET_POST_ROUTING,


http://webterror.net/?p=1622   그림 참조


chain 내 각 rule들은 어떤 packet 들이 매치되는지 명시를 포함한다. 만약 규칙이 패킷과 맞지 않는다면 다음 규칙으로 넘어간다. 


iptables는 Filter Table, NAT Table, Mangle Table, Raw Table, Security Table 총 5가지의 Table을 제공한다.


Filter Table - Packet Filtering을 위한 Table이다. Packet을 Packet의 목적지까지 전달할지 아니면 Packet을 Drop할지 결정한다. Firewall 기능은 Filter Table을 통해 구축 가능하다.

NAT Table - Packet NAT(Network Address Translation)를 위한 Table이다. Packet의 Source Address나 Destination Address를 변경한다.

Mangle Table - Packet의 IP Header를 바꾼다. Packet의 TTL(Time to Live)를 변경하거나 Packet을 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이다.


https://ssup2.github.io/theory_analysis/Linux_netfilter_iptables/


Qdisc (Queueing Disciplines) : 패킷을 받고 서비스하기 위한 순서를 정하기 위한 룰들의 집합

ingress qdisc : 내부로 들어오는 패킷을 위한 qdisc

egress qdisc 외부로 나가는 패킷을 위한 qdisc


bridge check : 두 개의 ethernet segment를 연결하는 것을 bridge라고 한다. ethernet 주소를 기반으로 전송한다. 

               패킷을 수신한 interface가 bridge에 포함되어 있는지 여부만 체크한다. 

   

bridge level은 ebtables (Ethernet bridge frame table 관리)를 통해 진행되는 부분.

http://ebtables.netfilter.org/br_fw_ia/br_fw_ia.html


broute(brouting) [ebtables]: 수신한 frame에 대해 IP 기반으로 route를 할지 기본으로 bridge를 할지 판단하는 부분.

nat (prerouting) [ebtables]: 여기서 frames의 destination MAC address 을 수정할 수 있음 (DNAT)

                             여기를 통과하면 bridge code는 어디로 frame을 전달될지 결정되어짐. (IP address는 don't care)

728x90