[FUG-BR] teste do mod_evasive rodando lento na VM

Marcelo Gondim gondim em bsdinfo.com.br
Terça Setembro 10 15:26:32 BRT 2013


Em 10/09/13 10:16, vic escreveu:
> Em 2013-09-10 9:23, Marcelo Gondim escreveu:
>> Pessoal,
>>
>> Sei que muitos aqui conhecem o mod_evasive pro apache que no FreeBSD é
>> o
>> pacote ap22-mod_evasive.
>> Ele vem com um script de teste que sempre utilizei pra checar se o
>> mod_evasive tá legal:
>>
>> test.pl:
>>
>> #!/usr/bin/perl
>> # test.pl: small script to test mod_dosevasive's effectiveness
>> use IO::Socket;
>> use strict;
>> for(0..100) {
>>     my($response);
>>     my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
>>                                         PeerAddr=> "127.0.0.1:80");
>>     if (! defined $SOCKET) { die $!; }
>>     print $SOCKET "GET /?$_ HTTP/1.0\n\n";
>>     $response = <$SOCKET>;
>>     print $response;
>>     close($SOCKET);
>> }
>>
>> Só que quando rodo numa VM com FreeBSD ele abre as conexões lentamente,
>> fazendo com que o teste não funcione. Fiz o mesmo teste em um FreeBSD
>> sem ser VM e rodou mais rápido e consegui fazer os testes. Fui comparar
>> com uma outra máquina com Linux e rodou estupidamente mais rápido.
>> Logicamente que diferenças de processamento podem ser uma das causas
>> mas
>> porque rodou tão lento numa VM é que não descobri ainda.
>>    Alguém tem alguma ideia?
>>
>> Grande abraço
> Suponho que sua aquela sua VM em Xen. Por acaso você tem um firewall PF
> na VM? Se sim tente:
>
> ifconfig xn0 -tso
> sysctl -w net.inet.tcp.tso=0
>
> Referências:
>
> http://www.freebsd.org/cgi/query-pr.cgi?pr=154428
> http://www.freebsd.org/cgi/query-pr.cgi?pr=135178
>
> Além disso, se você não compilou o kernel XENHVM, faça um teste com ele
> e mude a configuração do xen na vif para usar o type=netfront
>
É vic compilei com o XENHVM fiz as mudanças de disco e interface de rede 
e mesmo assim continua lento as conexões localhost do test.pl:

# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/xbd0p2      2G    190M    1.6G    10%    /
devfs          1.0k    1.0k      0B   100%    /dev
/dev/xbd0p4     58G     15G     37G    29%    /var
/dev/xbd0p5     31G    6.0G     22G    21%    /usr
/dev/xbd0p6      2G     16M    1.8G     1%    /tmp

xn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
     options=503<RXCSUM,TXCSUM,TSO4,LRO>
     ether 00:16:3e:02:9d:d6
     inet xx.xxx.xxx.xx netmask 0xfffffff8 broadcast 67.212.89.79
     inet6 fe80::216:3eff:fe02:9dd6%xn0 prefixlen 64 scopeid 0x6
     nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
     media: Ethernet manual
     status: active

# uname -a
FreeBSD xxxx.xxx.xxx.xx 9.2-PRERELEASE FreeBSD 9.2-PRERELEASE #0 
r255410M: Tue Sep 10 14:58:33 BRT 2013 
root em xxxx.xxx.xxx.xx:/usr/obj/usr/src/sys/XENHVM  amd64

Quem tiver a curiosidade de fazer esse teste nas mesmas condições que eu 
aqui, seria interessante. Abaixo os dados:

No servidor Debian 7 amd64
ii  libxen-4.1                         4.1.4-3+deb7u1 amd64        
Public libs for Xen
ii  libxenstore3.0                     4.1.4-3+deb7u1 amd64        
Xenstore communications library for Xen
ii  xen-hypervisor-4.1-amd64           4.1.4-3+deb7u1 amd64        Xen 
Hypervisor on AMD64
ii  xen-linux-system-3.2.0-4-amd64     3.2.46-1+deb7u1 amd64        Xen 
system with Linux 3.2 on 64-bit PCs (meta-package)
ii  xen-linux-system-amd64             3.2+46 amd64        Xen system 
with Linux for 64-bit PCs (meta-package)
ii  xen-system-amd64                   4.1.4-3+deb7u1 amd64        Xen 
System on AMD64 (meta-package)
ii  xen-tools                          4.3.1-1 all          Tools to 
manage Xen virtual servers
ii  xen-utils-4.1                      4.1.4-3+deb7u1 amd64        XEN 
administrative tools
ii  xen-utils-common                   4.1.4-3+deb7u1 all          Xen 
administrative tools - common files
ii  xenstore-utils                     4.1.4-3+deb7u1 amd64        
Xenstore utilities for Xen

Arquivo conf da VM:

kernel = '/usr/lib/xen-4.1/boot/hvmloader'
builder = 'hvm'
vcpus = 4
memory = 2048
shadow_memory = 8
name = 'freeba'
vif = [ 'type=netfront, model=e1000, bridge=xenbr0', ]
#vif = [ 'type=ioemu, bridge=xenbr0, mac=00:00:00:ff:fe:01' ]
disk = [
'file:/home/xen/domains/freeba/freeba.img,xvda,w',
'file:/home/xen/domains/freeba/FreeBSD-9.2-PRERELEASE-amd64-20130831-r255108-disc1.iso,xvdc:cdrom,r'
]
device_model = '/usr/lib/xen-4.1/bin/qemu-dm'
boot = 'cd'
sdl=0
vnc = '1'
vncviewer = '1'
vnclisten = "0.0.0.0"
vncpasswd = 'songamonga'
stdvga=0
serial='pty'
usbdevice='tablet'
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Pacote do mod_evasive no FreeBSD:  www/mod_evasive - 
ap22-mod_evasive-1.10.1_1      An Apache module to try to protect the 
HTTP Server from DoS/DDoS attacks

[]'s
Gondim


Mais detalhes sobre a lista de discussão freebsd