+ Responder ao Tópico



  1. #1

    Padrão script para administrar servidor

    Olá pessoal... estou precisando aqui de uma ajuda...

    Aqui no provedor instalarão um soft para gerenciar os ips, o programa grava os dados em uma tabela MYSQL.. como o exemplo abaixo:

    IP: Mac Bloqueado

    13.0.0.2 00:00:00:00:00 1


    Bom.... o que eu preciso é o seguinte.... que meu servidor de acesso se conecte a esse banco de dados remoto, pegue os dados da tabela acima e monte as regras de iptables como a to exemplo?

    iptables -A INPUT -s 13.0.0.6 -m mac --mac-source 00:14:2A:C8:56:3D -j ACCEPT
    iptables -A FORWARD -s 13.0.0.6 -m mac --mac-source 00:14:2A:C8:56:3D -j ACCEPT

    ----------------------------------------------------

    Se alguem poder me ajudar vou ficar muito agradecido... muito obrigado...

  2. #2

    Padrão

    colega até tem como fazer isso, sim, mas ae tu tem que fazer em php. fica melhor. agora só não sei se tem algo ae pela net. como não manjo de php, fico devendo mas a galera que manda pode ajudar o camarada ae.

  3. #3

    Padrão

    Não, não tem que entrar em PHP.

    Olha, eu li o seu post hoje de tarde e tentei fazer um esquema aqui que não funcionou e eu não sei exatamente o porquê de não ter funcionado, por isso o script ficou um pouco maior do que deveria, mas eu tenho 90% de certeza que isso aqui deve fazer o trabalho pra você. Se der algum probleminha aí, me manda a sua tabela para eu fazer uns testes aqui?

    Código :
    #!/bin/bash
     
    USUARIO="";
    SENHA="";
    HOST="";
    BANCO="";
     
       counter=0;
       for i in `mysql -u $USUARIO -p$SENHA -h $HOST -D $BANCO -e "select * from tabela;" | sed '1d';`; do
          tabela[$counter]="$i":
          let counter++;
       done;      
     
       while read ip mac; do
          iptables -A INPUT -s "$ip" -m mac --mac-source "$mac" -j ACCEPT;
          iptables -A FORWARD -s "$ip" -m mac --mac-source "$mac" -j ACCEPT;
       done < $tabela;

    Abraços!
    Última edição por xstefanox; 10-02-2007 às 00:06. Razão: O "-p $SENHA" é junto. Já corrigido no script.

  4. #4

    Padrão

    ou ainda.. voce pode utilizar C !!!

    #include <stdio.h>
    #include <mysql/mysql.h>

    #define HOST "200.200.200.200"
    #define USER "usuario_mysql"
    #define PASS "senha_mysql"
    #define DB "banco_de_dados"

    int main(int argc, char *argv[]) {
    MYSQL conexao;
    MYSQL_RES *resp;
    MYSQL_ROW linhas;
    MYSQL_FIELD *campos;
    //char query[]=strcpy(query, argv[1]);
    int conta;
    int total = 0;
    int fields = 0;
    int rquery;
    mysql_init(&conexao);
    if (mysql_real_connect(&conexao,HOST,USER,PASS,DB,0,NULL,0)) {
    printf("Conectado com Sucesso!\n");
    rquery = mysql_query(&conexao,argv[1]);
    if (rquery) {
    printf("Erro: %s\n",mysql_error(&conexao));
    }
    else {
    resp = mysql_store_result(&conexao);
    if (resp) {
    total = mysql_num_rows(resp);
    printf("Total de registros: %d\n", total);
    printf("-------------------------------------------------\n\n");
    campos = mysql_fetch_fields(resp);
    fields = mysql_num_fields(resp);
    for (conta = 0;conta < fields; conta++) {
    printf("%s\t",campos[conta].name);
    if (mysql_num_fields(resp)>1)
    printf("\t");
    }
    printf("\n");
    while ((linhas = mysql_fetch_row(resp)) != NULL) {
    for (conta = 0;conta < fields; conta++) {
    printf("%s\t",linhas[conta]);
    }
    printf("\n");
    }
    }
    mysql_free_result(resp);
    }
    mysql_close(&conexao);
    }
    else {
    printf("Conexao Falhou\n");
    if (mysql_errno(&conexao)) {
    printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
    }
    }
    return 0;
    }


    compila assim:

    gcc -o myadm -I/usr/local/mysql/include myadm.c -L/usr/lib64/mysql -L/usr/local/mysql/lib -lmysqlclient

    ali no -L /usr/lib64/mysql .. troque por /usr/lib/mysql caso seu sistema seja 32bits...

  5. #5

    Padrão

    ai vc usa assim:

    ./myadm "SELECT * FROM tabela"

    ai ele vai retornar pra vc ... vc pode mudar a forma como eh mostrado os dados.. ou ja fazer TUDO dentro do programa.. fazer ele selecionr o ip e o mac.. e ja rodar o iptables

  6. #6

    Padrão

    xstefanox e alexandrecorrea fica aí meu agradecimento pois as repostas de vcs foram uteis pra mim em uma outra situação onde eu necessitava de me conectar ao BD via shell...

    ttjedi2 eu achei isso aki na net e achei mto util, no caso ele serve somente para administração de usuários, + se vc tive conhecimento em PHP vc pode facilmente editar os scripts citados de acordo com suas necessidades.

    Linux: Administrando usuários no GNU/Linux e Samba via web com PHP [Artigo]

  7. #7

    Padrão

    Realmente, peço, desculpas, existe outra soluções de script tbem, como o shell script e o C.

    Mas está ae... isso ae galera, ajuda nunca é d+


    Citação Postado originalmente por xstefanox Ver Post
    Não, não tem que entrar em PHP.

    Olha, eu li o seu post hoje de tarde e tentei fazer um esquema aqui que não funcionou e eu não sei exatamente o porquê de não ter funcionado, por isso o script ficou um pouco maior do que deveria, mas eu tenho 90% de certeza que isso aqui deve fazer o trabalho pra você. Se der algum probleminha aí, me manda a sua tabela para eu fazer uns testes aqui?

    Código :
    #!/bin/bash
     
    USUARIO="";
    SENHA="";
    HOST="";
    BANCO="";
     
       counter=0;
       for i in `mysql -u $USUARIO -p$SENHA -h $HOST -D $BANCO -e "select * from tabela;" | sed '1d';`; do
          tabela[$counter]="$i":
          let counter++;
       done;      
     
       while read ip mac; do
          iptables -A INPUT -s "$ip" -m mac --mac-source "$mac" -j ACCEPT;
          iptables -A FORWARD -s "$ip" -m mac --mac-source "$mac" -j ACCEPT;
       done < $tabela;

    Abraços!

  8. #8

    Padrão

    bom... o primeiro script que me passaram eu nao consegui funcionar....

    So lembrando meu linux é o Debian 3.1 --- To precisando fazer essa conexão com o mysql remotamente e retirar somente certos dados de uma certa tabela... valew pessoal!!!

  9. #9

    Padrão

    quando eu uso o script acima (o primeiro) tenho a seguinte menssagem:

    ERROR 1045: Access denied for user '-p123'@'200.216.72.178' (using password: NO)
    ./sc: line 15: $tabela: ambiguous redirect

  10. #10

    Padrão

    bom, agora eu eu uma alterado no script e estou tendo esse erro aqui

    iptables v1.2.11: Bad mac address `'
    Try `iptables -h' or 'iptables --help' for more information.
    iptables v1.2.11: Bad mac address `'
    Try `iptables -h' or 'iptables --help' for more information.

    o script e o seguinte:

    #!/bin/bash

    USUARIO="root";
    SENHA="xxx";
    HOST="200.216.xx.xxx";
    BANCO="SATELLIxx";

    counter=0;
    for i in `mysql -u $USUARIO -h $HOST -p$SENHA -D $BANCO -e "select * from CLIENTE_PROVEDOR;" | sed '1d';`; do
    tabela[$counter]="$i":
    let counter++;
    done;

    while read IP MAC; do
    iptables -A INPUT -s "$IP" -m mac --mac-source "$MAC" -j ACCEPT;
    iptables -A FORWARD -s "$IP" -m mac --mac-source "$MAC" -j ACCEPT;
    done < tabela;

  11. #11

    Padrão

    Citação Postado originalmente por ttjedi2 Ver Post
    bom, agora eu eu uma alterado no script e estou tendo esse erro aqui

    iptables v1.2.11: Bad mac address `'
    Try `iptables -h' or 'iptables --help' for more information.
    iptables v1.2.11: Bad mac address `'
    Try `iptables -h' or 'iptables --help' for more information.

    o script e o seguinte:

    #!/bin/bash

    USUARIO="root";
    SENHA="xxx";
    HOST="200.216.xx.xxx";
    BANCO="SATELLIxx";

    counter=0;
    for i in `mysql -u $USUARIO -h $HOST -p$SENHA -D $BANCO -e "select * from CLIENTE_PROVEDOR;" | sed '1d';`; do
    tabela[$counter]="$i":
    let counter++;
    done;

    while read IP MAC; do
    iptables -A INPUT -s "$IP" -m mac --mac-source "$MAC" -j ACCEPT;
    iptables -A FORWARD -s "$IP" -m mac --mac-source "$MAC" -j ACCEPT;
    done < tabela;
    Olha, eu pedi a sua tabela para fazer testes e você não me enviou, então eu estou criando um de testes aqui meu. Se quiser replicar aí pra testar, lá vai:

    Código :
    CREATE TABLE `ips` (
      `ip` varchar(20) default NULL,
      `mac` varchar(20) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
     
    /*!40000 ALTER TABLE `ips` DISABLE KEYS */;
    LOCK TABLES `ips` WRITE;
    INSERT INTO `ips` VALUES ('00:00:00:00:00:01','192.168.10.01'),('00:00:00:00:00:02','192.168.10.02'),('00:00:00:00:00:03','192.168.10.03'),('00:00:00:00:00:04','192.168.10.04'),('00:00:00:00:00:05','192.168.10.05'),('00:00:00:00:00:06','192.168.10.06'),('00:00:00:00:00:07','192.168.10.07'),('00:00:00:00:00:08','192.168.10.08'),('00:00:00:00:00:09','192.168.10.09'),('00:00:00:00:00:10','192.168.10.10'),('00:00:00:00:00:11','192.168.10.11'),('00:00:00:00:00:12','192.168.10.12'),('00:00:00:00:00:13','192.168.10.13'),('00:00:00:00:00:14','192.168.10.14'),('00:00:00:00:00:15','192.168.10.15'),('00:00:00:00:00:16','192.168.10.16'),('00:00:00:00:00:17','192.168.10.17'),('00:00:00:00:00:18','192.168.10.18'),('00:00:00:00:00:19','192.168.10.19'),('00:00:00:00:00:20','192.168.10.20'),('00:00:00:00:00:21','192.168.10.21'),('00:00:00:00:00:22','192.168.10.22'),('00:00:00:00:00:23','192.168.10.23'),('00:00:00:00:00:24','192.168.10.24'),('00:00:00:00:00:25','192.168.10.25'),('00:00:00:00:00:26','192.168.10.26'),('00:00:00:00:00:27','192.168.10.27'),('00:00:00:00:00:28','192.168.10.28'),('00:00:00:00:00:29','192.168.10.29'),('00:00:00:00:00:30','192.168.10.30'),('00:00:00:00:00:31','192.168.10.31'),('00:00:00:00:00:32','192.168.10.32'),('00:00:00:00:00:33','192.168.10.33'),('00:00:00:00:00:34','192.168.10.34'),('00:00:00:00:00:35','192.168.10.35'),('00:00:00:00:00:36','192.168.10.36'),('00:00:00:00:00:37','192.168.10.37'),('00:00:00:00:00:38','192.168.10.38'),('00:00:00:00:00:39','192.168.10.39'),('00:00:00:00:00:40','192.168.10.40'),('00:00:00:00:00:41','192.168.10.41'),('00:00:00:00:00:42','192.168.10.42'),('00:00:00:00:00:43','192.168.10.43'),('00:00:00:00:00:44','192.168.10.44'),('00:00:00:00:00:45','192.168.10.45'),('00:00:00:00:00:46','192.168.10.46'),('00:00:00:00:00:47','192.168.10.47'),('00:00:00:00:00:48','192.168.10.48'),('00:00:00:00:00:49','192.168.10.49'),('00:00:00:00:00:50','192.168.10.50'),('00:00:00:00:00:51','192.168.10.51'),('00:00:00:00:00:52','192.168.10.52'),('00:00:00:00:00:53','192.168.10.53'),('00:00:00:00:00:54','192.168.10.54'),('00:00:00:00:00:55','192.168.10.55'),('00:00:00:00:00:56','192.168.10.56'),('00:00:00:00:00:57','192.168.10.57'),('00:00:00:00:00:58','192.168.10.58'),('00:00:00:00:00:59','192.168.10.59'),('00:00:00:00:00:60','192.168.10.60'),('00:00:00:00:00:61','192.168.10.61'),('00:00:00:00:00:62','192.168.10.62'),('00:00:00:00:00:63','192.168.10.63'),('00:00:00:00:00:64','192.168.10.64'),('00:00:00:00:00:65','192.168.10.65'),('00:00:00:00:00:66','192.168.10.66'),('00:00:00:00:00:67','192.168.10.67'),('00:00:00:00:00:68','192.168.10.68'),('00:00:00:00:00:69','192.168.10.69'),('00:00:00:00:00:70','192.168.10.70'),('00:00:00:00:00:71','192.168.10.71'),('00:00:00:00:00:72','192.168.10.72'),('00:00:00:00:00:73','192.168.10.73'),('00:00:00:00:00:74','192.168.10.74'),('00:00:00:00:00:75','192.168.10.75'),('00:00:00:00:00:76','192.168.10.76'),('00:00:00:00:00:77','192.168.10.77'),('00:00:00:00:00:78','192.168.10.78'),('00:00:00:00:00:79','192.168.10.79'),('00:00:00:00:00:80','192.168.10.80'),('00:00:00:00:00:81','192.168.10.81'),('00:00:00:00:00:82','192.168.10.82'),('00:00:00:00:00:83','192.168.10.83'),('00:00:00:00:00:84','192.168.10.84'),('00:00:00:00:00:85','192.168.10.85'),('00:00:00:00:00:86','192.168.10.86'),('00:00:00:00:00:87','192.168.10.87'),('00:00:00:00:00:88','192.168.10.88'),('00:00:00:00:00:89','192.168.10.89'),('00:00:00:00:00:90','192.168.10.90'),('00:00:00:00:00:91','192.168.10.91'),('00:00:00:00:00:92','192.168.10.92'),('00:00:00:00:00:93','192.168.10.93'),('00:00:00:00:00:94','192.168.10.94'),('00:00:00:00:00:95','192.168.10.95'),('00:00:00:00:00:96','192.168.10.96'),('00:00:00:00:00:97','192.168.10.97'),('00:00:00:00:00:98','192.168.10.98'),('00:00:00:00:00:99','192.168.10.99');
    UNLOCK TABLES;
    PS: Você pode estar notando que os IP's são meio malucos com os zeros e os MAC address também, mas é porque eu fiz um shell-script para fazer os inserts na tabela.

    Como eu tive um pouco mais de tempo pra mexer com isso hoje, eu escrevi um script melhorzinho que eu testei aqui e funcionou 100%. As regras de iptables foram criadas sem problema algum. Lá vai:

    Código :
    #!/bin/bash
    IFS=$'\n'
    HOST=""
    USER=""
    BD=""
    PASS=""
       valores=( `mysql -u "$USER" -p"$PASS" -D "$BD" -e "select * from ips;" | sed '1d; s/\t/ /g'` );
     
       for((i=0;i<${#valores[@]};i++)); do
          mac=`echo ""${valores[$i]}"" | awk '{ print $1 }'`;
          ip=`echo ""${valores[$i]}"" | awk '{ print $2 }'`;
          iptables -t filter -A FORWARD -m mac --mac-source "$mac" -s "$ip" -j ACCEPT;
       done;

    Eu fiz todos os testes em uma máquina rodando Debian Sarge 3.1 com a mesma versão do seu iptables.

    O problema que você tava tendo acima do "Access Denied" é porque provavelmente você não tem direito de fazer a query remotamente. Tente fazer o seguinte:

    Código :
    mysql> grant all privileges on banco.tabela to 'usuario'@'%' identified by 'senha';
    mysql> flush privileges;

    Agora o outro problema de "ambiguous redirect" foi porque você copiou o script errado para o seu servidor e esqueceu do "$" na variável "$tabela".


    Abraços!

  12. #12

    Padrão

    Olá;;; muito obrigado mesmo pela ajuda.... mas ainda estou com probelas...

    Bom os dados sao o seguinte:

    usuário: root
    senha: xxx
    host: 200.216.72.xx
    DB: SATELLITE
    Tabela: CLIENTE_PROVEDOR

    dentro da tabela cliente provedor eu preciso pegar os valores somente dos campos IP e MAC....

    o erro foi o seguinte:

    iptables v1.2.11: Bad mac address `'
    Try `iptables -h' or 'iptables --help' for more information.
    iptables v1.2.11: Bad mac address `'
    Try `iptables -h' or 'iptables --help' for more information.

    Se poder me ajudar,,, estarei muito grato mesmo
    Última edição por ttjedi2; 16-02-2007 às 09:45.

  13. #13

    Padrão

    Nossa, calma, peraí...

    Se você tem 30 campos em uma tabela e quer mostrar apenas dois, você consegue assim:

    Código :
    mysql> select campo1,campo2 from tabela;

    Se você quiser pegar o resultado de QUALQUER comando e redirecioná-lo para algum arquivo, basta utilizar os operadores > e <. Ficaria mais ou menos assim pra gente fazer uma pesquisa em um banco de dados e o resultado enviar para um arquivo texto:

    Código :
    # mysql -e "select * from tabela;" > tabela.txt

    Só lembro que quando o MySQL remove as bordas Cauby Peixoto Style quando é feito o redirecionamento.

    Abraços!

  14. #14

    Padrão

    Pooo cara valew mesmo pela ajuda......

    bom eu usei o que vc me mandou,,, e com base eu criei um novo script que agora faz tudo para mim.,... vou colocar ele aqui para vc ver como ficou....

    # APAGAR ARQUIVO
    > /root/tabela;
    > /root/corte
    echo "LIMPANDO ARQUIVOS...........................................OK!"

    IFS=$'\n'
    HOST="200.216.72.xxx"
    USER="root"
    BD="SATExxx"
    PASS="xxx"

    USUARIO="root";
    SENHA="xxx";
    HOST="200.216.72.xxx";
    BANCO="SATExxx";

    echo "CONECTANDO AO BANDO DE DADOS................................OK!"


    valores3=( `mysql -u $USUARIO -h $HOST -p$SENHA -D $BANCO -e "DELETE FROM sis;" | sed '1d; s/\t/ /g'` );

    echo "LIMPANDO BANCO DE DADOS.....................................OK!"

    valores2=( `mysql -u $USUARIO -h $HOST -p$SENHA -D $BANCO -e "INSERT INTO sis (MAC,IP,IP_STATUS) SELECT MAC,IP,IP_STATUS FROM$

    echo "COPIANDO DADOS PARA O BANCO.................................OK!"

    valores=( `mysql -u $USUARIO -h $HOST -p$SENHA -D $BANCO -e "select * from sis;" | sed '1d; s/\t/ /g'` );

    for((i=0;i<${#valores[@]};i++)); do
    IP=`echo ""${valores[$i]}"" | awk '{ print $1 }'`;
    MAC=`echo ""${valores[$i]}"" | awk '{ print $2 }'`;
    IP_STATUS=`echo ""${valores[$i]}"" | awk '{ print $3 }'`;

    #echo "CRIANDO REGRAS..............................................OK!"

    echo "iptables -A INPUT -s "$IP" -m mac --mac-source "$MAC" -j ACCEPT" >> /root/tabela
    echo "iptables -A FORWARD -s "$IP" -m mac --mac-source "$MAC" -j ACCEPT" >> /root/tabela

    #echo "LIBERANDO CLIENTES..........................................OK!"


    if [ "$IP_STATUS" = "2" ]; then
    echo "iptables -t nat -A PREROUTING -p tcp -s "$IP" --dport ! 10 -j DNAT --to-dest 200.216.72.xxx" >> /root/corte
    else
    echo ""
    fi

    #echo "FAZENDO CORTES..............................................OK!"

    done;


    valew mesmo pela ajuda

  15. #15

    Padrão

    Que bom que resolveu, cara!

    Estamos aí.