WebSite --> Bloquear acesso a ips internacionais

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!
 
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.

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
 
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.
 
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)
 
ja' que apenas queres bloquear tudo o que não seja portugues

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.
 
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)


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
 
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

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'
 
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!
 
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!

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:
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!



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)
 
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)

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:
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. ;)


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:
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.");
}
 
É 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.
 
Back
Topo