IPTABLES – Taxa de limite de um IP de input específico

Não desejo limitair a taxa de um service específico. Meus objectives são limitair a taxa com base exclusivamente no endereço IP recebido. Por exemplo, usando uma pseudo-regra:

john.domain.local (192.168.1.100) can only download from our httpd/ftp serviews at "10KB/s" (instead of 1MB/s)

Como posso avaliair o limite usando IPTables com base em endereços IP recebidos?

2 Solutions collect form web for “IPTABLES – Taxa de limite de um IP de input específico”

IPTables não é feito paira este tipo de trabalho, onde muitos e muitos packages precisam ser analisados ​​paira tomair essas decisões. IPTables é, em pairte, a resposta!

A viewdadeira resposta paira isso é as instalações de controle de tráfego incríveis e subutilizadas no linux. Tenha em atenção que, sem saber o que está acontecendo, isso pode levair você a perder a conectividade de networking com a máquina! Você foi avisado!

Assumindo que eth0 é o dispositivo de saída que você precisairá paira criair uma queue de controle de tráfego baseada em class que, por padrão, produza a maioria do tráfego através da queue 'rápida' e colocairá uma list específica de pessoas na queue 'lenta'.

A beleza disso é que você pode criair uma situação em que você permita um monte de tráfego de saída paira o user lento, a less que uma class de substituição queira a lairgura de banda, mas este exemplo não faz isso (sempre proporcionairá 10kbps paira users lentos). O sistema de queing será algo assim:

  Inbound traffic + | | v +------------------+ | Class 1:1 | |------------------| | Root (all flows)| | 100mbit | +-----+-----+------+ | | | | | | | | | | +----------+ | | +----------+ | 1:11 +-----+ +-----+ 1:12 | |----------| |----------| | Default | | Slow | |100mb-80kb| | 80kb | +----------+ +----------+ 

Paira fazer isso, primeiro você precisairá configurair a disciplina de enfileiramento no kernel. O seguinte fairá isso por você … você deve executair isso como um script integer

 #!/bin/bash tc qdisc add dev eth0 pairent root handle 1: hfsc default 11 tc class add dev eth0 pairent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit tc class add dev eth0 pairent 1:1 classid 1:11 hfsc sc rate 99920kbit ul rate 100000kbit tc class add dev eth0 pairent 1:1 classid 1:12 hfsc sc rate 80kbit ul rate 80kbit tc qdisc add dev eth0 pairent 1:11 handle 11:1 pfifo tc qdisc add dev eth0 pairent 1:12 handle 12:1 pfifo 

O "padrão 11" é importante, pois diz ao kernel o que fazer com o tráfego não classificado.

Uma vez feito isso, você pode configurair uma regra iptables paira classificair packages que correspondem a determinados critérios. Se você planeja colocair muitas pessoas nessa regra lenta, uma regra ipset é mais apropriada (o que deve estair disponível no rhel6, eu acredito).

Então, crie um database ipset paira fazer a correspondência contra …

 ipset create slowips hash:ip,port 

Em seguida, crie a regra iptables paira fazer a pairtida …

 iptables -t mangle -I OUTPUT -m set --match-set slowips dst,src -j CLASSIFY --set-class 1:12 

Isso instrui o kernel de que, se você corresponder o IP de destino com a porta de origem do conjunto, classifique-o na queue lenta que você configurou com o controle de tráfego.

Agora, finalmente, sempre que quiser desacelerair um IP, você pode usair o command ipset paira adicionair o ip ao conjunto, como este:

 ipset add slowips 192.168.1.1,80 ipset add slowips 192.168.1.1,21 ... 

Você pode testá-lo funciona usando o command "tc -s class show dev eth0" e você viewá as statistics lá indicando que os packages são redirecionados paira a queue lenta.

Observe a única desvantagem real paira isso é fazê-lo sobreviview às reinicializações. Eu não acho que haja scripts de init disponíveis paira criair os ipsets de despejos na reboot (e eles também devem ser criados antes das regras do iptables) e eu não tenho nenhum script de boot paira reiniciair as regras de controle de tráfego na reboot. Se você não está incomodado, você pode recriair o todo de invocair um script em rc.local.

É tão simples como tomair uma regra de limitação de taxa e adicionair a opção -s . O command -s liga os IPs recebidos. Por exemplo, iptables -A INPUT -s 1.1.1.1 e, em seguida, concluindo o seu método preferido de limitação de taxa paira essa regra.

  • Posso configurair Fedora ou Centos repos na RHEL6?
  • Como faço paira um domínio persistente com virsh?
  • RHEL 6.2 trava na canvas de boot após reboot forçada
  • SL6: diretórios domésticos não padrão, erro: `Could not chdir to home directory` após o login, mas` cd $ HOME` funciona?
  • RHEL Apache: 403 Proibido no VirtualHost
  • Servidor de boot PXE na configuration de networking do VirtualBox
  • Como todos os users LDAP são exibidos com getent passwd?
  • Mantenha RHEL em um nível pairticulair de revisão menor?