Criando uma cadeia IPTABLES, cujas regras são ignoradas, a menos que o pacote seja de uma determinada porta?

Criando uma cadeia IPTABLES, cujas regras são ignoradas, a menos que o pacote seja de uma determinada porta?

Quero confirmar o seguinte. Se eu criar uma cadeia cuja primeira regra seja:

iptables -I INPUT -p tcp -m multiport --dports 25,465 -j name

Isso significa que quaisquer outras regras especificadas na cadeia não são verificadas, a menos que o pacote seja proveniente dessas portas?

Estou usando fail2bane criei um filtro com uma regra de banimento que especifica a porta 25, 465, usando -m multiport --dports 25,465. Mas esse filtro acabou criando um número grande de regras, que ocasionalmente o ksoftirqdprocesso consumia muita CPU e a rede ficava lenta. Percebi que isso ocorria quando o servidor tinha muitas E/S ocorrendo em outras portas.

Presumo que cada pacote estava analisando todas as regras da minha cadeia. Espero poder evitar isso adicionando a primeira regra vista acima, para que os pacotes que não vão para as portas 25 e 465 não se preocupem em verificar o restante das regras nessa cadeia. Se isso não acontecer, eu apreciaria conhecer qualquer outra solução possível.

Responder1

Não “de”, mas “para”. --dportslistasdestinoportos. A regra como você escreveu significa: "se o pacote foi enviado para o meu serviço escutando na porta TCP 25 ou 465, processe-o na cadeia name". A forma como será processado depende do conteúdo dessa cadeia. Se não corresponder a nenhumação final( ACCEPT, REJECT, DROP) nessa cadeia, ou se combinar uma regra com a RETURNação, seu processamento continuará na cadeia de chamada ( INPUT) com a regra seguinte a esta.

Por padrão, fail2bancria uma cadeia e uma regra que invoca a cadeia apenas para pacotes destinados a determinada porta (a menos que você esteja usando ...-allportsação, o que não é o padrão). Nessa cadeia adiciona uma regra DROP para cada IP banido. Assim, por exemplo, os pacotes do servidor web não serão enviados para processamento na cadeia criada para a sshdjail fornecida. Portanto, "excluir" deliberadamente certas portas do processamento do fail2ban da maneira que você sugere não é produtivo; já funciona assim.

Para evitar a criação de cadeias com muitas regras com fail2ban, investigueipset-ações relacionadas. Em vez de criar uma cadeia, f2b-jailnamecria-se umaConjunto de IPe uma única regra que corresponde ao ipset. Cada IP banido é adicionado ao ipset, em vez de criar uma regra separada na cadeia. O ipset possui característica de complexidade O(1), o que significa que sua velocidade de processamento não depende do número de itens nele contidos; ele pode conter até 65.536 itens.

Para usar isso, em resumo, você precisa substituir o padrão banaction = iptablespor banaction = iptables-ipsetsuas prisões. Você nunca deve modificar os arquivos de configuração fornecidos pela distribuição; em vez disso, crie /etc/fail2ban/jail.localum arquivo onde você adiciona suas substituições:

[postfix]
bantime = 1h
enabled = true
banaction = iptables-ipset

(Isso usará o postfixfiltro de e-mail fornecido e reagirá a todos smtpdos tipos de serviços. Se você usar outro servidor de e-mail, ajuste de acordo.)

Outra maneira de obter melhor eficiência do firewall é começar a usarnftablesestrutura em vez de iptables. Possui recursos de conjuntos de IPintegrado, e você pode usá-lo com fail2ban usando o banaction = nftables. O ganho de eficiência para conjuntos grandes será aproximadamente o mesmo.

informação relacionada