Método para descartar 50% dos pacotes do total

2

Na minha máquina, quero que apenas 50% dos pacotes recebam.

Estou trabalhando no centOS 5.5.

Por isso eu procurei na net. Eu tenho IPtables. Eu usei patch aleatório de IPtables.

Comando

sudo iptables -A INPUT -p icmp --icmp-type echo-request -m random --average 50 -j DROP

Resultado

iptables v1.3.5: Couldn't load match 'random':/lib64/iptables/libipt_random.so: cannot open shared object file: No such file or directory

Try 'iptables -h' or 'iptables --help' for more information.

Mas acima, mostra que essa biblioteca está faltando.

Então, como posso soltar 50% dos pacotes do total. Por favor, corrija meu método acima ou sugira um novo.

Diga-me como adicionar essas bibliotecas ao pacote IPtables existente. [Eu tentei, mas essas bibliotecas não são encontradas na internet]

Editar nº 1

Eu ainda preciso de log para os pacotes descartados, então eu mudei meu conjunto de regras iptables da seguinte forma:

iptables -L -n -v output é [isto está sendo executado no sistema 1]

Chain INPUT (policy ACCEPT 1875K packets, 114M bytes)
 pkts bytes target     prot opt in     out     source               destination
   23  2392 random_drops  icmp --  *      *       0.0.0.0/0            0.0.0.0/0           statistic mode random probability 0.500000

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 2121K packets, 206M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain random_drops (1 references)
 pkts bytes target     prot opt in     out     source               destination
   23  2392 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix 'dropped randomly: '
   23  2392 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

Em seguida, executo um script (esse script está sendo executado no sistema 2 em duas instâncias para criar mais tráfego)

while [ 1 ]; do
    rsh a.b.c.d pwd;
done

em dois sistemas. Mas não há log formado.

  1. A permissão / var / log / messages é -rw ------- root: root.
  2. / var / log / syslog não está presente.

O que estou perdendo?

    
por devsda 21.03.2013 / 11:19

2 respostas

4

O CentOS 5.5 não possui os módulos ipt_random nem ipt_statistic pré-instalados. Você pode reverter para o repositório CentosALT (desculpe meu russo) e usar o módulo de estatísticas prontamente compilado a partir dali:

wget http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm
# [...]
rpm -Uvh centalt-release*rpm
# [...]
yum install ipt_statistic

e executando

sudo iptables -A INPUT -p icmp --icmp-type echo-request -m statistic --mode random --probability 0.50 -j DROP

deve render a regra desejada.

Nota da documentação do Netem:

Caveats

When loss is used locally (not on a bridge or router), the loss is reported to the upper level protocols. This may cause TCP to resend and behave as if there was no loss. When testing protocol reponse to loss it is best to use a netem on a bridge or router

embora isso obviamente não se aplique, contanto que você esteja apenas DROPping na cadeia INPUT.

    
por 21.03.2013 / 15:04
0

Este é um problema de configuração do kernel . Veja iptables-extensions(8) , explica o módulo statistic :

iptables ... -m statistic --mode random --probability 0.5 ...

(preencha ... conforme necessário).

Esta é a configuração do kernel CONFIG_NETFILTER_XT_MATCH_STATISTIC , configurada para o módulo aqui (Fedora 18, kernel-3.8.3-201.fc18.x86_64, iptables-1.4.16.2-5.fc18.x86_64). Não há um objeto compartilhado ipt_statistic correspondente para o executável iptables userland.

    
por 21.03.2013 / 19:37