+ Responder ao Tópico



  1. #1

    Padrão Bloqueio ao TOR, IP forward fechado e problemas....

    Prezados, antes de tudo venho confessar a todos q sou 1/2 noob em netfilter, logo meu script de firewall n está lá muito 100%, portanto peço paciência e explicações + esmiuçadas, ok?

    Vamos lá: Minha rede compõe-se hj de quase 500 equipamentos cadastrados (entre máquinas desktop, notebooks, netbooks, tablets, celulares, etc), acessando por rede cabeada e wireless. Como em muitos lugares, o flagelo dos sysadmins chamado TOR chegou aqui. Trabalho numa escola técnica, logo n adianta políticas do tipo "se usar o TOR, vai ser demitido", mesmo pq os alunos n se autenticam no Squid, e eu n tenho como ficar monitorando toda a rede todo o tempo (a escola funciona 6 dias por semana, das 7 às 23 hs). São quase 4000 alunos, quase todos adolescentes, seria um transtorno maior a manutenção dessas contas do q a briga c/ o flagelo do TOR. Prefiro filtrar o dito cujo.

    A maior parte eu n tenho controle direto, mas todo o tráfego (q é quase tudo Web, tirando um FTP ou outro ali, e SSH q só eu uso) passa por um servidor c/ Squid e um firewall montado c/ iptables, q eu posto aí embaixo. Entre muitas investidas p/ bloquear o acesso ao TOR (inclusive usando muitas dicas daqui do VivaOLinux), a q foi + eficaz foi simplesmente desligar o IP forward, ou seja: echo "0" > /proc/sys/net/ipv4/ip_forward. Feito isto, todo mundo TEM Q passar pelo Squid, e nem o TOR, nem os clientes de VPN como Hamachi, TeamViewer e outras estratégias usadas pelos alunos p/ burlarem a rede passam. Fechou tudo. Ótimo.

    Antes, tentei filtrar usando a lista de exit nodes do TOR (3 atualizações por hora), mas sempre tem um q passa; tentei criar regras q forçassem o tráfego a ser só pelo Squid, s/ sucesso; tentei usar filtragem pela layer 7 no userspace, mas n deu muito certo; compilei um kernel e mandei ver c/ layer 7, e tb n bloqueou. Ainda usei monitoramento periódico, p/ ver quais máquinas abrem muitas conexões na porta 443 e bloquear o acesso a elas. Mas n deu certo. Aí parti p/ desativar o IP forward.

    Só q do jeito q fica, c/ IP forward desligado, a rede fica MUITO lenta, e vários sites n abrem (connection timeout), inclusive alguns q estão na porta 443, o q provoca a reclamação de um monte de gente. Além disso, conexões q saem desse servidor, como a porta 22 (SSH) n são possíveis. E como disse no início, sou 1/2 noob no q tange a firewalls.

    Alguém tem alguma ideia? Abaixo segue meu script de firewall.

    Abraços, Ricardo.
    Código bash:
    #!/bin/bash
    # Script de firewall - ETE Republica - versao 0.4
    # Baseado em [URL]http://www.zago.eti.br/firewall/fireaula.sh[/URL]
    # Faz uso de iptables-layer7 - kernelspace, kernel 2.6.34.
    #
    # Variaveis
    SERVICO="/usr/local/sbin/iptables"
    MODULO=$(which modprobe)
    WGET=$(which wget)
    REDE_DE_DENTRO="10.0.0.0/16"
    PLACA_ADSL=eth0
    PLACA_FAETEC=eth1
    PLACA_DE_DENTRO=eth2
    PLACA_DE_FORA=eth+
    FAIXA_FAETEC="10.10.10.128/27"
    FAIXA_ADSL="192.168.1.0/24"
    ROTEADOR_FAETEC="10.10.10.129"
    ROTEADOR_ADSL="192.168.1.254"
    PROXY_FAETEC="10.0.0.2"
    INETSERV="10.0.0.5"
    WEBSERV="10.0.0.4"
    BDSERV="10.0.0.3"
    LOOPBACK="127.0.0.1"
    DIRETORIO="."
    PORTAS_ABERTAS_REDIRECIONADAS="80 443"
    PORTAS_BLOQUEADAS_ULTRASURF="5938 19769 55433 33190 19769 23620 3103 3162 2000:3000"
    IPS_BLOQUEADOS_ULTRASURF="65.49.2.0/24 65.49.14.0/24 208.43.202.0/24"
    FAIXAS_IP_BLOQUEADAS_ULTRASURF="/home/install/bin/internet/faixas.ultrasurf.txt"
    ARQUIVO_IPS_ULTRASURF=$HOME"/bin/internet/ips.ultrasurf.txt"
    TEMPORARIO=$(mktemp)
    TOR_NODES=$HOME"/bin/internet/tor_nodes.csv"
    LAYER7="http-rtsp rtsp skypetoskype skypeout bittorrent msnmessenger msn-filetransfer tor teamspeak"
    URL='http://torstatus.all.de/ip_list_exit.php/Tor_ip_list_ALL.csv' 
    #
    echo "Carrega modulos"
    $MODULO iptable_nat
    $MODULO nf_conntrack
    $MODULO nf_conntrack_netlink
    $MODULO nf_conntrack_ftp
    $MODULO nfnetlink_queue
    $MODULO ip_nat_ftp
    $MODULO ipt_LOG
    $MODULO ipt_REJECT
    $MODULO ipt_MASQUERADE
    #
    echo "Zera regras"
    $SERVICO -F
    $SERVICO -X
    $SERVICO -F -t nat
    $SERVICO -X -t nat
    $SERVICO -F -t mangle
    $SERVICO -X -t mangle
    $SERVICO -P INPUT DROP
    $SERVICO -P OUTPUT DROP
    $SERVICO -P FORWARD DROP
    #
    echo "NAT para os demais servicos" 
    $SERVICO -A POSTROUTING -t nat -o $PLACA_ADSL -j MASQUERADE
    echo "0" > /proc/sys/net/ipv4/ip_forward
    #
    echo "Libera acesso externo para ssh e servidor web"
    $SERVICO -A INPUT -p tcp --dport 80 -i $PLACA_ADSL -j ACCEPT
    $SERVICO -A INPUT -p tcp --dport 80 -i $PLACA_DE_DENTRO -j ACCEPT
    $SERVICO -A INPUT -p tcp --dport 22 -i $PLACA_ADSL -j ACCEPT
    $SERVICO -A INPUT -p tcp --dport 22 -i $PLACA_DE_DENTRO -j ACCEPT
    #
    echo "Mascarando tudo de dentro pela placa de fora da rede (80 e 443 -> 3128)"
    for PORTAS in $PORTAS_ABERTAS_REDIRECIONADAS
    do
        $SERVICO -t nat -A PREROUTING -i $PLACA_DE_DENTRO -p tcp --dport $PORTAS -j REDIRECT --to-port 3128
    done
    #
    echo "Conexoes para as portas 20, 21, 80 e 443 tem q passar pelo Squid."
    $SERVICO -t filter -A OUTPUT -p tcp -m multiport --dport ftp,ftp-data,http,https -m owner ! --uid-owner proxy -j REJECT --reject-with tcp-reset
    #
    echo "Conexoes para a porta 53 tem q passar pelo MaraDNS."
    $SERVICO -t filter -A OUTPUT -p tcp -m multiport --dport 53 -m owner ! --uid-owner maradns -j REJECT --reject-with tcp-reset
    #
    echo "Drop em alguns servicos especificos (layer 7)"
    for TIPO in $LAYER7; do
        $SERVICO -A INPUT -m layer7 --l7proto $TIPO    -j DROP
        $SERVICO -A OUTPUT -m layer7 --l7proto $TIPO    -j DROP
        $SERVICO -I FORWARD -m layer7 --l7proto $TIPO -d any/0 -j DROP
        $SERVICO -I FORWARD -m layer7 --l7proto $TIPO -s any/0 -j DROP
        $SERVICO -t filter -A FORWARD -m layer7 --l7proto $TIPO -j DROP 
    done
    #
    echo "Bloqueio ao Ultrasurf"
    for PORTA in $PORTAS_BLOQUEADAS_ULTRASURF; do
        $SERVICO -I FORWARD -p tcp --dport $PORTA -j DROP
    done
    for IP in $IPS_BLOQUEADOS_ULTRASURF; do
        $SERVICO -I FORWARD -p tcp -d $IP -j DROP
        $SERVICO -I FORWARD -p tcp -s $IP -j DROP
    done
    for FAIXA in $(cat $FAIXAS_IP_BLOQUEADAS_ULTRASURF); do
        $SERVICO -I FORWARD -d $FAIXA -p tcp --destination-port 443 -j DROP
        $SERVICO -I FORWARD -s $FAIXA -p tcp --destination-port 443 -j DROP
    done
    #i=1
    #LINHAS=$(cat $ARQUIVO_IPS_ULTRASURF | wc -l)
    #echo -e "\n"
    #for IP in $(cat $ARQUIVO_IPS_ULTRASURF); do
    #    $SERVICO -A FORWARD -p tcp --dport 443 -d $IP -j LOG --log-prefix "UltraSurf: "
    #    $SERVICO -A FORWARD -p tcp --dport 443 -d $IP -j DROP
    #    tput cup 22 0 ; echo -e "\t\t\t"
    #    tput cup 22 0 ; echo "IPs bloqueados do Ultrasurf: $i de $LINHAS"
    #    i=$((i+1))
    #done
    #
    echo "Bloqueio ao TeamViewer"
    $SERVICO -A FORWARD -p TCP -i $PLACA_DE_DENTRO -s $REDE_DE_DENTRO --dport 5938 -j DROP
    #
    echo "Limitando o numero de conexoes simultaneas da porta 443."
    $SERVICO -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 10 -j REJECT
    #
    echo "Redirecionando portas 80 e 8080 pela placa externa p/ o servidor Web"
    PORTAS_ABERTAS_TCP_DENTRO="80 8080"
    for PORTAS in $PORTAS_ABERTAS_TCP_DENTRO;
    do
        $SERVICO -t nat -A PREROUTING -i $PLACA_ADSL -p tcp --dport $PORTAS -j DNAT --to-dest $WEBSERV
        $SERVICO -A FORWARD -p tcp -i $PLACA_ADSL --dport $PORTAS -d $WEBSERV -j ACCEPT
    done
    #
    echo "DROP para ataques brute force do SSH"
    $SERVICO -I INPUT -i $PLACA_ADSL -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
    $SERVICO -I INPUT -i $PLACA_ADSL -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name DEFAULT --rsource -j DROP
    #
    echo "Protegendo contra o ping-of-death"
    $SERVICO -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
    #
    echo "Protegendo contra syn-floods"
    $SERVICO -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
    #
    echo "Pacotes estabilizados e relatados passam sem problemas."
    $SERVICO -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    #
    echo "Protegendo contra port-scanners avancados"
    $SERVICO -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
    #
    echo "Bloqueio ao traceroute"
    $SERVICO -A INPUT -p udp -i $PLACA_DE_FORA --dport 33435:33525 -j DROP
    #
    echo "Ignora (DROP) nos pacotes TCP indesejaveis"
    $SERVICO -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "FIREWALL: NEW sem syn: "
    $SERVICO -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
    #
    echo "LIbera (ACCEPT) pacotes de retorno da internet"
    $SERVICO -A INPUT ! -i $PLACA_ADSL -j ACCEPT
    $SERVICO -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $SERVICO -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
    $SERVICO -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
    #
    echo "DROP e LOG de port-scanners"
    $SERVICO -N SCANNER
    $SERVICO -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "DIVERSOS: port scanner: "
    $SERVICO -A SCANNER -j DROP
    $SERVICO -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $PLACA_ADSL -j SCANNER
    $SERVICO -A INPUT -p tcp --tcp-flags ALL NONE -i $PLACA_ADSL -j SCANNER
    $SERVICO -A INPUT -p tcp --tcp-flags ALL ALL -i $PLACA_ADSL -j SCANNER
    $SERVICO -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $PLACA_ADSL -j SCANNER
    $SERVICO -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $PLACA_ADSL -j SCANNER
    $SERVICO -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $PLACA_ADSL -j SCANNER
    $SERVICO -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $PLACA_ADSL -j SCANNER
    #
    echo "Log de acesso por porta"
    $SERVICO -A INPUT -p tcp --dport 21 -i $PLACA_ADSL -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: "
    $SERVICO -A INPUT -p tcp --dport 80 -i $PLACA_ADSL -j LOG --log-level 6 --log-prefix "FIREWALL: http: "
    $SERVICO -A INPUT -p tcp --dport 3128 -i $PLACA_ADSL -j LOG --log-level 6 --log-prefix "FIREWALL: squid: "
    #
    echo "DROP no samba"
    $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 139 -j DROP
    $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 138 -j DROP
    $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 137 -j DROP
    #
    echo "DROP no NFS (portmap)"
    $SERVICO -A INPUT -p tcp -i $PLACA_ADSL --syn --dport 111 -j DROP
    Última edição por osmano807; 01-11-2011 às 14:03.

  2. #2

    Padrão Re: Bloqueio ao TOR, IP forward fechado e problemas....

    Valeu pela Dica!

  3. #3
    MODERADOR-CHEFE Avatar de osmano807
    Ingresso
    Aug 2008
    Localização
    Araguari - Minas Gerais
    Posts
    1.980
    Posts de Blog
    5

    Padrão Re: Bloqueio ao TOR, IP forward fechado e problemas....

    Pensamos, se o cara usar algum relay que não esteja público no TOR, ele terá acesso.

    (Bem, TOR passa pelo firewall da china uai...)

    Vejamos, sem forward, tudo que não passar por um proxy não vai acessar a rede externa.
    DNS, SSH, HTTPS, irc, bla bla bla, quase tudo.

    Na minha faculdade, forçam todo mundo usar o squid, mas tem forward habilitado. Não tem muito o que se fazer... abro um ssh e to navegando sem rastreabilidade.
    TOR eu acho que é muita pólvora pra pouco animal... o povo tá usando só porquê o vidalia tá facim de usar agora...

  4. #4

    Padrão Re: Bloqueio ao TOR, IP forward fechado e problemas....

    Na minha rede, o tráfego é quase todo Web. Todo mundo conecta ao meu DNS, e só ele faz conexões p/ fora. HTTPS e FTP podem ser tunelado por um proxy, como o Squid. SSH só tem eu q uso... O resto é todo fechado. Logo, isso n chega a ser um problema.

    Portanto... Fechar o IP forward n é uma perspectiva ruim p/ a minha rede.

  5. #5
    MODERADOR-CHEFE Avatar de osmano807
    Ingresso
    Aug 2008
    Localização
    Araguari - Minas Gerais
    Posts
    1.980
    Posts de Blog
    5

    Padrão Re: Bloqueio ao TOR, IP forward fechado e problemas....

    Citação Postado originalmente por Tenente_blueberry Ver Post
    Na minha rede, o tráfego é quase todo Web. Todo mundo conecta ao meu DNS, e só ele faz conexões p/ fora. HTTPS e FTP podem ser tunelado por um proxy, como o Squid. SSH só tem eu q uso... O resto é todo fechado. Logo, isso n chega a ser um problema.

    Portanto... Fechar o IP forward n é uma perspectiva ruim p/ a minha rede.
    Certo, feche então.

  6. #6

    Padrão Re: Bloqueio ao TOR, IP forward fechado e problemas....

    Sim, eu fechei. E a rede ficou MUITO lenta. Esse é o meu problema, o q falei lá em cima. E mesmo redirecionando TUDO pelo Squid, o tráfego fica absurdamente lento. Por isso eu pergunto novamente: Alguma ideia?

  7. #7
    MODERADOR-CHEFE Avatar de osmano807
    Ingresso
    Aug 2008
    Localização
    Araguari - Minas Gerais
    Posts
    1.980
    Posts de Blog
    5

    Padrão Re: Bloqueio ao TOR, IP forward fechado e problemas....

    O problema é que tens que bloquear tudo, mas liberar algumas portas.
    Por exemplo:
    redirecionar a porta 53 para um servidor dns interno
    Talvez seja isso a lentidão, para ter certeza mesmo tinha que analisar o trafego para ver onde tá a demora.

  8. #8

    Padrão Re: Bloqueio ao TOR, IP forward fechado e problemas....

    Desliguei o layer7 e o problema foi resolvido. Layer 7 em kernelspace era quem estava fazendo c/ q a velocidade fosse p/ o chão, e está resolvido. Valeu pela força!