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:
- Parte 6 - Otimizar o desempenho do sistema
- Parte 7 - Instalar outras aplicações
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.