NFAS Node.js Full Application Server Versão 0.1 de 2016-8-5 https://bonseletrons.wordpress.com/node-js Alain Mouette, alainm@bonseletrons.com.br
Depois de muitas horas solitárias de estudo e programação... Você finalmente terminou, debugou, validou sua Aplicação em Node.js... E agora?
É só estudar... Linux Deploy Proxy Certificado Firewall Segurança e mais...
Se acreditar em tudo que dizem, ninguém dorme mais Ataques Virus Vulnerabilidades
Por isso criamos uma solução: NFAS
Mas afinal, o que é o NFAS??? (ou seja, chega de papo furado...)
Visão geral do Sistema com NFAS
Visão geral das configurações
Firewall Primeira linha de defesa do mundo externo Proteção geral dos recursos internos Proteção contra alguns tipos ataques como SYNflood, BadFlags, DoS e semelhantes Usando IPTABLES + configurações avançadas Tem que deixar passar alguns sinais de controle É usado por outros recursos de segurança O que NÃO FAZ: Proteção da porta 80/443 => PROXY Reverso
SSH Principal acesso para operação e manutenção Também usado para transferência de arquivos Fornece acesso total ao Servidor!!! É o recurso mais visado para invasão, tem BOTs varrendo a Net constantemente É seguro, quase sempre Por isso deve ser configurado com cuidado!
SSH - Configurações opcionais Login só com Chaves Púbica/Privadas (sem senha). Protege contra ataques MITM (Man In The Middle) Bloquear Login direto como root (gera Logs mais confiáveis pelo uso do sudo ) Alterar porta de acesso 22 (Não melhora a segurança mas diminui número de ataques)
SSH - Configurações fixas Apenas protocolo versão 2 (versão 1 tem bugs) Time-out de conexões inativas (recursos do servidor) Limitar tentativas com Fail2Ban (explicado adiante) Bloquear autenticação por Rhost (antiga?) Bloquear o uso de Senhas em branco (Todo: testar força da senha) Eliminar criptografia obsoleta Bloquear mais de 5 acessos por minuto (cada IP)
Chaves Públicas/Privadas Assistência para criação das chaves de acesso: fornece o comando já configurado (para Linux) Manutenção das chaves no Servidor: mostra chaves existentes e permite selecionar para apagar Separado para root ou para cada Aplicação
Fail2ban Fica monitorando o log de acessos do SSH e em caso de falhas repetidas de login, bloqueia aquele IP (não afeta os outros IPs). Padrão: 3 erros em 2 minutos bloqueia 10 minutos Opção: enviar Emails de notificação a cada vez Programa nativo em todas as distribuições Linux, velho conhecido de usuários do cpanel (CPHulk)
Envio de Emails Sevidor PostFix configurado como relay, redireciona para outro servidor SMTP externo Tem uma fila de saída para evitar bloqueio quando não consegue transmitir Configurado como mail padrão para todas as notificações do sistema, pode ser usado também pelas aplicações (porta 25) Configurado pelo script de instalação do NFAS
Monit Gera Alarmes de uso de recursos que possam comprometer a estabilidade do Servidor Independente de serviço externo, é um daemon light rodando no próprio servidor faz verificações a cada minuto Pode monitorar cada Site/Serviço/API e tomar medidas corretivas (reiniciar serviço) Não gera: estatísticas para otimização
Monit Recursos monitorados, todos enviam emails: Uso de Disco e de inodes Uso de memória Uso total de CPU Uso do core mais sobrecarregada (especial para Node.js) Tráfego da rede, up e down Ping de site externo (8.8.8.8) Estado do Link (não avisa down, claro... um serviço externo pode ser usado para monitorar o link, como uptimerobot.com)
Monit Pode ser usado pra monitorar cada Aplicação Consulta se páginas estão disponíveis Verifica resposta válida usando RegExp Pode Reiniciar a Aplicação em caso de falhas mais sutís não detectáveis pelo Forever ou PM2 Será feita ferramenta de ajuda (em andamento)
Relógio e RTC A configuração o Relógio no Linux é repleto de detalhes, optamos por algo universalmente aceito RTC (Relógio de Tempo Real, simula o Hardware do PC) configurado para UTC (hora universal) Sincronização usando NTP, seleciona automáticamente os melhores servidores Como a hopedagem pode ser global, já estão configurados servidores em diversos continentes Opção: configurar a Hora Local do Sistema
Instalação de Programas Instalação automática dos utilitários importantes: git, gcc, man, openssh, nano, htop, nmon, etc. Pré-configurações: git Instalação assistida de programas especiais última versão estável do Node.js outros virão (MongoDB, Redis...)
Configuraçãos diversas Várias pequenas configurações menores foram implementadas, algumas refletem hábitos de colaboradores... Prompt colorido, diferenciado para root umask = 440 para aplicações (usado também pelo git)...
Aplicações Configuração interativa de Novas Aplicações Cada Aplicação é um usuário Linux Criação das chaves públicas/privadas para login Criação e configuração de um repositório git Script de inicialização automática da Aplicação
Menu nfas Menu interativo para usar após a instalação Permite alterar todas as configurações fornecidas durante a instalação Somente acessível como root!!!
Proxy reverso Sistema usado: HAProxy Administra CERTIFICADOS e HTTPS Tem desempenho compatível com Node.js É o mais rápido e open source (o NGINX tem alguns recursos importantes bloqueados $$$) Melhor para configurações de segurança Consome poucos recursos do sistema Não Faz: cache (se usar Hapi, este faz...)
Aplicações Exemplo Temos planejado algumas aplicações exemplo: ainda não trabalhamos nisso (aceitamos colaboradores) Aplicação simples para testar os recursos do servidor e exercitar as configurações, inclusive situações anormais Aplicação básica com recursos de segurança, bloqueios que não podem ser feitos no Firewall ou HAProxy: XSS, autenticação segura, etc.