iptables optimization - state NOVO?

1

Eu tenho um conjunto de regras que implementam o comportamento VIP - tudo na tabela nat. Obviamente, quero fazer o menor processamento possível para os pacotes.

Não está claro para mim se "-m state --state NEW" é realmente uma otimização neste caso ou não. Isso dará aos pacotes em uma conexão estabelecida um "caminho rápido"?

Há outras coisas que eu posso fazer para otimizar uma série de IP: comparações de portas e regras "-j DNAT"?

EDIT: tabelas de exemplo

-t nat -A OUTPUT -j VIPS

-t nat -A VIPS -d 10.0.154.213/32 -p tcp -m tcp -dport 80 -j SVC-FOO
-t nat -A VIPS -d 10.0.140.123/32 -p tcp -m tcp -dport 80 -j SVC-BAR
-t nat -A VIPS -d 10.0.221.241/32 -p tcp -m tcp -dport 80 -j SVC-QUX
# ... could be hundreds of these

# each SVC-* looks something like this
-t nat -A SVC-FOO -m statistic --mode random --probability 0.5000000000 -j EP-FOO-1
-t nat -A SVC-FOO -j EP-FOO-2

# each EP-*-* looks something like this
-t nat -A EP-FOO-2 -j DNAT --to-destination 10.244.2.7:9376

É um pouco mais complicado, pois há algumas maneiras de acabar em uma cadeia SVC-FOO e as cadeias EP- * podem ter regras LOG ou MARK.

A minha pergunta é se procurar estado NEW na cadeia de VIPs ajuda em tudo? Ou outras otimizações para fazer?

    
por Tim Hockin 14.08.2015 / 06:20

1 resposta

0

Sem saber exatamente como é sua mesa inteira, é difícil dizer com certeza, mas certamente uma regra que corresponda a NEW pacotes e os envie para outra cadeia acelere o manuseio de pacotes que fazem parte de um conjunto estabelecido. conexão.

Em geral, para atingir o número mínimo de regras iptables com uma série de correspondências exclusivas envolve a construção de uma "árvore" de pesquisas de endereço - se você tiver, digamos, um / 24 de endereços IPv4 com que você pode construir uma árvore de 8 níveis que se parece com isso:

iptables -t nat -N slash24
iptables -t nat -I PREROUTING -d 192.0.2.0/24 -j slash24
iptables -t nat -N slash25_0
iptables -t nat -N slash25_128
iptables -I slash24 -d 192.0.2.0/25 -j slash25_0
iptables -I slash24 -d 192.0.2.128/25 -j slash25_128
iptables -t nat -N slash26_0
iptables -t nat -N slash26_64
iptables -t nat -N slash26_128
iptables -t nat -N slash26_192
iptables -I slash25_0 -d 192.0.2.0/26 -j slash26_0
iptables -I slash25_0 -d 192.0.2.64/26 -j slash26_64
iptables -I slash25_128 -d 192.0.2.128/26 -j slash26_128
iptables -I slash25_128 -d 192.0.2.192/26 -j slash26_192
[etc etc etc]

Isto não é algo que você gostaria de fazer à mão, mas se você tem um grande número de regras, você está (esperançosamente) gerenciando isto programaticamente, então você pode simplesmente criar scripts para criar toda aquela monstruosidade ímpia. .

Uma vez que você tem regras que estão abaixo do nível de correspondência / 32, você coloca todas as regras para o host em uma cadeia - você não pode jogar o mesmo tipo de jogos "subnet matching" nas portas, infelizmente . Espero que você não esteja tentando enviar conexões para 60.000 máquinas diferentes com base na porta em que ele entrou.

    
por 14.08.2015 / 06:42