상세 컨텐츠

본문 제목

Netfilter(iptables, ebtables)

프로그래밍/Network

by wlwwlwwlw 2021. 8. 12. 18:20

본문

[Netfilter]

Linux 커널 영역에서 사용되는 패킷 필터링 도구를 netfilter라고 한다. 

netfilter를 조작하기 위한 사용자 영역에서 사용되는 유틸리티는 iptables, ebtables, arptables 등이 있다. 

Config 설정 

netfilter를 사용하하려면 커널 Config 설정에서 CONFIG_NETFILTER가 켜져 있어야 한다. 

커널 Config 설정에서 netfilter 설정은 다음과 같다. 

Networking options 
        --->Network packet filtering framework (Netfilter)
                ---> Ethernet Bridge tables (ebtables) support 

Hooking

netfilter는 5개의 Hooking 지점을 제공한다. 

  • PREROUTING : 외부에서 들어온 패킷이 kernel의 네트워크 스택을 통과하기 전 처리. 목적지의 주소 변경 (DNAT)
  • INPUT : 외부에서 로컬 프로세스로 들어오는 패킷의 처리. 라우팅 된 패킷의 목적지가 자신일 경우. 패킷 처리 후 사용자 영역의 프로세스로 전달
  • OUTPUT : 외부로 나가는 패킷이 네트워크 스택을 통과하기 전에 처리. 
  • FORWARD : 라우팅 된 패킷의 목적지가 자신이 아닐 경우. 패킷을 통과시켜 포워딩하는 경우에 대한 처리. 지나가는 패킷에 대한 처리 
  • POSTROUTING : 네트워크 스택을 통과한 후 외부로 나갈 패킷에 대한 처리. 출발지의 주소 변경 (SNAT)

Netfilter Hooking Point

[iptables]

Table

iptables는 총 5가지 Table을 제공한다. 주로 filter, nat, mangle 3가지 table을 사용한다. 

  • filter Table : 가장 많이 사용하는 기본 테이블로 특정 rule에 따라 패킷을 필터링한다. 
  • nat Table : 패킷의 Network Address Translation을 위한 테이블. 패킷의 Source Address나 Destination Address를 변경한다. 
  • mangle Table : 패킷의 IP 헤더를 변경하기위한 테이블. 패킷의 TTL이나 TOS(Type of Service)를 변경할 때 사용. 패킷을 Marking 하여 패킷을 구분하는 데 사용. 
  • raw Table
  • security Table 

Option

Option  
-A, --append 규칙을 추가할 때 
-D, --delete 규칙을 삭제할 때 (일치되는 규칙을 찾거나, 선택한 Chain의 번호로 삭제 가능)
-I, --insert  규칙을 삽입할 때, 번호가 1번일 경우 Chain의 가장 위쪽에 삽입된다. 
-R, --replace  선택한 Chain의 규칙을 교체할 때
-L, --list 선택한 Chain의 list를 보여줌. 선택한 Chain이 없을 때는 모든 Chain을 보여줌. 
-F, --flush Chain의 규칙을 비울 때
-N, --new-chain 새로운 Chain을 생성할 때 
-X, --delete-chain Chain을 삭제할 때 
-P, --policy Chain의 정책을 설정할 때 
-E, --rename-chain 추가한 Chain에 대해 이름을 변경할 때 

 

[ebtables]

ebtables는 이더넷 프레임관점에서 netfilter rule을 설정하는 사용자 영역 유틸리티이다. iptables와 유사하지만 이더넷 프로토콜이 IP 프로토콜보다 훨씬 간단하기 때문에 덜 복잡하다. 

Table

ebtables에는 총 3가지 Table을 제공한다. 

  • filter Table : 기본 테이블로 세가지 기본 체인을 포함한다. (INPUT, OUTPUT, FORWARD)
  • nat Table : 주로 mac 주소를 변경하는데 사용되며 3개의 체인을 포함한다. (PREROUTING, OUTPUT, POSTROUTING)
  • broute Table : brouter를 만드는데 사용되며 BROUTING이라는 체인이 내장되어 있다. broute table에서 DROP과 ACCEPT는 조금 다른 의미를 가지는데 DROP은 실제로 프레임이 라우팅되어야 함을 의미하고, ACCEPT는 프레임이 브릿징되어야함을 의미한다. 

Target

  • ACCEPT : 프레임을 통과시킴
  • DROP : 프레임을 삭제시킴, 그러나 BROUTING 체인에서 ACCEPT, DROP은 다른 의미를 갖는다.
  • CONTINUE : 다음 규칙 확인
  • RETURN : 현재 체인의 탐색을 중지하고 이전 체인(현재 체인을 호출한 체인)의 다음 규칙을 이어서 수행함. 

Rule

 

IPv6  
--ip6-source, --ip6-src[/mask] IPv6 출발지 주소
--ip6-destination, --ip6-dst[/mask]  IPv6 목적지 주소
--ip6-tclass Pv6 traffic 클래스(hex값)
--ip6-protocol, --ip6-proto IP 프로토콜
--ip6-source-port, --ip6-sport[:port]  출발지 포트 또는 포트 범위, protocol 6(TCP), 17(UDP), 33(DCCP), 132(SCTP)만 해당 옵션 사용 가능함. 
--ip6-destination-port, --ip6-dport[:port] 도착지 포트 또는 포트 범위, protocol 6(TCP), 17(UDP), 33(DCCP), 132(SCTP)만 해당 옵션 사용 가능함.   

 

'프로그래밍 > Network' 카테고리의 다른 글

IPv6  (0) 2021.08.24

관련글 더보기