넷필터

Netfilter
넷필터
안정된 릴리스
5.19[1] / 2022년 7월 31일; 4일 전 (2022년 7월 31일)
프리뷰 릴리즈
5.19-rc8[2] / 2022년 7월 24일; 11일 (2022년 7월 24일)
기입처C
운영 체제리눅스
유형
면허증.GNU GPL
웹 사이트netfilter.org

NetfilterLinux 커널에 의해 제공되는 프레임워크로 다양한 네트워킹 관련 작업을 맞춤형 핸들러 형태로 구현할 수 있습니다.Netfilter에는 패킷필터링, 네트워크주소 변환포트 변환의 다양한 기능과 조작이 준비되어 있습니다.이러한 기능은, 네트워크를 개입시켜 패킷을 송신해, 네트워크내의 기밀 장소에 패킷이 도달하는 것을 금지하는데 필요한 기능을 제공합니다.

Netfilter는 Linux 커널 내부의 일련의 후크를 나타내며, 특정 커널 모듈이 커널의 네트워킹 스택에 콜백 함수를 등록할 수 있도록 합니다.이러한 함수는 보통 필터링 및 변경 규칙 형식으로 트래픽에 적용되며 네트워킹스택 [3]내의 각 후크를 통과하는 모든 패킷에 대해 호출됩니다.

역사

다른 Netfilter 컴포넌트(일부)의 관계

Rusty Russell은 1998년에 넷필터/iptables 프로젝트를 시작했습니다.또, 프로젝트의 전신인 ipchains도 작성했습니다.프로젝트가 성장함에 따라 그는 1999년에 Netfilter Core Team(또는 단순히 핵심 팀)을 설립했습니다.이들이 제작한 소프트웨어(이후 netfilter라고 )는 GNU General Public License(GPL) 라이선스를 사용하며 2000년 3월에 Linux 커널 메인라인 버전 2.4.x로 통합되었습니다.

2003년 8월에 Harald Welte는 핵심 팀의 회장이 되었습니다.2004년 4월, GPL에 준거하지 않고 라우터에 내장된 프로젝트의 소프트웨어를 배포하는 사람들을 단속한 후, 독일 법원은 GPL의 조건을 따르기를 거부한 사이트콤 독일에 대해 역사적금지 명령을 내렸다(GPL 관련 분쟁 참조).2007년 9월, 수년간 개발을 주도해 온 Patrick McHardy가 코어 팀의 새로운 회장으로 선출되었습니다.

iptables 이전에는 Linux 방화벽을 작성하기 위한 주요 소프트웨어 패키지는 Linux 커널 2.2.x의 ipchains와 Linux 커널 2.0.x의 ipfwadm이었고, 이는 BSD의 ipfw기반으로 했습니다.Netfilter가 도입될 때까지 Linux 커널에는 일반적인 패킷 제어 프레임워크가 없었기 때문에 ipchains와 ipfwadm은 모두 네트워킹코드를 변경하여 패킷을 조작할 수 있습니다.

ipchains 및 ipfwadm은 패킷필터링과 NAT(특히 위장, 포트 포워딩 리다이렉션이라고 불리는3종류의 특정 NAT)를 조합하고 있습니다만, Netfilter 는 패킷 조작을 복수의 부분으로 분할합니다.각각 다른 포인트의 Netfilter 훅에 접속하여 패킷에 액세스합니다.접속 트래킹과 NAT 서브시스템은 ipchains 및 ipfwadm 내의 기본 버전보다 일반적이고 강력합니다.

2017년에는 IPv4 및 IPv6 흐름 오프로드 인프라가 추가되어 소프트웨어 흐름 테이블 포워딩 및 하드웨어 오프로드 [4][5]지원 속도가 향상되었습니다.

사용자 공간 유틸리티 프로그램

레거시 iptables 패킷 필터링을 사용한 Netfilter 경유 네트워크 패킷 흐름

iptables

커널 모듈 이름ip_tables,ip6_tables,arp_tables(밑줄은 이름의 일부입니다.)ebtables는, Netfilter 훅 시스템의 레거시 패킷필터링 부분으로 구성됩니다.이들은 패킷을 필터링 또는 변환할 수 있는 방화벽 규칙을 정의하기 위한 테이블 기반 시스템을 제공합니다.테이블은 사용자 공간 도구를 통해 관리할 수 있습니다.iptables,ip6tables,arptables,그리고.ebtables커널 모듈과 사용자 공간 유틸리티의 이름은 비슷하지만 각각 다른 기능을 가진 엔티티입니다.

각 테이블은 실제로 자체 후크이며, 각 테이블은 특정 목적을 위해 도입되었습니다.Netfilter에 관한 한, Netfilter는 특정 테이블을 다른 테이블에 대해 특정 순서로 실행합니다.모든 테이블이 자신을 호출할 수 있으며 자체 규칙을 실행할 수도 있으므로 추가 처리 및 반복이 가능합니다.

규칙은 체인, 즉 "규칙 체인"으로 구성됩니다.이러한 체인의 이름은 다음과 같은 사전 정의된 제목으로 지정됩니다.INPUT,OUTPUT그리고.FORWARD이러한 체인 타이틀은, Netfilter 스택의 발신기지 설명에 도움이 됩니다.예를 들어 패킷 수신은PREROUTING, 한편,INPUT로컬로 전송된 데이터를 나타내며 전송된 트래픽은FORWARD로컬로 생성된 출력은 다음 명령을 통과합니다.OUTPUT송신되는 패킷은, 체인에 접속되어 있습니다.POSTROUTING쇠사슬을 채우다

Netfilter 모듈은 테이블로 구성되어 있지 않습니다(아래 참조).원점을 체크하여 동작 모드를 선택할 수 있습니다.

iptable_raw모듈
로드되면 다른 Netfilter 후크보다 먼저 호출되는 후크를 등록합니다.raw 라고 하는 테이블을 제공합니다.이 테이블을 사용하면 패킷이 Connection Tracking 등의 메모리를 필요로 하는 조작에 도달하기 전에 필터링 할 수 있습니다.
iptable_mangle모듈
패킷을 변경할 수 있도록 Connection Tracking(아래 참조) 후(다른 테이블보다 이전) 실행하도록 후크 및 망글테이블을 등록합니다.이것에 의해, NAT 나 그 외의 필터링등의 룰에 의한 추가의 변경이 가능하게 됩니다.
iptable_nat모듈
2개의 훅을 등록합니다.필터 훅 전에 수신처 네트워크주소 변환 베이스 변환(DNAT)이 적용됩니다.그 후에 송신원네트워크 주소 변환 베이스 변환(SNAT)이 적용됩니다.iptables에서 사용할 수 있는 네트워크주소 변환 테이블(또는 「nat」)은, NAT 매핑 전용의 「컨피규레이션 데이터베이스」일 뿐, 어떠한 종류의 필터링도 의도하고 있지 않습니다.
iptable_filter모듈
범용 필터링(방화벽)에 사용되는 필터 테이블을 등록합니다.
security_filter모듈
에 의해 네이블로 되어 있는 규칙 등 필수 접근컨트롤(MAC) 네트워크 규칙에 사용됩니다.SECMARK그리고.CONNSECMARK타겟(이러한 「타깃」은, 시큐러티 강화 Linux 마커를 가리킵니다).필수 접근 제어는 SELinux 등의 Linux 보안 모듈에 의해 구현됩니다.보안 테이블은 필터 테이블의 호출에 따라 호출되며 필터 테이블 내의 모든 Discreative Access Control(DAC; 임의 접근컨트롤) 규칙이 MAC 규칙보다 먼저 유효하게 됩니다.다음 표에 내장된 체인을 나타냅니다.INPUT(컴퓨터 자체에 착신하는 패킷의 경우),OUTPUT(루팅 전에 로컬로 생성된 패킷을 변경하는 경우)FORWARD(컴퓨터를 통해 라우팅되는 패킷을 변경합니다).

키보드

nftables는 Netfilter의 새로운 패킷필터링 부분입니다. nft가 새로운 사용자 공간 유틸리티로iptables,ip6tables,arptables그리고.ebtables.

nftables 커널 엔진은 단순한 가상 머신을 Linux 커널에 추가합니다.이 커널에서는 바이트 코드를 실행하여 네트워크 패킷을 검사하고 해당 패킷의 처리 방법을 결정할 수 있습니다.이 가상 시스템에서 구현된 작업은 패킷 자체에서 데이터를 가져오고, 관련 메타데이터(예: 인바운드 인터페이스)를 확인하고, 연결 추적 데이터를 관리할 수 있도록 의도적으로 기본화되었습니다.산술 연산자, 비트 연산자 및 비교 연산자를 사용하여 해당 데이터를 기반으로 결정을 내릴 수 있습니다.또한 가상 시스템은 데이터 집합(일반적으로 IP 주소)을 조작할 수 있으므로 여러 비교 작업을 단일 집합 [6]조회로 대체할 수 있습니다.

이는 기존 Xtables(iptables 등) 코드와 대조적입니다.이 코드는 프로토콜 인식이 너무 깊이 내장되어 있기 때문에 IPv4, IPv6, ARP 및 이더넷 브리징을 위해 4번 복제해야 했습니다. 방화벽 엔진은 프로토콜에 한정되어 일반 [6]방식으로 사용할 수 없기 때문입니다.에 비해 주요 장점iptablesLinux 커널 ABI의 심플화, 코드 복제의 삭감, 에러 리포트의 개선, 필터링 규칙의 보다 효율적인 실행, 보존, 증분적인 원자 변경등이 있습니다.

패킷 조각 모음

nf_defrag_ipv4모듈은, Netfilter 의 접속 트래킹에 도달하기 전에 IPv4 패킷을 디플러그 합니다(nf_conntrack_ipv4모듈)을 클릭합니다.이는 커널 내 접속 트래킹 및 NAT 도우미 모듈('mini-ALG'의 일종)에 필요합니다.이 모듈은 반드시 fragment에 대해서만 동작하는 것은 아닙니다.

IPv6 디플러그 자체는 모듈이 아니지만,nf_conntrack_ipv6모듈.

접속 추적

Netfilter 프레임워크 위에 구축된 중요한 기능 중 하나는 연결 [7]추적입니다.접속 트래킹을 통해 커널은 모든 논리적 네트워크 연결 또는 세션을 추적할 수 있으며, 이로 인해 연결을 구성하는 모든 패킷이 관련됩니다.NAT은 이 정보를 사용하여 모든 관련 패킷을 동일한 방법으로 변환합니다.iptables는 이 정보를 사용하여 스테이트풀 방화벽으로 동작할 수 있습니다.

단, 접속 상태는 TCP 또는 SCTP 상태 등 상위 수준 상태와는 완전히 독립적입니다.그 이유의 일부는 단순히 패킷을 전송할 때(로컬 전달이 없는 경우) TCP 엔진이 전혀 호출되지 않을 수 있기 때문입니다.UDP, IPsec(AH/ESP), GRE 및 기타 터널링 프로토콜과 같은 무접속 모드 전송도 적어도 의사 연결 상태를 가집니다.이러한 프로토콜에 대한 경험적 접근은 종종 비활성화에 대한 사전 설정된 시간 초과 값을 기반으로 하며, 이 값이 만료되면 Netfilter 연결이 끊어집니다.

각 Netfilter 연결은 (레이어 3 프로토콜, 소스 주소, 수신처 주소, 레이어 4 프로토콜, 레이어 4 키) 태플에 의해 고유하게 식별됩니다.레이어 4 키는 전송 프로토콜에 따라 달라집니다.TCP/UDP의 경우 포트 번호이며 터널의 경우 터널 ID가 될 수 있지만 그 이외의 경우 태플의 일부가 아닌 것처럼 0입니다.모든 경우에 TCP 포트를 검사할 수 있도록 패킷은 강제로 조각 모음됩니다.

사용자 공간 도구를 사용하여 Netfilter 연결을 조작할 수 있습니다.conntrack.

iptables는 상태, 상태 등의 접속 정보를 체크함으로써 패킷필터링 규칙을 보다 강력하고 관리하기 쉽게 할 수 있습니다.가장 일반적인 상태는 다음과 같습니다.

NEW
새 연결을 생성하려고 합니다.
ESTABLISHED
기존 접속의 일부
RELATED
새로운 접속을 개시해, 「예상」되고 있는 패킷에 할당됩니다.상기 미니 ALG는, 예를 들면, 다음과 같이 이러한 기대를 설정합니다.nf_conntrack_ftp모듈이 FTP를 인식합니다.PASV" 명령어
INVALID
패킷이 유효하지 않은 것으로 판명되었습니다.예를 들어 TCP 상태 다이어그램에 준거하지 않습니다.
UNTRACKED
특정 패킷의 접속 트래킹을 바이패스하기 위해 관리자가 할당할 수 있는 특수한 상태(위의 raw table 참조).

일반적인 예로는 conntrack 서브시스템이 최초로 검출한 패킷은 "new"로 분류되고 응답은 "established"로 분류되며 ICMP 오류는 "related"로 분류됩니다.기존의 접속과 일치하지 않는ICMP 에러 패킷은, 「무효」가 됩니다.

접속 추적 도우미

플러그인 모듈을 사용함으로써 연결 추적은 애플리케이션 계층 프로토콜에 대한 지식을 얻을 수 있으며, 따라서 두 개 이상의 개별 연결이 "관련"되어 있음을 이해할 수 있습니다.예를 들어 FTP 프로토콜을 고려합니다.제어접속은 확립되지만 데이터가 전송될 때마다 이를 전송하기 위한 별도의 접속이 확립됩니다.언제?nf_conntrack_ftp모듈이 로드되면 FTP 데이터 연결의 첫 번째 패킷은 논리적으로 기존 연결의 일부이기 때문에 "new"가 아닌 "related"로 분류됩니다.

도우미는 한 번에 1개의 패킷만 검사하기 때문에 IP 플래그멘테이션 또는 TCP 세그멘테이션에 의해 접속 트래킹의 중요한 정보가 2개의 패킷으로 분할되어 있는 경우 도우미는 패턴을 인식할 필요가 없기 때문에 조작을 실행할 수 없습니다.IP 플래그멘테이션은 TCP 세그멘테이션은 처리되지 않지만 디플러그먼테이션이 필요한 접속 트래킹서브시스템에 대처합니다.FTP의 경우 세그먼트화는 다음과 같은 명령어 "근처"에서 발생하지 않는 것으로 간주됩니다.PASV표준 세그먼트사이즈이므로 Netfilter에서도 취급하지 않습니다.

네트워크 주소 변환

각 연결에는 원래 주소응답 주소 세트가 있으며, 처음에는 동일하게 시작됩니다.Netfilter 의 NAT 는, 응답 주소 및 필요에 따라서 포토를 변경하는 것만으로 실장됩니다.패킷을 수신하면, 그 접속 태플도 응답 주소의 페어(및 포토)와 비교됩니다.fragment가 없는 것도 NAT의 요건입니다(필요에 따라서, IPv4 패킷은, 통상의 Netfilter 이외의 IPv4 스택에 의해서 재플래그먼트 되는 경우가 있습니다).

NAT 도우미

접속 트래킹 도우미와 마찬가지로 NAT 도우미는 패킷 검사를 수행하여 페이로드 내의 응답 주소로 원래 주소를 대체합니다.

기타 Netfilter 프로젝트

Netfilter 코드를 직접 사용하는 커널 모듈은 아니지만 Netfilter 프로젝트는 몇 가지 더 주목할 만한 소프트웨어를 호스트합니다.

conntrack 툴

conntrack-tools는 시스템 관리자가 Connection Tracking 엔트리와 테이블을 조작할 수 있는 Linux용 사용자 공간 도구 세트입니다.패키지에는conntrackd데몬 및 명령줄 인터페이스conntrack사용자 공간 데몬conntrackd는 하이 어베이러빌리티 클러스터 기반의 스테이트 풀 방화벽을 이노블로 하여 스테이트 풀 방화벽 사용 통계 정보를 수집하기 위해 사용할 수 있습니다.명령줄 인터페이스conntrack접속 트래킹시스템에 대한 인터페이스가 구식보다 유연합니다./proc/net/nf_conntrack.

IPSet

Connection Tracking 등의 다른 확장과 달리ipset[8] 보다 관련이 있다iptables핵심 Netfilter 코드보다 더 커집니다. ipset예를 들어 Netfilter 훅을 사용하지 않지만 실제로는iptables모듈을 사용하여 IP 세트에 대한 최소한의 변경(set/clear)을 수행합니다.

라고 하는 사용자 공간 도구ipset는 Linux 커널에서 이른바 "IP 세트"를 설정, 유지보수 및 검사하기 위해 사용됩니다.IP 세트에는, 통상, IP 주소의 세트가 포함되어 있습니다만, 「타입」에 따라서는 다른 네트워크 번호의 세트를 포함할 수도 있습니다.이러한 세트는 베어보다 검색 효율이 훨씬 높습니다.iptables물론 메모리 용량이 더 커질 수 있습니다.(메모리 내의 데이터 구조에 대한) 다른 스토리지 알고리즘이 제공되고 있습니다.ipset사용자가 최적의 솔루션을 선택할 수 있습니다.

한 세트의 모든 엔트리를 다른 세트에 바인드할 수 있기 때문에 정교한 매칭 조작이 가능합니다.세트가 없는 경우에만 제거(파괴)할 수 있습니다.iptables관련 규칙 또는 기타 설정.

SYN 프록시

SYNPROXYtarget은 이러한 경우 접속 추적에 의해 부과되는 큰 성능 저하 없이 대규모 SYN 플래드를 처리할 수 있도록 합니다.이니셜 리다이렉트SYN에의 요구SYNPROXYtarget 접속은 검증된 최종 접속에 도달할 때까지 접속 트래킹에 등록되지 않습니다.ACKstate를 지정하면 다수의 비활성 접속 계정에서 접속 트래킹이 해방됩니다.이쪽이야, 엄청 커요.SYN홍수는 효과적인 [9]방법으로 처리될 수 있다.

2013년 11월 3일SYN프록시 기능은 Linux [10][11]커널 메인라인 버전 3.12와 함께 Netfilter에 통합되었습니다.

ulogd

ulogd는 Netfilter 서브시스템에서 패킷 및 이벤트 알림을 수신 및 기록하는 사용자 공간 데몬입니다. ip_tables는 사용자 공간 큐잉 메커니즘을 통해 패킷을 전송할 수 있으며 접속 트래킹은 와 상호 작용할 수 있습니다.ulogd패킷 또는 이벤트에 관한 상세 정보(접속 해제, NAT 셋업 등)를 교환합니다.

사용자 공간 라이브러리

Netfilter는 또한 다음과 같은 라이브러리 세트를 제공합니다.libnetfilter이름 접두사로, 사용자 공간에서 다른 작업을 수행하는 데 사용할 수 있습니다.이들 라이브러리는 GNU GPL 버전2로 출시됩니다.구체적으로는 다음과 같습니다.

libnetfilter_queue
는 iptables 와 조합하여 사용자 공간 패킷큐잉을 실행할 수 있습니다.libnfnetlink
libnetfilter_conntrack
사용자 공간에서 접속 트래킹엔트리를 조작할 수 있습니다.libnfnetlink
libnetfilter_log
iptables에 의해 생성된 로그메시지를 수집할 수 있습니다.libnfnetlink
libnl-3-netfilter
큐, 접속 트래킹 및 로그 조작을 가능하게 합니다.libnl투영[12]
libiptc
iptables 방화벽 규칙 집합에 변경을 수행할 수 있습니다.이것은, 다음의 순서에 근거하고 있지 않습니다.netlink라이브러리와 그 API는 내부적으로 사용됩니다.iptables유틸리티
libipset
IP 세트에서의 조작을 가능하게 합니다.libmnl.

Netfilter 워크샵

Netfilter 프로젝트에서는 개발자를 위한 연례 회의를 개최하여 지속적인 연구 및 개발 노력에 대해 논의합니다.2018 Netfilter 워크숍은 2018년 [13]6월 독일 베를린에서 개최되었습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Linux 5.19". 31 July 2022. Retrieved 1 August 2022.
  2. ^ "Linux 5.19-rc8". 24 July 2022. Retrieved 24 July 2022.
  3. ^ "netfilter/iptables project homepage - The netfilter.org project". netfilter.org. Retrieved 2014-07-04.
  4. ^ "Flow offload infrastructure". LWN.net.
  5. ^ "Flow offload infrastructure". LWN.net.
  6. ^ a b Jonathan Corbet (2013-08-20). "The return of nftables". LWN.net. Retrieved 2013-10-22.
  7. ^ Neira Ayuso, Pablo (14 June 2006). "Netfilter's Connection Tracking System" (PDF).
  8. ^ "IP sets". ipset.netfilter.org. Retrieved 2014-07-04.
  9. ^ Patrick McHardy (2013-08-07). "netfilter: implement netfilter SYN proxy". LWN.net. Retrieved 2013-11-05.
  10. ^ "netfilter: add SYNPROXY core/target". kernel.org. 2013-08-27. Retrieved 2013-11-05.
  11. ^ "netfilter: add IPv6 SYNPROXY target". kernel.org. 2013-08-27. Retrieved 2013-11-05.
  12. ^ "Netfilter Library (libnl-nf)". infradead.org. 2013-04-02. Retrieved 2013-12-28.
  13. ^ "14th Netfilter Workshop". workshop.netfilter.org. 2018-09-26. Retrieved 2018-09-26.

외부 링크