빠르게 변화하는 iptables 규칙으로 인해 문제가 발생합니까?

빠르게 변화하는 iptables 규칙으로 인해 문제가 발생합니까?

저는 다양한 측정항목(예: 인터페이스 대역폭 사용량)을 모니터링하고 이에 따라 규칙을 변경하는 스크립트를 작성 중입니다 iptables. 이러한 변경 사항은 초당 최소 2회, 최대 4 * number of interfaces초당 발생할 수 있습니다.

iptables문제는 규칙 변경 사항을 어떻게 처리하는지 잘 모르겠습니다 . 재컴파일되고 스크립트가 CPU에 큰 부담을 주나요? 또는 규칙 변경 중에 여전히 처리 중인 패킷은 어떻게 되나요? 그 사람들은 떨어질까? 그런 걱정들이에요.

빠르게 변화하는 iptables 규칙으로 인해 문제가 발생합니까?

편집하다: 내 특정 애플리케이션의 경우 모든 규칙이 이미 적용되어 있습니다. 특정 규칙을 활성화 또는 비활성화(추가 또는 제거)하는 데 더 가깝습니다. 즉, 테이블은 시간이 지나도 커지지 않고 극도로 커집니다.

답변1

규칙을 어떻게 바꾸나요?

명령을 반복적으로 호출합니까 iptables? iptable의 작동 방식은 다음과 같기 때문에 성능에 상당한 영향을 미칩니다.

  • 전체 netfilter 테이블/체인을 확보하십시오.
  • 요청에 따라 하나의 변경을 수행합니다.
  • 전체 netfilter 테이블/체인을 커널에 다시 로드합니다.

그 일이 일어날 것입니다하나하나 iptables기도.

문제는: 규칙에 대한 변경의 성격은 무엇입니까?

소스 및/또는 대상 주소를 기반으로 규칙을 추가/제거하는 경우 대신 사용해야 합니다 ipset.

그러나 규칙을 추가/제거하는 경우 즉석에서 다른 매개변수를 변경하기 때문에(예: rate더 자주/덜 자주 일치하도록 변경, QoS 플래그 변경 등), 그러면 ipset적합하지 않을 수 있습니다.

반면에 스크립트가 변경을 수행하는 경우한꺼번에, 다음과 같은 방법으로 수행하는 것도 고려해 보세요.

  • 전체 netfilter 테이블/체인을 확보하십시오.
    • 유틸리티를 사용할 수 있습니다 iptables-save. 또는 스크립트 작성 내용에 따라 이를 수행할 수 있는 라이브러리가 있을 수도 있습니다.
  • 한 번에 원하는 모든 변경 사항을 수행하세요.
  • 전체 netfilter 테이블/체인을 다시 커널에 로드(커밋)합니다.
    • 유틸리티를 사용 iptables-restore하거나 1단계와 유사하게 이를 수행할 수 있는 라이브러리를 사용할 수 있습니다.

편집하다:

아, 규칙은 이미 표에 있으므로조건 일치켜거나 끌 수 있습니다.

-m condition --condition $NAME규칙 에 삽입하세요 iptables.

그러면 파일이 생성됩니다 /proc/net/ipt_condition/$NAME. 파일에 가 포함되어 있으면 일치가 성공하고 1, 그렇지 않으면 파일에 가 포함되어 있으면 일치가 성공합니다.0

(물론 부정을 사용하여 !일치를 반전시킬 수 있습니다.)

예를 들어:

iptables -A INPUT -m condition --condition allow_880 -p tcp -m tcp --dport 880 -j ACCEPT

규칙을 활성화하려면:

echo 1 > /proc/net/ipt_condition/allow_880

비활성화하려면:

echo 0 > /proc/net/ipt_condition/allow_880

(원하는 이름을 자유롭게 사용할 수 있습니다. 쉽게 식별할 수 있도록 하는 것이 좋습니다. 이름에는 최대 길이가 있지만 무엇인지 기억이 나지 않습니다.)

편집 1a:

이미 테이블을 작성한 경우 편집하는 가장 쉬운 방법은 의 출력을 저장하고 iptables-save편집한 다음(필요한 규칙에 대한 조건 일치 추가) iptables-restore또는 를 사용하여 전체 파일을 로드하는 것입니다.iptables-apply

기억하세요: 1개의 조건 파일은 2개 이상의 규칙을 제어할 수 있습니다. 실제로 원하는 경우가 아니면 규칙당 파일 1개를 가질 필요는 없습니다.

편집 1b:

@AB가 의견에서 언급했듯이(감사합니다!) -m condition배포판에 내장된 iptables의 표준 기능이 아닐 수도 있습니다. 이러한 경우에는 추가 패키지(예: xtables-addons.

(저는 Gentoo를 사용하고 있고 iptablesGentoo의 패키지는 단순히 커널 .config를 따르기 때문에 이것을 잊어버렸습니다.)

답변2

이 경우 Nftables가 더 적합할 수 있습니다. nftables는 특히 복잡한 규칙 세트 또는 빈번한 수정의 경우 iptables보다 더 효율적이고 확장 가능하도록 설계되었습니다. Linux 커널과의 통합 및 간소화된 구문으로 인해 더 나은 성능을 제공합니다.

관련 정보