티스토리 뷰

os/Linux

nftables

Jacob_baek 2022. 8. 9. 15:59

nftables

현대적인 Linux kernel packet 분류 프레임워크이다.
고전인 xtables( {ip,ip6,arp,eb}_tables ) 환경을 대신하여 새로운 코드가 사용되어진다.
즉, 리눅스 커널에서 새로운 패킷 필터링 / 방화벽 엔진으로
현재 iptables, ip6tables, arptables, ebtables 로 나뉘어서 사용되던 것을 nftables로 교체 및 통합 한다.

nftables 동작을 위한 기반사항

  • Linux kernel since 3.13 이상
  • libmnl (minimalistic Netlink library)
  • libnftnl (저수준 netlink userspace library)
  • nft (nftables를 사용하기 위한 사용자 도구)

linux kernel version 3.13 부터는 iptables를 nftables가 대체한다.

https://kernelnewbies.org/Linux_3.13#nftables.2C_the_successor_of_iptables

nftables 특징(iptables보다 상대적으로 나은점)

오래전(2014)에 정리해둔것인데 아래와 같은 특징이 있었던 링크를 찾을수 없다.
해당 특징은 참고용으로만 확인하길 바란다.

  • Linux Kernel ABI의 단순화
  • 코드 중복 제거
  • 개선된 에러 리포팅
  • 더 효율적인 실행, 저장, 필터링 규칙의 증가된 변화

ABI(Application Binary Interface)

컴파일러가 두 프로그램의 상호호출이 가능하도록 컴파일러마다 다른 규칙으로 변경하던것을

맞추는 것을 의미(Name Mangling)한다. 즉, 두개의 프로그램 모듈을 연결하는 것을 뜻한다.

소스코드와 라이브러리간의 인터페이스를 정의 하는 API와는 다르다.

추가적으로 EABI(Embedded Application Binray Interface)가 있다.

대표적인것이 Wabi, Wine 등이 있다.

iptables vs nftables

nftables도 Netfilter를 사용하여 개발되었다.
만들어진 배경은 iptables의 확장성과 성능에 대한 개선의 목적을 가지며
각 *.tables(iptables, ip6table, arptable, ebtable)로 생성된 동기화 되야하는 규칙을 유지시키는것은 비효율적이다.
(ex. ipv4/ipv6 ip에 대해 80 port를
nftables는 이를 하나의 인터페이스로 관리되어질수 있게 한다.

Netfilter
Linux subsystem의 하나로 network stack내에 다양한 연산을 핸들러 형태로 구현 가능하도록 hook을 제공한다.
해당 hook은 NF_IP_LOCAL_OUT, NF_IP_LOCAL_IN, NF_IP_POST_ROUTING, NF_IP_FORWARD, NF_IP_PRE_ROUTING 등이 있다.
이러한 hook을 NF_DROP, NF_ACCEPT, NF_STOLEN, NF_QUEUE, NF_REPEAT 등의 return을 수행할수 있게 해준다.

관련 자료들

How to use nft command

table 및 chain을 생성하고 rule을 추가하는 방법을 간단히 알아보자.

table 생성
[root@dubaek-testvm rocky]# nft list tables
table ip filter
[root@dubaek-testvm rocky]# nft add table inet jacob_table
[root@dubaek-testvm rocky]# nft list tables
table ip filter
table inet jacob_table
chain 생성
[root@dubaek-testvm rocky]# nft list chains
table ip filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }
        chain FORWARD {
                type filter hook forward priority filter; policy accept;
        }
        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}
table inet jacob_table {
}
[root@dubaek-testvm rocky]# nft add chain inet jacob_table NAT '{ type filter hook forward priority filter; policy accept ; }'
[root@dubaek-testvm rocky]# nft list chains
table ip filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }
        chain FORWARD {
                type filter hook forward priority filter; policy accept;
        }
        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}
table inet jacob_table {
        chain NAT {
                type filter hook forward priority filter; policy accept;
        }
}
ruleset
[root@dubaek-testvm rocky]# nft add rule inet jacob_table NAT tcp dport 8080 accept
[root@dubaek-testvm rocky]# nft list ruleset
table ip filter {
        chain INPUT {
                type filter hook input priority filter; policy accept;
        }

        chain FORWARD {
                type filter hook forward priority filter; policy accept;
        }

        chain OUTPUT {
                type filter hook output priority filter; policy accept;
        }
}
table inet jacob_table {
        chain NAT {
                type filter hook forward priority filter; policy accept;
                tcp dport 8080 accept
        }
}

다음 빠르게 흝을수 있는 링크를 참고하여 좀더 난이도 있는 룰을 생성하자.

what is best solution (iptables vs nftables)

사실 iptables을 전적으로 많이 사용하고 있었기에 이를 한번에 뒤집기는 어렵다.
과도기적인 부분으로 아래 red hat blog에서 언급하듯이 iptables-nft와 같은 도구가 현실적이긴하다.
다만 이 또한 과도기를 좀더 유하게 넘어가기 위함이지 최종적으로는 nftables를 사용하는것을 권장한다.

BPF

참고사이트

'os > Linux' 카테고리의 다른 글

Ubuntu ringbuffer size permanent changing  (0) 2022.08.09
nftables  (0) 2022.08.09
print net_ratelimit in the message  (0) 2022.02.15
process max open files with systemd  (0) 2021.11.24
How to occur hung_task_panic on Rocky Linux  (0) 2021.11.03
Ubuntu CVE Status  (0) 2021.03.17
댓글
댓글쓰기 폼