By Carlos Domingues (cabdomingues)
IT Security - Como criar mapas (suportados no
Google maps) com a geolocalização dos atacantes
usando o fail2ban / fail2sql / fail2ban-geo
IT Security - Como criar mapas (suportados no Google maps) com a geolocalização
dos atacantes usando o fail2ban / fail2sql / fail2ban-geo
Objetivo: Aumentar a segurança da rede informática
Bloquear de forma automática tentativas de acesso indevido através de vários protocolos:
ex. smtp, imap, ssh, ftp, etc., etc.
Facilitar a análise dessas tentativas
Solução: Fail2ban – http://www.fail2ban.org
Fail2sql – http://fail2sql.sourceforge.net
Fail2ban-geo - PHP interface - http://www.byteme.org.uk/2014/04/21/ban-hammer-fail2ban-
geo-ip-on-google-maps/
Pre-requisitos:
Servidor com iptables instalado
Servidor Mysql disponível
Apache web server (ou outro que interprete PHP e aceda a BDs Mysql)
Conta no Google (para criar a API de autenticação aplicacional)
Fail2ban
•Detectar tentativas
de acesso indevido à
rede (através de
análise de logs de
smtp, imap, ftp, ssh,
etc.)
Fail2sql
•Registar essas
tentativas numa
base de dados
mysql para análise
posterior
Fail2geo &
Google
maps
•Usar o fail2ban-geo
para representar de
forma
geolocalizadas
todas as tentativas
de acesso indevido
Fail2ban - install
• Dependendo da distribuição de Linux, o processo de instalação poderá ser diferente
• yum install fail2ban
• apt-get install fail2ban
• Extrair código from tar.gaz and ./configure / make / make install
Etc..
Alguns guias de instalação do Fail2ban
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-fail2ban-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-centos-6
https://help.ubuntu.com/community/Fail2ban
Fail2sql - install
Fail2SQL é escrito em PHP e usa o serviço do MaxMind GeoIP PHP API para dar informação geográfica do IP.
Os dados são guardados numa BD MySQL
• Name
• Protocol
• Port
• IP
• Count (total banned)
• Longitude
• Latitude
• Country Code
• Geo Data (city, country)
• NOTA cabdomingues : Adicionei mais uma linha chamada timestamp (datetime) para registar a data em que o IP foi banido.
Ver mais informação em https://www.samculley.co.uk/log-fail2ban-bans-to-mysql-using-fail2sql/ e http://fail2sql.sourceforge.net/
Fail2sql - install
O Fail2SQL instala-se de forma muito simples:
1º download
wget http://fail2sql.sourceforge.net/fail2sql-1.0.tar.gz
2º untar
tar –zxvf fail2sql-1.0.tar.gz
3º execute
mv fail2sql-1.0/* /usr/share/fail2ban/fail2sql/bin/ //colocam-se os ficheiros numa pasta mais adequada
/opt/fail2sql-1.0/fail2sql –u //faz o update da base dados GeoIP
/opt/fail2sql-1.0/fail2sql –l //lista os Ips banidos
Fail2sql – config
Editar o ficheiro /usr/share/fail2ban/fail2sql/bin/file2sql
(neste caso está em /usr/share/fail2ban/fail2sql/bin. Pode estar noutro lado qualquer, dependendo da pasta de instalação)
Alterar as configurações de acesso ao mysql, que deverão ser criadas (ver páginas seguintes)
$home = "/usr/share/fail2ban/fail2sql/bin";
$link = mysql_connect('srv-nomeservidor_mysql', 'fail2ban_user', ‘change_password')
or die('Could not connect: ' . mysql_error());
Fail2sql – install db
CREATE TABLE `fail2ban` (
`id` int NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`protocol` varchar(4) NOT NULL,
`port` int(11) NOT NULL,
`ip` varchar(20) NOT NULL,
`count` int(11) NOT NULL,
`longitude` varchar(20) DEFAULT NULL,
`latitude` varchar(20) DEFAULT NULL,
`country` varchar(5) DEFAULT NULL,
`geo` varchar(255) DEFAULT NULL,
`timestamp` datetime DEFAULT NULL, //nova coluna adicionada cabdomingues
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Criar user específico na BD para este serviço (ex. file2ban_user) e dar as permissões adequadas.
Fail2sql – customize
Como adicionei mais um campo (datetime) na BD, pretendo que esse campo seja preenchido
com a data de registo. Alterar o script fail2sql e adicionar mais um campo nos inserts (que é a
data atual – now() )
Linha 58 :-
$query = "INSERT INTO `fail2ban` values ('', '".$name."', '".$protocol."', '".$port."', '".$ip."', '1',
'".$geoip->longitude."', '".$geoip->latitude."', '".$geoip->country_code."', '".$geoip->city.",
".$geoip->country_name."', NOW())";
Linha 61:-
$query = "INSERT INTO `fail2ban` values ('', '".$name."', '".$protocol."', '".$port."', '".$ip."', '1', '',
'', '', '', NOW())";
Fail2ban
• Pressupondo que o Fail2ban está corretamente configurado, a única alteração para este efeito
(usar o fail2sql) será adicionar a linha abaixo identificada no ficheiro de configuração da ação do
iptables:
ex. /etc/fail2ban/action.d/iptables.conf
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype> //esta linha supostamente já deve existir
/usr/share/fail2ban/fail2sql/bin/fail2sql <name> <protocol> <port> <ip> //esta deve ser adicionada
Esta linha deve ser customizada de acordo com a directoria de instalação do fail2sql (ver página Fail2sql -
install)
• Restart fail2ban service
NOTA:
Nesta fase, os IPs banidos pelo fail2ban já devem estar a ser inseridos na base de
dados mysql.
Se isso não acontecer, rever as configurações de acesso à BD mysql no script fail2sql
e rever as configurações do fail2ban (iptables action)
/etc/fail2ban/action.d/iptables.conf
Google maps
Para poder usar os mapas Google, temos de criar em primeiro lugar, uma chave de API:
1º go to https://console.developers.google.com/project
2º criar novo projeto
3º No menu de APIs e autenticação, escolher “Credenciais”
4º e depois criar “Chave para aplicativos do navegador”
Será esta chave que deve ser usada na linha 8 do index.php (script PHP do fail2ban-geo)
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&sensor=false"></script>
Google maps
Fail2ban-geo - install
Download dos ficheiros do fail2ban-geo (chamei-lhe assim, mas o autor chama-lhe
banhammer).
http://static.byteme.org.uk/banhammer.tar.gz
Extrair todos os ficheiros para uma área do apache (dentro da zona publica - html)
tar –zxvf banhammer.tar.gz
mv banhammer/* /var/www/html/fail2ban-geo/
Neste caso a minha pasta de instalação vai ser : /var/www/html/fail2ban-geo/ e o endereço de acesso
http://nome_do_servidor/fail2ban-geo
Fail2ban-geo – customize
Editar index.php e adicionar a chave do Google:
Depois de criar “Chave para aplicativos do navegador” no google temos de adicionar esta chave na linha 8 do
index.php (script PHP do fail2ban-geo)
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&sensor=false"></script>
Nota: Qualquer erro que aconteça ao gerar o mapa do Google pode estar relacionado com este ponto.
Fail2ban-geo – customize
Edit dbinfo.php
<?php //aconselho a adicionar php a seguir ao <? para evitar erros por causa dos short tags do php.ini. O autor tinha apenas <?
$db_host = '127.0.0.1'; //ip do servidor de mysql (pode nao ser o mesmo do apache)
$db_user = 'fail2ban_user';
$db_pwd = ‘change_password';
$database = 'fail2ban';
$table = 'fail2ban';
?>
Fail2ban-geo – customize
Edit getmarkers.php
Como eu adicionei um campo (timestamp) na BD Myssql, com a data na qual este IP foi banido, vou configurar
o meu sistema para apenas mostrar o mapa com as localizações dos ataques dos últimos 3 dias:
$query = "SELECT * FROM $table WHERE timestamp >= ( CURDATE() - INTERVAL 3 DAY )";
Adicionei a esta query a condição WHERE timestamp >= ( CURDATE() - INTERVAL 3 DAY )"; para ver no mapa apenas os ultimos 3 dias. Caso
contrário o mapa ficava muito preenchido e ilegível.
Fail2ban-geo – customize
Edit maps.js
Uma informação que para mim é importante na alálise das tentativas de acesso indevido é saber qual o ISP (Internet
Service Provider) de onde vêm os ataques.
Uma forma muito simples, mas eficaz, é usar um outro serviço (o db-ip.com):
Assim sendo, no mapa produxido pelo maps.js alterei a linha, adicionando um link novo:
var html = "<b>" + type+ " ATTACK" + "</b><br />"+name + "<br/><a href='https://db-ip.com/" + address + "'>Mais INFO " + "</a> ou <a
href='http://whois.domaintools.com/" + address + "'> WHOIS</a> sobre </a>" + address;
O efeito que se consegue é este
e ao clickar nos links, temos toda a informação que precisamos ->
RESULTADO FINAL

IT security - Fail2ban, fail2sql e googlemaps (PT Language)

  • 1.
    By Carlos Domingues(cabdomingues) IT Security - Como criar mapas (suportados no Google maps) com a geolocalização dos atacantes usando o fail2ban / fail2sql / fail2ban-geo
  • 2.
    IT Security -Como criar mapas (suportados no Google maps) com a geolocalização dos atacantes usando o fail2ban / fail2sql / fail2ban-geo Objetivo: Aumentar a segurança da rede informática Bloquear de forma automática tentativas de acesso indevido através de vários protocolos: ex. smtp, imap, ssh, ftp, etc., etc. Facilitar a análise dessas tentativas Solução: Fail2ban – http://www.fail2ban.org Fail2sql – http://fail2sql.sourceforge.net Fail2ban-geo - PHP interface - http://www.byteme.org.uk/2014/04/21/ban-hammer-fail2ban- geo-ip-on-google-maps/ Pre-requisitos: Servidor com iptables instalado Servidor Mysql disponível Apache web server (ou outro que interprete PHP e aceda a BDs Mysql) Conta no Google (para criar a API de autenticação aplicacional)
  • 3.
    Fail2ban •Detectar tentativas de acessoindevido à rede (através de análise de logs de smtp, imap, ftp, ssh, etc.) Fail2sql •Registar essas tentativas numa base de dados mysql para análise posterior Fail2geo & Google maps •Usar o fail2ban-geo para representar de forma geolocalizadas todas as tentativas de acesso indevido
  • 4.
    Fail2ban - install •Dependendo da distribuição de Linux, o processo de instalação poderá ser diferente • yum install fail2ban • apt-get install fail2ban • Extrair código from tar.gaz and ./configure / make / make install Etc.. Alguns guias de instalação do Fail2ban https://www.digitalocean.com/community/tutorials/how-to-install-and-use-fail2ban-on-ubuntu-14-04 https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-centos-6 https://help.ubuntu.com/community/Fail2ban
  • 5.
    Fail2sql - install Fail2SQLé escrito em PHP e usa o serviço do MaxMind GeoIP PHP API para dar informação geográfica do IP. Os dados são guardados numa BD MySQL • Name • Protocol • Port • IP • Count (total banned) • Longitude • Latitude • Country Code • Geo Data (city, country) • NOTA cabdomingues : Adicionei mais uma linha chamada timestamp (datetime) para registar a data em que o IP foi banido. Ver mais informação em https://www.samculley.co.uk/log-fail2ban-bans-to-mysql-using-fail2sql/ e http://fail2sql.sourceforge.net/
  • 6.
    Fail2sql - install OFail2SQL instala-se de forma muito simples: 1º download wget http://fail2sql.sourceforge.net/fail2sql-1.0.tar.gz 2º untar tar –zxvf fail2sql-1.0.tar.gz 3º execute mv fail2sql-1.0/* /usr/share/fail2ban/fail2sql/bin/ //colocam-se os ficheiros numa pasta mais adequada /opt/fail2sql-1.0/fail2sql –u //faz o update da base dados GeoIP /opt/fail2sql-1.0/fail2sql –l //lista os Ips banidos
  • 7.
    Fail2sql – config Editaro ficheiro /usr/share/fail2ban/fail2sql/bin/file2sql (neste caso está em /usr/share/fail2ban/fail2sql/bin. Pode estar noutro lado qualquer, dependendo da pasta de instalação) Alterar as configurações de acesso ao mysql, que deverão ser criadas (ver páginas seguintes) $home = "/usr/share/fail2ban/fail2sql/bin"; $link = mysql_connect('srv-nomeservidor_mysql', 'fail2ban_user', ‘change_password') or die('Could not connect: ' . mysql_error());
  • 8.
    Fail2sql – installdb CREATE TABLE `fail2ban` ( `id` int NOT NULL AUTO_INCREMENT, `name` text NOT NULL, `protocol` varchar(4) NOT NULL, `port` int(11) NOT NULL, `ip` varchar(20) NOT NULL, `count` int(11) NOT NULL, `longitude` varchar(20) DEFAULT NULL, `latitude` varchar(20) DEFAULT NULL, `country` varchar(5) DEFAULT NULL, `geo` varchar(255) DEFAULT NULL, `timestamp` datetime DEFAULT NULL, //nova coluna adicionada cabdomingues PRIMARY KEY (`id`) ) ENGINE=MyISAM; Criar user específico na BD para este serviço (ex. file2ban_user) e dar as permissões adequadas.
  • 9.
    Fail2sql – customize Comoadicionei mais um campo (datetime) na BD, pretendo que esse campo seja preenchido com a data de registo. Alterar o script fail2sql e adicionar mais um campo nos inserts (que é a data atual – now() ) Linha 58 :- $query = "INSERT INTO `fail2ban` values ('', '".$name."', '".$protocol."', '".$port."', '".$ip."', '1', '".$geoip->longitude."', '".$geoip->latitude."', '".$geoip->country_code."', '".$geoip->city.", ".$geoip->country_name."', NOW())"; Linha 61:- $query = "INSERT INTO `fail2ban` values ('', '".$name."', '".$protocol."', '".$port."', '".$ip."', '1', '', '', '', '', NOW())";
  • 10.
    Fail2ban • Pressupondo queo Fail2ban está corretamente configurado, a única alteração para este efeito (usar o fail2sql) será adicionar a linha abaixo identificada no ficheiro de configuração da ação do iptables: ex. /etc/fail2ban/action.d/iptables.conf actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype> //esta linha supostamente já deve existir /usr/share/fail2ban/fail2sql/bin/fail2sql <name> <protocol> <port> <ip> //esta deve ser adicionada Esta linha deve ser customizada de acordo com a directoria de instalação do fail2sql (ver página Fail2sql - install) • Restart fail2ban service
  • 11.
    NOTA: Nesta fase, osIPs banidos pelo fail2ban já devem estar a ser inseridos na base de dados mysql. Se isso não acontecer, rever as configurações de acesso à BD mysql no script fail2sql e rever as configurações do fail2ban (iptables action) /etc/fail2ban/action.d/iptables.conf
  • 12.
    Google maps Para poderusar os mapas Google, temos de criar em primeiro lugar, uma chave de API: 1º go to https://console.developers.google.com/project 2º criar novo projeto 3º No menu de APIs e autenticação, escolher “Credenciais” 4º e depois criar “Chave para aplicativos do navegador” Será esta chave que deve ser usada na linha 8 do index.php (script PHP do fail2ban-geo) <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&sensor=false"></script>
  • 13.
  • 14.
    Fail2ban-geo - install Downloaddos ficheiros do fail2ban-geo (chamei-lhe assim, mas o autor chama-lhe banhammer). http://static.byteme.org.uk/banhammer.tar.gz Extrair todos os ficheiros para uma área do apache (dentro da zona publica - html) tar –zxvf banhammer.tar.gz mv banhammer/* /var/www/html/fail2ban-geo/ Neste caso a minha pasta de instalação vai ser : /var/www/html/fail2ban-geo/ e o endereço de acesso http://nome_do_servidor/fail2ban-geo
  • 15.
    Fail2ban-geo – customize Editarindex.php e adicionar a chave do Google: Depois de criar “Chave para aplicativos do navegador” no google temos de adicionar esta chave na linha 8 do index.php (script PHP do fail2ban-geo) <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&sensor=false"></script> Nota: Qualquer erro que aconteça ao gerar o mapa do Google pode estar relacionado com este ponto.
  • 16.
    Fail2ban-geo – customize Editdbinfo.php <?php //aconselho a adicionar php a seguir ao <? para evitar erros por causa dos short tags do php.ini. O autor tinha apenas <? $db_host = '127.0.0.1'; //ip do servidor de mysql (pode nao ser o mesmo do apache) $db_user = 'fail2ban_user'; $db_pwd = ‘change_password'; $database = 'fail2ban'; $table = 'fail2ban'; ?>
  • 17.
    Fail2ban-geo – customize Editgetmarkers.php Como eu adicionei um campo (timestamp) na BD Myssql, com a data na qual este IP foi banido, vou configurar o meu sistema para apenas mostrar o mapa com as localizações dos ataques dos últimos 3 dias: $query = "SELECT * FROM $table WHERE timestamp >= ( CURDATE() - INTERVAL 3 DAY )"; Adicionei a esta query a condição WHERE timestamp >= ( CURDATE() - INTERVAL 3 DAY )"; para ver no mapa apenas os ultimos 3 dias. Caso contrário o mapa ficava muito preenchido e ilegível.
  • 18.
    Fail2ban-geo – customize Editmaps.js Uma informação que para mim é importante na alálise das tentativas de acesso indevido é saber qual o ISP (Internet Service Provider) de onde vêm os ataques. Uma forma muito simples, mas eficaz, é usar um outro serviço (o db-ip.com): Assim sendo, no mapa produxido pelo maps.js alterei a linha, adicionando um link novo: var html = "<b>" + type+ " ATTACK" + "</b><br />"+name + "<br/><a href='https://db-ip.com/" + address + "'>Mais INFO " + "</a> ou <a href='http://whois.domaintools.com/" + address + "'> WHOIS</a> sobre </a>" + address; O efeito que se consegue é este e ao clickar nos links, temos toda a informação que precisamos ->
  • 19.