terça-feira, 15 de novembro de 2011

Adicionando Ping, Traceroute e ARPing no Endian Firewall


O Endian Firewall é um excelente web firewall, mas como venho do smoothwall 3 express, senti a necessidade das ferramentas de IP e Traceroute do modulo iptools.cgi.

Então peguei parte do codigo do smoothwall e criei esse MOD no Endian 2.4.1. Tive que perder horas pra dar uma fuçada nos cgi do endian, mas felizmente boa parte dele é baseado no smoothwall, então mão a obra, segue o modulo criado:


#!/usr/bin/perl

# Know Works: Endian Firewall Community 2.4.1
# MOD: iptools.cgi
# version: 0.10
#
# Copyright (C) 2011 - Claudemir P. da Luz Jr.
# Email: xmaxmex@gmail.com
#
# Licensed under GPL Version 2.
#
# have many issues, but it works ;)

require '/var/efw/header.pl';

my %cgiparams;
my @inaddrs, @addrs;
my $addr;
my $address;
my $errormessage = '';

my %cgiparams;

&showhttpheaders();

&getcgihash(\%cgiparams);

$selected{'TOOL'}{'PING'} = '';
$selected{'TOOL'}{'TRACEROUTE'} = '';
$selected{'TOOL'}{'ARPING'} = '';
$selected{'TOOL'}{$cgiparams{'TOOL'}} = 'SELECTED';


# Esta função modifica o titulo no Navegador..
&openpage(_('MOD IPTOOLS ver 0.10'), 1, '');

&openbigbox($errormessage, $warnmessage, $notemessage);

print "<FORM METHOD='POST'>\n";

# esta função abre um quadrado na pagina e coloca um cabeçalho..
&openbox('100%', 'left', _('Ferramentas de Teste IP'));

printf <<END

Escolha o a ferramenta de teste, ping icmp ,traceoute ou arping:<p>
arping utilizara a interface eth1 para seus testes<p><p>
   <div class="efw-form">
END
;

print <<END
<TABLE WIDTH='100%'>
<TR>
<TD WIDTH='15%' CLASS='base'>Ferramenta: $tr{'toolc'}</TD>
<TD WIDTH='20%'>
<SELECT NAME='TOOL'>
<OPTION VALUE='PING' $selected{'TOOL'}{'PING'}>Ping
<OPTION VALUE='TRACEROUTE' $selected{'TOOL'}{'TRACEROUTE'}>Traceroute
<OPTION VALUE='ARPING' $selected{'TOOL'}{'ARPING'}>ARPing
</SELECT>
</TD>
<TD WIDTH='20%' CLASS='base'>IP ou Hostname:  $tr{'ip addresses or hostnames'}</TD>
<TD WIDTH='30%'><INPUT TYPE='text' SIZE='40' NAME='IP' VALUE='$cgiparams{'IP'}'></TD>
<TD WIDTH='15%' ALIGN='CENTER'><INPUT TYPE='submit' NAME='ACTION' VALUE='Executar'></TD>
</TR>
</TABLE>
END
;

printf <<END
        <br class="cb" />
    </div>

END
;

&closebox();

if ($cgiparams{'ACTION'} eq "Executar")
{
    @inaddrs = split(/,/, $cgiparams{'IP'});

    #aqui fiz algumas modificações... ta meio bugado ;)

            &openbox('100%', 'left', _('Retorno'));

            print "<PRE>\n";
            # ping with root privileges
            if ($cgiparams{'TOOL'} eq 'PING')
                        {
                system('/bin/pingroot', '-n', '-c', '5', $cgiparams{'IP'});
                }


            if ($cgiparams{'TOOL'} eq 'TRACEROUTE')
                        {
                system('/bin/traceroute', '-n', $cgiparams{'IP'});
                        }

            # arping...very util
            if ($cgiparams{'TOOL'} eq 'ARPING')
                        {
                                system('/sbin/arpingroot', '-I', 'eth1', '-c', '5', $cgiparams{'IP'});               
                        }

            print "</PRE>\n";
            &closebox();

}

print "</FORM>\n";

#print "<br>DEBUG 2: ".$cgiparams{'TOOL'};
#print "<br>DEBUG 4: ".$cgiparams{'IP'};

&closebigbox();
&closepage();
#end.<


Basta fazer o upload via ssh para dentro do endian e salvar na pasta /home/httpd/cgi-bin com o nome iptools.cgi Não esquecer de dar permissão de ececução no script para chmod 755 iptools.cgi. Se algums notaram o ping, foi substituido por pingroot, assim como o arping, foi para arpingroot, esse binarios não existem por padrão no endian.

Mas isto se deve pelo fato do Endian não deixar executar o ping e o arping tradficional, por não ter privilegio, e para não perder tempo, apenas copiamos os binarios para os novos nomes e setamos o priviliegio de SUID. Fazemos assim então: cp /bin/ping /bin/pingroot chmod 4755 /bin/pingroot cp /sbin/arping /sbin/arpingroot chmod 4755 /sbin/arpingroot
Segue screenshot do modulo:


Espero que tenhan gostado.

Nenhum comentário:

Postar um comentário