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.