본문 바로가기
Linux/Linux Shell Command

nftables - iptables 이제 그만!!!

by 드로니뚜벅이 2023. 9. 30.

모든 Linux 관리자는 수년 동안 우리에게 좋은 서비스를 제공해 온 오랜 Linux 방화벽인 iptables를 사용하여 작업해 왔습니다. 이제 노후화된 iptables를 대체할 새로운 기능인 nftables에 익숙해 져야 할 것 같습니다.

nftables는 현대적인 Linux kernel packet 분류 프레임워크로 고전인 xtables( {ip,ip6,arp,eb}_tables ) 환경을 대신하여 새로운 코드가 사용되어집니다. 즉, 리눅스 커널에서 새로운 패킷 필터링 / 방화벽 엔진으로 현재 iptables, ip6tables, arptables, ebtables 로 나뉘어서 사용되던 것을 nftables로 교체 및 통합합니다. 사실, iptables 프레임워크가 서로 다르지만 유사한 기능을 제공하는 iptables, ip6tables, arptables 및 ebtables 간의 규칙을 동기화하는데 관리가 복잡해지고 효율적이지도 않습니다.

 

nftables는 현재 iptables를 관리하는 조직인 Netfilter에 의해 개발되었습니다. iptables의 문제점, 즉 확장성과 성능에 대한 해결책으로 만들어졌습니다. 새로운 구문과 일부 업그레이드를 제외하면 이전 버전과 매우 유사하게 작동한다는 것을 알 수 있습니다.


nftables는 2014년부터 Linux 커널에 포함되었지만 최근 채택이 더욱 광범위해지면서 더 많은 관심을 끌고 있습니다. Linux 세계에서는 변화가 느리고 오래된 유틸리티는 업그레이드된 유틸리티를 위해 단계적으로 폐기되는 데 몇 년 이상이 걸리는 경우가 많습니다.

nftables는 권장되는 방화벽으로 자리잡고 있으며 Linux 관리자는 레퍼토리를 업데이트해야 합니다. 수년 동안 iptables를 사용해 왔고 새로운 유틸리티를 배워야 한다는 생각이 별로 즐겁지 않겠지만 여기에서 nftables와 iptables의 차이점을 이해하고 새로운 nftables 구문에서 방화벽 규칙을 구성하는 예들을 살펴보겠습니다.


nftables의 체인 및 규칙

iptables에는 입력, 출력, 전달의 세 가지 기본 체인이 있습니다. 이 세 개의 "체인"(구성된 경우 다른 체인)은 "규칙"을 보유하며 iptables는 네트워크 트래픽을 체인의 규칙 목록과 일치시켜 작동합니다. 검사 중인 트래픽이 어떤 규칙과도 일치하지 않으면 트래픽에 체인의 기본 정책(예: ACCEPT, DROP)이 사용됩니다.

nftables는 "체인"과 "규칙"을 사용하여 이와 유사하게 작동합니다. 그러나 기본 체인으로 시작하지 않으므로 구성이 좀 더 유연해집니다.
iptables의 비효율성 중 하나는 트래픽이 어떤 규칙과도 일치하지 않는 경우에도 모든 네트워크 데이터가 앞서 언급한 체인 중 하나 이상을 통과해야 한다는 것입니다. 체인 구성 여부에 관계없이 iptables는 여전히 네트워크 데이터를 확인합니다.

 

Linux에 nftable 설치

nftables는 모든 주요 Linux 배포판에서 사용할 수 있으며 배포판의 패키지 관리자를 사용하여 쉽게 설치할 수 있습니다.
Ubuntu 또는 Debian 기반 배포판에서는 다음 명령을 사용할 수 있습니다.

$ sudo apt install nftables

시스템 재부팅 시 nftables가 자동으로 시작되도록 하려면:

$ sudo systemctl enable nftables.service

 

iptables와 nftables의 구문 차이

nftables는 iptables와 다르고 훨씬 간단한 구문을 가지고 있습니다. 솔직히 말해서 iptables 구문은 항상 불분명했고 배우려면 추가 노력이 필요했습니다. 운 좋게도 iptables에서 마이그레이션하는 경우 nftables는 여전히 이전 구문을 허용합니다.
iptables 명령을 허용하고 해당 명령을 nftables로 변환하는 iptables-translate 유틸리티를 사용할 수도 있습니다. 이는 두 구문이 어떻게 다른지 쉽게 확인할 수 있는 방법입니다.

다음 명령을 사용하여 Ubuntu 및 Debian 기반 배포판에 iptables-translate를 설치합니다.

$ sudo apt install iptables-nftables-compat


설치가 완료되면 iptables 구문을 iptables-translate 명령에 전달하면 nftables에 해당하는 명령이 반환됩니다.
이러한 명령이 서로 어떻게 다른지 확인할 수 있도록 몇 가지 예를 살펴보겠습니다.

 

들어오는 연결 차단

이 명령은 IP 주소 192.168.2.1에서 들어오는 연결을 차단합니다.

$ iptables-translate -A INPUT -s 192.168.2.1 -j DROP
$ nft add rule ip filter INPUT ip saddr 192.168.2.1 counter drop

 

들어오는 SSH 연결 허용

Linux 서버를 강화할 때 일반적으로 iptables에 입력하는 일반적인 내용인 몇 가지 예를 더 살펴보겠습니다.

$ iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ nft add rule ip filter INPUT tcp dport 22 ct state new,established counter accept

 

특정 IP 범위에서 들어오는 SSH 연결 허용

192.168.1.0/24에서 들어오는 SSH 연결을 허용하려면 다음을 수행하십시오.

$ iptables-translate -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ nft add rule ip filter INPUT ip saddr 192.168.1.0/24 tcp dport 22 ct state new,established counter accept

 

eth0 네트워크 인터페이스에 대한 MySQL 연결 허용

iptables 및 nftables의 구문은 다음과 같습니다.

$ iptables-translate -A INPUT -i eth0 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ nft add rule ip filter INPUT iifname eth0 tcp dport 3306 ct state new,established counter accept

 

들어오는 HTTP 및 HTTPS 트래픽 허용

특정 유형의 f 트래픽을 허용하기 위한 두 명령의 구문은 다음과 같습니다.

$ iptables-translate -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
$ nft add rule ip filter INPUT ip protocol tcp tcp dport { 80,443} ct state new,established counter accept

이 예에서 볼 수 있듯이 구문은 여전히 iptables와 매우 유사하지만 명령은 좀 더 직관적입니다.

 

nftables로 로깅

위의 nft 명령 예에 있는 "counter" 옵션은 iptables가 기본적으로 수행하는 것과 같이 규칙이 터치된 횟수를 계산하도록 nftables에 지시합니다.
nftables에서는 선택 사항이므로 지정해야 합니다.

$ nft add rule ip filter INPUT ip saddr 192.168.2.1 counter accept


nftables에는 구성을 내보내기 위한 옵션이 내장되어 있습니다. 현재 XML과 JSON을 지원합니다.

$ nft export xml

 

참고사이트