Eu não tenho uma resposta para o nr. 2 (veja abaixo). Para 1. e 3. você pode usar o módulo limite :
-
Controle a taxa do número de pacotes de rede:
iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
-
Controle o número total de conexões TCP abertas (por segundo):
iptables -A INPUT -m state -m tcp -p tcp --dport 80 --state RELATED,ESTABLISHED -m limit --limit 10/second -j ACCEPT
Alternativamente você pode usar o módulo hashlimit :
-
Controle a taxa do número de pacotes de rede:
iptables -A INPUT -m hashlimit -m tcp -p tcp --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-above 10/sec --hashlimit-burst 2 --hashlimit-htable-expire 30000 --hashlimit-name pktlimit -j DROP
-
Controle o número total de conexões TCP abertas (por segundo):
iptables -I INPUT -m hashlimit -m tcp -p tcp --dport 80 --hashlimit-above 10/sec --hashlimit-mode srcip --hashlimit-name connlimit -m state --state RELATED,ESTABLISHED -j DROP
Você pode monitorar o desempenho do hashlimit, analisando:
cat /proc/net/ipt_hashlimit/pktlimit
cat /proc/net/ipt_hashlimit/connlimit
EDITAR :
Em um mundo onde o NAT é dominante, realmente faz sentido limitar o número de endereços IP de origem, como você deseja fazer no nr. 2? Eu acho que faz mais sentido limitar o número total de conexões TCP abertas, assim:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with tcp-reset