quinta-feira, 23 de agosto de 2012

logwatch, fail2ban, molly-guard

Mais umas excelentes ferramentas para sistemas linux

logwatch


Instala-se com o habitual

apt-get install logwatch

E já está.
A instalação cria um script em /etc/cron.daily que se encarrega de correr o logwatch e enviar um email para o root.

Para modificar as opções pré-definidas é preciso copiar o ficheiro de configuração de exemplo para /etc/logwatch/conf:


cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/

E editar o ficheiro. No Debian a opção TmpDir estava mal configurada, deve ser mudada para /tmp.
Todas as opções podem ser sobrepostas através de parâmetros na linha de comandos.

O logwatch apenas cria o relatório com os eventos mais significativos do sistema, é responsabilidade do administrador ler o relatório e agir em conformidade.

fail2ban

apt-get install fail2ban

E já está.
A configuração básica está em /etc/fail2ban/fail2ban.conf e a configuração mais específica em /etc/fail2ban/jail.conf.

Apenas a proteção das ligações SSH está pré-definida, para outros protocolos/aplicações é preciso editar o /etc/fail2ban/jail.conf.

molly-guard

apt-get install molly-guard

E já está.
O molly-guard pede o nome da máquina quando tentamos desligar uma máquina através de SSH.

Algumas coisas básicas a fazer numa máquina nova

Um pequeno conjunto de aplicações e configurações a executar em máquinas novas (linux claro, Debian de preferência)

Rede


Primeiro que tudo é sempre preciso configurar corretamente a rede.
Se a interface de rede é configurada por DHCP não há muito a fazer, mas se queremos um IP estático é preciso editar o /etc/network/interfaces e substituir o dhcp por static na interface pretendida e indicar, pelo menos o endereço, netmask e gateway, qualquer coisa assim:


auto eth0
iface eth0 inet static
        address 192.168.1.31
        netmask 255.255.255.0
        gateway 192.168.1.254

Mas nem só de IP vive a rede. Também é importante definir os servidores de DNS, o hostname e o domain name. Mais uma vez o DHCP trata disto, mas se quisermos um IP estático temos de editar /etc/resolv.conf, /etc/hostname e /etc/hosts.

É preciso escolher um hostname, que identifica a máquina e um nome de domínio, que identifica a rede local. Vamos usar server001 e lan, respetivamente.

Em /etc/resolv.conf colocamos o nome de domínio e os servidores de DNS. DNS é um serviço crítico, por isso normalmente são definidos pelo menos dois. O ficheiro pode ficar com este conteúdo:

domain lan
search lan
nameserver 208.67.220.220
nameserver 208.67.222.222

Neste caso o domínio chama-se lan (é o pré-definido) e dizemos que queremos pesquisar o domínio lan. As duas entradas nameserver são os dois servidores DNS a usar. Os IPs indicados são do serviço OpenDNS e podem ser usados livremente. Por vezes há uma única entrada nameserver que corresponde ao gateway da rede, é usual em sistemas configurados por DHCP.

Em /etc/hostname colocamos o hostname (basicamente o nome da máquina), assim:

server001

No ficheiro hosts convém colocar uma entrada para o hostname definido antes, qualquer coisa como:

127.0.0.1 localhost
127.0.0.1 server001 server001.lan

Para que tudo funcione é preciso reiniciar os serviços respetivos:

/etc/init.d/networking restart
/etc/init.d/hostname start

Tempo


Parecendo que não, é bastante importante que o relógio e o fuso horário do sistema estejam certos, principalmente se vamos usar coisas como servidores de mail, serviços de autenticação  e até para os logs do sistema.
Para configurar o fuso horário:

dpkg-reconfigure tzdata

Para acertar a hora o melhor é deixar que o sistema se atualize automaticamente, é para isso que existe o serviço NTP. Basta fazer:

apt-get install ntp

E esperar um pouco enquanto o sistema sincroniza.
Podemos ver o estado do NTP com:

ntpq -p

Para ver a data e hora atual fazer:

date

Quando a hora estiver certa convém atualizar o relógio de hardware, para poder manter a hora certa (pelo menos com pequenas variações) mesmo enquanto o sistema está desligado. Para atualizar o relógio de hardware fazemos:

hwclock --systohc

Locale

Chama-se locale ao conjunto de definições que informam o sistema a língua a utilizar e os formatos para apresentação de datas, horas, valores monetários, etc.
É importante definir corretamente o locale que pretendemos usar, pois se não o fizermos arriscamo-nos a receber mensagens numa língua que não entendemos.
Para escolher os locales a gerar fazemos:

dpkg-reconfigure locales

Os locales selecionados serão criados. Pode demorar alguns segundos (ou minutos) a gerar cada locale.
O comando locale mostra as variáveis definidas.
Se alguma estiver em branco pode ser necessário defini-la manualmente com, por exemplo:

export LC_TIME=en_US.UTF-8

Ainda não consegui descobrir porque é que o dpkg-reconfigure locales nem sempre define todas as variáveis LC_* e LANG*.

Um script útil em servidores (principalmente os que têm pouco espaço em disco) é o localepurge. É só instalar com:

apt-get install localepurge

É preciso selecionar os locales a MANTER, todos os outros serão apagados.
Da próxima vez que se fizer uma instalação com o apt-get, ou se correr manualmente o localepurge, serão apagados os locales que não foram selecionados. Este script não é 'oficial' e pode causar alguns erros (inofensivos). Usar com precaução e RTFM.

rkhunter

Um caçador de rootkits para linux e BSD

Para instalar o rkhunter pode fazer-se o download a partir do site oficial e correr o script de instalação, mas como de costume prefiro os repositórios Debian:

apt-get install rkhunter

Ou para quem prefere otimizar o código (e tiver o apt-build instalado):

apt-build install rkhunter

Para correr manualmente, convém fazer uma atualização e só depois fazer a verificação:

rkhunter --update
rkhunter --check

Também podemos correr o comando:

rkhunter --propupd

Que cria uma base de dados com as propriedades dos ficheiros executáveis presentes no sistema. Das próximas vezes que o rkhunter for executado (SEM a opção --propupd) compara os ficheiros com a informação guardada e avisa se ocorreu alguma alteração. É claro que:

  1. É da responsabilidade do utilizador assegurar que todos os executáveis são legítimos quando se executa o --propupd;
  2. O rkhunter apenas avisa se ocorrer alguma alteração dos ficheiros, não tem forma de saber se essa alteração é fidedigna ou não (por exemplo, um apt-get upgrade altera as propriedades dos ficheiros).

O rkhunter costuma gerar alguns avisos 'falsos positivos', mas devem ser investigados, porque às vezes um verdadeiro positivo está escondido atrás de um falso.

A instalação do rkhunter cria os scripts /etc/cron.daily/rkhunter e /etc/cron.weekly/rkhunter que se encarregam de correr o rkhunter diariamente e de o atualizar semanalmente.
Os ficheiros /etc/default/rkhunter e /etc/rkhunter.conf têm as configurações a usar, mas as que estão pré-definidas são normalmente suficientes.

Referências

http://rkhunter.sourceforge.net/