Limitando Conexões Paralelas com iptables em Centos

2

Atualmente usando o Centos6.7 e procurando colocar alguns limites para parar, digamos, usuário x de ip y de fazer mais do que 5 conexões. Digamos que ele faça o login 5 vezes, as 5 serão estabelecidas, mas a 6ª será rejeitada.

Examinando o uso de connlimit para fazer isso, mas sinto que estou sentindo falta de algo e estou com pouca timidez ao colocar a regra no lugar, já que inadvertidamente me tranquei do servidor no passado colocando uma regra em o ponto errado (oops).

Notas: Não está procurando especificar uma porta. x.x.x.1 e x.x.x.2 são IP's com limites mais altos de 50, então eu coloquei essas regras primeiro, acredito que esteja correto?

Eu tenho o seguinte:

-A INPUT -p tcp -s x.x.x.1 --syn -m connlimit --connlimit-above 50 -j REJECT
-A INPUT -p tcp -s x.x.x.2 --syn -m connlimit --connlimit-above 50 -j REJECT
-A INPUT -p tcp --syn -m connlimit --connlimit-above 5 -j REJECT

Isso parece correto? Existe uma maneira diferente de fazer isso? Eu não quero limitar a um conjunto de apenas 5 conexões no total, mas 5 por endereço IP.

    
por Hollyw00d 27.08.2016 / 09:42

1 resposta

2

Quase, mas não exatamente lá. As regras criadas primeiro rejeitarão as conexões acima de 50 de x.1 e x.2 e, em seguida, rejeitarão todas as conexões acima de 5 de qualquer lugar, incluindo x.1 e x.2 . Você precisa ter uma regra ACCEPT para essas duas fontes antes do limitador comum.

Pode ser mais fácil inverter a correspondência no connlimit :

-A INPUT -p tcp -s x.x.x.1 --syn -m connlimit --connlimit-upto 50 -j ACCEPT
-A INPUT -p tcp -s x.x.x.2 --syn -m connlimit --connlimit-upto 50 -j ACCEPT
-A INPUT -p tcp --syn -m connlimit --connlimit-upto 5 -j ACCEPT
-A INPUT -p tcp --syn -j REJECT

Você pode querer colocar essas regras em uma cadeia própria para não precisar repetir as partes comuns ( -p tcp --syn ) e, com uma cadeia separada, também é possível substituir ACCEPT por RETURN se você quer fazer outra filtragem depois dessas regras. A regra de aceitação precisaria aparecer em outro lugar, então.

O padrão para connlimit é trabalhar por endereço de origem, por isso deve ser o que você deseja. Embora note que iptables não tem nenhum conceito de "login", então se você realmente quiser limitar os logins em um nível de aplicativo, você precisará fazer isso lá.

Para evitar ficar bloqueado, convém ter certeza de que você tem uma regra separada primeiro para permitir o acesso administrativo de sua máquina (SSH talvez, pelo menos, conexões já estabelecidas). Outra possibilidade seria usar cron ou at para redefinir as regras do firewall para uma configuração válida após um momento, portanto, mesmo se você ficar bloqueado, não durará. Você só precisa se lembrar de remover essa proteção quando terminar.

    
por 27.08.2016 / 14:20