Debianbuster/sid에서 ip6table-restore가 실패합니다.

Debianbuster/sid에서 ip6table-restore가 실패합니다.

나는 다음과 같은 iptable 규칙을 가지고 /etc/iptables/rule.V6있으며/etc/iptables/rule.V4

-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT

재부팅을 시도하면 netfilter-persistent내부적으로 iptables-restoreip6tables-restore.

ip6tables-restore다음 규칙을 이해할 수 없기 때문에 실패합니다.

-4 -A INPUT -p icmp -j ACCEPT

아래는 오류입니다

root@rs-dal:/etc/iptables# ip6tables-restore rules.q
Error occurred at line: 15
Try `ip6tables-restore -h' or 'ip6tables-restore --help' for more information.

이상적으로는 으로 시작하는 규칙은 -4무시되지만 ip6tables-restoreDebian Buster에서는 작동하지 않는 것 같습니다.

하지만 iptables-restore잘 작동하는데, 그게 문제일 뿐입니다 ip6tables-restore. 이 문제를 어떻게 해결하나요?

답변1

Debian Buster의 기본값이므로 nftables에서 iptables를 실행해야 합니다. 이러한 경우인지 확인하려면 다음을 확인하세요 (nf_tables).

# ip6tables-restore --version
ip6tables-restore v1.8.2 (nf_tables)

지금IP6테이블 매뉴얼, 항상 다음과 같은 일이 있었습니다.

-4, --ipv4
이 옵션은 iptables 및 iptables-restore에는 영향을 미치지 않습니다. -4 옵션을 사용하는 규칙이 ip6tables-restore와 함께 삽입되면 자동으로 무시됩니다. 다른 용도로 사용하면 오류가 발생합니다. 이 옵션을 사용하면 단일 규칙 파일의 IPv4 및 IPv6 규칙을 iptables-restore 및 ip6tables-restore와 함께 사용할 수 있습니다.

문제는 당신이 지금 달리고 있다는 것이다.ip6tables-nft-restore대신에 ip6tables-legacy-restore.

-4거기에 언급되지 않은기존 iptable과의 차이점, 이는 아무런 차이가 없어야 함을 의미하지만 실제로는 그렇습니다. 이는 버그처럼 보입니다. 새 버전에서 ip6tables-nft-restore이를 처리하거나 문서에 이를 허용 가능한 추가 차이점으로 반영해야 합니다.

그런데 다른 방법( -6with iptables-nft-restore)은 좋지 않습니다. 무시하는 대신 허용되어 -A INPUT -p ipv6-icmp -j ACCEPTIPv4 이외의 프로토콜이 생성됩니다 -A INPUT -p icmp -j ACCEPT(사용자 정의 테스트를 사용하지 않는 한 이는 절대 발생하지 않으며 IP 스택은 어쨌든 이를 무시합니다).

가능한 해결책:

  1. 버그 보고서를 제출하고 기존 규칙과 문서를 위반하는 회귀를 주장하십시오. 이것은 다른 사람들에게도 도움이 될 것입니다.

  2. 분할 규칙

    파일을 두 개의 파일로 분할하되 각 파일에 서로 다른 필터를 적용합니다. 예를 들면 다음과 같습니다.

    grep -v -- '^ *-4 ' < before > after.v6
    grep -v -- '^ *-6 ' < before > after.v4
    
  3. 단일 규칙을 보존할 수 있도록 거의 동일한 작업을 ip6tables-restore수행하는 (또한 동일한 작업을 수행하는) 래퍼를 만듭니다./usr/local/sbin/ip6tables-restoreiptables-restore

  4. (일시적으로) nftables 대신 iptables를 포기하고 레거시 iptables로 되돌립니다.

    # readlink -f $(which ip6tables-restore)
    /usr/sbin/xtables-nft-multi
    # update-alternatives --config ip6tables        
    There are 2 choices for the alternative ip6tables (providing /usr/sbin/ip6tables).
    
      Selection    Path                        Priority   Status
    ------------------------------------------------------------
    * 0            /usr/sbin/ip6tables-nft      20        auto mode
      1            /usr/sbin/ip6tables-legacy   10        manual mode
      2            /usr/sbin/ip6tables-nft      20        manual mode
    
    Press <enter> to keep the current choice[*], or type selection number: 1
    update-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables (ip6tables) in manual mode
    # readlink -f $(which ip6tables-restore)
    /usr/sbin/xtables-legacy-multi
    

    관련 명령에 대한 링크도 변경되었습니다.

    에 대해서도 동일한 작업을 수행합니다 iptables.

    nftables에는 현재 규칙이 계속 적용됩니다. iptables-nft-save+로 덤프하고 ip6tables-nft-save+로 복원 할 수 있습니다 . 이로 인해 규칙이 두 번 실행됩니다. 한 번은 커널의 iptables 백엔드를 사용하고 한 번은 커널의 nftables 백엔드를 사용하며 NAT는 커널 4.19에서 항상 올바르게 작동하지 않을 수 있습니다(일반적으로 로드된 첫 번째 모듈이 승리합니다. 여기에서 가장 잘 재부팅하거나 방법을 알아두십시오. 규칙을 새로 고치고 관련 (nat) nftables 모듈을 제거합니다.iptables-saveip6tables-savenft_nat)

  5. 새로운 기능을 수용하고 직접 사용nft.

    다음은 도움이 될 수 있는 몇 가지 명령입니다(그러나 위와 동일한 문제가 있습니다).iptables-translate/ ip6tables-translateiptables-restore-translate/ ip6tables-restore-translate, 그러나 결과를 재작업해야 하는 경우가 많습니다(특히 다음과 같은 이상한 일치의 경우).u32). Nftables에는 제품군 유형이 있습니다.inet실제로 IPv4 및 IPv6 규칙(최신 커널이 필요할 수 있는 nat에서)을 혼합할 수 있으므로 작업이 단순화됩니다.

관련 정보