본문 바로가기

nftables

nftables 이란 / netfilter.org nftables project

source: https://www.nftables.org/projects/nftables/index.html

미리 읽으면 좋은 글: Ubuntu ufw & iptables & nftables

다음 글: Ubuntu nftables 설치

글을 한글로 옮기는 배경

필자는 Ubuntu 시스템에서 아주 간단하게 iptables을 이용하고 있으나 ufw를 이용하지 않고 있습니다. 그러나 좀 자세하게 알아봐야 겠다고 생각하고 Ubuntu ufw & iptables & nftables를 만들었습니다. 과거부터 시스템 운영자들이 DDoS가 시스템으로 들어올 때 iptables을 이용하여 방어하는 것을 들어왔습니다. 그러나 항상 들었던 문제는 rule을 많이 추가하면 성능이 확 떨어진다, 추가할 수 있는 rule 개수 제한이 있다 등이었습니다. 그래서 필자가 가지고 있는 패켓필터링에 대한 생각은

  • 대량의 DDoS 패켓은 전문 Hardware 방화벽을 이용해 차단한다
  • Session 기반의 공격 패켓은 L4/L7 전문 Hardware 장비를 이용하여 차단한다
  • 나머지 시스템을 들어오는 공격 패켓은 iptables로 보완하여 차단한다

였습니다. 그러나 iptables, ufw가 무엇인지 알아보는 과정에서 nftables을 알게 되었고, iptables 대신 nftables 사용하기 라는 글일 읽게 되었습니다. 이 글에서 nftables 성능이 매우 뛰어나다는 것 (ipset 또는 nftset을 이용할 경우 성는이 뛰어남. linear matching을 사용하면 nftables이 더 느림. 참고링크), 어댑터 단의 트래픽 컨트롤을 어려운 문법으로 수행하지 않아도 된다는 장점, 그리고 무엇보다도 국내에 한글로 된 글이 희박하다는 것을 보고, 필자도 nftables을 학습하여 활용하기 위해 번역하듯이 메모를 남깁니다.  

nftables 이란? 

ip tables, ip6 tables, arp tables, eb tables을 대체할 수 있습니다. kernel 안에서 패켓 분류를 하는 틀을 제공합니다. hook, connection tracking system, NAT, queueing, logging 과 같은 netfilter subsystem을 그대로 이용합니다. 이용자 명령어는 nft입니다.  libnftables이라는 이용자 라이브러리를 제공하는데, JSON 관련 기능을 제공합니다. 

nftables 상태?

Linux kernel 3.13 이상에서 이용할 수 있습니다. 최근 발표된 Ubuntu 21.04의 kernel은 5.11, 18.04의 kernel은 5.4 이상입니다. 

중요 기능

  • Network-specific VM: nft는 ruleset을 VM bytecode로 만들어 nftables Netlink API를 이용해 VM Kernel에 저장합니다. 반대로 nft가 운영되는 ruleset을 조회하면 VM bytecode를 읽어 보여줍니다. 즉 nft는 컴파일러와 디컴파일러 역할을 합니다. 
  • maps과 concatenation을 이용하여 ruleset을 빠르게 검사합니다. 
  • kernel code 크기가 상대적으로 작습니다. 이유는 해석하기 어렵습니다만 (The intelligence is placed in userspace nft command line tool, which is considerably more complex than iptables in terms of codebase, however, in the midrun, this will potentially allow us to deliver new features by upgrading the userspace command line tool, with no need of kernel upgrades.)
  • 여러 프로토콜을 지원하는 통일된 일관성있는 문법을 제공합니다. 

참조 문서

 

nftables 전체 글 목록 (계속 추가중)

  1. Ubuntu nftables 설치
  2. 테이정 / configuring tables
  3. 체인 설정 / Configuring chains
  4. 룰 설정 / Simple rule management
  5. 순식간에 많은 룰 변경 / Atomic rule replacement
  6. 명령어에서 오류 출력
  7. 룰 표현 / Building rules through expressions
  8. 룰셋 레벨 명령 / Operations at ruleset level
  9. 룰셋 갱신 지켜보기 / Monitoring ruleset updates
  10. Scripting
  11. 룰셋 Ruleset debug/tracing
  12. Output text modifier
  13. nftables examples