set limite de conexão via iptables

4

Eu quero limitar o tráfego IP de um aplicativo (AceStream Player). O problema é que eu me desconecto, se muitas conexões IP estão estabelecidas.

Alguém sabe como usar o iptables para limitar as conexões a, e. 10 / segundo?

Inspirado pela resposta abaixo, tentei:

$iptables -A OUTPUT -p tcp --dport 8621 -m limit --limit 10/s -j ACCEPT
$iptables -A OUTPUT -p tcp --dport 8621 -j DROP

Isto parece limitar as conexões, mas de alguma forma a um limite inferior como 2-3 / seg. As regras superiores limitam as conexões ou pacotes a 10 / s?

É também possível atrasar as conexões usando o QUEUE em vez de DROP?

    
por Andy 27.10.2014 / 19:34

2 respostas

1

Você precisa limitar a taxa na qual as novas conexões são estabelecidas. Se você simplesmente usar -m limit , você estaria limitando a taxa de pacotes , independentemente de ser um novo pacote de conexão ou um pacote de dados para uma conexão existente.

De acordo com pergunta você pode usar -m state para isso. Todo o conjunto de regras do iptables seria:

iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT

Você pode preferir ajustar um pouco essas regras, do jeito que elas correspondem a qualquer coisa que apareça.

Por exemplo, para limitar apenas as conexões tcp dessa maneira, e deixar qualquer outra coisa através de:

iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp -j REJECT

Note que eu só mudei a última regra, todo o resto será aceito por padrão ou cair em outras regras.

Para ir além, você deve realmente aprender o iptables. @sailor já apontou para um ótimo livro sobre o assunto. Existem muitos de bons recursos on-line também. Depois de obter os conceitos manipulados pelo iptables (cadeias, tabelas, regras e políticas), você encontrará man 8 iptables com todas as respostas.

Usar um frontend para o iptables também é uma boa opção se você não tiver tempo para se aprofundar no iptables. Eu uso shorewall para a maioria dos firewalls que eu gerencio.

    
por 28.10.2014 / 23:07
2

Isso pode ser feito facilmente com a opção --limit .

Por exemplo, iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/s -j ACCEPT deve ser um bom lugar para começar.

Eu também recomendo olhar a referência de bolso do Linux iptables por Gregor Purdy (ISBN: 0-596-00569-5). Eu uso sempre que tenho uma pergunta com o iptables.

    
por 28.10.2014 / 02:46

Tags