Tenho muitas portas para bloquear, mas a regra multiporta do iptables tem uma restrição e só permite no máximo 15 portas.
severalports="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16"
iptables -A INPUT -p tcp -m multiport --dports $severalports -J DROP
iptables v1.4.21: too many ports specified
Gostaria de saber se existe alguma maneira de criar uma regra personalizada para contornar o limite máximo de 15 portas (para não precisar dividir a regra). obrigado
PD: Ports 1:16 é apenas para explicar a ideia. As portas reais não estão em sequência
O implícito
-m tcp
,-m udp
(e sctp etc.) todos aceitam parâmetros de intervalo de porta. Portanto, seu exemplo atual pode ser simplificado em simplesmente:É o mesmo,
-m multiport
exceto que um intervalo come dois slots:Portanto, se houver até 7 intervalos (+1 porta única), você pode fazer algo como:
Se você planeja um número alto arbitrário de portas sem adicionar um número alto de regras, pode alternar para o uso de ipset (que também requer o uso da
ipset
ferramenta) e umaset
correspondência:EDIT: na verdade, o caso específico acima (todos os valores em um único intervalo) também pode ser simplificado usando uma sintaxe de intervalo no ipset (o suporte pode depender da versão) em vez do loop, se necessário. Não alterará o resultado definido:
Regra única do iptables :
Um bitmap deve ter pesquisa O(1): tempo constante (e o que importa: muito rápido).
ipset pode ser alterado dinamicamente durante o uso:
mesmo do caminho do pacote, se realmente necessário.
Ele oferece muitos outros tipos de lista (como
hash:ip,port
), a maioria deles com hash. Eles podem ser carregados com centenas de milhares de entradas e ainda manter uma busca rápida, além de ajudar a ter regras simples e genéricas.