Páginas

quinta-feira, 22 de outubro de 2020

    




Nagios é uma aplicação muito popular de monitoramento de rede de código aberto distribuída sob a licença GPL. Ele é capaz de monitorar tanto hosts quanto serviços, alertando quando ocorrerem problemas e também quando os problemas são resolvidos

Neste tutorial, vamos mostrar como instalar, configurar e acessar o Nagios em um computador executando o Ubuntu Linux.

NTP no Ubuntu Linux


Primeiro, vamos configurar o sistema para usar a data e a hora corretas usando o NTP.

No console do Linux, use os seguintes comandos para definir o fuso horário correto.

 # dpkg-reconfigure tzdata

Current default time zone: 'America/Sao_Paulo'
Local time is now:      Thu Oct 22 07:36:09 -03 2020.
Universal Time is now:  Thu Oct 22 10:36:09 UTC 2020.

Instale o pacote Ntpdate e defina a data e a hora corretas imediatamente.

# apt-get update
# apt-get install ntpdate
# ntpdate pool.ntp.br

root@ubuntu:~# ntpdate pool.ntp.br

22 Oct 07:40:47 ntpdate[4312]: adjust time server 200.160.7.186 offset 0.059302 sec


O comando Ntpdate foi usado para definir a data e a hora corretas usando o servidor: pool.ntp.br

Vamos instalar o serviço NTP.

# apt-get install ntp

NTP é o serviço que manterá nosso servidor atualizado.

Use a data do comando para verificar a data e a hora configuradas no seu Ubuntu Linux.

root@ubuntu:~# date

Thu 22 Oct 2020 07:46:02 AM -03

Se o sistema mostrasse a data e a hora corretas, isso significa que você seguiu todas as etapas corretamente.


Instalando o Apache no Linux



Em seguida, precisamos instalar o servidor web Apache e todo o software necessário.

No console do Linux, use os seguintes comandos para instalar os pacotes necessários.

# apt-get install libgd-dev unzip wget build-essential
# apt-get install apache2 php libapache2-mod-php php-gd

Pare o serviço Apache, ative os módulos necessários e inicie o serviço Apache.

root@ubuntu:~# service apache2 stop

root@ubuntu:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2

root@ubuntu:~# systemctl restart apache2

root@ubuntu:~# a2enmod cgi
Enabling module cgi.
To activate the new configuration, you need to run:
  systemctl restart apache2

root@ubuntu:~# systemctl restart apache2

root@ubuntu:~# service apache2 start

root@ubuntu:~# service apache2 status
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-10-22 07:54:46 -03; 20s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 22593 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 22612 (apache2)
      Tasks: 6 (limit: 2285)
     Memory: 10.7M
     CGroup: /system.slice/apache2.service
             ├─22612 /usr/sbin/apache2 -k start
             ├─22613 /usr/sbin/apache2 -k start
             ├─22614 /usr/sbin/apache2 -k start
             ├─22615 /usr/sbin/apache2 -k start
             ├─22616 /usr/sbin/apache2 -k start
             └─22617 /usr/sbin/apache2 -k start

Oct 22 07:54:46 ubuntu systemd[1]: Starting The Apache HTTP Server...
Oct 22 07:54:46 ubuntu apachectl[22602]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName'>
Oct 22 07:54:46 ubuntu systemd[1]: Started The Apache HTTP Server.


Instalação Nagios no Ubuntu



No console do Linux, use os seguintes comandos para criar as contas necessárias.

# useradd nagios
# groupadd nagcmd
# usermod -a -G nagcmd nagios

Use os seguintes comandos para baixar os pacotes do Nagios.

# mkdir /downloads
# cd /downloads
# wget https://ufpr.dl.sourceforge.net/project/nagios/nagios-4.x/nagios-4.4.2/nagios-4.4.2.tar.gz

Extraia, compile e instale o pacote Nagios.

# tar -zxvf nagios-4.4.2.tar.gz
# cd nagios-4.4.2/
# ./configure --with-nagios-group=nagios --with-command-group=nagcmd
# make all
# make install
# make install-init
# make install-config
# make install-commandmode
# make install-webconf


Vamos criar a senha para a conta de administrador do Nagios.

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

New password: *****

Re-type new password: *****

Adding password for user nagiosadmin


Você também deve reiniciar o apache manualmente e verificar o status do serviço.

# service apache2 restart


Exemplos de arquivos de configuração já foram instalados no diretório /usr/local/nagios/etc. Estes arquivos vão funcionar bem para a configuração inicial. Para prosseguir você precisa fazer uma mudança.

Edite o arquivo /usr/local/nagios/etc/objects/contacts.cfg com o seu editor favorito e altere o email associado com a definição de contato nagiosadmin para o endereço que você gostaria de receber os alertas.

###############################################################################
#
# CONTACTS
#
###############################################################################

# Just one contact defined by default - the Nagios admin (that's you)
# This contact definition inherits a lot of default values from the
# 'generic-contact' template which is defined elsewhere.

define contact {

    contact_name            nagiosadmin             ; Short name of user
    use                     generic-contact         ; Inherit default values from generic-contact template (defined above)
    alias                   Nagios Admin            ; Full name of user
    email                   nagios@localhost ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******


Use o seguinte comando para iniciar o servidor Nagios:

# service nagios start


Instalação de Plugins do Nagios no Ubuntu



Em seguida, precisamos instalar os plugins do Nagios.

No console do Linux, use os seguintes comandos para instalar os pacotes necessários.

# apt-get install autoconf libc6 libmcrypt-dev libssl-dev bc
# apt-get install gawk dc snmp libnet-snmp-perl gettext libperl-dev
# apt-get install libpqxx3-dev libdbi-dev libldap2-dev
# apt-get install libmysqlclient-dev smbclient qstat fping

Use os seguintes comandos para baixar os plug-ins do Nagios.

# cd /downloads
# wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz

Extraia, compile e instale o pacote de plugins do Nagios.

# tar -zxvf nagios-plugins-2.2.1.tar.gz
# cd nagios-plugins-2.2.1/
# ./configure --enable-perl-modules
# make
# make install

Use o seguinte comando para reiniciar o servidor Nagios:

# service nagios restart


Abra o seu navegador e digite o endereço IP do seu servidor web mais / nagios.

Em nosso exemplo, o seguinte URL foi inserido no navegador:

• http://192.168.29.129/nagios

Na tela de prompt, insira as informações administrativas de login.

Informações de acesso padrão de fábrica:
• Nome de usuário: nagiosadmin
• Senha: sua senha






Após um login bem-sucedido, o painel do Nagios será exibido.









quinta-feira, 15 de outubro de 2020

  



Executando containers Docker em produção com segurança


Segurança é Tudo não é mesmo? Sabemos que hoje mesmo, com todos os avanços tecnológicos, não estamos isentos de sermos vitimas de algum ataque que mau sabemos de onde veio, nossos containers não escapam dessa lógica perversa, portanto todo cuidado é pouco quando estamos administrando containers Docker


Kernel exploits (exploração do kernel)

Como não acontece quando se usa uma Virtual Machine, ao usar containers o kernel é compartilhado entre todos os containers e o host, assim sendo, aumenta a importância de qualquer vulnerabilidade que explore o kernel.

 

Denial-of-service attacks (ataque de negação de serviço)

Como todos os containers compartilham os recursos do kernel, se ocorrer de um container poder monopolizar o acesso a alguns recursos, tal como memória, ou até IDs de usuário (UIDs), o que pode ocasionar a falta recursos para outros containers, ocasionando em uma negação de serviço (DoS).

 

Container breakouts (invasão de container)

Um possível invasor que possui acesso a um container não consegue acessar os outros containers ou ao host. Se por acaso você usa root no container, você será root no host.

 

Poisoned images (imagens “envenenadas”)

Como você pode garantir que as imagens que você está utilizando são realmente seguras, não foram adulteradas, e vêm da fonte que elas afirmam vir?

 

Application secrets (segredos de aplicações)

Quando um container acessa um banco de dados ou a um serviço, será muito provável que credenciais serão exigidas, tal como um token ou mesmo um usuário e senha. Se um possível invasor obtiver acesso ao container, ele terá acesso a todos esses dados.

 

Algumas medidas de proteção 

Um modo de obter o hardening de containers docker em produção é tornando-os “imutáveis”, ou seja, no modo read only (somente leitura). Outros métodos para executar containers de forma segura incluem minimizar o attack surface e aplicar tanto o procedimento padrão de hardening do Linux, como os que são específicos a um ambiente de container.


Docker modo read only

Um container pode ser executado no modo somente leitura usando a flag –read-only ao iniciá-lo. Isso impede qualquer processo de escrita para o sistema de arquivos. Qualquer tentativa resulta em erro. A execução dessa infraestrutura imutável também tem relação com outras melhores práticas recomendadas para pipelines de deploy de software.

Embora a imutabilidade evite a execução de qualquer script malicioso ou alterações que possam acontecer através de vulnerabilidades presentes em outros softwares rodando dentro do container docker, até que ponto esse modo é viável para aplicativos no mundo real? Aplicativos que geram log de arquivos e usam bancos de dados, por exemplo, necessitam de escrita.

 

Sistema de log

Uma solução possível para o log seria usar um sistema de log centralizado como o Elasticsearch/Logstash/Kibana (ELK) para que todos os logs sejam coletados em um local central, possivelmente outro container, que não seja acessado diretamente pelo usuário final. Outra alternativa é exportar os logs para fora do container docker usando a flag –log-driver ao iniciar o container.

Para aplicativos que precisam de acesso de gravação para diretórios temporários como /tmp, uma solução é montar um sistema de arquivos temporário no container para esses diretórios.

Os bancos de dados não são acessados diretamente pelo usuário final, portanto, o risco é menor. No entanto, isso não impede ataques, a menos que os aplicativos voltados para o usuário contemplem o hardening.

Nos casos em que é inevitável ter um sistema de arquivos gravável, o Docker fornece auditoria e reverte as alterações. O sistema de arquivos em um container Docker é empilhado como uma série de camadas. Quando um novo container docker é criado, uma nova camada é adicionada na parte superior onde pode ser gravada.

O driver de armazenamento docker oculta a ação nos bastidores e o apresenta como um sistema de arquivos regular para o usuário. As gravações criadas em um container docker em execução são feitas nesta nova camada. Isso geralmente é chamado Copy-On-Write (COW).

 Alterações de configuração esperada são fáceis de detectar em um container docker. O comando ‘docker diff‘ exibe as alterações feitas no sistema de arquivos – sejam eles arquivos adicionados, removidos ou modificados.

 

Outras boas recomendações para proteger containers docker em produção

Executar uma imagem mínima como Alpine Linux, que foi projetada com tendo a segurança em mente. O kernel é corrigido com uma porta não oficial do grsecurity. O grsecurity é um conjunto de melhorias de segurança para o kernel Linux, que inclui controle de acesso e eliminação de vulnerabilidades baseadas em corrupção de memória, minimizando as formas pelas quais um sistema pode ser atacado.

Reforço de limites de recursos (CPU/RAM) para evitar ataques DoS

Configuração de limites de threads e processos no sistema operacional

Aplicação de procedimentos padrão de hardening do kernel Linux como o sysctl hardening

Execução de um único aplicativo por container. Isso é recomendado porque reduz a o attack surface, ou seja, a quantidade de vulnerabilidades possíveis para um determinado container é limitada àquelas que podem estar presentes no aplicativo desse container.

 

Segurança é tudo!