Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão Ajuda em um Codigo PHP, Via Comando

    olá. to tentando criar um arquivo php para agir junto com meu firewall.. so que nao sei como criar essa regra.
    são dois arquivos php!

    index.php

    <html>
    <head>
    <title>..::Firewall com php::..</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <style type="text/css">
    <!--
    .style3 {font-family: Verdana, Arial, Helvetica, sans-serif; color: #006699; }
    .style5 {color: #00CCFF}
    .style7 {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    color: #00CCFF;
    }
    -->
    </style>
    <script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_reloadPage(init) { //reloads the window if Nav4 resized
    if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
    else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
    }
    MM_reloadPage(true);
    //-->
    </script>
    </head>

    <body>
    <form action="firewall.php" method=post>
    <div id="Layer1" style="position:absolute; left:11px; top:14px; width:1033px; height:644px; z-index:1; background-color: #006699; layer-background-color: #0$
    <h6 align="center" class="style3 style5">:::... <u>FIREWALL CADEIA FILTER</u> ...::: </h6>
    <h6>

    <br>

    <br></br>
    <br>


    <H3> DIGITE A CADEIA</H3>
    <input type="text" size=10 name="Cadeia" value='cad'>

    <br>
    <h3>ESCOLHA O PROTOCOLO</H3>
    <select name="Protocolo" value="prot">
    <option>FTP
    <option>UDP
    </select>

    <br>

    <H3> DIGITE O IP</H3>
    <input type="text" size=10 name="IP" Value="ip">
    <br>
    <br>

    minha duvida é como ligar esse firewall.php para reconhecer o index.php e executar esse comando de acordo com oque eu digitar na index.
    <H3> DIGITE A CADEIA</H3>
    <input type="text" size=10 name="Cadeia" value='cad'>

    <br>
    <h3>ESCOLHA O PROTOCOLO</H3>
    <select name="Protocolo" value="prot">
    <option>FTP
    <option>UDP
    </select>

    <br>

    <H3> DIGITE O IP</H3>
    <input type="text" size=10 name="IP" Value="ip">
    <br>
    <br></br>
    <H3> DIGITE A PORTA</H3>
    <input type="text" size=10 name="Porta" value="port">
    <br></br>

    <select name="Permissao" value="permiss">
    <option>ACCEPT
    <option>REJECT
    <option>DROP

    </select>
    <br>
    <td colspan="2" align="center"><input type="submit" class="style3" value="Ativar Escolha"></td>
    </span>

    </h6>
    </div>
    </form>
    </body>
    </html>


    firewall.php
    IRA EXECUTAR O SEGUINTE COMANDO


    <?php


    //Criando Variáveis


    $Cadeia = $_POST['cadeia'];
    $Protocolo = $_POST['protocolo'];
    $IP = $_POST['ip'];
    $Porta = $_POST['port'];
    $Permissao = $_POST['permiss']

    {
    shell_exec("/usr/bin/sudo /sbin/iptables -A $Cadeia -p $Protocolo -s $IP --dport $Porta -j $Permissao);
    echo 'Comando inserido com sucesso</br>';
    }
    ?>

  2. #2

    Padrão

    Como faço para fazer isso.

    sempre da ess erro

    arse error: syntax error, unexpected $end in /var/www/firewall.php on line 18

  3. #3

    Padrão Ajuda em um Codigo PHP, Via Comando,inserir comando iptables via php

    Como faço para fazer isso.

    sempre da ess erro

    arse error: syntax error, unexpected $end in /var/www/firewall.php on line 18

    ja usei isso tbm para que no usuario comum nao use senha


    # visudo

    E insira as seguintes linhas:

    www-data ALL=NOPASSWD: /sbin/iptables
    www-data ALL=NOPASSWD: /sbin/iptables-save
    www-data ALL=NOPASSWD: /sbin/iptables-restore

  4. #4

    Padrão

    ta errado seu codigo:

    Código :
    <?php
     
     
    //Criando Variáveis
     
     
    $Cadeia = $_POST['cadeia'];
    $Protocolo = $_POST['protocolo'];
    $IP = $_POST['ip'];
    $Porta = $_POST['port'];
    $Permissao = $_POST['permiss'];
    if (shell_exec("/usr/bin/sudo /sbin/iptables -A $Cadeia -p $Protocolo -s $IP --dport $Porta -j $Permissao)) {
          echo 'Comando inserido com sucesso</br>';
     }
    ?>

  5. #5

    Padrão php + iptables

    toda vez que vou estartar o apache no ubuntu da esse erro:


    root@servidor-ubuntu:/var/www# /etc/init.d/apache2 start
    * Starting web server apache2 apache2: Syntax error on line 189 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/httpd.conf: Cannot load /etc/apache2/modules/mod_auth.so into server: /etc/apache2/modules/mod_auth.so: cannot open shared object file: No such file or directory

  6. #6

    Padrão

    Bem o seguinte o voce tem activado o modulo authentication.
    Queres utilizar a autenticação atravez de ficheiro de texto ?:

    Senão
    Comenta a linha # (#LoadModule auth_basic_module modules/mod_auth.so) que resolve o problema

    Isso acontence pq o sistema não tem esse modulo instalado e voce esta a mandar o apache carrega-lo, logo aparece esse erro ao iniciar o apache,

    caso que utilizar este tipo de autenticação, põe aqui algumas insformações da sua instalação do apache que ajufo a habilitar esta fncionalidade, caso não saiba como.

    -------- use esse comandos na consola
    Verifica qual a versão do apache
    $ httpd -v

    Lista os modulos instalados/compilados junto com apache:
    $ httpd -l

    Pelo nome do modulo posso dizer que esta utilizando a versão 1.3, ou 2.0 do apache, pois o nome desse modulo foi mudado na versão 2.2

  7. #7

    Padrão php + iptables

    root@servidor-ubuntu:~# httpd -v
    bash: httpd: comando não encontrado
    root@servidor-ubuntu:~# httpd -l

  8. #8

    Padrão

    tbm mudei meu arquivo firewall.php


    <?php


    //Criando Variáveis

    $Filter = $_POST['filt'];
    $Cadeia = $_POST['cadeia'];
    $Protocolo = $_POST['protocolo'];
    $IP = $_POST['ip'];
    $Porta = $_POST['port'];
    $Permissao = $_POST['permiss'];
    if(($Filter)AND($cadeia)AND($Protocolo)AND($IP)AND($Porta)AND($Permissao))
    {
    shell_exec("sudo /usr/sbin/iptables -t $Filter -A $Cadeia -p $Protocolo -s $IP --dport $Porta -j $$
    }else{
    echo 'Comando inserido com sucesso</br>';
    }

    ?>

  9. #9

    Padrão

    e acrecenetei isso no index.php


    <H3> DIGITE A filter</H3>
    <input type="text" size=10 name="Filter" value='filt'>

  10. #10

    Padrão

    o que e esse erro

    Parse error: syntax error, unexpected $end in /var/www/firewall.php on line 18

  11. #11

    Padrão

    qual a distribuição Linux? (ubuntu, fedora, ...) para resolver o erro do carregamento do modulo??

    Ja posto aqui um codigo corrigido do firewall.php e index.php
    Última edição por poolborges; 28-01-2010 às 18:48.

  12. #12

    Padrão

    ------------
    Código HTML:
    CODIGO index.php
    Código HTML:
    <html>
        <head>
            <title>..::Firewall com php::..</title>
        <body>
    
            <form action="firewall.php" method=post>
                <table border="1">
                    <thead>
                        <tr>
                            <th colspan="2"> EXECUÇÃO DE FIREWALL IPTABLES</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>TABELA</td>
                            <td>
                                <select id="tabela" name="tabela">
                                    <option value="nat" selected="selected">nat</option>
                                    <option value="mangle">mangle</option>
                                    <option value="filter">filter</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td>CADEIA(Chain)</td>
                            <td>
                                <input type="text" size="50" name="cadeia" value="">
                            </td>
                        </tr>
                        <tr>
                            <td>PROTOCOLO</td>
                            <td>
                                <select id="protocolo" name="protocolo">
                                    <option value="tcp" selected="tcp" >TCP</option>
                                    <option  value="udp">UDP</option>
                                    <option  value="icmp">ICMP</option>
                                    <option  value="all">TODOS</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td>IP</td>
                            <td><input type="text" size="11" maxlength="11" name="ip" id="ip" Value=""></td>
                        </tr>
                        <tr>
                            <td>PORTA(max:65535)</td>
                            <td><input type="text" size="11" maxlength="5" name="porta" value=""></td>
                        </tr>
                        <tr>
                            <td>Permissões(Target)</td>
                            <td>
                                <select id="alvo" name="alvo">
                                    <option value="ACCEPT" selected="selected">ACCEPT</option>
                                    <option value="REJECT">REJECT</option>
                                    <option value="DROP">DROP</option>
                                </select>
                            </td>
                        </tr>
                    </tbody>
                </table>
                <p><input type="submit" class="style3" name="activar" value="Ativar Escolha"></p>
                
            </form>
        </body>
    </html>
    Código PHP:
    <?php
    /**CODIGO firewall.php
     *
     * #iptables [-t tabela] [opção] [chain] [dados] -j [ação]
     */


    //Verifica se foi pressiona o bottão na outra pagina
    if(isset ($_POST['activar'])) {

        
    //captura as variaveis do formulario
        
    $Tabela $_POST['tabela'];
        
    $Cadeia $_POST['cadeia'];
        
    $Protocolo $_POST['protocolo'];
        
    $IP $_POST['ip'];
        
    $Porta $_POST['porta'];
        
    $Alvo $_POST['alvo'];

        
    //string com o comando a ser executado
        
    $CMD "sudo /usr/sbin/iptables -t $Tabela -A $Cadeia -p $Protocolo -s $IP --dport $Porta -j $Alvo";

        
    //Execução do Comando
        
    $resultado shell_exec($CMD);
        
         echo 
    "<p><b>CMD QUE VAI SER EXECUTADO</b>:</p> $CMD";
         echo 
    "<p><b>(CASO FALHE) TESTE O CMD NA CONSOLA PARA VERIFICA A SUA VALIDADE</b>:</p>";
         
        
    /* Verifa se foi devolvido alguma mensagem é mostra*/
        
    if(!empty($resultado)) {    
            echo 
    "<p><b>O CMD devolveu o seguinte</b>:</p> $resultado";
        }else {
            echo 
    "<p><b>O CMD não devolveu NADA</b>:</p>";
        }
    }
    ?>

    <p><a href="index.php">PAGINA INICIAL</a></p>
    Última edição por poolborges; 28-01-2010 às 18:52. Razão: Disponibilização do Codigo

  13. #13

    Padrão

    Será que está faltando uma aspa no comando passado ao shell_exec?

  14. #14

    Padrão php + iptables

    eu estou utilizando a distribuiçao ubuntu 9.04 , mas ainda estou tentando dar permissao de root a meu usuario ,pois se nao nao e possivel dar determinados comandos no cmd.

  15. #15

    Padrão

    sempre da esse retorno



    CMD QUE VAI SER EXECUTADO:

    sudo /usr/sbin/iptables -t filter -A FORWARD -p udp -s 192.168.0.1 --dport 80 -j REJECT
    (CASO FALHE) TESTE O CMD NA CONSOLA PARA VERIFICA A SUA VALIDADE:

    O CMD não devolveu NADA:

    PAGINA INICIAL

  16. #16

    Padrão php + iptables

    editei o visudo

    /etc/sudoers.tmp


    para nao pedir senha para o meu usuario comum

    # /etc/sudoers
    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # See the man page for details on how to write a sudoers file.
    #

    Defaults env_reset

    # Host alias specification

    # User alias specification

    # Cmnd alias specification

    # User privilege specification
    root ALL=(ALL) ALL
    jefferson ALL=(ALL)ALL
    # Uncomment to allow members of group sudo to not need a password
    # (Note that later entries override this, so you might need to move
    # it further down)
    %sudo ALL=NOPASSWD: ALL
    jefferson ALL=NOPASSWD: /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore



    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL

    jefferson ALL=NOPASSWD: /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore

  17. #17

    Padrão

    Citação Postado originalmente por ribeirokaka2 Ver Post
    editei o visudo

    /etc/sudoers.tmp


    para nao pedir senha para o meu usuario comum

    # /etc/sudoers
    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # See the man page for details on how to write a sudoers file.
    #

    Defaults env_reset

    # Host alias specification

    # User alias specification

    # Cmnd alias specification

    # User privilege specification
    root ALL=(ALL) ALL
    jefferson ALL=(ALL)ALL
    # Uncomment to allow members of group sudo to not need a password
    # (Note that later entries override this, so you might need to move
    # it further down)
    %sudo ALL=NOPASSWD: ALL
    jefferson ALL=NOPASSWD: /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore



    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL

    jefferson ALL=NOPASSWD: /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore

    Acho que o correto do seria "/sbin/iptables" no Ubunto.

    Tente isso...

    # User alias specification
    www-data ALL=NOPASSWD:/sbin/iptables, /bin/sed, /usr/bin/awk, /bin/grep
    sudo ALL=NOPASSWD:/usr/sbin/iptraf, /bin/sed, /usr/bin/awk, /bin/grep

    ///////////////////////// PHP

    $ips = $_GET['ip'];

    $masc = "iptables -t nat -A PREROUTING -p tcp -s $ips --dport 80 -j DNAT --to-destination 189.xx.xx.3\n";
    $regras = '/dados/ip_web.sh';

    if (!$ips){
    echo "Arquivo não encontrado";
    exit;
    }
    $fp = fopen($regras, 'a+');
    fwrite($fp, $masc);

    fclose($fp);

    if($ips){
    shell_exec("/usr/bin/sudo /sbin/iptables -t nat -A PREROUTING -p tcp -s $ips --dport 80 -j DNAT --to-destination 189.xx.xx.3");

    echo "<br>O ip $ips foi adicionado para bloqueio</br>";
    echo "<br>";
    echo "<a href='bloquear.php'>Bloquear outros</a></br>";
    }
    else {
    echo "Error, Regras não aplicadas...";
    }


    Esse script guarda dentro do arquivo "/dados/ip_web.sh" e aplica a grega. Fica quardado para caso vc precise restatar o iptables execultar as regras dentro do arquivo.

    Dentro do arquivo que fica as regras do firewall vc coloca: "sh /dados/ip_web.sh"
    Última edição por fsoaress76; 02-02-2010 às 22:38.

  18. #18

    Padrão php + iptables

    index1.php

    <html>
    <head>
    <title>..::Firewall com php::..</title>
    <body>

    <form action="firewall1.php" method=post>
    <table border="1">
    <thead>
    <tr>
    <th colspan="2"> EXECUCAO DE FIREWALL IPTABLES</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>TABELA</td>
    <td>
    <select id="tabela" name="tabela" value="baba">
    <option value="nat" selected="selected">nat</option>
    <option value="mangle">mangle</option>
    <option value="filter">filter</option>
    </select>
    </td>
    </tr>
    <tr>
    <td>CADEIA(Chain)</td>
    <td>
    <input type="text" size="50" name="cadeia" value="">
    </td>
    </tr>
    <tr>
    <td>PROTOCOLO</td>
    <td>
    <select id="protocolo" name="protocolo">
    <option value="tcp" selected="tcp" >TCP</option>
    <option value="udp">UDP</option>
    <option value="icmp">ICMP</option>
    <option value="all">TODOS</option>
    </select>
    </td>
    </tr>
    <tr>
    <td>IP</td>
    <td><input type="text" size="11" maxlength="11" name="ip" id="ip" Value=""></td>
    </tr>
    <tr>
    <td>PORTA(max:65535)</td>
    <td><input type="text" size="11" maxlength="5" name="porta" value=""></td>
    </tr>
    <tr>
    <td>Permissoes(Target)</td>
    <td>
    <select id="alvo" name="alvo">
    <option value="ACCEPT" selected="selected">ACCEPT</option>
    <option value="REJECT">REJECT</option>
    <option value="DROP">DROP</option>
    </select>
    </td>
    </tr>
    </tbody>
    </table>
    <p><input type="submit" class="style3" name="activar" value="Ativar Escolha"></p>

    </form>
    </body>
    </html>



    firewall.php


    <?php
    /**CODIGO firewall.php
    *
    * #iptables [-t tabela] [opção] [chain] [dados] -j [ação]
    */


    //Verifica se foi pressiona o bottão na outra pagina
    if(isset ($_POST['activar'])) {

    //captura as variaveis do formulario
    $Tabela = $_POST['tabela'];
    $Cadeia = $_POST['cadeia'];
    $Protocolo = $_POST['protocolo'];
    $IP = $_POST['ip'];
    $Porta = $_POST['porta'];
    $Alvo = $_POST['alvo'];

    //string com o comando a ser executado
    $CMD = "sudo /usr/sbin/iptables -t $Tabela -A $Cadeia -p $Protocolo -s $IP --dport $Porta -j $Alvo";

    //Execução do Comando
    $resultado = shell_exec($CMD);

    echo "<p><b>CMD QUE VAI SER EXECUTADO</b>:</p> $CMD";
    echo "<p><b>(CASO FALHE) TESTE O CMD NA CONSOLA PARA VERIFICA A SUA VALIDADE</b>:</p>";

    /* Verifa se foi devolvido alguma mensagem é mostra*/
    if(!empty($resultado)) {
    echo "<p><b>O CMD devolveu o seguinte</b>:</p> $resultado";
    }else {
    echo "<p><b>O CMD não devolveu NADA</b>:</p>";
    }
    }
    ?>


    visudo


    # /etc/sudoers
    #
    # This file MUST be edited with the 'visudo' command as root.
    #
    # See the man page for details on how to write a sudoers file.
    #

    Defaults env_reset

    # Host alias specification

    # User alias specification
    www-data ALL=NOPASSWD:/sbin/iptables, /bin/sed, /usr/bin/awk, /bin/grep
    sudo ALL=NOPASSWD:/usr/sbin/iptraf, /bin/sed, /usr/bin/awk, /bin/grep

    # Cmnd alias specification

    # User privilege specification
    root ALL=(ALL) ALL
    www-data ALL=NOPASSWD: /var/www/logar.php
    jefferson ALL=NOPASSWD: /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore
    nobody ALL=NOPASSWD: /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore


    # Uncomment to allow members of group sudo to not need a password
    # (Note that later entries override this, so you might need to move
    # it further down)
    %sudo ALL=NOPASSWD: ALL
    jefferson ALL=NOPASSWD: /usr/sbin/iptables, /usr/sbin/iptables-save, /usr/sbin/iptables-restore

    # Members of the admin group may gain root privileges
    %admin ALL=(ALL) ALL

    jefferson ALL=NOPASSWD: /sbin/iptables, /sbin/iptables-save, /sbin/iptables-restore

    apache2 ALL=NOPASSWD:/sbin/iptables,/sbin/useradd,/sbin/userdel,/sbin/chpasswd, /bin/smbpasswd,/sbin/cbq,/sbin/ip,/sbin/tc,/sbin/dhcpd,/sbin/arping,/bin/r


    esta execuntando cetinho sem erro , so nao insere o comando no sistema, quando vc da iptables -nL nao tem nada la ..


    ja quebrei a cabeça de tudo que foi jeito.

    alguem tem uma luz ai..

  19. #19

    Padrão

    o que a pessoa digita no index.php esta sendo enviado via post nas variaveis no arquivo firewall.php e mostra na tela , so nao esta mostrando no sistema os camandos escolhidos .

  20. #20

    Padrão

    Voce tem que dar permissão ao utilizador do apache, para que o codigo do iptables possa ser executado no php, sabendo que no Ubuntu o apachetem:
    User(utilizador do apcache) www-data
    Group(grupo do utilizador do apcache) www-data

    Sabendo que no Ubuntu os comandos do iptables estão em

    "/sbin/iptables"
    "/sbin/iptables-save"
    "/sbin/iptables-restore"

    Não deves editar o ficheiro /etc/sudoers directamente com um editor grafico
    Pq simplesmente NÃO ira funcionar

    Por isso na consola/shell(linha de comando) ou como quiser chamar execute

    visudo (este comando ira abri o ficheiro /etc/sudoers para para ser editado)

    adiciona a seguinte linha(ira dar permissão ao utilizador do apache para executar iptables)
    www-data ALL=NOPASSWD:/sbin/iptables

    Caso pretende dar permissão ao utilizador do apcache(www-data) para executar outros comandos
    basta separar os comando por virgula exemplo
    www-data ALL=NOPASSWD:/sbin/iptables, /sbin/iptables-save, /sbin/iptables-restore


    Explicando a alinha que FOI ADICIONADO
    o utilizador www-data pode executar
    (/sbin/iptables, /sbin/iptables-save, /sbin/iptables-restore), apartir de qq maquina (ALL)
    o ALL podia ser substituido por localhost