+ Responder ao Tópico



  1. #1

    Padrão Iptables Mac's

    Pessoal uma duvida que dei uma procurada na rede mas não achei nada muito explicativo. Meu problema é o seguinte, tenho umas lista de MACs que devem navegar e todo resto não deve nem respirar dentro da rede.

    E outro agravante, o servidor possue 3 placas de rede
    1 - Wan
    2 - rede1
    3 - rede2

    as máquinas da rede1 e da rede2 não podem se comunicar. Eu testei essa regra para liberar comunicação:

    Código :
    iptables -t filter -A FORWARD -i $Int1 -o $Wan -m mac --mac-source $MAC -j ACCEPT

    ou seja tentei especificar as placas de rede problema que no
    Código :
    iptables -L
    aparece
    Código :
    ACCEPT     all  --  anywhere             anywhere            MAC 00:00:22:22:22:33

    O firewall é de politica DROP, mas se eu coloco a regra de compartilhamento pra rede... os macs que não deveriam navegar.. navegam .


    Ps: tem que ser apenas por mac não amarrado com ip, idéia é levantar um servidor de DHCP e não me preocupar com configuração no usuário final.

    Agradeço

  2. #2

    Padrão

    Ficará melhor de lhe ajudar se você postar todo o seu conjunto de regras. O que posso concluir com o que você colocou é que tem alguma regra antes da regra de liberação por MAC permitindo o acesso por outros computadores.

  3. #3

    Padrão

    se logo acima vc alterou a politica padrao para drop

    qdo vc der um: iptables -L
    vc ir notar que ele ira mostrar as regras cada um na sua tabela...
    exemplo:
    Chain FORWARD (policy DROP)
    target prot opt source destination
    ACCEPT all -- anywhere anywhere state RELATED,ESTAB LISHED
    mas perai... o q é aquilo.... policy DROP
    aham.... eh a minha politica padrao

    aqui vc ira encontrar como colocar a protecao MacXip
    https://under-linux.org/f132192-serv...il-e-funcional

    nos ultimos posts, tem um material em .pdf com um pouco mais de informacao

  4. #4

    Padrão

    So pra consta aqui segue o script completo: pastebin - collaborative debugging tool

    E realmente vai ver que deixei ele como politica DROP.

  5. #5

    Padrão

    veja bem...
    se vc alterou a sua politica padrao, dizendo... nada pode entrar(INPUT) ou atravessar(FORWARD)... somente sair.
    nao ha motivos de dizer novamente no meio do script...
    tal pacote nao pode entrar, ja que, a politica ja esta dizendo q ele nao pode entrar.

    logo, so sobra uma alternativa...
    dizer quem pode entrar ou atravessar.

    qdo vc libera a navegacao somente para os cadastrados, automaticamente vc esta dizendo isso
    somente eles pode entrar ou atravessar.

    fiz umas pequenas modificacoes, nao testei, ajuste ao seu cenario:

    ############
    # Limpa Regras
    Wan="eth0"
    INT_1="eth1"
    INT_2="eth2"

    #Limpa regras Padrões
    iptables -F INPUT
    iptables -F OUTPUT
    iptables -F FORWARD
    iptables -t nat -F
    iptables -t nat -X
    iptables -t filter -F
    iptables -t filter -X
    iptables -t mangle -F
    iptables -t mangle -X
    echo "Excluindo Regras padrões ...... [OK]"

    #Cria Regras Padrões
    iptables -P INPUT DROP
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD DROP
    echo "Criando Regras padrões ........ [OK]"

    # Manter conexoes jah estabeleINT_2as para nao parar
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    echo "Mantendo Conexões ............. [OK]"

    ###Carregar os módulos, temos muitas opções já que compilamos todos os módulos do iptables
    modprobe iptable_nat
    modprobe iptable_filter
    modprobe ip_tables
    #modprobe ip_conntrack
    #modprobe ip_conntrack_ftp
    modprobe ip_nat_ftp
    modprobe ipt_MASQUERADE
    modprobe ipt_LOG
    modprobe ipt_layer7
    echo "Carregando Modulos ............ [OK]"

    #######Redirecionamentos VNC######
    iptables -A FORWARD -p tcp -i eth0 --dport 5900 -d 10.0.0.5 -j ACCEPT
    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5905 -j DNAT --to-dest 10.0.0.5:5900
    echo "Redirecionando Teste ..................................... [OK]"
    # Aceita todo o trafego vindo do loopback e indo pro loopback
    iptables -t filter -A INPUT -i lo -j ACCEPT
    echo "Liberando - LoopBack .......... [OK]"

    ###### Tabela INPUT ################
    echo "############### Tabela INPUT ########"
    #Liberando SSH
    iptables -A INPUT -i $Wan -p tcp -m tcp --dport 22 -j ACCEPT # Libera SSH na WAN
    echo "INPUT - Ssh .................... [OK]"


    ####################################
    ######### Tabela Forward ###########
    echo "############# Tabela Forward ########"
    # Libera computador das regras do firewall
    #iptables -A FORWARD -s 192.168.4.13 -p tcp -j ACCEPT
    #iptables -A FORWARD -s 192.168.4.13 -p udp -j ACCEPT
    # Regras forward para o funcionamento de redirecionamento de portas (NAT)
    # Redirecionando porta 5900 (VNC)
    iptables -A FORWARD -p tcp --dport 5900 -j ACCEPT
    iptables -A FORWARD -p tcp --dport 5800 -j ACCEPT
    echo "Forward - VNC ................. [OK]"

    #Librando SisObra Net
    iptables -A FORWARD -o $INT_1 -p tcp --dport 3050 -j ACCEPT
    echo "FORWARD - SISOBRA ............ [OK]"
    iptables -A FORWARD -o $INT_1 -i $INT_2 -j DROP
    iptables -A FORWARD -o $INT_2 -i $INT_1 -j DROP
    echo "INT_2ade!INT_1 ............. [OK]"

    ###################################################
    #### Compartilhando Internet ########
    # Crie um arquivo com todos os mac e um nome ao lado, exemplo:
    # 00:11:22:33:44:55;computador1
    # para bloquear determinado mac... basta trocar os primeiros numeros...de 00 para 11
    #
    echo "1" > /proc/sys/net/ipv4/ip_forward
    MACLIST_LIB="/root/scripts/maclist_lib"
    for i in `cat $MACLIST_LIB`; do
    MACSOURCE=`echo $i | cut -d ';' -f 1`

    iptables -t filter -A FORWARD -d 0/0 -i $INT_2 -m mac --mac-source $MACSOURCE -j ACCEPT
    iptables -t filter -A INPUT -i $INT_2 -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
    done

    iptables -t nat -A POSTROUTING -s 10.0.0/8 -o $Wan -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 192.168.0.1/24 -o $Wan -j MASQUERADE
    echo "1" > /proc/sys/net/ipv4/ip_forward
    echo "NAT - Internet Hab ............ [OK]"

    # Redireciona o trafego http(80) para o squid (3128)
    #iptables -t nat -A PREROUTING -i eth1 -p TCP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
    #iptables -t nat -A PREROUTING -i eth1 -p UDP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
    #echo "Squid ........ [OK]"

    ### REGRAS DO LAYER 7
    echo "########## Layer7 ##################"
    # Bloqueio Bit Torrent
    iptables -I FORWARD -m layer7 --l7proto bittorrent -j DROP
    ###MSN
    # iptables -I OUTPUT -m layer7 --l7proto msnmessenger -j DROP
    # iptables -I INPUT -m layer7 --l7proto msnmessenger -j DROP
    iptables -I FORWARD -m layer7 --l7proto ares -j DROP
    echo "Layer7 - Ares ................. [OK]"
    iptables -I FORWARD -m layer7 --l7proto battlefield1942 -j DROP
    iptables -I FORWARD -m layer7 --l7proto battlefield2 -j DROP
    echo "Layer7 - Batlefild ............ [OK]"
    iptables -I FORWARD -m layer7 --l7proto bittorrent -j DROP
    echo "Layer7 - Bitrorent ............ [OK]"
    iptables -I FORWARD -m layer7 --l7proto counterstrike-source -j DROP
    echo "Layer7 - CounterStrike ........ [OK]"
    iptables -I FORWARD -m layer7 --l7proto dayofdefeat-source -j DROP
    echo "Layer7 - DayofDefeat .......... [OK]"
    iptables -I FORWARD -m layer7 --l7proto doom3 -j DROP
    echo "Layer7 - Doom3 ................ [OK]"
    iptables -I FORWARD -m layer7 --l7proto edonkey -j DROP
    echo "Layer7 - Edonkey .............. [OK]"
    iptables -I FORWARD -m layer7 --l7proto fasttrack -j DROP
    echo "Layer7 - FastJack ............. [OK]"
    iptables -I FORWARD -m layer7 --l7proto gnutella -j DROP
    echo "Layer7 - Gnutella ............. [OK]"
    iptables -I FORWARD -m layer7 --l7proto halflife2-deathmatch -j DROP
    echo "Layer7 - HalfLife ............. [OK]"
    iptables -I FORWARD -m layer7 --l7proto imesh -j DROP
    echo "Layer7 - Imesh ................ [OK]"
    iptables -I FORWARD -m layer7 --l7proto mohaa -j DROP
    echo "Layer7 - Mohaa ................ [OK]"
    iptables -I FORWARD -m layer7 --l7proto mute -j DROP
    echo "Layer7 - Mute ................. [OK]"
    iptables -I FORWARD -m layer7 --l7proto napster -j DROP
    echo "Layer7 - Naptster ............. [OK]"
    iptables -I FORWARD -m layer7 --l7proto netbios -j DROP
    echo "Layer7 - Netbios .............. [OK]"
    iptables -I FORWARD -m layer7 --l7proto openft -j DROP
    echo "Layer7 - Openft ............... [OK]"
    iptables -I FORWARD -m layer7 --l7proto quake-halflife -j DROP
    echo "Layer7 - QuakeHalf ............ [OK]"
    iptables -I FORWARD -m layer7 --l7proto rdp -j DROP
    echo "Layer7 - RDP .................. [OK]"
    iptables -I FORWARD -m layer7 --l7proto soribada -j DROP
    echo "Layer7 - Soriba ............... [OK]"
    iptables -I FORWARD -m layer7 --l7proto soulseek -j DROP
    echo "Layer7 - SoulSeek ............. [OK]"
    iptables -I FORWARD -m layer7 --l7proto thecircle -j DROP
    echo "Layer7 - TheCircle ............ [OK]"
    iptables -I FORWARD -m layer7 --l7proto whois -j DROP
    echo "Layer7 - WHOIS ................ [OK]"
    iptables -I FORWARD -m layer7 --l7proto code_red -j DROP
    echo "Layer7 - CodRed ............... [OK]"
    iptables -I FORWARD -m layer7 --l7proto nimda -j DROP
    echo "Layer7 - Nimda ................ [OK]"
    echo "Layer7 - REGRAS ... [OK]"
    Última edição por AndrioPJ; 08-10-2009 às 13:16.

  6. #6

    Padrão

    Olhando o arquivo com calma observeri essa parte da regra
    Código :
     echo "1" > /proc/sys/net/ipv4/ip_forward
    MACLIST_LIB="/root/scripts/maclist_lib"
     
    for i in `cat $MACLIST_LIB`; do
    MACSOURCE=`echo $i | cut -d ';' -f 1`
    iptables -t filter -A FORWARD -d 0/0 -i $Cid -m mac --mac-source
    $MACSOURCE -j ACCEPT
    iptables -t filter -A INPUT -i $Cid -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
    done
     
    iptables -t nat -A POSTROUTING -s 10.0.0/8 -o $Wan -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 192.168.0.1/24 -o $Wan -j MASQUERADE
     
     
        echo "NAT - Internet Hab ............ [OK]"

    No for esta liberando forward e input no server, mas embaixo libera o masquerade para todos portanto essas regras não estão entrando em conflito?
    Última edição por oicreal; 08-10-2009 às 16:33. Razão: atenção

  7. #7

    Padrão

    Citação Postado originalmente por oicreal Ver Post
    Olhando o arquivo com calma observeri essa parte da regra
    Código :
     echo "1" > /proc/sys/net/ipv4/ip_forward
    MACLIST_LIB="/root/scripts/maclist_lib"
     
    for i in `cat $MACLIST_LIB`; do
    MACSOURCE=`echo $i | cut -d ';' -f 1`
    iptables -t filter -A FORWARD -d 0/0 -i $Cid -m mac --mac-source
    $MACSOURCE -j ACCEPT
    iptables -t filter -A INPUT -i $Cid -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
    done
     
    iptables -t nat -A POSTROUTING -s 10.0.0/8 -o $Wan -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 192.168.0.1/24 -o $Wan -j MASQUERADE
     
     
        echo "NAT - Internet Hab ............ [OK]"

    No for esta liberando forward e input no server, mas embaixo libera o masquerade para todos portanto essas regras não estão entrando em conflito?
    eu uso uma regra parecida como essa...
    analise parte do meu firewall e adapte ao seu cenario

    Bloqueia toda entrada(INPUT) e travessia(FORWARD) de pacotes
    liberando somente para os cadastrados...
    eth1 = rede interna
    eth0 = rede externa

    # # Limpando Regras
    iptables -F
    iptables -X
    iptables -Z
    iptables -F INPUT
    iptables -F OUTPUT
    iptables -F FORWARD
    iptables -F -t nat
    iptables -X -t nat
    iptables -F -t mangle
    iptables -X -t mangle
    echo " Limpando Regras ..............................[ OK ]"

    # Definindo Politica Padrao
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    echo " Alterando politica padrao.....................[ OK ]"

    # Aceita os Pacotes que realmente devem entrar
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Paramentros do Controle de acesso
    MACLIST=/etc/macxip
    echo " Configuracoes necessarias.....................[ OK ]"

    # # Controle de ACESSO # #
    # Diretivas do BD IP, MAC e Port
    for i in `cat $MACLIST`; do
    IPSOURCE=`echo $i | cut -d ';' -f 1`
    MACSOURCE=`echo $i | cut -d ';' -f 2`

    # Controle de Acesso IPxMAC
    iptables -t filter -A FORWARD -d 0/0 -s $IPSOURCE -m mac --mac-source $MACSOURCE -j ACCEPT
    iptables -t filter -A INPUT -s $IPSOURCE -d 0/0 -m mac --mac-source $MACSOURCE -j ACCEPT
    done

    # Redireciona o trafego http(80) para o squid (3128)
    iptables -t nat -A PREROUTING -i eth1 -p TCP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128
    iptables -t nat -A PREROUTING -i eth1 -p UDP ! -d 200.201.0.0/16 --dport 80 -j REDIRECT --to-port 3128

    # Compartilha Conexao
    iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    echo "1" > /proc/sys/net/ipv4/ip_forward

    # Aceita todo o trafego vindo do loopback e indo pro loopback
    iptables -t filter -A INPUT -i lo -j ACCEPT

    # # SSH - mude a porta caso necessario
    iptables -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT

  8. #8

    Padrão

    Cara, suas regras estão um pouco bagunçadas.

    A variável $INT_1 e $INT_2. Você define-as com nomes de interfaces de rede (linhas 4 e 5 do código no pastebin). Porém, em certos momentos, você as utiliza como se fossem endereços de redes (linha 108, por exemplo).

    E como eu falei, existe um problema de lógica. Da linha 131 à 178, você libera portas que poderão ser usadas por qualquer host, sem nenhum tipo de controle de MAC visto que essas regras aparecem antes das regras de controle de acesso. Além disso, ocorre o mesmo problema do uso das variáveis $INT_1 e $INT_2.

    Por fim, as regras das linhas 200 e 203 quebram toda a lógica do seu script: elas liberam o tráfego para quaisquer hosts das redes 10.0.0.0/8 e da 192.168.0.0/24.

    Recomendo você dar uma olhada no meu blog aqui do Under (https://under-linux.org/blogs/pedroarthurjedi). Lá tem alguns guias de iptables e também uma técnica para fazer debug de regras.

    Espero ter ajudado. Até mais...
    Última edição por PEdroArthurJEdi; 08-10-2009 às 18:53. Razão: adicionando algumas informações...

  9. #9

    Padrão

    Obrigado os dois, vou estar me debruçando sobre todo material passado esse feriado e se não conseguir achar a solução posso ir vender cachorro quente .

    Agradeço a sinergia .

    Abraços

  10. #10

    Padrão

    o correto eh vc fazer o seguinte:

    1> adicione as regras basicas: limpar regras, alterar politica padrao, manter conexoes estabilizadas...
    2> vai liberando aos poucos o q precisa...: primeiro, o acesso do que serao permitidos(hosts, servicos)...