1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

WebSite --> Bloquear acesso a ips internacionais

Discussão em 'Web Development' iniciada por The Lavigne, 21 de Junho de 2008. (Respostas: 58; Visualizações: 4118)

  1. The Lavigne

    The Lavigne Banido

    Muito Boa Noite.
    Eu tenho um website em php / mysql e gostaria de saber de como fazer para bloquear o acesso a ips internacionais.

    Ou seja só pessoas no território português terem acesso ao website.

    Sei que isto é possivel pois conheço sites que bloqueiam ips inter. mas não sei como fazer.

    Quem me poder ajudar desde obrigado!
     
  2. shello

    shello Moderador
    Staff Member

    Existem bases de dados com vários intervalos de IPs, e o país a que pertencem:

    http://www.ip2location.com/
    http://ip-to-country.webhosting.info/

    Depois é só veres o IP de quem está a aceder, identificares com essa base de dados e consoante for ou não de Portugal, barrares o acesso.

    Não sei se há forma de fazer isto pelo Apache, por exemplo. Com certeza seria bem mais eficiente.
     
  3. The Lavigne

    The Lavigne Banido

    Tipo mas eu quero bloquear países não pessoas singulares. Neste caso só dar permissão mesmo a pessoas que residem em Portugal.


    Cump'z
     
  4. asturmas

    asturmas Power Member

    Não sei se podes permitir apenas a ips nacionais se não tens de banir os outros todos..
     
  5. anjo2

    anjo2 Power Member

    Soluções pagas arranjas, eu neste momento estou a fazer algo desse tipo, neste momento é grátis, é só fazeres uma query à pagina e depois o "parse" para obteres o país, mas sem ser pago não sei se encontras muitas que não te limitem x numeros de acessos ao teu ip, busca por exemplo por módulos de CMS que mostrem de onde são os visitantes.
     
  6. The Lavigne

    The Lavigne Banido

    Estive a pesquisar... Alguém sabe trabalhar com o PeerGuardian IP Import?

    Penso que seja o que procuro.


    cumpz
     
  7. m.costa

    m.costa Power Member

    O PeerGuardian não tem nada a ver com o que queres, são listas de IPs "perigosos" (governamentais, etc) a serem bloqueados para tornar + seguro o uso de p2p.

    O que eu faria no teu caso era:
    - sacar isto -> http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip
    - importar apenas os IPs portugueses (não ha' necessidade de ocupar espaço com todos os ranges ja' que apenas queres bloquear tudo o que não seja portugues, ou seja basicamente tudo o que não existir na tua tabela)
    - e depois simplesmente algo como:
    Código:
    
    // ligar a mysql
    
    $ip = ip2long($REMOTE_ADDR);
    
    $q = mysql_query("SELECT * FROM ips WHERE ip_inicio <= {$ip} AND ip_fim >= {$ip}");
    
    if (mysql_num_rows($q) == 0) // bloquear, visto que o range nao esta' na BD e logo nao e' portugues (supostamente)
    
    
     
  8. mauronacosta

    mauronacosta Power Member

    Não sei se te interessa mas dessa forma estarás também a impedir o acesso aos motores de busca. Para o fazeres de forma aceitável deves dar também acesso aos utilizadores com a mesma localização geográfica dos robots.
     
  9. The Lavigne

    The Lavigne Banido


    Vamos lá ver se eu percebo.

    Fiz download do ficheiro que me disses-te, mas aquilo ta cheio de ips como é que eu sei quais são os de Portugal?

    E depois tenho que meter isso na minha BD e meter o código que disses-te no header.php do site, certo?


    Se for assim, acho que está aqui a solução. :cool:

    cump's
     
  10. anjo2

    anjo2 Power Member

    Se tiver todos, vamos lá ver se não vais andar a bloquear ips nacionais também...
     
  11. m.costa

    m.costa Power Member

    Os que são de Portugal são os que dizem "PT" / "PORTUGAL" nas linhas correspondentes da csv.

    Basicamente tens de fazer isto:
    1) criar uma tabela 'ips' com os campos 'ip_inicio' , 'ip_fim' , 'pais1' , 'pais2' , 'pais3'
    2) importar os dados do .csv para essa tabela
    -- ou através do phpMyAdmin
    -- ou atraves da consola mysql ou do próprio PHP (neste caso tens de por o ficheiro .csv no servidor, ou no directorio actual ou em algum que saibas o caminho)
    ---- o comando é algo como: LOAD DATA LOCAL INFILE '/ips.csv' INTO TABLE 'ips' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (ip_inicio, ip_fim, pais1, pais2, pais3);
    3) agora que tens os ips todos na base de dados, apaga os que não interessam
    -- DELETE FROM 'ips' WHERE pais1 != 'PT'
    4) adiciona o tal codigo ao header.php ou ao ficheiro que usas no inicio, e voila'
     
  12. The Lavigne

    The Lavigne Banido

    De que tipo são os campos 'ip_inicio' , 'ip_fim' , 'pais1' , 'pais2' , 'pais3' ?


    Ja agora já testas-te isto? Funciona?


    MUITO OBRIGADO PELA VOSSA ATENÇÃO, TZ the best!
     
  13. m.costa

    m.costa Power Member

    Código:
      `ip_inicio` double NOT NULL default '0',
      `ip_fim` double NOT NULL default '0',
      `pais1` char(2) collate latin1_general_ci NOT NULL default '',
      `pais2` char(3) collate latin1_general_ci NOT NULL default '',
      `pais3` varchar(50) collate latin1_general_ci NOT NULL default ''
    Isto e' como tenho na minha, apesar de não ser para o mesmo fim a estrutura e' identica. Alem disso inferes os tipos de dados necessários pelo que vês no CSV.

    E funciona tudo, sim. ;)
     
    Última edição: 24 de Junho de 2008
  14. spastikman

    spastikman Banido



    O servidor onde o site está alojado é teu ?

    Se for podes fazer isso usando iptables e as ranges de ips disponíveis por aí (ipfilter.dat dos emules)
     
  15. The Lavigne

    The Lavigne Banido

    Não o servidor não é meu, apenas tenho uma conta de alojamento normal.

    Já tenho tabela dos ips e os campos todos criados. Mas não consegui importar o ficheiro .csv.

    Tipo já foi até à opção importar na própria tabela e nada. Dá me isto: Invalid field count in CSV input on line 1.


    E com o comando acima dito eu não tenho a certeza de onde colocar o ficheirio para ele importar para a BD. Tenho que colocar no servidor m.costa?


    Cump's
     
    Última edição: 24 de Junho de 2008
  16. The Lavigne

    The Lavigne Banido


    Finalmente consegui meter isto!

    <?php
    dbconn(true);

    $ipUserX = ip2long($REMOTE_ADDR);

    $xResult = mysql_query("SELECT * FROM Block_Ips WHERE IP <= '$ipUserX' AND IP2 >= '$ipUserX'")or die(mysql_error());

    if (mysql_num_rows($xResult) == 1) {
    die("You are not in Portugal.");
    }
    ?>

    Mas não funciona. Um amigo meu vive em NY, USA e conseguiu entrar no site ! Alguém sabe como resolver?
     
    Última edição: 24 de Junho de 2008
  17. anjo2

    anjo2 Power Member

    tira o == 1 e mete um ! atras.
     
  18. m.costa

    m.costa Power Member

    E' ao contrário, se o resultado for 1 e' porque estás em Portugal (visto que tens os ranges de Portugal apenas na BD).

    if (mysql_num_rows($xResult) == 0) {
    die("You are not in Portugal.");
    }
     
  19. The Lavigne

    The Lavigne Banido


    Tipo se eu meter zero diz que EU não estou em portugal :lol:
     
  20. anjo2

    anjo2 Power Member

    É só pensares um pouco e não andares a fazer copy paste...
    mysql_num_rows indica o numero de resultados obtidos, ora bem, se não existe nenhum resultado, vai dar 0, que é o que se pretende.
    Ou tens isso mal na base de dados ou nem sequer o teu ip esta abrangido nas gamas de ips inseridas... Que foi um problema que já te tinha dito.
     

Partilhar esta Página