+ Responder ao Tópico



  1. #1

    Padrão Ajudinha no shell

    Pessoal não manjo quase nada de shell e gostaria de uma ajudinha de vcs.
    Tenho um firewall e para facilitar as coisas uso alguns comandos de shell dentro dele.
    Por exemplo tenho um arquivo chamado clientes.liberados que é uma lista de todos os clientes que podem ter acesso a rede listados da seguinte forma:

    cliente1
    cliente2
    cliente3

    bom no firewall, uso o seguinte comando para dar acesso à esses clientes listados:

    Código :
    if [ -f /clientes.liberados ]; then
     while read ips; do
       iptables -A INPUT -s $ips -j ACCEPT
       done < /clientes.liberados
       echo "INPUT: Clientes liberados - OK!"
    fi

    Até ai tudo bem, só que agora quero fazer com que esse mesmo comando tambem amarre o MAC ao IP ou seja o cliente só consiga navegar com IP "X" e MAC "Y" se for diferente ele não navega.
    Então para esse fim criei um arquivo com o nome macs.liberados que lista os macs da seguinte forma:

    xx:xx:xx:xx:xx:xx
    yy:yy:yy:yy:yy:yy
    zz:zz:zz:zz:zz:zz

    no firewall pensei em usar a variável $mac porem não sei como ler essa variavel do arquivo pois fazendo da mesma forma que a anterior não consigo colocar duas leituras no mesmo comando.

    Código :
    if [ -f /clientes.liberados ]; then
     while read ips; do
       iptables -A INPUT -s $ips -m mac --mac-source $mac -j ACCEPT
       done < /clientes.liberados
       echo "INPUT: Clientes liberados - OK!"
    fi

    Onde eu coloco o comando "read" ou outra coisa parecida para ler os macs no arquivo /macs.liberados?

    Se alguem puder dar uma força ai eu agradeço! :wink:

  2. #2

    Padrão Re: Ajudinha no shell

    no arquivo de macs vc vai ter que ter os ips exemplo

    10.168.1.34;AS:AS:AS:AS:AS

    ai dentro do looping vc pode fazer assim

    macaddr=`cat /etc/maclist | grep -i $ip | awk -F ";" {' print $2'}`

    milagrosamente para cada ip que voce ler do seu banco de ips liberados vc vai ter um mac amarrado na outra tabela que automaticamente ele vai te mostrar para dizer a verdade isso que voce ta fazendo ta muito complicado.

    Sinceramente mante uma tabela assim


    10.168.1.2:AS:AS:AS:AS:AS;ACCEPT

    e quebra a linha por ponto e virgula sacou

  3. #3

    Padrão Re: Ajudinha no shell

    Pois é eu ja tentei fazer assim, só que ele ta colocando o mesmo MAC para todas as regras. O ultimo MAC da lista. :-o

  4. #4

    Padrão Re: Ajudinha no shell

    Amigo fiz como vc citou. Porem ao inves de usar IPs eu uso direto o dns do cliente.
    Ai quando tenho dois clientes com o mesmo nome, porem exemplo:
    leandro e joseleandro

    ele imprime dois macs na mesma linha
    por ex:
    xxxxxxxxxxxxx xxxxxxxxxxx
    e ai da erro no iptables.

    Porem existem outros casos que ele não da esse erro por ex:
    teste1 e teste2 ele não da erro e imprime os macs corretamente
    xxxxxxxxxxxxx
    xxxxxxxxxxxxx

    Como posso contornar isso?

  5. #5

    Padrão Re: Ajudinha no shell

    Oi amigo,

    Vê se este pequeno script resolve o problema dos dois arquivos:

    Código :
    #!/bin/bash
     
    IP=`cat arquivo_ips`
    MAC=`cat arquivo_macs`
    IPS=`echo $IP |sed 's/ /@/g'`
    MACS=`echo $MAC |sed 's/ /@/g'`
     
    cont=1
    campos=`echo $IP |awk '{print NF}'`
     
    while [ "$cont" -le "$campos" ]; do
        ips=$(echo "$IPS" |cut -d "@" -f"$cont")
        macs=$(echo "$MACS" |cut -d "@" -f"$cont")
        echo "iptables -A INPUT -s $ips -m mac --mac-source $macs -j ACCEPT"
        cont=$((cont+1))
    done

    Partindo do principio de q vc tem dois arquivos e q eles tem a mesma quantidade de linhas... No lugar do echo vc coloca a regra :)

    Abraço

  6. #6

    Padrão Re: Ajudinha no shell

    Pois é amigão só que o arquivo de macs (padrao do sistema por outras razões)começa assim:

    ## TABELA DE MACS PARA FIXAR O IP PELO MAC ##

    ##--CONF-CLIENTES--


    e dai na hora que se aplica o filtro ele coloca essa linhas na saida tbm. Tem como eliminar isso? Digo evitar que o script leia essas linhas?

  7. #7

    Padrão Re: Ajudinha no shell

    Vc pode fazer alguns filtros antes de aplicar os comandos.
    Digamos q vc não queira as linhas que comecem com # e nem as linhas em branco:

    Código :
    egrep -v '^#|^$' arquivo_mac

    Da uma pesquisada no grep
    Falou

  8. #8

    Padrão Re: Ajudinha no shell

    Amigão simplesmente ficou perfeito VALEWWWWWWWWWWW!!!