Ir para conteúdo
meebo

Todas Atividades

Atualizada automaticamente     

  1. Earlier
  2. Veja na placa de rede sem fio do computador se o ip ta estático, se tiver marque as duas opções de ip automatico.
  3. O Meu estava assim levei em uma assistência técnica.
  4. Tenta conseguir uma bateria para testar, se for é comprar uma.
  5. PoOde ser o Touch que já está gasto de mais Cleber ou algum problema interno, o tecnico e que vai dizer.
  6. Problema no sistema Karine, leva em uma assistência de sua confiança para reinstalar a ROM.
  7. Pode ter soltado o flat interno Igor, leva em uma assistência para o pessoal abrir.
  8. Igor

    Meu Nokia lumia 925 não quer ligar

    Veja se tem como levar ele em uma assistência para ver se não está passando energia Igor.
  9. Igor

    J5 sem conexão de rede vivo tim claro e oi

    Pode ser problema de rompimento de trilha, revisa elas aí.
  10. O Cabo de dados é original Luma, tem alguns cabos que não reconhece mesmo.
  11. Igor

    Meu Moto g3 não sai do logo da Motorola

    Problema de loop, só levando em uma assistência para eles reinstalar a ROM.
  12. Provavel problema na placa Leo, leva em uma autorizada para tirar a dúvida
  13. O Seguinte, eu estou usando powerbeam m5 400 desde o ano para um micropop em uma área urbana barulhenta. Eu sou o único WISP para o tempo em área com uso limitado do espectro devido ao problema de conformidade do governo. A distância p2p entre PBM5 é de cerca de 900 metros e estou chegando a 50mbps para baixo 20mbps durante os horários de pico. Agora o micropop parece estar sobrecarregado e até 70% dos clientes em 40 estão usando velocidade de até 4mbps para baixo 2mbps de upload cada em horários de pico. Estou enfrentando altos pings e alguns problemas de transmissão de dados durante os horários de pico. Minha pergunta é se eu substituir o powerbeam por um Rocket M5 usando o prato RD5G30, devo facilmente obter 100mbps de download e 100 até mesmo em horários de pico? veja abaixo a captura de tela da configuração do powerbeam, e aí?
  14. Oque me indica para comprar preciso fazer um um ponto de acesso no estilo ISP ponto-a-multiponto PtMP.
  15. Novidades! A versão 2.8 do SwOS foi lançada http://www.mikrotik.com/download O que há de novo na v2.8: *) CRS317: links fixos não aparecem após falha de energia; *) CRS317: adicionou informações extras sobre a saúde do FAN e PSU; *) CRS317: balanceamento de carga fixo sobre links agregados; *) CRS317: aumento do tamanho da fila por porta; *) CRS328-24P-4S +: fazer o trabalho de FAN; *) CRS328-24P-4S +: acrescentou informações extras sobre saúde; *) CRS328-24P-4S +: não energiza as saídas PoE na reinicialização; *) CRS328-24P-4S +: ajuste adicional do nível de tensão; *) CRS328-24P-4S +: fazer o trabalho da porta SFP3; *) CRS328-24P-4S +: expõe o status da porta PoE via SNMP; *) CRS328-4C-20S-4S +: fazer o trabalho de FAN; *) CRS328-4C-20S-4S +: adicionado informação extra sobre saúde; *) CSS106: expor o status da porta PoE via SNMP; *) CSS106: sempre tira o cabeçalho VLAN nas portas com o modo VLAN desabilitado; *) CSS106: faça o acesso ao trabalho do SwOS através da VLAN 1, coloque o cabeçalho vlan nas respostas; *) CSS106: não faça tag vlist RSTP BPDU, faz o RSTP funcionar com RouterOS; *) CSS106: encaminhar mensagens de consulta IGMP, mesmo quando a detecção de IGMP está desabilitada; *) fazer o trabalho de espionagem PPPoE e DHCP no CRS326 e CRS328; *) CRS326 & CRS328: fazer a regra de ACL removida parar de funcionar; *) CRS326 e CRS328: aprende endereços MAC, mesmo redirecionando pacotes do ACL; *) CRS326 & CRS328 & CRS317: adicionado modo estrito de VLAN; *) se "Allow From VLAN" for especificado, faça com que os pacotes de descoberta o usem; *) fazer o cliente DHCP funcionar com servidores DHCP não compatíveis com RFC; *) não permitem criar várias VLANs com o mesmo id; *) fornecer informações de saúde (temperatura, velocidade do ventilador, estado de psu) via SNMP; *) fornecer informações sobre a porta SFP via SNMP; *) use contadores de 64 bits na guia Estatísticas para contabilização de bytes; mais informações no site http://www.mikrotik.com/download
  16. Estou precisando comprar uma CRS317 alguem me indica onde ou se tem alguma informação.
  17. Salve gente, usar o Splunk para monitorar e representar graficamente vários dados de nossos MikroTik Routers é uma maneira agradável e gratuita de ajudá-lo a mostrar o que está acontecendo em sua rede. O Splunk é de uso gratuito para loggin até 500MB por dia. O que há de novo Muita coisa mudou desde a versão anterior. Tanto que é melhor substituir todos os arquivos MikroTik no servidor Splunk em vez de tentar atualizar os arquivos. Antes de os dados serem coletados de três maneiras. 1. Syslog 2. SNMP 3. Scripts (remote) O problema com o SNMP é que você precisa adicionar uma configuração duplicada no Syslog para manipular cada caixa que você monitora. Problema com o script é que você precisa configurar um trabalho no servidor Splunk que hospede o SSH em cada caixa para obter dados. As ferramentas de script não registraram o IP do host, então você não sabia de onde vinham os dados da caixa. O SNMP e o Scipts foram removidos e mudam o inn para um script local no roteador que envia os dados necessários para o Splunk usando o Syslog. Dessa forma, todos os dados são marcados corretamente e você sabe de qual roteador você obtém dados. Mude o log # 2.0 # Removido o script de contabilização do Splunk e mova o get do data inn para o script do Mikrotik # Removido toda a requisição do SNMP desde que seu host tenha sido removido # Remove traps SNMP. Não usado # Atualizado "Mikrotik DHCP pool information" para usar syslog # Atualizado "MikroTik Traffic" para usar syslog # Atualizado "MikroTik uPnP" para usar syslog # Atualizado "MikroTik Volt / Temperature" "Pedido Mikrotik DHCP" # Updaded para mostrar DHCP gráfica pedido # Adicionado "Recursos MikroTik" mostrando HDD / memória / CPU # Adicionado acolhimento a todos dashboard (para lidar com registros de Routers de maio, no mesmo tempo) # Adicionado "MikroTik Uptime" view # 2.1 # Corrigido erro de digitação em "MikroTik DNS request" # Corrigido erro eval em "MikroTik Traffic" # Removido busca usado localmente em "MikroTik DNS Live uso" # Removido não necessário linha SED de props.conf Instalação em seu PC (Windows / Linux) ----------------------------------- Baixe e instale o Splunk (Windows ou Linux (recomendado)) Alterar para livre grupo de licenças . Muito importante para fazer antes de 30 dias de uso. !!!!!!!!! Web gui: Configurações-> licenciamento-> Alterar grupo de licença-> Livre licnse-> Salvar o Firewall do Windows aberto para UDP no Windows (No linux não está bloqueado) Web gui: Iniciar-> digite "adv" -> Selecione: Widows Firewall com Segurança Avançada-> Regras de entrada da Sect-> Clique com o botão direito do mouse em "Regras de entrada"> Nova regra-Porta-Próximo-> UDP-> Portas locais específicas-> 514-> Próxima-> Próxima-> Próxima-> Nome "syslog" Permitir UDP 514 (syslog) Web gui: Configuração-> Datainputs-> Adicionar novo (por trás do UDP) -> Porta 514-> Próximo-> Syscetype tipo syslog e selecione syslog-> Próximo-Enviar Baixar o arquivo zip: MikroTik2.1.zip Extraia-o com todas as suas pastas e copie-as para% Splunk home% / etc / app No Windows normalmente seria assim: C: \ Arquivos de Programas \ Splunk \ etc \ apps \ MikroTik E no Linux: / opt / splunk / etc / apps / MikroTik Reinicie o Splunk depois de ter adicionado os arquivos: Web gui: Configurações-> Controles do servidor-> Reiniciar o Splunk no seu MikroTik Router --------------------- -------- Syslog Você precisa fazer o seu roteador capaz de enviar mensagens Syslog. Web gui: Sistema-> Registro-> Ação-> Adicionar Novo-> Nome (nome do seu servidor) -> Tipo: Remoto-> Endereço Remoto: ip seu syslog-> Ok Cli /system logging action add name=my_server target=remote remote=192.168.1.50 remote-port=514 Em seguida, selecione o que registrar. Eu sugiro que você envie todos os logs do DHCP, incluindo debug e todos os outros logs que não são de depuração. É muito importante nomear o prefixo como " MikroTik " e não " mikrotik " ou outro. O Splunk usa o prefixo MikroTik para descobrir que tipo de dados do syslog estão chegando a ele. Web gui: Sistema-> Registro-> Regras-> Adicionar novo-> Tópicos: dhcp-> Prefixo: MikroTik-> ação: seu servidor syslog-> Sistema Ok-> Registro-> Regras-> Adicionar novo-> Tópicos:! debug-> Prefixo: MikroTik-> action: seu servidor syslog-> Ok Cli: /system logging add action=test prefix=MikroTik topics=dhcp /system logging add action=test prefix=MikroTik topics=!debugSelecione o que registrar Para registrar as regras do Firewall e Nat, você precisa ativar o registro e adicionar o Prefixo do registro (sob ação). Inicie toda a regra de firewall que você deseja registrar com o FW_ e, em seguida, o que ela faz, como essa FW_Block_user_in_blocked_list . O mesmo com as regras Nat, inicie com NAT_ assim: NAT_RDP ou NAT_Minecraft Você deve pelo menos registrar esta regra "defconf: dropar todos não vindos da LAN" com este prefixo: FW_Drop_all_from_WAN Web gui: IP-> Firewall-> selec: defconf: drop tudo não vindo de LAN-> Log: v-> Prefixo de Log: FW_Drop_all_from_WAN Isto irá preencher a visão de ataque do MikroTik Live . Contabilidade Para obter dados contábeis, você precisa ativá-lo no roteador MikroTik. ( Painel de controle do MikroTik Traffic ) Web gui: IP-> Contabilidade -> Ativar Contabilidade -> mark Threshould: 2560 OK Cli: /ip accounting set enabled=yes threshold=2560Script Para obter todos os outros dados, como Contabilidade de tráfego, uPnP, Integridade do sistema, Recursos do sistema e Informações do pool DHCP, você precisa deste script no MikroTik. Precisa ser nomeado: Data_to_Splunk_using_Syslog# This script is used to send data to Splunk using syslog. # Collect accounting traffic # ---------------------------------- # Take a snapshoot /ip accounting snapshot take # Send data to loggin server foreach logline in=[/ip accounting snapshot find] do={:log info message="$[/ip accounting snapshot print as-value from=$logline]"} # Finding dynmaic lines used in uPnP # ---------------------------------- :foreach logline in=[/ip firewall nat find dynamic=yes] do={:log info message="$[/ip firewall nat print as-value from=$logline]"}; # Collect system resource # ---------------------------------- :local freemem ([/system resource get free-memory]/1000000); :local totmem ([/system resource get total-memory]/1000000); :local freehddspace ([/system resource get free-hdd-space]/1000000); :local totalhddspace ([/system resource get total-hdd-space]/1000000); :local cpuload ([/system resource get cpu-load]); :local up ([/system resource get uptime]); :log info message="script=resource free_memory=$freemem MB total_memory=$totmem MB free_hdd_space=$freehddspace MB total_hdd_space=$totalhddspace MB cpu_load=$cpuload uptime=$up"; # Collect system health # ---------------------------------- :local voltage ([/system health get voltage]/10); :local temperature ([/system health get temperature]); :log info message="script=health voltage=$voltage V temperature=$temperature C"; # Collect DHCP Pool information # ---------------------------------- /ip pool { :local poolname :local pooladdresses :local poolused :local minaddress :local maxaddress :local findindex :local tmpint :local maxindex # :put ("IP Pool Statistics") # :put ("------------------") # Iterate through IP Pools :foreach p in=[find] do={ :set poolname [get $p name] :set pooladdresses 0 :set poolused 0 # Iterate through current pool's IP ranges :foreach r in=[:toarray [get $p range]] do={ # Get min and max addresses :set findindex [:find [:tostr $r] "-"] :if ([:len $findindex] > 0) do={ :set minaddress [:pick [:tostr $r] 0 $findindex] :set maxaddress [:pick [:tostr $r] ($findindex + 1) [:len [:tostr $r]]] } else={ :set minaddress [:tostr $r] :set maxaddress [:tostr $r] } # Convert to array of octets (replace '.' with ',') :for x from=0 to=([:len [:tostr $minaddress]] - 1) do={ :if ([:pick [:tostr $minaddress] $x ($x + 1)] = ".") do={ :set minaddress ([:pick [:tostr $minaddress] 0 $x] . "," . \ [:pick [:tostr $minaddress] ($x + 1) [:len [:tostr $minaddress]]]) } } :for x from=0 to=([:len [:tostr $maxaddress]] - 1) do={ :if ([:pick [:tostr $maxaddress] $x ($x + 1)] = ".") do={ :set maxaddress ([:pick [:tostr $maxaddress] 0 $x] . "," . \ [:pick [:tostr $maxaddress] ($x + 1) [:len [:tostr $maxaddress]]]) } } # Calculate available addresses for current range :if ([:len [:toarray $minaddress]] = [:len [:toarray $maxaddress]]) do={ :set maxindex ([:len [:toarray $minaddress]] - 1) :for x from=$maxindex to=0 step=-1 do={ # Calculate 256^($maxindex - $x) :set tmpint 1 :if (($maxindex - $x) > 0) do={ :for y from=1 to=($maxindex - $x) do={ :set tmpint (256 * $tmpint) } } :set tmpint ($tmpint * ([:tonum [:pick [:toarray $maxaddress] $x]] - \ [:tonum [:pick [:toarray $minaddress] $x]]) ) :set pooladdresses ($pooladdresses + $tmpint) # for x } # if len array $minaddress = $maxaddress } # Add current range to total pool's available addresses :set pooladdresses ($pooladdresses + 1) # foreach r } :set poolused [:len [used find pool=[:tostr $poolname]]] # Send data # :log info message=("pool=" . $poolname . " used=" . $poolused . " total=" . $pooladdresses) :log info message=("script=pool pool=$poolname used=$poolused total=$pooladdresses") # foreach p } # /ip pool } Se tiver alguma dúvida é só perguntar.
  18. Visitante

    Tenhu uma dúvida de TR069 FreeACS e Genieacs

    O Negócio é o seguinte, eu tinha conseguido um servidor freeacs online, trabalhando e fazendo o que eu precisava. Só não foi realmente impressionar com o GUI e a interação, eu agora tenho um GeneCeacs online e trabalhando, no entanto, eu não posso conseguir fazer o que eu quero. Eu estou tentando desativar uma porta. Quando eu faço isso o gui eu recebo e cmwp.9002 código de erro, para ter certeza de que funcionou, tentei renomear o ssid e isso funcionou, então eu acredito que minha caixa está configurada corretamente. Eu só consigo desabilitar uma porta, na verdade, quando olhando para tudo o que vejo é a interface 1. Eu não vejo minha conexão vpn clinet como uma interface que é o único que eu quero desativar / ativar, podem me ajudar.
  19. Visitante

    Tem como juntar duas sub-redes no Mikriotik

    Pessoal veja se é possivel: ether1 = wan ether2 = wan2 ether3 = wan3 ether4 = LAN => 192.168.1.254/24 ether5 = LAN2 => 192.168.2.254/24 O que devo fazer para ver o host da LAN na LAN2 e LAN2 na LAN Não sei como faço.
  20. Visitante

    Autenticar roteador na rede com pppoe e hotspot

    Olá alguem sabe se é possível autenticar um roteador na rede via pppoe, mas sem liberar o acesso à internet para os dispositivos conectados a ele, o roteador conectado via pppoe recebe e libera acesso ao hotspot de rede para as estações conectadas a ele alguem pode me responder.
  21. Atualização 7-Dezembro-2017 Para quem não quer mexer com o MySQL, adicionei o fast2mikrotik.php que lerá os eventos do suricata do fast.log e criará as regras do firewall. Atualização de 26 de novembro de 2017 Consulte meu post Análise de endereço IP histórico para prevenção de invasões sobre como o histórico de eventos pode ser usado para identificar grupos de ofensores freqüentes e criar regras de firewall para evitar que esses criminosos freqüentes acessem sua rede. Atualizado em 10 de março de 2017 A lista de assinaturas que eu uso, agora são 51 assinaturas. O suricata_block.php foi atualizado para reconstruir a lista de endereços bloqueados após a reinicialização do Mikrotik (por exemplo, atualização de firmware). Ao atualizar o firmware no roteador, pare o processo suricata_block, execute a atualização e inicie o processo suricata_block. A lista de endereços bloqueados será repovoada Atualizado em 9 de abril de 2017 Adicionado na funcionalidade OSSEC IPS (após a seção suricata) Atualizado em 27 de abril de 2017 Adicionado função de notificação por email em suricata_block.php Atualizado em 6 de junho de 2017 Esquema de banco de dados snort / snorby incluído Atualizado em 19 de junho de 2017 bug fixo no mikrotik-fw.sh para resposta ativa ossec Já vi alguns posts neste fórum pedindo integração de um IDS / IPS na plataforma Mikrotik. Embora isso seja conveniente, acho que os argumentos apresentados são muito convincentes. Como Robert Penz apontou em seu blog ( http://robert.penz.name/849/howto-setup ... ta-as-ids / ) é muito fácil configurar um roteador Mikrotik para transmitir os pacotes para um Plataforma IDS (suricata / snort). A parte que está faltando neste cenário é a parte IPS da solução. Para implementar um IPS, os alertas que o IDS sinaliza precisam modificar as regras do firewall para bloquear o tráfego ofensivo. Neste artigo, vou fazer o layout do que fiz para introduzir uma solução IPS no mix. Minha instalação do IDS para minha extensa rede doméstica é bastante direta. É uma implementação do Suricata da usina, usando o conjunto de regras Emergência de Ameaças, que, quando disparadas, são levadas do formato Unified2 para um banco de dados MySQL usando o barnyard2. Eu uso o Aanval como meu console para monitorar alertas. Minha plataforma Suricata é um Solid Run CuBox I4 (braço quádruplo, 4gb de memória, Debian Jessie) e um disco rígido de 1TB (um exagero, mas eram peças de reposição) conectado via eSata. Eu tenho isso diretamente conectado a uma das portas no meu RB2011UiAS-IN. Configuração do Mikrotik Aqui estão os passos que você pode seguir no lado do Mikrotik da equação IPS. 1. Transmitir pacotes para a plataforma IDS (CuBox no meu caso): /tool sniffer set filter-interface=ether1 filter-ip-address=!1.2.3.4/32 filter-stream=yes streaming-enabled=yes streaming-server=192.168.3.12 Eu filtro um endereço remoto específico (neste exemplo de 1.2.3.4), pois esse tráfego é um túnel IP site a site e realmente não precisa ser verificado pelo IDS. 2. Configure regras de firewall para bloquear o tráfego de entrada e saída com base em uma lista de endereços: /ip firewall add action=drop chain=input comment="Block bad actors" src-address-list=Blocked /ip firewall add action=drop chain=forward comment="Drop any traffic going to bad actors" dst-address-list=Blocked Eu tenho a regra da cadeia de entrada como a primeira regra depois de qualquer regra padrão criada pelo Mikrotik. Semelhante à regra da cadeia para frente. 3. Ative a interface da API: /ip service set api address=192.168.3.0/24 enabled=yes A API será usada para gravar a lista de endereços de volta ao Mikrotik. Temos certeza de que só é acessível a partir da rede interna. Configuração da plataforma do IDS, modificações do MySQL ** Se você não quer mexer com o MySQL e o barnyard2, pule para a seção intitulada fast2mikrotik.php ** Os alertas são movidos do formato Unified2 para um banco de dados MySQL usando o barnyard2. Há muitos exemplos na Web sobre como fazer isso. O esquema que está sendo usado para o banco de dados é o esquema padrão snort / snorby. O esquema está incluído aqui para aqueles que querem criá-lo manualmente, em vez de usar o método snort / snorby. -- phpMyAdmin SQL Dump SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; -- -- Database: `snorby` -- CREATE DATABASE IF NOT EXISTS `snorby` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; USE `snorby`; -- -------------------------------------------------------- -- -- Table structure for table `agent_asset_names` -- DROP TABLE IF EXISTS `agent_asset_names`; CREATE TABLE `agent_asset_names` ( `sensor_sid` int(10) UNSIGNED NOT NULL, `asset_name_id` int(10) UNSIGNED NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Stand-in structure for view `aggregated_events` -- (See below for the actual view) -- DROP VIEW IF EXISTS `aggregated_events`; CREATE TABLE `aggregated_events` ( `ip_src` int(10) unsigned ,`ip_dst` int(10) unsigned ,`signature` int(10) unsigned ,`event_id` int(11) ,`number_of_events` bigint(21) ); -- -------------------------------------------------------- -- -- Table structure for table `asset_names` -- DROP TABLE IF EXISTS `asset_names`; CREATE TABLE `asset_names` ( `id` int(10) UNSIGNED NOT NULL, `ip_address` int(10) UNSIGNED NOT NULL DEFAULT '0', `name` varchar(1024) NOT NULL, `global` tinyint(1) DEFAULT '1' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `block_queue` -- DROP TABLE IF EXISTS `block_queue`; CREATE TABLE `block_queue` ( `que_id` int(11) NOT NULL, `que_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the block was added', `que_ip_adr` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT 'The IP address to block', `que_timeout` varchar(12) CHARACTER SET utf8 NOT NULL COMMENT 'How long to block for', `que_sig_name` varchar(256) CHARACTER SET utf8 NOT NULL COMMENT 'The name of the signature that caused the block', `que_sig_gid` int(10) NOT NULL COMMENT 'The signature group ID', `que_sig_sid` int(10) NOT NULL COMMENT 'The signature ID', `que_event_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'When the event was triggered', `que_processed` int(11) NOT NULL DEFAULT '0' COMMENT 'If this item has been processed (0=no, <>0=yes)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Queue of ip addresses to block on firewall'; -- -------------------------------------------------------- -- -- Table structure for table `caches` -- DROP TABLE IF EXISTS `caches`; CREATE TABLE `caches` ( `id` int(10) UNSIGNED NOT NULL, `sid` int(11) DEFAULT NULL, `cid` int(11) DEFAULT NULL, `ran_at` datetime DEFAULT NULL, `event_count` int(11) DEFAULT '0', `tcp_count` int(11) DEFAULT '0', `udp_count` int(11) DEFAULT '0', `icmp_count` int(11) DEFAULT '0', `severity_metrics` mediumtext, `signature_metrics` mediumtext, `src_ips` mediumtext, `dst_ips` mediumtext, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `classifications` -- DROP TABLE IF EXISTS `classifications`; CREATE TABLE `classifications` ( `id` int(10) UNSIGNED NOT NULL, `name` varchar(50) DEFAULT NULL, `description` text, `hotkey` int(11) DEFAULT NULL, `locked` tinyint(1) DEFAULT '0', `events_count` int(11) DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `data` -- DROP TABLE IF EXISTS `data`; CREATE TABLE `data` ( `sid` int(10) UNSIGNED NOT NULL, `cid` int(10) UNSIGNED NOT NULL, `data_payload` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `delayed_jobs` -- DROP TABLE IF EXISTS `delayed_jobs`; CREATE TABLE `delayed_jobs` ( `id` int(10) UNSIGNED NOT NULL, `priority` int(11) DEFAULT '0', `attempts` int(11) DEFAULT '0', `handler` text, `run_at` datetime DEFAULT NULL, `locked_at` datetime DEFAULT NULL, `locked_by` text, `failed_at` datetime DEFAULT NULL, `last_error` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `detail` -- DROP TABLE IF EXISTS `detail`; CREATE TABLE `detail` ( `detail_type` int(10) UNSIGNED NOT NULL, `detail_text` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `encoding` -- DROP TABLE IF EXISTS `encoding`; CREATE TABLE `encoding` ( `encoding_type` int(10) UNSIGNED NOT NULL, `encoding_text` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `event` -- DROP TABLE IF EXISTS `event`; CREATE TABLE `event` ( `sid` int(10) UNSIGNED NOT NULL, `cid` int(10) UNSIGNED NOT NULL, `signature` int(10) UNSIGNED DEFAULT NULL, `classification_id` int(10) UNSIGNED DEFAULT NULL, `users_count` int(10) UNSIGNED DEFAULT '0', `user_id` int(10) UNSIGNED DEFAULT NULL, `notes_count` int(10) UNSIGNED DEFAULT '0', `type` int(10) UNSIGNED DEFAULT '1', `number_of_events` int(10) UNSIGNED DEFAULT '0', `timestamp` datetime DEFAULT NULL, `id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Stand-in structure for view `events_with_join` -- (See below for the actual view) -- DROP VIEW IF EXISTS `events_with_join`; CREATE TABLE `events_with_join` ( `sid` int(10) unsigned ,`cid` int(10) unsigned ,`signature` int(10) unsigned ,`classification_id` int(10) unsigned ,`users_count` int(10) unsigned ,`user_id` int(10) unsigned ,`notes_count` int(10) unsigned ,`type` int(10) unsigned ,`number_of_events` int(10) unsigned ,`timestamp` datetime ,`id` int(11) ,`ip_src` int(10) unsigned ,`ip_dst` int(10) unsigned ,`sig_priority` int(10) unsigned ,`sig_name` text ); -- -------------------------------------------------------- -- -- Table structure for table `favorites` -- DROP TABLE IF EXISTS `favorites`; CREATE TABLE `favorites` ( `id` int(10) UNSIGNED NOT NULL, `sid` int(11) DEFAULT NULL, `cid` int(11) DEFAULT NULL, `user_id` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `icmphdr` -- DROP TABLE IF EXISTS `icmphdr`; CREATE TABLE `icmphdr` ( `sid` int(10) UNSIGNED NOT NULL, `cid` int(10) UNSIGNED NOT NULL, `icmp_type` int(10) UNSIGNED DEFAULT NULL, `icmp_code` int(10) UNSIGNED DEFAULT NULL, `icmp_csum` int(10) UNSIGNED DEFAULT NULL, `icmp_id` int(10) UNSIGNED DEFAULT NULL, `icmp_seq` int(10) UNSIGNED DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `iphdr` -- DROP TABLE IF EXISTS `iphdr`; CREATE TABLE `iphdr` ( `sid` int(11) NOT NULL, `cid` int(11) NOT NULL, `ip_src` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_dst` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_ver` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_hlen` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_tos` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_len` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_id` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_flags` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_off` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_ttl` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_proto` int(10) UNSIGNED NOT NULL DEFAULT '0', `ip_csum` int(10) UNSIGNED NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `lookups` -- DROP TABLE IF EXISTS `lookups`; CREATE TABLE `lookups` ( `id` int(10) UNSIGNED NOT NULL, `title` varchar(50) DEFAULT NULL, `value` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `notes` -- DROP TABLE IF EXISTS `notes`; CREATE TABLE `notes` ( `id` int(10) UNSIGNED NOT NULL, `sid` int(11) DEFAULT NULL, `cid` int(11) DEFAULT NULL, `user_id` int(11) DEFAULT NULL, `body` text, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `notifications` -- DROP TABLE IF EXISTS `notifications`; CREATE TABLE `notifications` ( `id` int(10) UNSIGNED NOT NULL, `description` text, `sig_id` int(11) DEFAULT NULL, `ip_src` varchar(50) DEFAULT NULL, `ip_dst` varchar(50) DEFAULT NULL, `user_id` int(11) DEFAULT NULL, `user_ids` mediumtext, `sensor_ids` mediumtext, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `opt` -- DROP TABLE IF EXISTS `opt`; CREATE TABLE `opt` ( `sid` int(10) UNSIGNED NOT NULL, `cid` int(10) UNSIGNED NOT NULL, `optid` int(10) UNSIGNED NOT NULL, `opt_proto` int(10) UNSIGNED DEFAULT NULL, `opt_code` int(10) UNSIGNED DEFAULT NULL, `opt_len` int(10) UNSIGNED DEFAULT NULL, `opt_data` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `reference` -- DROP TABLE IF EXISTS `reference`; CREATE TABLE `reference` ( `ref_id` int(10) UNSIGNED NOT NULL, `ref_system_id` int(10) UNSIGNED DEFAULT NULL, `ref_tag` text ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `reference_system` -- DROP TABLE IF EXISTS `reference_system`; CREATE TABLE `reference_system` ( `ref_system_id` int(10) UNSIGNED NOT NULL, `ref_system_name` varchar(50) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `schema` -- DROP TABLE IF EXISTS `schema`; CREATE TABLE `schema` ( `id` int(10) UNSIGNED NOT NULL, `vseq` int(10) UNSIGNED DEFAULT NULL, `ctime` datetime DEFAULT NULL, `version` varchar(50) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `search` -- DROP TABLE IF EXISTS `search`; CREATE TABLE `search` ( `id` int(10) UNSIGNED NOT NULL, `user_id` int(11) DEFAULT NULL, `rule_count` int(11) DEFAULT '0', `public` tinyint(1) DEFAULT '0', `title` varchar(50) DEFAULT NULL, `search` mediumtext, `checksum` text, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `sensor` -- DROP TABLE IF EXISTS `sensor`; CREATE TABLE `sensor` ( `sid` int(10) UNSIGNED NOT NULL, `name` varchar(50) DEFAULT 'Click To Change Me', `hostname` text, `interface` text, `filter` text, `detail` int(10) UNSIGNED DEFAULT NULL, `encoding` int(10) UNSIGNED DEFAULT NULL, `last_cid` int(10) UNSIGNED DEFAULT NULL, `pending_delete` tinyint(1) DEFAULT '0', `updated_at` datetime DEFAULT NULL, `events_count` int(10) UNSIGNED DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `settings` -- DROP TABLE IF EXISTS `settings`; CREATE TABLE `settings` ( `name` varchar(50) NOT NULL DEFAULT '', `value` mediumtext ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `severities` -- DROP TABLE IF EXISTS `severities`; CREATE TABLE `severities` ( `id` int(10) UNSIGNED NOT NULL, `sig_id` int(10) UNSIGNED DEFAULT NULL, `events_count` int(10) UNSIGNED DEFAULT '0', `name` varchar(50) DEFAULT NULL, `text_color` varchar(50) DEFAULT '#ffffff', `bg_color` varchar(50) DEFAULT '#dddddd' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `signature` -- DROP TABLE IF EXISTS `signature`; CREATE TABLE `signature` ( `sig_id` int(10) UNSIGNED NOT NULL, `sig_class_id` int(10) UNSIGNED DEFAULT NULL, `sig_name` text, `sig_priority` int(10) UNSIGNED DEFAULT NULL, `sig_rev` int(10) UNSIGNED DEFAULT NULL, `sig_sid` int(10) UNSIGNED DEFAULT NULL, `sig_gid` int(10) UNSIGNED DEFAULT NULL, `events_count` int(10) UNSIGNED DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `sig_class` -- DROP TABLE IF EXISTS `sig_class`; CREATE TABLE `sig_class` ( `sig_class_id` int(10) UNSIGNED NOT NULL, `sig_class_name` varchar(50) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `sig_reference` -- DROP TABLE IF EXISTS `sig_reference`; CREATE TABLE `sig_reference` ( `sig_id` int(10) UNSIGNED NOT NULL, `ref_seq` int(10) UNSIGNED NOT NULL, `ref_id` int(10) UNSIGNED DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `tcphdr` -- DROP TABLE IF EXISTS `tcphdr`; CREATE TABLE `tcphdr` ( `sid` int(10) UNSIGNED NOT NULL, `cid` int(10) UNSIGNED NOT NULL, `tcp_sport` int(10) UNSIGNED DEFAULT NULL, `tcp_dport` int(10) UNSIGNED DEFAULT NULL, `tcp_seq` int(10) UNSIGNED DEFAULT NULL, `tcp_ack` int(10) UNSIGNED DEFAULT NULL, `tcp_off` int(10) UNSIGNED DEFAULT NULL, `tcp_res` int(10) UNSIGNED DEFAULT NULL, `tcp_flags` int(10) UNSIGNED DEFAULT NULL, `tcp_win` int(10) UNSIGNED DEFAULT NULL, `tcp_csum` int(10) UNSIGNED DEFAULT NULL, `tcp_urp` int(10) UNSIGNED DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `udphdr` -- DROP TABLE IF EXISTS `udphdr`; CREATE TABLE `udphdr` ( `sid` int(10) UNSIGNED NOT NULL, `cid` int(10) UNSIGNED NOT NULL, `udp_sport` int(10) UNSIGNED DEFAULT NULL, `udp_dport` int(10) UNSIGNED DEFAULT NULL, `udp_len` int(10) UNSIGNED DEFAULT NULL, `udp_csum` int(10) UNSIGNED DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Table structure for table `users` -- DROP TABLE IF EXISTS `users`; CREATE TABLE `users` ( `email` varchar(255) NOT NULL DEFAULT '', `encrypted_password` varchar(128) NOT NULL DEFAULT '', `remember_token` varchar(255) DEFAULT NULL, `remember_created_at` datetime DEFAULT NULL, `reset_password_token` varchar(255) DEFAULT NULL, `sign_in_count` int(11) DEFAULT '0', `current_sign_in_at` datetime DEFAULT NULL, `last_sign_in_at` datetime DEFAULT NULL, `current_sign_in_ip` varchar(255) DEFAULT NULL, `last_sign_in_ip` varchar(255) DEFAULT NULL, `favorites_count` int(11) DEFAULT '0', `accept_notes` int(11) DEFAULT '1', `notes_count` int(11) DEFAULT '0', `id` int(10) UNSIGNED NOT NULL, `per_page_count` int(11) DEFAULT '45', `name` varchar(50) DEFAULT NULL, `timezone` varchar(50) DEFAULT 'UTC', `admin` tinyint(1) DEFAULT '0', `enabled` tinyint(1) DEFAULT '1', `gravatar` tinyint(1) DEFAULT '1', `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, `online` tinyint(1) DEFAULT '0', `last_daily_report_at` datetime DEFAULT '2016-07-26 03:37:41', `last_weekly_report_at` int(11) DEFAULT '201630', `last_monthly_report_at` int(11) DEFAULT '201607', `last_email_report_at` datetime DEFAULT NULL, `email_reports` tinyint(1) DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Structure for view `aggregated_events` -- DROP TABLE IF EXISTS `aggregated_events`; CREATE ALGORITHM=UNDEFINED DEFINER=`snort`@`localhost` SQL SECURITY DEFINER VIEW `aggregated_events` AS select `iphdr`.`ip_src` AS `ip_src`,`iphdr`.`ip_dst` AS `ip_dst`,`event`.`signature` AS `signature`,max(`event`.`id`) AS `event_id`,count(0) AS `number_of_events` from (`event` join `iphdr` on(((`event`.`sid` = `iphdr`.`sid`) and (`event`.`cid` = `iphdr`.`cid`)))) where isnull(`event`.`classification_id`) group by `iphdr`.`ip_src`,`iphdr`.`ip_dst`,`event`.`signature` ; -- -------------------------------------------------------- -- -- Structure for view `events_with_join` -- DROP TABLE IF EXISTS `events_with_join`; CREATE ALGORITHM=UNDEFINED DEFINER=`snort`@`localhost` SQL SECURITY DEFINER VIEW `events_with_join` AS select `event`.`sid` AS `sid`,`event`.`cid` AS `cid`,`event`.`signature` AS `signature`,`event`.`classification_id` AS `classification_id`,`event`.`users_count` AS `users_count`,`event`.`user_id` AS `user_id`,`event`.`notes_count` AS `notes_count`,`event`.`type` AS `type`,`event`.`number_of_events` AS `number_of_events`,`event`.`timestamp` AS `timestamp`,`event`.`id` AS `id`,`iphdr`.`ip_src` AS `ip_src`,`iphdr`.`ip_dst` AS `ip_dst`,`signature`.`sig_priority` AS `sig_priority`,`signature`.`sig_name` AS `sig_name` from ((`event` join `iphdr` on(((`event`.`sid` = `iphdr`.`sid`) and (`event`.`cid` = `iphdr`.`cid`)))) join `signature` on((`event`.`signature` = `signature`.`sig_id`))) ; -- -- Indexes for dumped tables -- -- -- Indexes for table `agent_asset_names` -- ALTER TABLE `agent_asset_names` ADD PRIMARY KEY (`sensor_sid`,`asset_name_id`), ADD KEY `index_agent_asset_names_sensor` (`sensor_sid`), ADD KEY `index_agent_asset_names_asset_name` (`asset_name_id`); -- -- Indexes for table `asset_names` -- ALTER TABLE `asset_names` ADD PRIMARY KEY (`id`), ADD KEY `index_asset_names_ip_address` (`ip_address`); -- -- Indexes for table `block_queue` -- ALTER TABLE `block_queue` ADD PRIMARY KEY (`que_id`), ADD KEY `que_added` (`que_added`); -- -- Indexes for table `caches` -- ALTER TABLE `caches` ADD PRIMARY KEY (`id`), ADD KEY `index_caches_ran_at` (`ran_at`); -- -- Indexes for table `classifications` -- ALTER TABLE `classifications` ADD PRIMARY KEY (`id`), ADD KEY `index_classifications_id` (`id`), ADD KEY `index_classifications_hotkey` (`hotkey`), ADD KEY `index_classifications_locked` (`locked`), ADD KEY `index_classifications_events_count` (`events_count`); -- -- Indexes for table `data` -- ALTER TABLE `data` ADD PRIMARY KEY (`sid`,`cid`), ADD KEY `index_data_sid` (`sid`), ADD KEY `index_data_cid` (`cid`); -- -- Indexes for table `delayed_jobs` -- ALTER TABLE `delayed_jobs` ADD PRIMARY KEY (`id`), ADD KEY `index_delayed_jobs_run_at_priority` (`priority`,`run_at`), ADD KEY `index_delayed_jobs_locked_at` (`locked_at`); -- -- Indexes for table `detail` -- ALTER TABLE `detail` ADD PRIMARY KEY (`detail_type`), ADD KEY `index_detail_detail_type` (`detail_type`); -- -- Indexes for table `encoding` -- ALTER TABLE `encoding` ADD PRIMARY KEY (`encoding_type`), ADD KEY `index_encoding_encoding_type` (`encoding_type`); -- -- Indexes for table `event` -- ALTER TABLE `event` ADD PRIMARY KEY (`sid`,`cid`), ADD KEY `index_event_sid` (`sid`), ADD KEY `index_event_cid` (`cid`), ADD KEY `index_event_signature` (`signature`), ADD KEY `index_event_classification_id` (`classification_id`), ADD KEY `index_event_users_count` (`users_count`), ADD KEY `index_event_user_id` (`user_id`), ADD KEY `index_event_notes_count` (`notes_count`), ADD KEY `index_timestamp_cid_sid` (`timestamp`,`cid`,`sid`), ADD KEY `index_event_id` (`id`); -- -- Indexes for table `favorites` -- ALTER TABLE `favorites` ADD PRIMARY KEY (`id`), ADD KEY `index_favorites_id` (`id`), ADD KEY `index_favorites_sid` (`sid`), ADD KEY `index_favorites_cid` (`cid`), ADD KEY `index_favorites_user_id` (`user_id`); -- -- Indexes for table `icmphdr` -- ALTER TABLE `icmphdr` ADD PRIMARY KEY (`sid`,`cid`), ADD KEY `index_icmphdr_sid` (`sid`), ADD KEY `index_icmphdr_cid` (`cid`); -- -- Indexes for table `iphdr` -- ALTER TABLE `iphdr` ADD PRIMARY KEY (`sid`,`cid`), ADD KEY `index_iphdr_sid` (`sid`), ADD KEY `index_iphdr_cid` (`cid`), ADD KEY `index_iphdr_ip_src` (`ip_src`), ADD KEY `index_iphdr_ip_dst` (`ip_dst`); -- -- Indexes for table `lookups` -- ALTER TABLE `lookups` ADD PRIMARY KEY (`id`); -- -- Indexes for table `notes` -- ALTER TABLE `notes` ADD PRIMARY KEY (`id`), ADD KEY `index_notes_sid` (`sid`), ADD KEY `index_notes_cid` (`cid`), ADD KEY `index_notes_user_id` (`user_id`); -- -- Indexes for table `notifications` -- ALTER TABLE `notifications` ADD PRIMARY KEY (`id`); -- -- Indexes for table `opt` -- ALTER TABLE `opt` ADD PRIMARY KEY (`sid`,`cid`,`optid`), ADD KEY `index_opt_sid` (`sid`), ADD KEY `index_opt_cid` (`cid`), ADD KEY `index_opt_optid` (`optid`); -- -- Indexes for table `reference` -- ALTER TABLE `reference` ADD PRIMARY KEY (`ref_id`), ADD KEY `index_reference_ref_id` (`ref_id`); -- -- Indexes for table `reference_system` -- ALTER TABLE `reference_system` ADD PRIMARY KEY (`ref_system_id`), ADD KEY `index_reference_system_ref_system_id` (`ref_system_id`); -- -- Indexes for table `schema` -- ALTER TABLE `schema` ADD PRIMARY KEY (`id`), ADD KEY `index_schema_id` (`id`); -- -- Indexes for table `search` -- ALTER TABLE `search` ADD PRIMARY KEY (`id`), ADD KEY `index_search_user_id` (`user_id`), ADD KEY `index_search_rule_count` (`rule_count`), ADD KEY `index_search_public` (`public`); -- -- Indexes for table `sensor` -- ALTER TABLE `sensor` ADD PRIMARY KEY (`sid`), ADD KEY `index_sensor_sid` (`sid`), ADD KEY `index_sensor_detail` (`detail`), ADD KEY `index_sensor_encoding` (`encoding`), ADD KEY `index_sensor_last_cid` (`last_cid`), ADD KEY `index_sensor_events_count` (`events_count`); -- -- Indexes for table `settings` -- ALTER TABLE `settings` ADD PRIMARY KEY (`name`), ADD KEY `index_settings_name` (`name`); -- -- Indexes for table `severities` -- ALTER TABLE `severities` ADD PRIMARY KEY (`id`), ADD KEY `index_severities_id` (`id`), ADD KEY `index_severities_sig_id` (`sig_id`), ADD KEY `index_severities_events_count` (`events_count`), ADD KEY `index_severities_text_color` (`text_color`), ADD KEY `index_severities_bg_color` (`bg_color`); -- -- Indexes for table `signature` -- ALTER TABLE `signature` ADD PRIMARY KEY (`sig_id`), ADD KEY `index_signature_sig_id` (`sig_id`), ADD KEY `index_signature_sig_class_id` (`sig_class_id`), ADD KEY `index_signature_sig_priority` (`sig_priority`), ADD KEY `index_signature_events_count` (`events_count`); -- -- Indexes for table `sig_class` -- ALTER TABLE `sig_class` ADD PRIMARY KEY (`sig_class_id`), ADD KEY `index_sig_class_sig_class_id` (`sig_class_id`); -- -- Indexes for table `sig_reference` -- ALTER TABLE `sig_reference` ADD PRIMARY KEY (`sig_id`,`ref_seq`), ADD KEY `index_sig_reference_sig_id` (`sig_id`), ADD KEY `index_sig_reference_ref_seq` (`ref_seq`); -- -- Indexes for table `tcphdr` -- ALTER TABLE `tcphdr` ADD PRIMARY KEY (`sid`,`cid`), ADD KEY `index_tcphdr_sid` (`sid`), ADD KEY `index_tcphdr_cid` (`cid`), ADD KEY `index_tcphdr_tcp_sport` (`tcp_sport`), ADD KEY `index_tcphdr_tcp_dport` (`tcp_dport`); -- -- Indexes for table `udphdr` -- ALTER TABLE `udphdr` ADD PRIMARY KEY (`sid`,`cid`), ADD KEY `index_udphdr_sid` (`sid`), ADD KEY `index_udphdr_cid` (`cid`), ADD KEY `index_udphdr_udp_sport` (`udp_sport`), ADD KEY `index_udphdr_udp_dport` (`udp_dport`); -- -- Indexes for table `users` -- ALTER TABLE `users` ADD PRIMARY KEY (`id`), ADD KEY `index_users_favorites_count` (`favorites_count`), ADD KEY `index_users_notes_count` (`notes_count`), ADD KEY `index_users_id` (`id`), ADD KEY `index_users_per_page_count` (`per_page_count`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `asset_names` -- ALTER TABLE `asset_names` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `block_queue` -- ALTER TABLE `block_queue` MODIFY `que_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=160; -- -- AUTO_INCREMENT for table `caches` -- ALTER TABLE `caches` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1593; -- -- AUTO_INCREMENT for table `classifications` -- ALTER TABLE `classifications` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; -- -- AUTO_INCREMENT for table `delayed_jobs` -- ALTER TABLE `delayed_jobs` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4434; -- -- AUTO_INCREMENT for table `detail` -- ALTER TABLE `detail` MODIFY `detail_type` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `encoding` -- ALTER TABLE `encoding` MODIFY `encoding_type` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `event` -- ALTER TABLE `event` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=79077; -- -- AUTO_INCREMENT for table `favorites` -- ALTER TABLE `favorites` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `lookups` -- ALTER TABLE `lookups` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `notes` -- ALTER TABLE `notes` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `notifications` -- ALTER TABLE `notifications` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `reference` -- ALTER TABLE `reference` MODIFY `ref_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=35231; -- -- AUTO_INCREMENT for table `reference_system` -- ALTER TABLE `reference_system` MODIFY `ref_system_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11; -- -- AUTO_INCREMENT for table `schema` -- ALTER TABLE `schema` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; -- -- AUTO_INCREMENT for table `search` -- ALTER TABLE `search` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT for table `sensor` -- ALTER TABLE `sensor` MODIFY `sid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2; -- -- AUTO_INCREMENT for table `severities` -- ALTER TABLE `severities` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4; -- -- AUTO_INCREMENT for table `signature` -- ALTER TABLE `signature` MODIFY `sig_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=516; -- -- AUTO_INCREMENT for table `sig_class` -- ALTER TABLE `sig_class` MODIFY `sig_class_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=39; -- -- AUTO_INCREMENT for table `users` -- ALTER TABLE `users` MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;COMMIT;Novas tabelas Na minha situação, não quero que todos os alertas acionem um IPS. Eu observei meu tráfego ao longo do tempo e a grande maioria dos eventos vem de um pequeno conjunto de assinaturas de alerta. Então, a primeira coisa que faremos é configurar uma tabela (sigs_to_block) no MySQL para indicar quais categorias de assinatura de alerta queremos para acionar um IPS. Código: selecione todos -- -- Table structure for table `sigs_to_block` -- CREATE TABLE `sigs_to_block` ( `sig_name` text COLLATE utf8_unicode_ci NOT NULL, `src_or_dst` char(3) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'src', `timeout` varchar(12) COLLATE utf8_unicode_ci NOT NULL DEFAULT '01:00:00' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -- Indexes for table `sigs_to_block` -- ALTER TABLE `sigs_to_block` ADD UNIQUE KEY `sig_name_unique_index` (`sig_name`(64)); A coluna "sig_name" contém a parte da assinatura que será usada para corresponder aos alertas que queremos bloquear. A coluna "src_or_dst" contém se estamos bloqueando um endereço IP de origem ou um endereço IP de destino com este alerta. E, finalmente, a coluna "tempo limite" indica por quanto tempo bloquearemos esse endereço IP após um evento. Aqui estão as assinaturas de alerta que preenchi a tabela “sigs_to_block” com: Código: selecione todos INSERT INTO `sigs_to_block` (`sig_name`, `src_or_dst`, `timeout`) VALUES ('ET COMPROMISED Known Compromised or Hostile Host Traffic', 'src', '01:00:00'), ('ET POLICY Suspicious inbound to', 'src', '01:00:00'), ('ET DROP Dshield Block Listed Source', 'src', '01:00:00'), ('ET SCAN', 'src', '01:00:00'), ('ET DROP Spamhaus DROP Listed Traffic Inbound', 'src', '01:00:00'), ('ET POLICY Outgoing Basic Auth Base64 HTTP Password detected unencrypted', 'dst', '23:59:59'), ('ET CINS Active Threat Intelligence Poor Reputation IP', 'src', '01:00:00'), ('GPL SNMP', 'src', '01:00:00'), ('ET TOR Known Tor', 'src', '01:00:00'), ('GPL DNS named version attempt', 'src', '01:00:00'), ('ET VOIP Modified Sipvicious Asterisk PBX User-Agent', 'src', '01:00:00'), ('GPL RPC xdmcp info query', 'src', '01:00:00'), ('GPL RPC portmap listing', 'src', '01:00:00'), ('SURICATA SMTP no server welcome message', 'dst', '23:59:59'), ('GPL SMTP', 'dst', '23:59:59'), ('ET WEB_CLIENT SUSPICIOUS Possible automated connectivity check', 'dst', '01:00:00'), ('Snort Alert [1:2403326:2951]', 'src', '01:00:00'), ('Snort Alert [1:2500082:4086]', 'src', '01:00:00'), ('GPL POLICY PCAnywhere', 'src', '01:00:00'), ('ET POLICY External IP Lookup', 'dst', '23:59:59'), ('GPL WEB_SERVER', 'src', '23:59:59'), ('ET SHELLCODE', 'src', '23:59:59'), ('ET P2P Edonkey IP Query End', 'src', '01:00:00'), ('ET MALWARE Suspicious', 'dst', '01:00:00'), ('ET CURRENT_EVENTS', 'src', '01:00:00'), ('Unencrypted Request Method', 'src', '01:00:00'), ('SURICATA SMTP data command rejected', 'dst', '01:00:00'), ('ET WEB_SERVER', 'src', '01:00:00'), ('ET DOS', 'src', '01:00:00'), (' ET POLICY User', 'dst', '01:00:00'), ('ET TROJAN Possible Win32/', 'dst', '01:00:00'), ('.tk domain', 'dst', '23:59:59'), ('ET POLICY archive.org', 'dst', '01:00:00'), ('ET CNC', 'dst', '23:59:59'), ('ET SNMP', 'src', '01:00:00'), ('ET POLICY Python', 'dst', '01:00:00'), ('ET POLICY curl User-Agent Outbound', 'dst', '01:00:00'), ('ET POLICY Windows 98 User-Agent Detected', 'dst', '01:00:00'), ('ET POLICY Internal Host Retrieving External IP', 'dst', '01:00:00'), ('ET POLICY Unsupported/Fake FireFox Version', 'dst', '01:00:00'), ('ET MOBILE_MALWARE', 'dst', '23:59:59'), ('ET POLICY Possible IP Check', 'src', '01:00:00'), ('ET P2P', 'dst', '01:00:00'), ('GPL SHELLCODE', 'src', '23:59:59'), ('GPL P2P', 'src', '01:00:00'), ('.pw domain', 'dst', '23:59:59'), ('Request to .su TLD', 'dst', '01:00:00'), ('Abnormal User-Agent', 'dst', '01:00:00'), ('SSLv3 outbound', 'src', '01:00:00'), ('Hex Obfuscation', 'src', '01:00:00'), ('SSH banner detected on TCP 443 likely proxy evasion', 'src', '01:00:00'); A próxima tabela que vamos adicionar é uma tabela de fila, que coleta os alertas relevantes (eventos) que serão usados para criar os gatilhos IPS enviados para o Mikrotik. Código: selecione todos -- -- Table structure for table `block_queue` -- CREATE TABLE `block_queue` ( `que_id` int(11) NOT NULL, `que_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'When the block was added', `que_ip_adr` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The IP address to block', `que_timeout` varchar(12) COLLATE utf8_unicode_ci NOT NULL COMMENT 'How long to block for', `que_sig_name` varchar(256) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The name of the signature that caused the block', `que_sig_gid` int(10) NOT NULL COMMENT 'The signature group ID', `que_sig_sid` int(10) NOT NULL COMMENT 'The signature ID', `que_event_timestamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'When the event was triggered', `que_processed` int(11) NOT NULL DEFAULT '0' COMMENT 'If this item has been processed (0=no, <>0=yes)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Queue of ip addresses to block on firewall'; -- -- Indexes for table `block_queue` -- ALTER TABLE `block_queue` ADD PRIMARY KEY (`que_id`), ADD KEY `que_added` (`que_added`); -- -- AUTO_INCREMENT for table `block_queue` -- ALTER TABLE `block_queue` MODIFY `que_id` int(11) NOT NULL AUTO_INCREMENT; Trigger do banco de dados A última parte que liga tudo isso e faz com que funcione, é um disparador do MySQL que preenche a tabela block_queue quando ocorre um alerta relevante. Este é um gatilho após a inserção na tabela de iphdr. Código: selecione todos CREATE TRIGGER `after_iphdr_insert` AFTER INSERT ON `iphdr` FOR EACH ROW BEGIN DECLARE this_event INT(11) default 0; DECLARE this_event_signature INT(10) default 0; DECLARE this_event_timestamp TIMESTAMP; DECLARE this_sig INT(10) default 0; DECLARE this_sig_name VARCHAR(256) default ""; DECLARE this_sig_gid INT(10) default 0; DECLARE timeout VARCHAR(12) default ""; DECLARE interested INT default 0; DECLARE direction VARCHAR(3) default ""; DECLARE ip_src VARCHAR(64) default ""; DECLARE ip_dst VARCHAR(64) default ""; SELECT event.id, event.signature, event.timestamp INTO this_event, this_event_signature, this_event_timestamp FROM event WHERE event.sid = NEW.sid and event.cid = NEW.cid; SELECT signature.sig_sid, signature.sig_gid, signature.sig_name INTO this_sig, this_sig_gid, this_sig_name FROM signature WHERE signature.sig_id = this_event_signature; SELECT count(*), sigs_to_block.src_or_dst, sigs_to_block.timeout INTO interested, direction, timeout FROM sigs_to_block WHERE this_sig_name LIKE CONCAT(sigs_to_block.sig_name, '%'); IF (interested > 0) THEN IF (direction = "src") THEN INSERT INTO block_queue SET que_ip_adr = inet_ntoa(NEW.ip_src), que_timeout = timeout, que_sig_name = this_sig_name, que_sig_gid = this_sig_gid, que_sig_sid = this_sig, que_event_timestamp = this_event_timestamp; ELSE INSERT INTO block_queue SET que_ip_adr = inet_ntoa(NEW.ip_dst), que_timeout = timeout, que_sig_name = this_sig_name, que_sig_gid = this_sig_gid, que_sig_sid = this_sig, que_event_timestamp = this_event_timestamp; END IF; END IF; END suricata_block.php O último componente é um script PHP. Tem 2 funções: Se o roteador foi inicializado há menos de 5 minutos, recrie a lista de endereços bloqueados que ainda estão ativos Observe novos registros na tabela "block_queue" e adicione novas entradas à lista de endereços bloqueados. Quando um novo registro é adicionado, ele usa a API PHP do Mikrotik para criar um novo endereço na lista de endereços “Bloqueados”. Não se esqueça de modificar as variáveis de configuração no início do script. Observe que você pode ter esse script enviando e-mails quando um endereço é bloqueado. Os emails serão assim: email.png<?php require('routeros_api.class.php'); /* Set your specific configuration below */ $user_name = "db_user"; $password = "db_password"; $database = "snorby"; $server = "localhost"; $mikrotik_addr = "x.x.x.x"; $mikrotik_user = "admin"; $mikrotik_pwd = "admin_password"; $local_ip_prefix = "192.168."; /* Set email_alert to true if you'd like to get email messages when a block is sent to the Mikrotik */ $email_alert = false; $email_to = "myself@abc.com"; $email_from = "myids@abc.com"; header('Content-Type: text/plain'); $API = new RouterosAPI(); function UptimeInSeconds($uptime) { $mark1=strpos($uptime, "d"); $days=substr($uptime, 0, $mark1); if ($mark1) $uptime=substr($uptime, $mark1 + 1); $mark1=strpos($uptime, "h"); $hours=substr($uptime, 0, $mark1); if ($mark1) $uptime=substr($uptime, $mark1 + 1); $mark1=strpos($uptime, "m"); $minutes=substr($uptime, 0, $mark1); if ($mark1) $uptime=substr($uptime, $mark1 + 1); $mark1=strpos($uptime, "s"); $seconds=substr($uptime, 0, $mark1); if ($mark1) $uptime=substr($uptime, $mark1 + 1); $total=($days * 86400) + ($hours * 3600) + ($minutes * 60) + $seconds; return $total; } function AddToFirewall($thisrow) { global $local_ip_prefix, $API, $mikrotik_addr, $mikrotik_user, $mikrotik_pwd, $email_to, $email_from, $email_alert; if (strpos($thisrow['que_ip_adr'], $local_ip_prefix) !== true) { /* Does not match local address... */ /* See if the address is already in the firewall list, if so delete it so we can readd it with a new timeout */ try { $API->connect($mikrotik_addr, $mikrotik_user, $mikrotik_pwd); } catch (Exception $e) { die('Unable to connect to RouterOS. Error:' . $e); } $ARRAY = $API->comm("/ip/firewall/address-list/print", array( ".proplist"=> ".id", "?address" => $thisrow['que_ip_adr'],)); foreach ($ARRAY as $a) { foreach ($a as $name => $value) { $API->write("/ip/firewall/address-list/remove",false); $API->write("=.id=$value",true); $API->read(); } } if (array_key_exists('que_remaining', $thisrow)) { $timeremaining = $thisrow['que_remaining']; } else { $timeremaining = $thisrow['que_timeout']; } $API->comm("/ip/firewall/address-list/add", array( "list" => "Blocked", "address" => $thisrow['que_ip_adr'], "timeout" => $timeremaining, "comment" => "From suricata, " . $thisrow['que_sig_name'] . " => " . $thisrow['que_sig_gid'] . ":" . $thisrow['que_sig_sid'] . " => event timestamp: " . $thisrow['que_event_timestamp'],)); $API->disconnect(); if ($email_alert) { $to = $email_to; $subject = 'Suricata on ' . gethostname() . ': blocked IP address ' . $thisrow['que_ip_adr']; $message = 'The IP address ' . $thisrow['que_ip_adr'] . " has been blocked due to the following rule match:\r\n"; $message = $message . "\r\n"; $message = $message . "The signature ID is " . $thisrow['que_sig_gid'] . " named: " . $thisrow['que_sig_name'] . "\r\n"; $message = $message . " event timestamp: " . $thisrow['que_event_timestamp'] . " blocked for: " . $timeremaining . "\r\n\r\n"; $headers = 'From: ' . $email_from . "\r\n" . 'Reply-To: ' . $email_from . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); } } else { /* Send email indicating bad block attempt*/ $to = $email_to; $subject = 'Suricata on ' . gethostname() . ': attempted block on local address'; $message = 'A record in the block_queue indicated a block on a local IP Address (' . $row['que_ip_adr'] . ")\r\n"; $message = $message . "\r\n"; $message = $message . "The signature ID is " . $row['que_sig_id'] . " named: " . $row['que_sig_name'] . "\r\n"; $message = $message . " with a que_id of " . $row['que_id'] . "\r\n\r\n"; $message = $message . "Check the src_or_dst field in events_to_block for the signature to make sure it is correct (src/dst).\r\n\r\n"; $message = $message . "The record was not processed but marked as completed.\r\n"; $headers = 'From: ' . $email_from . "\r\n" . 'Reply-To: ' . $email_from . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); } return true; } /* $API->debug = true; */ /* Connect to database, if unsuccessful keep trying for 100 seconds */ $i = 0; while ( $i < 100 ) { $db = new mysqli($server, $user_name, $password, $database); if ($db->connect_errno > 0) { print('Unable to connect to database [' . $db->connect_error . ']'); sleep(10); $i = $i + 10; } else { $i = 100; } } /* Check to see how long the mikrotik has been up. If less than 5 minutes then rebuild firewall list */ try { $API->connect($mikrotik_addr, $mikrotik_user, $mikrotik_pwd); } catch (Exception $e) { die('Unable to connect to RouterOS. Error:' . $e); } $ARRAY = $API->comm("/system/resource/print", false); $upsecs = UptimeInSeconds($ARRAY[0]['uptime']); $API->disconnect(); if ($upsecs < 300) { /* Do not send alerts when rebuilding the firewall list */ $save_alert = $email_alert; $email_alert = false; /* This SELECT statement will ignore any entries that had 2 minutes or less remaining */ $SQL = "SELECT *,DATE_FORMAT(TIMEDIFF(ADDTIME(que_added,que_timeout), CURRENT_TIMESTAMP), '%H:%i:%s') as que_remaining " . "FROM block_queue where ADDTIME(que_added, que_timeout) > TIMESTAMPADD(MINUTE, 2, CURRENT_TIMESTAMP) order by que_remaining;"; if (!$result = $db->query($SQL)) { die('There was an error running the query [' . $db->error . ']'); } while ($row = $result->fetch_assoc()) { $x = AddToFirewall($row); } mysqli_free_result($result); $email_alert = $save_alert; } /* Main program loop */ while ( 1 == 1 ) { $SQL = "SELECT * FROM block_queue WHERE que_processed = 0;"; if(!$result = $db->query($SQL)) { die('There was an error running the query [' . $db->error . ']'); } while($row = $result->fetch_assoc()) { $x = AddToFirewall($row); $SQL2 = "UPDATE block_queue set que_processed = 1 WHERE que_id = " . $row['que_id'] . ";"; if (!$result2 = $db->query($SQL2)) { die('There was an error running the query [' . $db->error . ']'); } mysqli_free_result($result2); } mysqli_free_result($result); sleep(5); /* Sleep 5 seconds then do again */ mysqli_ping($db); } $db->close(); ?> Você pode executar este código com o comando php –f /usr/local/bin/suricata_block.php. Eu criei um script /etc/init.d para que ele possa ser iniciado na inicialização do sistema e gerenciado com o comando service. O script php a seguir é útil para ser executado por uma entrada crontab a cada 10 minutos. Ele ativa o sniffing de pacotes no Mikrotik, o que é útil se o Mikrotik for reinicializado quando o estado padrão da ferramenta sniffer de pacotes for interrompido. Código: selecione todos <?php require('routeros_api.class.php'); header('Content-Type: text/plain'); $API = new RouterosAPI(); /* $API->debug = true; */ try { $API->connect('192.168.3.1', 'username', 'password'); } catch (Exception $e) { die('Unable to connect to RouterOS. Error:' . $e); } $ARRAY = $API->comm("/tool/sniffer/start"); $API->disconnect(); ?> O resultado Aqui está uma captura de tela do Winbox que mostra a lista de endereços com os endereços gerados como resultado dos alertas do Suricata. Bloco List.jpgfast2mikrotik.php Se você quiser ir a uma rota rápida e simples para criar regras de firewall, eu criei o seguinte script PHP, fast2mikrotik.php que usará o fast.log criado pela suricata. Este script PHP usa a biblioteca inotify, então você terá que adicionar isso à sua implementação PHP. Para fazer isso: Código: selecione todos $ apt-get install php-pear php-dev $ pecl install inotify Em seguida, modifique o arquivo php.ini para incluir o comando de configuração "extension = inotify.so". No meu caso, o php.ini estava localizado em /etc/php/7.0/cli. Não se esqueça de modificar as variáveis de configuração no início do script fast2mikrotik.php. Observe que você pode ter esse script enviando e-mails quando um endereço é bloqueado. Este script irá bloquear todos os eventos sinalizados pelo suricata e pelo período de tempo especificado na variável $ block_time. Você pode executar este código com o comando php –f /usr/local/bin/fast2mikrotik.php. Eu criei um script /etc/init.d para que ele possa ser iniciado na inicialização do sistema e gerenciado com o comando service. Código: selecione todos <?php require('routeros_api.class.php'); /* Set your specific configuration below */ $fastlog = "/var/log/suricata/fast.log"; $mikrotik_addr = "__someip__"; $mikrotik_user = "admin"; $mikrotik_pwd = "__somesecret__"; $local_ip_prefix = "192.168."; $block_time = "01:00:00"; /* Set email_alert to true if you'd like to get email messages when a block is sent to the Mikrotik */ $email_alert = false; $email_to = "__someemail__yourself@xyz.com"; $email_from = "__someemail__root@xyz.com"; header('Content-Type: text/plain'); $API = new RouterosAPI(); /** * Tail a file (UNIX only!) * Watch a file for changes using inotify and return the changed data * * @param string $file - filename of the file to be watched * @param integer $pos - actual position in the file * @return string */ function tail($file,&$pos) { $buf=''; // get the size of the file if(!$pos) $pos = filesize($file); // Open an inotify instance $fd = inotify_init(); // Watch $file for changes. $watch_descriptor = inotify_add_watch($fd, $file, IN_ALL_EVENTS); // Loop forever (breaks are below) while (true) { // Read events (inotify_read is blocking!) $events = inotify_read($fd); // Loop though the events which occured foreach ($events as $event=>$evdetails) { // React on the event type switch (true) { // File was modified case ($evdetails['mask'] & IN_MODIFY): // Stop watching $file for changes inotify_rm_watch($fd, $watch_descriptor); // Close the inotify instance fclose($fd); // open the file $fp = fopen($file,'r'); if (!$fp) return false; // seek to the last EOF position fseek($fp,$pos); // read until EOF while (!feof($fp)) { $buf .= fread($fp,8192); } // save the new EOF to $pos $pos = ftell($fp); // (remember: $pos is called by reference) // close the file pointer fclose($fp); // return the new data and leave the function return $buf; // be a nice guy and program good code ;-) break; // File was moved or deleted case ($evdetails['mask'] & IN_MOVE): case ($evdetails['mask'] & IN_MOVE_SELF): case ($evdetails['mask'] & IN_DELETE): case ($evdetails['mask'] & IN_DELETE_SELF): // Stop watching $file for changes inotify_rm_watch($fd, $watch_descriptor); // Close the inotify instance fclose($fd); // Return a failure return false; break; } } } } function AddToFirewall($thisalert, $srcdst) { global $local_ip_prefix, $API, $mikrotik_addr, $mikrotik_user, $mikrotik_pwd, $block_time, $email_to, $email_from, $email_alert; /* Determine the target external address */ if ((strpos($srcdst[0], $local_ip_prefix) === false) and (strpos($srcdst[0], "127.0.0.1") === false)) { $target = $srcdst[0]; } else { $target = $srcdst[1]; } try { $API->connect($mikrotik_addr, $mikrotik_user, $mikrotik_pwd); } catch (Exception $e) { die('Unable to connect to RouterOS. Error:' . $e); } $ARRAY = $API->comm("/ip/firewall/address-list/print", array( ".proplist"=> ".id", "?address" => $target,)); foreach ($ARRAY as $a) { foreach ($a as $name => $value) { $API->write("/ip/firewall/address-list/remove",false); $API->write("=.id=$value",true); $API->read(); } } $API->comm("/ip/firewall/address-list/add", array( "list" => "Blocked", "address" => $target, "timeout" => $block_time, "comment" => "From suricata, " . $thisalert[1] . " => event timestamp: " . $thisalert[0],)); $API->disconnect(); if ($email_alert) { $to = $email_to; $subject = 'Suricata on ' . gethostname() . ': blocked IP address ' . $target; $message = 'The IP address ' . $target . " has been blocked due to the following rule match:\r\n"; $message = $message . "\r\n"; $message = $message . "The signature ID is " . $thisalert[1] . "\r\n"; $message = $message . " event timestamp: " . $thisalert[0] . " blocked for: " . $block_time . "\r\n\r\n"; $headers = 'From: ' . $email_from . "\r\n" . 'Reply-To: ' . $email_from . "\r\n" . 'X-Mailer: PHP/' . phpversion(); mail($to, $subject, $message, $headers); } return true; } $lastpos = 0; while (true) { $alertstr = tail($fastlog,$lastpos); foreach (preg_split("/((\r?\n)|(\r\n?))/", $alertstr) as $line){ if (strlen($line) > 0) { $thisalert = explode("[**]", $line); $thisalert[0] = trim($thisalert[0]); $thisalert[1] = trim($thisalert[1]); $thisalert[2] = trim($thisalert[2]); $tmpstr = explode("}", $thisalert[2]); $srcdst = explode("->", $tmpstr[1]); $tmpstr = explode(":", $srcdst[0]); $srcdst[0] = trim($tmpstr[0]); $tmpstr = explode(":", $srcdst[1]); $srcdst[1] = trim($tmpstr[0]); AddToFirewall($thisalert, $srcdst); } } } ?> OSSEC IPS Uma vez que você tenha o Suricata enviando mensagens para o Mikrotik com os componentes acima, adicionar o OSSEC IPS é relativamente fácil. Vamos aproveitar a tabela MySQL block_queue e o processo suricata_block. Você terá que configurar o host executando o suricata como o OSSEC Manager (Server). Para que o OSSEC envie requisições IPS para o Mikrotik, precisamos ativar o active_responses no OSSEC. No arquivo /var/ossec/etc/ossec.conf (seu caminho pode variar um pouco) adicione as seguintes linhas na seção <ossec_config>: Código: selecione todos <command> <name>block-mikrotik</name> <executable>mikrotik-fw.sh</executable> <timeout_allowed>no</timeout_allowed> <expect /> </command> <active-response> <command>block-mikrotik</command> <location>server</location> <!-- Set these rules to the rules in local_rules.xml that you want to have fire an active reponse --> <rules_id>100070,100071,100072,100073,100074</rules_id> </active-response> Certifique-se de verificar se existe outra seção <active_repsonse> no arquivo ossec.conf. Se sim, comente. A diretiva <command> define um comando bloco-mikrotik que aponta para um shell script que está localizado em / var / ossec / active-response / bin. Aqui está o script bash do mikrotik-fw.sh: #!/bin/bash # mikrotik-fw.sh - get address from alert and write record into snorby.block_queue to drop packets from/to this address # Author: Tom Fisk ACTION=$1 USER=$2 IP=$3 ALERTID=$4 RULEID=$5 LOCAL=`dirname $0`; cd $LOCAL cd ../ PWD=`pwd` # Logging the call echo "`date` $0 $1 $2 $3 $4 $5 $6 $7 $8" >> ${PWD}/../logs/active-responses.log # Getting alert time ALERTTIME=`echo "$ALERTID" | cut -d "." -f 1` # Getting end of alert ALERTLAST=`echo "$ALERTID" | cut -d "." -f 2` # Get the line from the log file and remove characters that need to be escaped in MySQL LOGLINE=`sed -n "/$ALERTTIME/,/^$/{/^$/!p}" "${PWD}/../logs/alerts/alerts.log" | tail -n1` LOGLINE=`echo ${LOGLINE//[-\"_]/} | cut -c1-232` # Get the IP address from the last line IP=`grep -oP '\b(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0- 5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))\b' <<< "$LOGLINE" | head -1` # if IP isn't blank & doesn't match 192.168.* <Replace 192.168.* below with your local address prefix> if [[ ! -z "$IP" && ! $IP =~ ^192.168.* ]]; then tmpfile=$(mktemp) echo "insert into snorby.block_queue (que_ip_adr, que_timeout, que_sig_name, que_sig_gid, que_sig_sid, que_event_timestamp)" >> $tmpfile curdate=`date +'%F %T'` echo " values ("'"'"$IP"'"'", "'"'"23:59:59"'"'", "'"'"OSSEC HIDS >> $LOGLINE"'"'" , 1, 1002, "'"'"$curdate"'"'");" >> $tmpfile /usr/local/mysql/bin/mysql -u<your mysql username> -p<your mysql password> snorby < $tmpfile rm $tmpfile fi Certifique-se de que este script seja executável (chmod a + x). Por fim, você desejará substituir quaisquer regras para as quais deseja enviar uma resposta ativa em /var/ossec/rules/local_rules.xml. Aqui está um conjunto de regras que defini para alguns eventos específicos que o OSSEC dispara: Código: selecione todos <rule id="100070" level="12"> <if_sid>1002</if_sid> <match>AH00135: Invalid method in request quit</match> <description>Block IP's trying to attack apache</description> </rule> <rule id="100071" level="12"> <if_sid>1002</if_sid> <match>not found or unable to stat</match> <description>Block IP's trying to attack apache</description> </rule> <rule id="100072" level="12"> <if_sid>1002</if_sid> <match>rejecting client initiated renegotiation</match> <description>Block IP's trying to attack apache</description> </rule> <rule id="100073" level="12"> <if_sid>1002</if_sid> <match>request failed: malformed request line</match> <description>Block IP's trying to attack apache</description> </rule> <rule id="100074" level="12"> <if_sid>3332</if_sid> <match>SASL LOGIN authentication failed</match> <description>Block IP's trying to log into SMTP</description> </rule> Isso é tudo o que há para fazer para que seus alertas OSSEC sejam acionados em seu Mikrotik.
  22. Não sei se é o lugar certo mas vamos lá, apenas esta noite descobrimos uma infinidade de dispositivos RouterOS em nossa rede - principalmente dispositivos de clientes, até agora só observados na arquitetura MIPS - que parecem estar infectados com alguma coisa. Os próprios roteadores estão gerando centenas de conexões de saída a cada segundo para endereços IP aleatórios, visando telnet (porta TCP 23), TR-069 (porta TCP 7547) e WINBOX !!!! (TCP 8291). Confirmei que esse tráfego não é originário de um dispositivo nas LANs dos clientes e, em seguida, está sendo NATted ... ele vem do próprio roteador e é bloqueado com êxito usando regras de firewall na cadeia de "saída". A reinicialização do dispositivo não o interrompe, portanto, o que quer que seja, conseguiu gravar a si mesmo em flash, além de se inserir no processo de inicialização / inicialização do sistema operacional. Portanto, ele conhece as partes internas do RouterOS, não é dividido pela arquitetura da CPU, parece saber de alguma vulnerabilidade do RouterOS que está explorando de alguma forma e tem como alvo o Winbox. Os dois dispositivos que eu examinei remotamente em detalhes estão ambos rodando 6.34.2. (Eu sei que isso não é atual, mas é um dispositivo do cliente e nós não forçamos os clientes a atualizar o software em seus roteadores. Isso pode ter que mudar.) Espero coletar uma amostra de hardware em breve, o que me permitirá investigar o "worm" mais profundamente e descobrir onde ele conseguiu se conectar ao sistema operacional. Mas talvez o que quer que este "worm" já seja conhecido (e qualquer vulnerabilidade de segurança que ainda exista no 6.34.2 tenha sido corrigido), e eu não estou atualizado sobre as notícias. Se alguém tiver alguma informação sobre isso, eu realmente aprecio qualquer pista.
  23. Igor

    Dica TR069 com FreeACS saiba como

    Fala gente, com o suporte recente do TR069 de em 6.38 eu não consegui encontrar muita documentação sobre como configurar um servidor ACS para trabalhar com o Mikrotik. Depois de algumas tentativas e erros, consegui colocar em funcionamento um ambiente de laboratório, por isso pensei em encaminhar os passos que dei para todos os interessados. Por favor, note que esta configuração é estritamente para o labing e como tal tem grandes falhas de segurança para um ambiente de produção, eu recomendo fortemente seguir http://wiki.mikrotik.com/wiki/Manual:TR069-client e http://wiki.mikrotik.com / wiki / Tr069 - as práticas recomendadas quando você está pronto para começar a produção. Instalar o FreeACS FreeACS, instalado no Unbuntu 14.04.5 LTS (GNU / Linux 3.13.0-107-genérico x86_64) VM. Percebi alguns problemas com a execução do script de instalação, por isso, adicionei algumas etapas para instalar alguns requisitos manualmente. 1) Instale o tomcat7, Java e SQL5.5 sudo apt-get update sudo apt-get instalar tomcat7 sudo apt-get instalar default-jre sudo apt-get instalar mysql-server-5.5 2) Faça o download e instale o FreeACS Script cd ~ && wget http://freeacs.com/download/install-or- ... -ubuntu.sh chmod 755 install-or-update-freeacs-ubuntu.sh && sudo ./install-or-update-freeacs-ubuntu.sh (Acredito que o script trys para instalar e executar a versão mais recente do mysql instal do 5.5 que faz com que os prechecks falhem no final da instalação, e é por isso que o instalamos manualmente) 3) Passamos agora para as etapas descritas em http : //freeacs.com/download/Fusion%20Installation.pdf , ignorei alguns passos e fiz mudanças ligeiramente diferentes para os outros, por isso vou fazer uma revisão da minha versão desta explicação passo a passo a) Reinicie o serviço mySQL mysql restart b) Edite o detalhes de configuração do tomcat7 nano /var/lib/tomcat7/conf/catalina.properties (encontre a string "common.loader" e anexe ", $ {catalina.base} / common, $ {catalina.base} / common / *. properties" , o resultado final deve ser: "common.loader = $ {catalina.base} / lib, $ {catalina.base} / lib / *. jar, $ {catalina.home} / lib, $ {catalina.home} /lib/*.jar,${catalina.home}/common/classes,${catalina.home}/common/*.jar,${catalina.base}/common,${catalina.base}/common/* .properties ") nano /etc/init.d/tomcat7 (Encontre a linha que começa com" # Required-Start: " e anexe" $ mysql "a ela.) nano / var / lib / tomcat7 / common / xaps-stun. properties (encontre "primary.ip =" e digite o endereço IP público / externo da sua máquina. c) Reinicie o serviço tomcat tomcat7 restart d) Port forwarding e Firewall configuration Essas portas precisarão ser mapeadas para o endereço local da sua máquina Unbuntu (para mais informações, consulte 5.3 de http://freeacs.com/download/Fusion Installation.pdf ) 80 TCP 8080 TCP 443 TCP 69 TCP 3306 TCP 3479 UDP 3480 UDP 9116 UDP e) Abra um navegador e navegue até http: // <Seu endereço IP público>: 8080 / web se você vir uma página de login com admin / xaps, se bem sucedido sugiro mudar imediatamente as credenciais de login padrão via GUI sob permissão no topo. Configuração CPE 1) Baixe e instale o pacote TR069 para o seu roteador através dos pacotes extras .zip, para a série hEX que você pode usarhttp://download2.mikrotik.com/routeros/ ... 6.38.1.zip , confira http://www.mikrotik.com/download para outros modelos, extraia o zip e, em seguida, faça o upload do pacote TR069 para o seu roteador e reinicialize. 2) Uma vez que o roteador inicialize, adicione as linhas abaixo à sua configuração, isso permitirá a conectividade do seu CPE para o servidor TR069 recém-instalado, isso também garantirá que seu CPE apareça constantemente no servidor ACS e forneça um UnitID / Username exclusivo para o servidor. ### Defina TR069 Nome de usuário para Ether1 endereço MAC / script do sistema add nome = identidade owner = admin policy = ftp, reinicialização, leitura, gravação, política, teste, senha, sniff, fonte sensível = "atraso 10; \ \ n: local macaddress [/ interface obter o endereço MAC ether1] \ \ n: local tidymac \ \ n \ \ n: para i de = 0 a = ([: len \ $ macaddress] - 1) do = {\ \ n: caractere local [: escolha \ $ macaddress \ $ i] \ \ n: if (\ $ char = \ ": \") do = {\ \ n: set \ $ char \ "\" \ \ n} \ \ n: defina o tidymac (\ $ tidymac. \ $ char) \ \ n} \ \ n : colocar \ $ tidymac; / tr069-client set acs-url = http: // <endereço IP externo do servidor ACS> / tr069 enabled = sim senha = <sua senha> periodic-inform-enabled = sim periodic-inform-interval = nome de usuário 30s = \ $ tidymac " ### Intervalo de polling inferior / script do sistema add name = Proprietário do Inter = admin policy = ftp, reinicialização, leitura, escrita, política, teste, senha, sniff, fonte sensível =" / tr069-client set periodic-inform-interval = 30s " / agendador do sistema add name = UnitID no evento = política de identidade = ftp, reinicialização, leitura, gravação, política, teste, senha, sniff, sensível, romon start-time = inicialização / system scheduler add interval = nome 5s = Poll on-event = Inter start-time = startup Reinicialize seu CPE e agora você deve ser capaz de gerenciar seu dispositivo no FreeACS. Gerenciando o CPE Login no FreeACS, navegue até support -> search e, em seguida, pressione o botão de pesquisa. Seu novo CPE deve aparecer com o endereço MAC como o ID da unidade, agora você deve ser capaz de gerenciar o roteador via TR069. Você pode criar perfis via provisionamento fácil -> perfil para configurações do cliente usando parâmetros TR069, você pode enviar esses perfis para o seu CPE, mas localize seu CPE via suporte -> pesquisa -> vá para a configuração da unidade. Executando scripts do roteador OS a) Crie sua configuração via routerOS CLI, exporte para um documento de texto e salve o arquivo como filename.alter. faça o upload do arquivo via "Arquivos e Scripts" no FreeACS, faça o upload e salve o arquivo usando o TR069_Script como o tipo de arquivo. b) Vá para "provisionamento avançado" -> job -> create new job Tipo: TR069 Script Group: Todos os perfis (ou crie um grupo de clientes via grupo de provisionamento avançado) Script: (o script que você acabou de carregar) c) Provisionamento avançado -> trabalho -> visão geral do trabalho, selecione o seu trabalho recém-criado e execute o início, isso agora vai empurrar o RouterOS CLI para o seu CPE
  24. QUe doidera aqui, pra ajudar foi feita ativação de bateria,foi removido um capacitor que estava em curto na parte superior esquerda mesmo assim não liga esta com alto consumo de 300ma, não achei nenhuma explicação logica.
  25. Gente vejam se pode me ajudar, chegou um moto g2 aqui na loja ligado, tudo funcionando porem ao conectar o carregador ele não carrega. na fonte ligando direto na placa ele não apresenta nada, mas pelo conector de carga ela desarma, tem alguma logica nisso, aconteceu alguma coisa com vocês?
  26. Tenho um Samsung I9300 o S3, ele não quer carregar de jeito nenhum sabem o que poderia ser, já pesquisei tudo aqui.
  1. Mais Resultados
×