SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLLeonardo Cezar
 
Temperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper UsbTemperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper UsbThiago Santos
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Fabrízio Mello
 
Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]João Augusto
 
Apache2+PHP5+PostgreSQL no Linux
Apache2+PHP5+PostgreSQL no LinuxApache2+PHP5+PostgreSQL no Linux
Apache2+PHP5+PostgreSQL no LinuxVictor Eloy
 
Linux - Instalação de Programas
Linux - Instalação de ProgramasLinux - Instalação de Programas
Linux - Instalação de ProgramasFrederico Madeira
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6Wagner Bianchi
 
Project HA
Project HAProject HA
Project HAKarpv
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cactiIsraelCunha
 
Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory gigadrop
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoThiago Paes
 
CACTI: Monitoramento Inteligente de Redes - Gabriel Stein
CACTI: Monitoramento Inteligente de Redes - Gabriel SteinCACTI: Monitoramento Inteligente de Redes - Gabriel Stein
CACTI: Monitoramento Inteligente de Redes - Gabriel SteinTchelinux
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppetpericles_junior
 

Mais procurados (20)

Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQL
 
Temperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper UsbTemperatura Zabbix Procedimento Temper Usb
Temperatura Zabbix Procedimento Temper Usb
 
Mysql Replication
Mysql ReplicationMysql Replication
Mysql Replication
 
Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010Oficina postgresql basico_consegi2010
Oficina postgresql basico_consegi2010
 
Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]Automatizar backup no pf sense [dica]
Automatizar backup no pf sense [dica]
 
Cacti
CactiCacti
Cacti
 
Apache2+PHP5+PostgreSQL no Linux
Apache2+PHP5+PostgreSQL no LinuxApache2+PHP5+PostgreSQL no Linux
Apache2+PHP5+PostgreSQL no Linux
 
Squid
SquidSquid
Squid
 
Zabbix livro para ubuntu
Zabbix livro para ubuntuZabbix livro para ubuntu
Zabbix livro para ubuntu
 
Apache
ApacheApache
Apache
 
Linux - Instalação de Programas
Linux - Instalação de ProgramasLinux - Instalação de Programas
Linux - Instalação de Programas
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6
 
Project HA
Project HAProject HA
Project HA
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cacti
 
Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory
 
Yaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensãoYaf - Um framework que roda sob uma extensão
Yaf - Um framework que roda sob uma extensão
 
Proftpd
ProftpdProftpd
Proftpd
 
CACTI: Monitoramento Inteligente de Redes - Gabriel Stein
CACTI: Monitoramento Inteligente de Redes - Gabriel SteinCACTI: Monitoramento Inteligente de Redes - Gabriel Stein
CACTI: Monitoramento Inteligente de Redes - Gabriel Stein
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppet
 
I educar-manual-de-instalaao
I educar-manual-de-instalaaoI educar-manual-de-instalaao
I educar-manual-de-instalaao
 

Semelhante a Mapa de ataques com geolocalização dos IPs usando Fail2ban, Fail2sql e Google Maps

Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...
Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...
Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...Aécio Pires
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Tutorial - Cloud Computing Primeiros Acessos Linux
Tutorial - Cloud Computing Primeiros Acessos LinuxTutorial - Cloud Computing Primeiros Acessos Linux
Tutorial - Cloud Computing Primeiros Acessos LinuxTecla Internet
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLgsroma
 
KIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel SteinKIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel SteinTchelinux
 
KIWI: Leve o openSUSE para todos os lugares
KIWI: Leve o openSUSE para todos os lugaresKIWI: Leve o openSUSE para todos os lugares
KIWI: Leve o openSUSE para todos os lugareselliando dias
 
KIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel SteinKIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel SteinTchelinux
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Felipe Blini
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosFernando Mercês
 
FLISOL 2014 - Banco de dados Firebird rodando em CentOS - Faceca
FLISOL 2014 - Banco de dados Firebird rodando em CentOS - FacecaFLISOL 2014 - Banco de dados Firebird rodando em CentOS - Faceca
FLISOL 2014 - Banco de dados Firebird rodando em CentOS - FacecaMárcio Henrique da Silva
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
Linux - Servidor de FTP VSFTPD
Linux - Servidor de FTP VSFTPDLinux - Servidor de FTP VSFTPD
Linux - Servidor de FTP VSFTPDFrederico Madeira
 

Semelhante a Mapa de ataques com geolocalização dos IPs usando Fail2ban, Fail2sql e Google Maps (20)

Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...
Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...
Instalação do Squid3 através da compilação do código fonte no Ubuntu 12.04/14...
 
GlusterFs
GlusterFsGlusterFs
GlusterFs
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Tutorial - Cloud Computing Primeiros Acessos Linux
Tutorial - Cloud Computing Primeiros Acessos LinuxTutorial - Cloud Computing Primeiros Acessos Linux
Tutorial - Cloud Computing Primeiros Acessos Linux
 
ZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQLZEO/RelStorage/PostgreSQL
ZEO/RelStorage/PostgreSQL
 
KIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel SteinKIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
 
KIWI: Leve o openSUSE para todos os lugares
KIWI: Leve o openSUSE para todos os lugaresKIWI: Leve o openSUSE para todos os lugares
KIWI: Leve o openSUSE para todos os lugares
 
KIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel SteinKIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
KIWI: Leve o openSUSE para todos os lugares - Gabriel Stein
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
Tutorial beagleboard
Tutorial beagleboardTutorial beagleboard
Tutorial beagleboard
 
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
Monitoramento de serviços com Zabbix + Grafana + Python - Marcelo Santoto - D...
 
Asterisk
AsteriskAsterisk
Asterisk
 
Criando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutosCriando um site com LAMP e Joomla em 30 minutos
Criando um site com LAMP e Joomla em 30 minutos
 
Aula 2
Aula 2Aula 2
Aula 2
 
Unidade5 roteiro
Unidade5 roteiroUnidade5 roteiro
Unidade5 roteiro
 
FLISOL 2014 - Banco de dados Firebird rodando em CentOS - Faceca
FLISOL 2014 - Banco de dados Firebird rodando em CentOS - FacecaFLISOL 2014 - Banco de dados Firebird rodando em CentOS - Faceca
FLISOL 2014 - Banco de dados Firebird rodando em CentOS - Faceca
 
Unidade5 roteiro
Unidade5 roteiroUnidade5 roteiro
Unidade5 roteiro
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Linux - Servidor de FTP VSFTPD
Linux - Servidor de FTP VSFTPDLinux - Servidor de FTP VSFTPD
Linux - Servidor de FTP VSFTPD
 

Mapa de ataques com geolocalização dos IPs usando Fail2ban, Fail2sql e Google Maps

  • 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 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
  • 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 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
  • 7. 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());
  • 8. 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.
  • 9. 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())";
  • 10. 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
  • 11. 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
  • 12. 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>
  • 14. 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
  • 15. 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.
  • 16. 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'; ?>
  • 17. 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.
  • 18. 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 ->