넷필터란 무엇인가요?
Netfilter는 Linux 2.4에서 도입된 하위 시스템으로, 프로토콜 유형에 따른 연결 추적이 가능해졌습니다.
넷필터의 아키텍처는 네트워크 프로세스 전반에 걸쳐 여러 위치에 일부 감지 지점(HOOK)을 배치하고 각 감지 지점에 일부 처리 기능을 등록하여 처리하는 것입니다.
Netfilter는 Rusty Russell이 제안한 Linux 2.4 커널 방화벽 프레임워크입니다. 프레임워크는 간결하고 유연하며 패킷 필터링, 패킷 처리, 주소 위장 및 투명성과 같은 보안 정책 애플리케이션에서 많은 기능을 구현할 수 있습니다. . 동적 NAT(Network Address Translation), 사용자 및 MAC(미디어 액세스 제어) 주소 기반 필터링, 상태 기반 필터링, 패킷 속도 제한 등.
프레임워크
Netfilter는 미들웨어 역할을 하고 각 네트워크 프로토콜(IPv4, IPv6 등)에 대한 후크 기능 세트를 정의하는 추상적이고 일반화된 프레임워크[1]를 제공합니다. IPv4는 데이터그램이 프로토콜 스택을 통해 흐를 때 5개의 핵심 지점에서 호출되는 5개의 후크 기능을 정의합니다. 즉, IPv4 프로토콜 스택에는 5개의 "허용된 낚시 지점"이 정의되어 있습니다. 각 "낚시 지점"에서 netfilter는 통과하는 네트워크 패킷(패킷)을 잡기 위해 "낚시 고리"를 배치하고 이를 해당 규칙 체인과 비교하고 검토 결과에 따라 패킷의 다음 운명을 결정할 수 있습니다. IPv4 프로토콜 스택에 그대로 다시 넣어지고 상위 계층에 계속 제출됩니다. 일부 수정 후에 네트워크에 다시 들어가거나 단순히 폐기됩니다.
IPv4의 데이터 패킷이 netfilter 시스템을 통과하는 과정은 그림 1과 같습니다.
그림 1 Netfilter 기능 프레임워크
주요 기술
Netfilter는 주로 연결 추적(Connection Tracking), 패킷 필터링(Packet Filtering), 주소 변환, 4키를 사용합니다. 패킷 처리 기술(Packet Mangling).
⒈2.1 연결 추적
연결 추적은 패킷 필터링 및 주소 변환의 기초이며 독립적인 모듈로 실행됩니다. 연결 추적 기술을 사용하여 프로토콜 스택의 하위 수준에서 데이터 패킷을 가로채고 현재 데이터 패킷 및 상태 정보를 과거 데이터 패킷 및 상태 정보와 비교하여 현재 데이터 패킷의 제어 정보를 얻고 이 정보를 기반으로 네트워크 데이터 패킷을 작동하여 네트워크를 보호합니다.
하위 네트워크는 초기화 연결 동기화(Synchronize, SYN) 패킷을 수신하면 넷필터 룰 베이스에 의해 확인됩니다. 패킷은 규칙 체인에서 순차적으로 비교됩니다. 패킷을 폐기해야 하는 경우 재설정(RST) 패킷을 원격 호스트로 보내십시오. 그렇지 않으면 연결이 허용됩니다. 연결 정보는 연결 추적 정보 테이블에 저장되며 데이터 패킷의 상태를 나타냅니다. 이 연결 추적 정보 테이블은 커널 모드에 위치하며, 후속 네트워크 패킷은 이 연결 추적 정보 테이블의 내용과 비교되며, 정보 테이블의 정보를 기반으로 데이터 패킷의 작동이 결정됩니다. 데이터 패킷을 먼저 연결 추적 정보 테이블과 비교하고, SYN 패킷만 룰 베이스와 비교하므로, 데이터 패킷과 연결 추적 정보 테이블 간의 비교는 커널 모드에서 이루어지므로 속도가 매우 빠르다. .
⒈2.2 패킷 필터링
패킷 필터링은 전달된 각 패킷의 헤더를 확인한 후 처리 방법을 결정합니다. 패킷을 버리거나 통과하도록 선택할 수 있습니다. 더 복잡한 운영.
⒈2.3 주소 변환
네트워크 주소 변환은 소스 NAT(Source NAT, SNAT)와 대상 NAT(Destination NAT, DNAT)의 두 가지 유형으로 구분됩니다. SNAT는 데이터 패킷의 소스 주소를 수정하는 것(연결의 소스 IP 변경)을 의미합니다. SNAT는 데이터 패킷이 전송되기 전 마지막 순간에 변환 작업을 수행합니다. 주소 위장은 SNAT의 특별한 형태입니다. DNAT는 데이터 패킷의 대상 주소를 수정하는 것(연결의 대상 IP 변경)을 의미합니다. DNAT는 항상 패킷이 들어온 직후에 변환을 완료합니다. 포트 전달, 로드 밸런싱 및 투명 프록시는 모두 DNAT에 속합니다.
⒈2.4 패킷 처리
패킷 처리는 데이터 패킷의 서비스 유형(TOS) 필드를 설정하거나 변경하는 데 사용할 수 있습니다. TTL) 필드는 패키지에 플래그 값을 설정하고 이 플래그 값을 사용하여 대역폭 제한 및 분류 쿼리를 수행합니다.