nftables ip define várias tabelas

3

Caso de uso: Eu tenho um roteador doméstico usando o iptables hoje. Estou pesquisando convertendo para nftables, pois parece ser muito mais gerenciável para muitas regras.

Uma coisa que eu configurei hoje sob iptables é um ipset 'country-block' que contém blocos CIDR de país que cobrem a maioria das tentativas aleatórias de sondagem / invasão de portas. Infelizmente, os nftables não podem usar meus ipsets existentes diretamente, mas era bastante simples convertê-los em um conjunto de ip nftables.

Problema: Para evitar ter um único arquivo maciço nftables, optei por separar o meu conjunto 'country-block' em um arquivo separado. O nftables facilita a inclusão de outros arquivos, portanto, isso parece estar bem dentro do comportamento pretendido para os nftables. Eu defini meu bloco de países da seguinte forma:

table ip country-block {
  set country-block {
    type ipv4_addr;
    flags interval;
    elements = { /* CIDR blocks here */ }
  }
}

Isso carrega bem. Agora eu quero usá-lo em meus filtros de firewall. Eu tenho uma tabela definida no meu arquivo de configuração principal 'table inet filter'. Aqui eu quero adicionar a regra:

ip saddr @country-block drop

Seguindo todas as minhas pesquisas no google, esta é a única maneira que encontrei para fazer referência a conjuntos de ip. Infelizmente, isso gera o erro:

Error: Could not process rule: Set 'country-block' does not exist

Eu tentei referenciar "country-block @ country-block" esperando que isso pudesse resolver o namespace de bloco de país que criei, mas isso não funciona:

Error: syntax error, unexpected drop
   ip saddr country-block@country-block drop
                                        ^^^^

Alguém sabe de uma maneira de referenciar um conjunto que está em uma tabela diferente? Eu odiaria ter que recolher todos os meus conjuntos em minha única tabela de 'filtros' e mantê-los todos em um único arquivo - que bagunça feia que seria.

ps. Eu tentei marcar este 'nftables', mas aparentemente é uma nova tag e eu não tenho o representante necessário para criar uma nova tag. Alguma pessoa gentil com o representante necessário pode marcar isso apropriadamente?

    
por Mark 13.12.2016 / 04:29

1 resposta

4

Recebi uma resposta dos desenvolvedores do nftables depois de perguntar em sua lista de e-mails. A resposta curta é que os conjuntos de referência em outra tabela não são possíveis.

No entanto, pelo menos consegui armazenar meus conjuntos em um arquivo separado e trazê-los por meio de um @include. Isso torna meus ipsets mais gerenciáveis em vez de colocá-los em um único arquivo de configuração massivo. A sintaxe é assim:

# nftables.conf
include "/etc/nftables.country-block"
table inet filter {
  set country-block {
    type ipv4_addr; flags interval;
    elements = $country_block_list
  }
}

# nftables.country-block
define country_block_list = {
          # comma-separated CIDR blocks here
    }

Mas vale a pena notar que, desde a sua redação (2016-12-21), isso requer um utilitário de linha de comando nft construído a partir do código fonte mais recente de nftables, como a versão mais atual disponível no momento (nftables v0). 6) irá lançar um erro com a configuração acima. nftables tem um wiki muito bom delineando como construir e instalar a partir do código-fonte, embora eu não espera que isso seja necessário daqui a alguns meses, uma vez que uma nova versão seja lançada e saia em todas as várias distros.

    
por 21.12.2016 / 16:54