Correspondência IPSET indisponível para uma instalação do linux, mas não para outra… e somente o IPv4 é afetado [fechado]

0

Eu tenho dois servidores Ubuntu 16.04, um em uma pequena caixa de intel atom itx na minha rede local e um hospedado como um VPS. Ambos foram instalados frescos na última semana. Ambas são geralmente a mesma configuração, exceto que foram envidados mais esforços para endurecer o VPS publicamente acessível. Nenhum deles teve o kernel recompilado. ambos geralmente têm o mesmo conjunto de pacotes instalados.

E ainda assim ... um deles, o VPS, insiste que os netfilters não podem ser compatíveis com os ipsets.

wolferz@unipuma ~ $ sudo shorewall check
Checking using Shorewall 5.1.6.1...
Processing /etc/shorewall/params ...
Processing /etc/shorewall/shorewall.conf...
Loading Modules...
Checking /etc/shorewall/zones...
Checking /etc/shorewall/interfaces...
Determining Hosts in Zones...
Locating Action Files...
Checking /etc/shorewall/policy...
Adding Anti-smurf Rules
Checking TCP Flags filtering...
Checking Kernel Route Filtering...
Checking Martian Logging...
Checking MAC Filtration -- Phase 1...
Checking /etc/shorewall/blrules...
   ERROR: ipset names in Shorewall configuration files require Ipset Match in your kernel and iptables /etc/shorewall/blrules (line 39)

A configuração que pretendo usar depende muito dos ipsets para listas negras dinâmicas e lista branca de grandes conjuntos de IPs. Porque netfilter não se presta bem a ser alterado frequentemente ou ter listas enormes de regras (uma para cada ip ... muitas vezes milhares).

Sem a correspondência de ipset, não há nenhum avanço aqui. Apesar do fato de que estou usando o Shorewall para gerenciar o netfilter e o ipsets, isso não parece ser um problema do Shorewall. A menos que a detecção seja de alguma forma torta ... mas não tenho certeza de como confirmar sua saída.

Veja o que o Shorewall detecta como o recurso de filtro de rede do kernel no VPS.

wolferz@unipuma ~ $ sudo shorewall version
5.1.6.1

wolferz@unipuma ~ $ sudo shorewall show -f capabilities | grep IPSET
IPSET_MATCH=                <== this is the problem
IPSET_MATCH_COUNTERS=       <== this is not great either
IPSET_MATCH_NOMATCH=        <== this is not great either
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@unipuma ~ $ sudo shorewall6 version
5.1.6.1

wolferz@unipuma ~ $ sudo shorewall6 show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=       <== normal for ipv6
IPSET_MATCH_NOMATCH=        <== normal for ipv6
IPSET_MATCH=Yes             <== correct
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@unipuma ~ $ uname --kernel-release
4.4.0-93-generic

wolferz@unipuma ~ $ ipset --version
ipset v6.29, protocol version: 6

wolferz@unipuma ~ $ iptables --version
iptables v1.6.0

wolferz@unipuma ~ $ ip6tables --version
ip6tables v1.6.0

Onde diz IPSET_MATCH= e não tem nada a seguir, deve mostrar IPSET_MATCH=Yes . Ele falha no VPS, não no servidor local. Mesmo mais curioso, o ip6tables reporta o suporte a ipset match onde o iptables não.

Eu originalmente não tinha Shorewall no servidor local (embora eu planejasse) ... então eu fui em frente e o instalei. Mas eu estava com pressa e instalei do apt, me dando a versão Shorewall 5.0.4 . Quando ele relatou que tinha capacidade completa de correspondência com o Ipset, achei que poderia ser algo específico para Shorewall 5.1.6.1 . Então eu usei o apt para remover 5.0.4 e instalei 5.1.6.1 dos tarballs como eu tinha no vps. Tanto 5.0.4 como 5.1.6.1 fornecem o mesmo resultado.

wolferz@khaos ~ $ sudo shorewall version
5.1.6.1

wolferz@khaos ~ $ sudo shorewall show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=Yes
IPSET_MATCH_NOMATCH=Yes
IPSET_MATCH=Yes
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@khaos ~ $ sudo shorewall6 version
5.1.6.1

wolferz@khaos ~ $ sudo shorewall6 show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=
IPSET_MATCH_NOMATCH=
IPSET_MATCH=Yes
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@khaos ~ $ uname --kernel-release
4.4.0-93-generic

wolferz@unipuma ~ $ ipset --version
ipset v6.29, protocol version: 6

wolferz@unipuma ~ $ iptables --version
iptables v1.6.0

wolferz@unipuma ~ $ ip6tables --version
ip6tables v1.6.0

Mesma distro, mesma versão, mesmo kernel. Ok, então pensei, talvez o modelo em que eles instalaram o VPS tivesse sido manipulado. Eu decidi verificar as diferenças nos módulos instalados:

wolferz@unipuma ~ $ sudo ls -R -D /lib/modules/4.4.0-93-generic/kernel/ | grep -P '\.ko$' | sort > unipuma_sorted_modules.list

... scp para o outro host ...

wolferz@khaos ~ $ sudo ls -R -D /lib/modules/4.4.0-93-generic/kernel/ | grep -P '\.ko$' | sort > khaos_sorted_modules.list

wolferz@khaos ~ $ diff --brief --report-identical-files khaos_sorted_modules.list unipuma_sorted_modules.list

Files khaos_sorted_modules.list and unipuma_sorted_modules.list are identical

Em seguida, verifiquei a configuração real do kernel que estou usando:

wolferz@unipuma ~ $ sudo cat /boot/config-4.4.0-93-generic | grep -P '(?:NETFILTER|IPSET)' | sort > unipuma_kernel_config.list

wolferz@khaos ~ $ sudo cat /boot/config-4.4.0-93-generic | grep -P '(?:NETFILTER|IPSET)' | sort > khaos_kernel_config.list

wolferz@khaos ~ $ diff --brief --report-identical-files khaos_kernel_config.list unipuma_kernel_config.list
Files khaos_kernel_config.list and unipuma_kernel_config.list are identical

Bem, ok então. Colora-me confuso. O mesmo kernel. Mesmos módulos Mesma configuração. Capacidades diferentes. Wut?

E ... só para cortar essa linha de raciocínio no passe ... também não é o vhost. Eu tenho um terceiro servidor rodando o CentOS6 com essa mesma versão do shorewall (e versões mais antigas do netfilter / iptables / ipset) que não tem esse problema. Ele está hospedado na mesma máquina física usando a mesma virtualização (KVM) que o Ubuntu 16.04 vps acima.

... Ajuda?

    
por Cliff Armstrong 07.09.2017 / 04:54

1 resposta

0

Bem, ok então. Obrigado por todas as grandes ideias. Não poderia ter feito isso sem a ajuda de vocês.

A questão era algo simples e estúpido, assim como eu sabia que seria. No arquivo shorewall.conf eu tinha a seguinte linha:

IPTABLES=/sbin/ip6tables

O problema é ... esse é o arquivo shorewall.conf. Não é o arquivo shorewall6.conf. Eu copiei isso quando comecei a configurar o ipv4 e, aparentemente, perdi aquele '6' em particular.

A linha corrigida é:

IPTABLES=/sbin/iptables

Por isso, o problema se comportou como um problema iptables ... foi meio que. Então, sim ... 3 dias depois ...

    
por 08.09.2017 / 17:40