시험

시험

iptables알 수 없는 구성 상태의 호스트가 있는 경우 기존 방화벽 규칙 세트가 또는 에 의해 관리되는지 여부를 비대화식으로 확인하는 효율적인 방법이 있는지 알고 싶습니다 nftables.

아주 간단하게 들리네요. 많이 생각해 봤지만 아직 스크립트를 작성하기 위한 의미 있는 답변을 얻지 못했습니다...

답변1

이 질문의 변형최근 Kubernetes에서 해결됨, 따라서 거기에서 수행된 작업을 볼 가치가 있습니다. (변형은 호스트 규칙을 구동하기 위해 iptables-legacy또는 해당 IPv6 변형을 사용할지 여부입니다 .)iptables-nft

Kubernetes에서 취하는 접근 방식은 다음과 같습니다.각 "save" 명령으로 출력된 줄 수 보기, iptables-legacy-saveiptables-nft-save(및 해당 IPv6 변형). 전자가 10개 이상의 출력 라인을 생성하거나 후자보다 더 많은 출력을 생성하는 경우 이를 사용해야 한다고 가정 iptables-legacy합니다 iptables-nft.

귀하의 경우 의사결정 트리는 다음과 같을 수 있습니다.

  • iptables설치되지 않은 경우 nft;
  • nft설치되지 않은 경우 iptables;
  • iptables-save규칙 정의 출력이 생성되지 않으면 nft;
  • nft list tablesnft list ruleset출력이 생성되지 않으면 을 사용 하십시오 iptables.

iptables-savenft list ...다 출력을 생성하고 iptables그렇지 않은 경우 iptables-nft자동화된 프로세스가 결정할 수 있는지 잘 모르겠습니다.

답변2

출력을 보면 iptables사용 중인지 여부를 빠르게 알 수 있습니다. 여전히 일부 출력 구문 분석이 필요하므로 100% 최적은 아니지만 매우 간단합니다.nftablesiptables -V

Red Hat에는 하나가 있습니다.블로그 게시물2020년 8월부터 이 지침은 Ubuntu에도 적용됩니다.

이 명령의 두 가지 변형은 다음 iptables과 같습니다.

  • legacy: 흔히 이라고 합니다 iptables-legacy.
  • nf_tables: 흔히 이라고 합니다 iptables-nft.

최신 iptables-nft명령은 nftables 커널 API 및 인프라에 대한 브리지를 제공합니다.

iptables 버전을 검색하면 어떤 변형이 사용되고 있는지 확인할 수 있습니다.

우분투 22.04(nftables)

의 경우 iptables-nftnf_tables로 표시된 버전 번호 뒤의 괄호 안에 변형이 표시됩니다.

# iptables -V
iptables v1.8.7 (nf_tables)

우분투 20.04(iptables)

의 경우 iptables-legacy변형이 존재하지 않거나 이전 버전을 괄호 안에 표시합니다.

# iptables -V
iptables v1.8.4 (legacy)

시험

따라서 우리가 nftable인지 확인하기 위해 grep을 사용한 간단한 테스트는 다음과 같습니다.

iptables -V | grep -E ' \(nf_tables\) *$'

... iptables향후에는 더 이상 기본적으로 배포되지 않을 수 있으므로 보다 미래에 대비한 테스트는 다음과 같습니다.

if command -v iptables; then
    if iptables -V | grep -E ' \(nf_tables\) *$'; then
        echo "nft"
    else
        echo "iptables"
    fi
elif command -v nft; then
    echo "nft";
fi

관련 정보