Ferramentas de Usuário

Ferramentas de Site


pt:blog:2015:10_02_servidor_na_cloud_parte_4_monitorizacao_e_seguranca

Servidor LEMP: Parte 4 - Monitorização e Segurança

Num servidor Internet, a questão não é SE poderá sofrer um ataque malicioso, mas QUANDO é que este irá ocorrer. E é melhor estar preparado para o pior. A melhor estratégia é apostar na prevenção, maximizando as opções de segurança e monitorizar continuamente o servidor.

Nesta série:

Com habitual o o Fórum Servidor Debian está disponível para todos os comentários, dúvidas e sugestões.

Se achar este artigo interessante não se esqueça de partilhar com os amigos:

Ganhe $10 para alojar a sua máquina virtual!

Use este link para se registar em DigitalOcean e ganhe $10 ou equivalente a dois meses de alojamento grátis para a sua máquina virtual!

Firewall

fribeiro@servidordebian:~$ sudo apt-get install ufw

Como política de base iremos permitir todas as ligações do nosso servidor ao exterior, mas proibir todas as ligações do exterior ao nosso servidor com apenas três exceções: permitir o acesso remoto via ssh (ver número da porta atribuída ao ssh) e ao nosso servidor web via http e https:

fribeiro@servidordebian:~$ sudo ufw logging on
fribeiro@servidordebian:~$ sudo ufw allow 4444
fribeiro@servidordebian:~$ sudo ufw allow http
fribeiro@servidordebian:~$ sudo ufw allow https

Em seguida ativamos o firewall:

fribeiro@servidordebian:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Podemos verificar o estado do firewall:

fribeiro@servidordebian:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
 
To                         Action      From
--                         ------      ----
4444                       ALLOW IN    Anywhere
80                         ALLOW IN    Anywhere
443                        ALLOW IN    Anywhere
4444                       ALLOW IN    Anywhere (v6)
80                         ALLOW IN    Anywhere (v6)
443                        ALLOW IN    Anywhere (v6)

Monitorização dos registos do sistema

O pacote logwatch envia diariamente por e-mail ao administrador um resumo dos ficheiros log do sistema.

fribeiro@servidordebian:~$ sudo apt-get install logwatch

Alerta de login

É possível configurar um alerta via email sempre que um utilizador efetua um login. Deste modo poderemos monitorizar todos os acessos ao sistema, bastando criar um ficheiro /etc/profile.d/login_alert.sh com o seguinte conteúdo:

/etc/profile.d/login_alert.sh
who | mail -s "Shell Access: `last -1 | head -1 | cut -d" " -f1` from `last -a -1 | head -1 | cut -c61-`" fribeiro@servidordebian.org

Sempre que um utilizador efetuar um login, é enviado um email para o endereço indicado:

Date: Sat, 26 Sep 2015 00:00:18 +0100
To: [email protected]
Subject: Shell Access: fribeiro from a98-76-54-32.my.isp.com
From: [email protected] (Fernando Ribeiro)

fribeiro pts/0        2015-09-26 00:00 (a94-132-135-1.cpe.netcabo.pt)

Notificação de atualizações disponíveis

O apticron avisa-nos sempre que existem atualizações disponíveis para o nosso sistema.

fribeiro@servidordebian:~$ sudo apt-get install apticron

Atualizações automáticas

O pacote unattended-upgrades permite a instalação das atualizações dos pacotes de software de uma forma totalmente automática.

fribeiro@servidordebian:~$ sudo apt-get install unattended-upgrades

O ficheiro de configuração /etc/apt/apt.conf.d/20auto-upgrades deverá ativar a atualização da base de dados dos pacotes disponíveis, ativar a atualização automática dos pacotes instalados e efetuar uma limpeza semanal dos ficheiros descarregados:

/etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

No ficheiro de configuração /etc/apt/apt.conf.d/50unattended-upgrades podemos configurar a versão do Debian utilizada para a atualizações:

/etc/apt/apt.conf.d/50unattended-upgrades
# [...]

// Within lines unattended-upgrades allows 2 macros whose values are
// derived from /etc/debian_version:
//   ${distro_id}            Installed origin.
//   ${distro_codename}      Installed codename (eg, "jessie")
Unattended-Upgrade::Origins-Pattern {
        // Codename based matching:
        // This will follow the migration of a release through different
        // archives (e.g. from testing to stable and later oldstable).
        "o=Debian,n=jessie";
        "o=Debian,n=jessie-updates";
//      "o=Debian,n=jessie-proposed-updates";
        "o=Debian,n=jessie,l=Debian-Security";

# [...]

Reiniciar o serviço para ter em conta as alterações:

root@server:~# service unattended-upgrades restart

A lista de pacotes disponível será atualizada diariamente e, caso hajam atualizações disponíveis, estas serão instaladas de modo automático.

Atualização dos processos em curso

Quando fazemos as atualizações do sistema com o comando apt-get upgrade, as versões atualizadas substituem as obsoletas no disco duro. No entanto, as aplicações carregadas em memória e em execução não são atualizadas neste processo. Como resultado, aplicações importantes como os serviços ou algumas livrarias continuam a correr com as versões anteriores e, consequentemente, com as vulnerabilidades por corrigir.

fribeiro@servidordebian:~$ sudo apt-get install debian-goodies

O utilitário checkrestart permite listar processos a correr com versões obsoletas dos pacotes atualizados.

fribeiro@servidordebian:~$ sudo checkrestart
Found 7 processes using old versions of upgraded files
(5 distinct programs)
(3 distinct packages)
 
Of these, 2 seem to contain init scripts which can be used to restart them:
The following packages seem to have init scripts that could be used
to restart them:
postfix:
	18534	/usr/lib/postfix/pickup
	16060	/usr/lib/postfix/master
	16062	/usr/lib/postfix/qmgr
php5-fpm:
	582	/usr/sbin/php5-fpm
	616	/usr/sbin/php5-fpm
	617	/usr/sbin/php5-fpm
 
These are the init scripts:
service postfix restart
service php5-fpm restart

O resultado informa-nos que existem 7 processos a correr com versões obsoletas, apesar dos pacotes terem sido atualizados. Para atualizar os processos em curso, basta seguir a instruções e reiniciar os serviços postfix e php5-fpm.

Banir tentativas de acesso ilegais

O fail2Ban é uma aplicação que analisa continuamente os ficheiros log e bloqueia os endereços Internet de onde originaram várias tentativas falhadas de acesso. O fail2Ban é extremamente eficaz na prevenção de ataques de força bruta e de negação de serviço (DoS).

fribeiro@servidordebian:~$ sudo apt-get install fail2ban whois

Copiar o modelo do ficheiro de configuração:

fribeiro@servidordebian:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

No ficheiro de configuração /etc/fail2ban/jail.local é configurada a ação a realizar quando é detetado um possível ataque. Neste caso, o endereço IP do atacante é banido e um email é enviado ao administrador do sistema.

/etc/fail2ban/jail.local
# [...]

#
# ACTIONS
#

# [...]

# Choose default action. To change, just override value of 'action' with the
# interpolation to the chosen action shortcut (e.g.  action_mw, action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_mwl)s

# [...]

Por último, são definidos os parâmetros do serviço que se pretende proteger, editando a secção JAILS do ficheiro /etc/fail2ban/jail.local. Atenção que caso não sejam usadas as portas standard (por exemplo o serviço “ssh” activo na porta “4444” em vez da habitual porta “22”), os parâmetros deverão ser devidamente ajustados com os valores correctos.

/etc/fail2ban/jail.local
# [...]

#
# JAILS
#

# [...]

[ssh]

enabled = true
port    = 4444
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3

# [...]

Reiniciar o serviço fail2ban:

root@server:~# service fail2ban restart

O comando fail2ban-client status permite obter mais informações acerca o estado do serviço fail2ban:

root@server:~# fail2ban-client status
Status
|- Number of jail:      5
`- Jail list:          ssh

O resultado mostra que estão a ser monitorizados 5 serviços…

root@server:~# fail2ban-client status ssh
Status for the jail: ssh
|- filter
|  |- File list:        /var/log/auth.log
|  |- Currently failed: 0
|  `- Total failed:     9
`- action
   |- Currently banned: 2
   |  `- IP list:       103.41.124.33 211.154.20.44
   `- Total banned:     2

… e que estão atualmente banidos 2 endereços IP após 9 tentativas de acesso ilegal ao serviço “ssh”.

A seguir

Ao longo dos primeiros quatro artigos desta série construímos uma base sólida e do nosso servidor Internet. No próximo artigo iremos ver - finalmente - como instalar e configurar um wiki baseado no Doluwiki.

Referências

pt/blog/2015/10_02_servidor_na_cloud_parte_4_monitorizacao_e_seguranca.txt · Última modificação em: 2024-02-15 01:05 por 127.0.0.1