개요

앞서 간단하게 방화벽 카테고리에 대한 서론을 쓰자면 조그만 보안회사에 다니는 방화벽 개발쪽 업무도 담당하고 있었는데

이번에 신규 제품을 런칭하게 되면서 기존에 쓰던 iptables를 nftables로 마이그레이션을 하려고 보니 공식 문서 외에는 국내 포스트가

많이 없다는 점을 발견하게 되어서 nftables 방화벽을 개발하면서 앞으로 사용하실분들이 쉽게 이해하셨으면해서 글을 올리게 되었습니다

nftables란?

nftables란 netfilter사의 iptables의 후속작으로 나온 방화벽으로 리눅스 커널의 netfilter 모듈을 이용한 방화벽입니다.

리눅스 커널 3.13이상의 커널이 적용된 OS위에서 돌아갑니다.

iptables와의 차이점

iptables는 기본적으로 nat, mangle, raw, filter, security등의 테이블과 arptables, ip6tables와 같이 역할이 많이 분사되어 있었다면

nftables는 기본체인과 테이블을 제거함으로써 불필요한 자원 소모와 사용자에게 높은 자유도와 하나로 통합된 편의성을 제공합니다.

성능적인 측면에서는 iptables과 nftables는 각각 우세한 부분이 있었지만 유지보수를 고려하여  최신 방화벽을 사용하기로 결정했습니다.

 

nftables 기본 명령어

방화벽이라고 한다면 제일 먼저 구현해야되는 부분은 ip, port, protocol에 따른 필터링이 우선적입니다.

그래서 위 조건을 충족하는 명령어들을 기본 명령어라고 표기하고 글을 작성하겠습니다.

 

  iptables-translate [iptables 명령어]형식의 명령어를 사용하시면 iptables 명령어를 nftables 스타일로 변환해줍니다!

 

테이블 및 체인 생성

본격적인 필터링 명령어로 들어가기전 위에서 언급한바와 같이 nftables는 기본 테이블과 체인이 없어서 사용자가 직접 생성하여야 합니다

테이블 생성 명령어

nft add table ip filter

기존에 iptables을 이용하시던분이라면 기본 테이블에 정책들을 생성하셨을겁니다.

위 명령어가 iptables와 같은 기본 ip filter 테이블을 생성하는 명령어 입니다.

 

체인 생성 명령어

테이블을 생성하셨다면 그 테이블은 아무 체인도 없이 텅 빈 테이블일것입니다.

iptables는 input, forward, output 체인을 제공합니다. 같은 형식으로 nftables에 체인을 만들어보도록 하겠습니다

 

nft add chain ip filter input { type filter hook input priority 0 \; }
nft add chain ip filter forward { type filter hook forward priority 0\; }
nft add chain ip filter output { type filter hook output priority 0\; }

테이블 및 체인 조회 명령어

nft list tables // 테이블들을 조회하는 명령어 입니다
nft list table ip filter //iptables -L과 같은 명령어입니다

 

ip 필터링

ip를 기준으로 패킷을 필터링하는 명령어부터 작성하겠습니다

 

단일 IP 필터링

nft add rule ip filter input ip saddr 1.1.1.1 ip daddr 1.1.1.1 counter accept

saddr은 출발지 주소 daddr은 도착지 주소입니다. 

형식은 nft add rule [테이블] [체인] ip saddr [ip] ip daddr [ip] counter(패킷의 수를 세는 옵션) [accpet/drop]

 

다중 IP 필터링

nft add rule ip filter input ip saddr {1.1.1.1, 2.2.2.2/24, 3.3.3.3-3.3.3.5, 5.5.5.3} ip daddr {1.1.1.1, 2.2.2.2} counter accept

위와 같은 형식을 공유하지만 iptables와 달리 주소는 {} 중괄호를 이용해서 그룹으로 묶어줘야합니다.

하지만 1.1.1.1-2.2.2.2와 같은 범위 방식을 사용할때 iptables처럼 extension을 이용한 --src-range가 필요 없어졌습니다.

 

iptables에서는 단일, prefix, range를 한 정책에 넣지 못하였지만 nftables에서는 상관없이 혼용하여 사용이 가능합니다!
단 subnetmask방식(1.1.1.0/255.255.0.0)은 사라졌고 cidr(1.1.1.0/16)으로 통합되었습니다.

 

port & protocol 필터링

port, protocol을 기준으로 필터링하는 명령어에 대해서 알아보겠습니다.

 

단일 port 필터링

nft insert rule ip filter input tcp dport 8443 counter accept

위 명령어와 같이 프로토콜과 포트를 입력해서 필터링이 가능합니다. 물론 ip 필터링 명령어와 같이 사용도 가능합니다.

 

멀티 port 필터링

nft insert rule ip filter input ip tcp dport { 8443, 443 } counter accept

ip와 같이 포트도 {} 중괄호로 그룹으로 묶어 멀티 포트를 사용할 수 있습니다

 

iptables과 달리 nftables에는 multiport extension이 필요 없어요!

 

여기까지 해서 기본적인 nftables 명령어를 알아봤습니다.

더 자세한 extension이나 qos, session time등 심화적인 부분은 추후에 올릴 포스트에서 다루도록 하겠습니다

반응형
복사했습니다!