Limitar a largura de banda com hashlimit (por exemplo, kb / s - não conexões!) não funciona, embora a página man diga que deveria

3

De acordo com a página do manual iptables-extensions , o hashlimit pode limitar a largura de banda:

"flows exceeding 512kbyte/s" =>

--hashlimit-mode srcip,dstip,srcport,dstport --hashlimit-above 512kb/s

No entanto, quando tento especificar uma regra como essa, 1) ela não limita minha largura de banda como eu esperava, 2) quando despejo as regras com iptables-save, recebo as mesmas entradas não importando o que eu coloquei após o número (kb / s, b / s / s, algo bobo ou nada):

# iptables -t filter -A it2net -s 10.5.2.43/32 -m hashlimit --hashlimit-upto 8kb/s --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
# iptables -t filter -A it2net -s 10.5.2.44/32 -m hashlimit --hashlimit-upto 8b/s --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
# iptables -t filter -A it2net -s 10.5.2.45/32 -m hashlimit --hashlimit-upto 8 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
# iptables -t filter -A it2net -s 10.5.2.46/32 -m hashlimit --hashlimit-upto 8000 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
# iptables -t filter -A it2net -s 10.5.2.47/32 -m hashlimit --hashlimit-upto 8000b --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
# iptables -t filter -A it2net -s 10.5.2.48/32 -m hashlimit --hashlimit-upto 8000xb --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
# iptables -t filter -A it2net -s 10.5.2.49/32 -m hashlimit --hashlimit-upto 8000kb --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT

E as partes relevantes do despejo:

-A it2net -s 10.5.2.43/32 -m hashlimit --hashlimit-upto 8/sec --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
-A it2net -s 10.5.2.44/32 -m hashlimit --hashlimit-upto 8/sec --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
-A it2net -s 10.5.2.45/32 -m hashlimit --hashlimit-upto 8/sec --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
-A it2net -s 10.5.2.46/32 -m hashlimit --hashlimit-upto 10000/sec --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
-A it2net -s 10.5.2.47/32 -m hashlimit --hashlimit-upto 10000/sec --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
-A it2net -s 10.5.2.48/32 -m hashlimit --hashlimit-upto 10000/sec --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT
-A it2net -s 10.5.2.49/32 -m hashlimit --hashlimit-upto 10000/sec --hashlimit-burst 5 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j ACCEPT

(não vamos nos preocupar com o porquê de 8000 ser arredondado para 10000 ... ou, devemos?)

Alguma idéia do que estou perdendo? Eu precisaria limitar o uso de largura de banda de cerca de 100 usuários em constante mudança individualmente, então cada um teria apenas um limite muito baixo para permitir serviços básicos (especialmente aplicativos móveis estúpidos que não podem usar autenticação proxy), mas exigiria login para todo o resto .

    
por dakhota 27.08.2013 / 21:53

2 respostas

2

Para citar o OP, como a resposta está em um comentário

Solution: I'm 3 minor versions behind. Byte-based hashlimit is introduced in iptables 1.4.15 (Ubuntu 13.04 has 1.4.12) – dakhota

    
por 15.10.2018 / 20:25
0

Suas regras ACCEPT pacotes até uma determinada taxa, mas há algo depois disso que DROP o tráfego quando ele não corresponde às regras? Política de cadeia padrão ( -P ) ou uma regra explícita ...

O que você pode fazer é alterar suas regras para DROP tráfego com --hashlimit-above ; ex:

# iptables -t filter -A it2net -s 10.5.2.43/32 -m hashlimit --hashlimit-above 8kb/s --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j DROP
# iptables -t filter -A it2net -s 10.5.2.44/32 -m hashlimit --hashlimit-above 8b/s --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j DROP
# iptables -t filter -A it2net -s 10.5.2.45/32 -m hashlimit --hashlimit-above 8 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j DROP
# iptables -t filter -A it2net -s 10.5.2.46/32 -m hashlimit --hashlimit-above 8000 --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j DROP
# iptables -t filter -A it2net -s 10.5.2.47/32 -m hashlimit --hashlimit-above 8000b --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j DROP
# iptables -t filter -A it2net -s 10.5.2.48/32 -m hashlimit --hashlimit-above 8000xb --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j DROP
# iptables -t filter -A it2net -s 10.5.2.49/32 -m hashlimit --hashlimit-above 8000kb --hashlimit-mode dstip --hashlimit-name test --hashlimit-htable-expire 3600000 -j DROP

As outras opções: política de cadeia padrão (bloqueará o tráfego all que não corresponde a essas regras) ou regras explícitas que correspondam ao mesmo tráfego aceito e que seja descartado quando não corresponder as regras ACCEPT hashlimit.

Quanto à maneira como hashlimit manipula suas regras, parece bastante estranho. Ele fará o mesmo se você usar nomes de tabela distintos? Eu acho que é porque você tem uma versão mais antiga que não suporta, ou de alguma forma toma o / s como / sec e assume todo o resto da tabela por segundo.

    
por 14.05.2015 / 01:26