Caracterizando o impacto do iptables

1

As circunstâncias nos forçam a abrir uma porta para a Internet e queremos configurar uma "lista branca" de intervalos de IPs com permissão para acessar essa porta. Eu criei a solução para entender a implementação. Há uma preocupação com o impacto de ter uma lista branca grande (5.000 faixas). Existe alguma maneira de caracterizar o impacto no desempenho de tal conjunto de regras? Como você pode obter métricas de iptables?

    
por Rob Sutherland 22.12.2015 / 23:05

1 resposta

2

Uma CPU recente do Core deve ser capaz de lidar com essa multa.

No entanto, ainda não faz mal ver se as regras podem ser otimizadas. Uma coisa que pode ajudar dependendo da distribuição dos endereços IP é dividir as regras em, e. 8 partes:

iptables -N ourtable
iptables -N ourtable-000
iptables -N ourtable-032
iptables -N ourtable-064
iptables -N ourtable-096
iptables -N ourtable-128
iptables -N ourtable-160
iptables -N ourtable-192
iptables -N ourtable-224

iptables -A INPUT -p tcp --dport 12345 -j ourtable
iptables -A ourtable -s   0.0.0.0/3 -j ourtable-000
iptables -A ourtable -s  32.0.0.0/3 -j ourtable-032
iptables -A ourtable -s  64.0.0.0/3 -j ourtable-064
iptables -A ourtable -s  96.0.0.0/3 -j ourtable-096
iptables -A ourtable -s 128.0.0.0/3 -j ourtable-128
iptables -A ourtable -s 160.0.0.0/3 -j ourtable-160
iptables -A ourtable -s 192.0.0.0/3 -j ourtable-192
iptables -A ourtable -s 224.0.0.0/3 -j ourtable-224

iptables -A ourtable-000 -s 1.2.3.4 -j ACCEPT
...
iptables -A ourtable-000 -j DROP

iptables -A ourtable-032 -s 32.1.2.3 -j ACCEPT
...
iptables -A ourtable-032 -j DROP

# etc...

Desta forma, um pacote será verificado contra 625 regras em vez de 5000 (assumindo, claro, uma distribuição uniforme de endereços, o que provavelmente não é o caso; você pode ajustar a divisão de todo o espaço de endereçamento de acordo).

Também presumo que você já tenha sub-redes na sua lista (ou seja, se você precisar permitir 172.18.0.0 até 172.18.0.7, substitua-a por 172.18.0.0/29). Se não, verifique esses intervalos. No Debian eu uso o utilitário netmask para ver o que uma netmask oferece:

$ $ netmask -r 172.18.0.0/29
 172.18.0.0-172.18.0.7      (8)
    
por 23.12.2015 / 09:03