+ Responder ao Tópico



  1. #1

    Padrão [Ajuda] Meu primeiro firewall

    Boa tarde pessoal,

    Sei que o tema é batido mas vamos la: Estou montando meu primeiro firewall corporativo e estou tendo dificuldades para estabelecer realmente o que preciso ou não. Eu gostaria que tivesse proteção para os ataques mais conhecidos, com exceção do DDoS que é quase impossível filtrar, bloqueio de sites como orkut, gmail, portais do Terra, Uol, yahoo, hotmail, bloqueio do windows live messenger, torrents, liberar acesso para os compartilhamentos da rede e portas do email.
    Mas como eu disse antes, não sei qual é o melhor jeito de bloquear sites, msn, torrents.
    Na verdade a rede é assim: subnet A - nenhum bloqueio, subnet B - bloqueada, subnet C - somente internet e isolada das outras duas subnets, subnet D - exclusiva para servidores.
    Até iniciei um script de iptables, mas queria discutir umas idéias aqui antes de postá-lo.

    Abraço pessoal, conto com a ajuda de vocês!

  2. #2

    Padrão

    Sim, cara, tem muita gente disposta a ajudar... Mas não tem ninguém disposto a fazer o script por você.

    Talvez se você colocar as ideias que deseja discutir, alguém venha e dê alguma opnião técnica, não acha?

    Já que você é novo por aqui, recomendo que veja esses dois links:

    InfoSecurity TaskForce - Perguntas Inteligentes
    UnderLinux Wiki:FAQ - UnderLinux Wiki

    Boa leitura!
    Bem vindo ao Under-Linux.org



  3. #3

    Padrão

    Entendo, desculpa se disse pouco. Enfim, é uma rede corporativa que eu dividi em 4 setores basicamente:

    192.168.4.0 - subrede com tudo liberado
    192.168.8.0 - subrede com filtro
    192.168.32.0 - subrede com somente internet sem acesso aos micros das outras redes
    192.168.75.0 - subrede dos servidores

    Politicas que eu pensei:

    192.168.4.0:
    - bloquear ips remanescentes
    - amarrar ip ao mac
    192.168.8.0:
    - bloquear acesso a sites (orkut, hotmail, yahoo, terra, uol, gmail), msn, torrents
    - liberar acesso aos compartilhamentos e email nos micros que possuem email somente
    192.168.32.0:
    - bloquear ips remanescentes e acesso aos compartilhamentos
    - liberar somente internet
    - amarrar ip ao mac
    192.168.75.0:
    - bloquear ips remanescentes
    - amarrar ip ao mac

    Abaixo segue o script iptables que comecei:

    #!/bin/sh
    iptables-restore <<-EOF;
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]

    # firewall start
    -F
    -X
    -t nat -F
    -t nat -X
    -t mangle -F
    -t mangle -X
    -t filter -F
    -t filter -X

    # loopback

    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT

    # Drop invalid packets

    -A INPUT -m conntrack --ctstate INVALID -j DROP

    # Allow Related/Established

    -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    # drop remaining ips from 192.168.4.0 subnet

    -A INPUT -m iprange --src-range 192.168.4.8-192.168.4.14 -j DROP

    # accept from desired ips 192.168.4.0 subnet

    -A INPUT -m iprange --src-range 192.168.4.1-192.168.4.7 -j ACCEPT

    # tie mac to ip 192.168.4.0 subnet

    -t filter -A FORWARD -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
    -t filter -A FORWARD -d 192.168.4.2 -j ACCEPT
    -t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
    -t filter
    COMMIT
    EOF

  4. #4

    Padrão

    Dê uma olhada melhor na ordem das regras. Elas estão se sobrepondo.

    Veja também o seguinte artigo:
    -> Mantendo e depurando regras do Netfilter/iptables com auxílio de fluxogramas - Blogs - Under-Linux.org

    Nele eu mostro um método para auxiliar na criação de regras para filtros de pacotes. Qualquer dúvida, pode perguntar por lá... Ou aqui mesmo, caso ache melhor.

    Falou



  5. #5

    Padrão

    Olha, eu estou realmente me empenhando nisso e lendo muito, perguntando muito, mas como você deve saber, perguntas irritam as pessoas. Você é o primeiro cara que se dispos a me ajudar. Analisei novamente meu script, li varias vezes seu topico, li meu guia feito por um desenvolvedor do iptables e a única coisa que me parece estranha é isso:

    -t filter -A FORWARD -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
    -t filter -A FORWARD -d 192.168.4.2 -j ACCEPT
    -t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT

    Foi isso que voce quis dizer?

  6. #6

    Padrão

    Não cara...

    Quando eu disse que as regras estavam se sobrepondo, eu quis dizer que uma regra está anulando a outra.

    Exemplo, você colocou no seu script a seguinte regra:

    # accept from desired ips 192.168.4.0 subnet
    -A INPUT -m iprange --src-range 192.168.4.1-192.168.4.7 -j ACCEPT

    E mais abaixo você colocou:

    -t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT

    Veja que essa segunda regra nunca será avaliada pois os pacotes que chegarem com origem de 192.168.4.2 já terão sido aceitos pela regra mais acima.

    Outra coisa, se você está usando uma política restritiva (DROP em INPUT e FORWARD), você não precisa ficar filtrando tráfego que você não quer. Então, a regra a seguir também é desnecessária:

    # drop remaining ips from 192.168.4.0 subnet
    -A INPUT -m iprange --src-range 192.168.4.8-192.168.4.14 -j DROP

    Por isso que eu falei sobre o artigo. Ele lhe ajudará a ver esses pequenos problemas. Mas com o tempo você vai pegar o jeito. Esse negócio de iptables é muito de prática.



  7. #7

    Padrão

    Certo, eu li e reli mais algumas vezes, removi as regras que você comentou e tentei avançar mais um pouco, agora minha dificuldade esta em isolar a subrede 192.168.32.0 das outras e dar acesso somente a internet:

    #!/bin/sh
    iptables-restore <<-EOF;
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]

    # firewall start
    -F
    -X
    -t nat -F
    -t nat -X
    -t mangle -F
    -t mangle -X
    -t filter -F
    -t filter -X
    # loopback

    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT
    # Drop invalid packets
    -A INPUT -m conntrack --ctstate INVALID -j DROP

    # Allow Related/Established

    -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    # tie mac to ip 192.168.4.0 subnet

    -t filter -A FORWARD -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
    -t filter -A FORWARD -d 192.168.4.2 -j ACCEPT
    -t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
    # give access to shares and email 192.168.8.0 subnet
    # doesn't use email
    -A INPUT -p tcp -s 192.168.8.2 -m multiport --dports 139,443,445,3128 -j ACCEPT
    -A INPUT -p udp -s 192.168.8.2 -m multiport --dports 137:138 -j ACCEPT
    # use email
    -A INPUT -p tcp -s 192.168.8.3 -m multiport --dports 110,139,443,445,587,3128 -j ACCEPT
    -A INPUT -p udp -s 192.168.8.3 -m multiport --dports 137:138 -j ACCEPT

    # only internet 192.168.32.0 subnet
    # 192.168.75.0 subnet
    -t filter -A FORWARD -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
    -t filter -A FORWARD -d 192.168.75.2 -j ACCEPT
    -t filter -A INPUT -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
    COMMIT
    EOF

  8. #8

    Padrão

    Bom, aqui uma versão mais atualizada, porque andei dando uma mexida, acho que da minha lista de coisas falta achar um jeito pra filtrar sites (estou usando o dnsmasq então pensei em usar ele para filtrar os dominios pelo menos), os messengers da vida (windows live messenger, yahoo messenger, etc), os torrents, o lugar correto para colocar a regra do masquerade e uma regra para utilizar o squid sem precisar configurar cada cliente. O que voce acha?

    Uma dúvida: -t filter -A INPUT é o mesmo que -A INPUT? Digo, o -t filter é necessario ou "facultativo"?

    192.168.4.0:
    - bloquear ips remanescentes
    - amarrar ip ao mac
    192.168.8.0:
    - bloquear acesso a sites (orkut, hotmail, yahoo, terra, uol, gmail), msn, torrents
    - liberar acesso aos compartilhamentos e email nos micros que possuem email somente
    192.168.32.0:
    - bloquear ips remanescentes e acesso aos compartilhamentos
    - liberar somente internet
    - amarrar ip ao mac
    192.168.75.0:
    - bloquear ips remanescentes
    - amarrar ip ao mac

    #!/bin/sh
    iptables-restore <<-EOF;
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]

    # inicio do firewall
    -F
    -X
    -t nat -F
    -t nat -X
    -t mangle -F
    -t mangle -X
    -t filter -F
    -t filter -X

    # libera o loopback

    -A INPUT -i lo -j ACCEPT
    -A OUTPUT -o lo -j ACCEPT

    # Dropa pacotes invalidos

    -A INPUT -m conntrack --ctstate INVALID -j DROP

    # Permite Related/Established

    -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

    # Amarra ips da subrede 192.168.4.0 ao mac correspondente

    -t filter -A FORWARD -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
    -t filter -A FORWARD -d 192.168.4.2 -j ACCEPT
    -t filter -A INPUT -s 192.168.4.2 -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT

    # Aceita conexoes ssh somente dos ips/mac que eu confio

    -A INPUT -p tcp -s 192.168.4.3 -m mac --mac-source 44:55:66:77:88:99 --dport 22 -j ACCEPT
    -A INPUT -p tcp -m mac --mac-source 99:00:11:22:33:00 --dport 22 -j ACCEPT

    # Da acesso aos compartilhamentos e a email para a subrede 192.168.8.0

    # Os que não possuem email

    -A INPUT -p tcp -s 192.168.8.2 -m multiport --dports 139,443,445,3128 -j ACCEPT
    -A INPUT -p udp -s 192.168.8.2 -m multiport --dports 137:138 -j ACCEPT

    # Os que possuem email

    -A INPUT -p tcp -s 192.168.8.3 -m multiport --dports 110,139,443,445,587,3128 -j ACCEPT
    -A INPUT -p udp -s 192.168.8.3 -m multiport --dports 137:138 -j ACCEPT

    # Apenas internet para a subrede 192.168.32.0

    # Rejeita pacotes vindos da subrede 192.168.32.0 e indo para as outras subredes

    -A FORWARD -i eth0.4 -o eth0.2 -j REJECT
    -A FORWARD -i eth0.4 -o eth0.3 -j REJECT
    -A FORWARD -i eth0.4 -o eth0.5 -j REJECT

    # Rejeita pacotes vindos de outras subredes para 192.68.32.0

    -A FORWARD -i eth0.2 -o eth0.4 -j REJECT
    -A FORWARD -i eth0.3 -o eth0.4 -j REJECT
    -A FORWARD -i eth0.5 -o eth0.4 -j REJECT

    # Amarra ip da subrede 192.168.32.0 ao mac correspondente

    -t filter -A FORWARD -s 192.168.32.2 -m mac --mac-source 22:33:44:55:66:77 -j ACCEPT
    -t filter -A FORWARD -d 192.168.32.2 -j ACCEPT
    -t filter -A INPUT -s 192.168.32.2 -m mac --mac-source 22:33:44:55:66:77 -j ACCEPT

    # Amarra ip da subrede 192.168.75.0 ao mac correspondente

    -t filter -A FORWARD -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
    -t filter -A FORWARD -d 192.168.75.2 -j ACCEPT
    -t filter -A INPUT -s 192.168.75.2 -m mac --mac-source 11:22:33:44:55:66 -j ACCEPT
    COMMIT
    EOF
    Última edição por devas; 30-01-2010 às 00:52.



  9. #9

    Padrão

    Bom, acredito que terminei meu script, só ia pedir para checar se a regra "-A FORWARD -d 192.168.8.0/24 -j ACCEPT" está correta ou está dando margem para fugirem dos bloqueios:

    #!/sbin/iptables-restore
    *raw
    :PREROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    COMMIT
    *nat
    :OUTPUT ACCEPT [0:0]
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    # accept dns requests for subnet dns only
    -A PREROUTING -s 192.168.8.0/24 -i eth0.3 -p udp --dport 53 -j REDIRECT
    -A PREROUTING -s 192.168.8.0/24 -i eth0.3 -p tcp --dport 53 -j REDIRECT
    # internet
    -A POSTROUTING -o eth1 -j MASQUERADE
    COMMIT
    *filter
    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [0:0]
    # loopback
    -A INPUT -i lo -j ACCEPT
    # Allow Related/Established
    -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    # Drop invalid packets
    -A INPUT -m conntrack --ctstate INVALID -j DROP
    -A FORWARD -m conntrack --ctstate INVALID -j DROP
    # DHCP for subnets and internet
    -A INPUT -i eth1 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
    -A INPUT -i eth0.2 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
    -A INPUT -i eth0.3 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
    -A INPUT -i eth0.4 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
    -A INPUT -i eth0.5 -p udp --dport 67:68 --sport 67:68 -j ACCEPT
    # only internet for 192.168.32.0 subnet
    -A FORWARD -m condition --condition allow -s 192.168.32.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -i eth0.4 -o eth1 -j ACCEPT
    -A FORWARD -m time --timestart 12:00 --timestop 13:30 --weekdays Mon,Tue,Wed,Thu,Fri -s 192.168.32.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -i eth0.4 -o eth1 -j ACCEPT
    -A FORWARD -o eth0.4 -j DROP
    -A FORWARD -i eth0.4 -j DROP
    # tie mac to ip 192.168.4.0 subnet
    -A INPUT -s 192.168.4.2 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
    -A FORWARD -s 192.168.4.2 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
    -A INPUT -s 192.168.4.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
    -A FORWARD -s 192.168.4.2 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
    -A FORWARD -d 192.168.4.2 -j ACCEPT
    # accept ssh connection from only my trusted ips/macs
    -A INPUT -p tcp -s 192.168.4.3 -m mac --mac-source 44:55:66:77:88:99 --dport 22 -j ACCEPT
    #-A INPUT -p tcp --dport 22 -j ACCEPT
    # give access to shares and email 192.168.8.0 subnet
    # dns
    -A INPUT -s 192.168.8.0/24 -i eth0.3 -p tcp --dport 53 -j ACCEPT
    -A INPUT -s 192.168.8.0/24 -i eth0.3 -p udp --dport 53 -j ACCEPT
    # doesn't use email
    -A FORWARD -p tcp -s 192.168.8.2 -m multiport --dports 80,139,443,445 -j ACCEPT
    -A FORWARD -p udp -s 192.168.8.2 -m multiport --dports 137:138 -j ACCEPT
    # use email
    -A FORWARD -p tcp -s 192.168.8.3 -m multiport --dports 80,110,139,443,445,587 -j ACCEPT
    -A FORWARD -p udp -s 192.168.8.3 -m multiport --dports 137:138 -j ACCEPT
    -A FORWARD -d 192.168.8.0/24 -j ACCEPT
    # tie mac to ip 192.168.75.0 subnet
    -A INPUT -s 192.168.75.3 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
    -A FORWARD -s 192.168.75.3 -m mac ! --mac-source XX:XX:XX:XX:XX:XX -j REJECT
    -A INPUT -s 192.168.75.3 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
    -A FORWARD -s 192.168.75.3 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
    -A FORWARD -d 192.168.75.3 -j ACCEPT
    COMMIT

  10. #10