Pesquisa de site

Como criar um servidor de log centralizado com Rsyslog no CentOS/RHEL 7


Para que o administrador do sistema identifique ou solucione um problema em um sistema de servidor CentOS 7 ou RHEL 7, ele deve conhecer e visualizar os eventos que aconteceram no sistema em um determinado período de tempo dos arquivos de log armazenados no sistema no diretório /var/log.

O servidor syslog em uma máquina Linux pode atuar como um ponto central de monitoramento em uma rede onde todos os servidores, dispositivos de rede, roteadores, switches e a maioria de seus serviços internos que geram logs, sejam relacionados a problemas internos específicos ou apenas mensagens informativas, podem enviar seus logs. .

Em um sistema CentOS/RHEL 7, o daemon Rsyslog é o principal servidor de log pré-instalado, seguido pelo Systemd Journal Daemon (journald).

O servidor Rsyslog é construído como um serviço de arquitetura cliente/servidor e pode desempenhar ambas as funções simultaneamente. Ele pode ser executado como um servidor e coletar todos os logs transmitidos por outros dispositivos na rede ou pode ser executado como um cliente, enviando todos os eventos internos do sistema registrados para um servidor syslog de terminal remoto.

Quando o rsyslog é configurado como um cliente, os logs podem ser armazenados localmente em arquivos no sistema de arquivos local ou podem ser enviados remotamente em vez de gravá-los em arquivos armazenados na máquina ou gravar arquivos de log de eventos localmente e enviá-los para um servidor syslog remoto em o mesmo tempo.

O servidor Syslog opera qualquer mensagem de log usando o seguinte esquema:

type (facility).priority (severity)  destination(where to send the log)

A.instalação ou tipo de dado é representado pelos processos internos do sistema que geram as mensagens. No Linux os processos internos (instalações) que geram logs são padronizados da seguinte forma:

  • auth = mensagens geradas por processos de autenticação (login).
  • cron= mensagens geradas por processos agendados (crontab).
  • daemon = mensagens geradas por daemons (serviços internos).
  • kernel = mensagens geradas pelo próprio kernel do Linux.
  • mail = mensagens geradas por um servidor de e-mail.
  • syslog = mensagens geradas pelo próprio daemon rsyslog.
  • lpr = mensagens geradas por impressoras locais ou por um servidor de impressão.
  • local0 – local7 = mensagens personalizadas definidas por um administrador (local7 geralmente é atribuído para Cisco ou Windows).

B. Os níveis de prioridade (gravidade) também são padronizados. Cada prioridade é atribuída com uma abreviatura padrão e um número conforme descrito abaixo. A 7ª prioridade é o nível mais alto de todos.

  • emergir = Emergência – 0
  • alerta = Alertas – 1
  • err = Erros – 3
  • avisar = Avisos – 4
  • aviso = Notificação – 5
  • informações = Informações – 6
  • depurar = Depuração – 7

Palavras-chave especiais do Rsyslog:

  • *=todas as instalações ou prioridades
  • none=as instalações não têm prioridades definidas. Ex.: mail.none

C. A terceira parte do esquema syslog é representada pela diretiva destino . O daemon Rsyslog pode enviar mensagens de log para serem gravadas em um arquivo no sistema de arquivos local (principalmente em um arquivo no diretório /var/log/) ou para serem canalizadas para outro processo local ou para serem enviadas para um console do usuário local (para stdout), ou enviar a mensagem para um servidor syslog remoto via protocolo TCP/UDP, ou até mesmo descartar a mensagem para /dev/null.

Para configurar o CentOS/RHEL 7 como um servidor de log central, primeiro precisamos verificar e garantir que a partição /var onde todos os arquivos de log são gravados seja grande o suficiente ( alguns GB no mínimo) para poder armazenar todos os arquivos de log que serão enviados por outros dispositivos. É uma boa decisão usar uma unidade separada (LVM, RAID) para montar o diretório /var/log/.

Requisitos

  1. Procedimento de instalação do CentOS 7.3
  2. Procedimento de instalação do RHEL 7.3

Como configurar o Rsyslog no servidor CentOS/RHEL 7

1. Por padrão, o serviço Rsyslog é instalado automaticamente e deve estar em execução no CentOS/RHEL 7. Para verificar se o daemon foi iniciado no sistema, emita o seguinte comando com privilégios de root.

systemctl status rsyslog.service

Se o serviço não estiver em execução por padrão, execute o comando abaixo para iniciar o daemon rsyslog.

systemctl start rsyslog.service

2. Se o pacote rsyslog não estiver instalado no sistema que você pretende usar como servidor de registro centralizado, emita o comando a seguir para instalar o pacote rsyslog.

yum install rsyslog

3. O primeiro passo que precisamos fazer no sistema para configurar o daemon rsyslog como um servidor de log centralizado, para que ele possa receber mensagens de log para clientes externos, é abrir e editar, usando seu editor de texto favorito, o arquivo de configuração principal de /etc/rsyslog.conf, conforme apresentado no trecho abaixo.

vi /etc/rsyslog.conf

No arquivo de configuração principal do rsyslog, pesquise e remova o comentário das linhas a seguir (remova o sinal de hashtag # no início da linha) para fornecer recepção de transporte UDP ao servidor Rsyslog via 514 porta. UDP é o protocolo padrão usado para transmissão de log pelo Rsyslog.

$ModLoad imudp 
$UDPServerRun 514

4. O protocolo UDP não possui sobrecarga TCP, o que o torna mais rápido na transmissão de dados do que o protocolo TCP. Por outro lado, o protocolo UDP não garante a confiabilidade dos dados transmitidos.

No entanto, se você precisar usar o protocolo TCP para recepção de log, você deve pesquisar e descomentar as seguintes linhas do arquivo /etc/rsyslog.conf para configurar o daemon Rsyslog para vincular e escutar um soquete TCP em 514 porta. Os soquetes de escuta TCP e UDP para recepção podem ser configurados simultaneamente em um servidor Rsyslog.

$ModLoad imtcp 
$InputTCPServerRun 514 

5. Na próxima etapa, não feche o arquivo ainda, crie um novo modelo que será utilizado para recebimento de mensagens remotas. Este modelo instruirá o servidor Rsyslog local onde salvar as mensagens recebidas enviadas pelos clientes da rede syslog. O modelo deve ser adicionado antes do início do bloco DIRETIVAS GLOBAIS conforme ilustrado no trecho abaixo.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
. ?RemoteLogs & ~

A diretiva $template RemoteLogs acima instrui o daemon Rsyslog a coletar e gravar todas as mensagens de log recebidas em arquivos distintos, com base no nome da máquina cliente e na instalação do cliente remoto (aplicativo) que gerou as mensagens com base no propriedades definidas presentes na configuração do template: %HOSTNAME% e %PROGRAMNAME%.

Todos esses arquivos de log serão gravados no sistema de arquivos local em um arquivo dedicado nomeado de acordo com o nome do host da máquina cliente e armazenados no diretório /var/log/.

A regra de redirecionamento & ~ instrui o servidor Rsyslog local a interromper o processamento da mensagem de registro recebida e descartar as mensagens (não gravá-las em arquivos de registro internos).

O nome RemoteLogs é um nome arbitrário dado a esta diretiva de modelo. Você pode usar qualquer nome que achar mais adequado para o seu modelo.

Para gravar todas as mensagens recebidas dos clientes em um único arquivo de log com o nome do endereço IP do cliente remoto, sem filtrar o recurso que gerou a mensagem, utilize o trecho abaixo.

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

Outro exemplo de modelo onde todas as mensagens com sinalizador de recurso de autenticação serão registradas em um modelo chamado “TmplAuth“.

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

Abaixo está um trecho de uma definição de modelo do servidor Rsyslog 7:

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

O trecho do modelo acima também pode ser escrito como:

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

Para escrever modelos Rsyslog complexos, leia o manual do arquivo de configuração do Rsyslog emitindo o comando man rsyslog.conf ou consulte a documentação on-line do Rsyslog.

6. Depois de editar o arquivo de configuração do Rsyslog com suas próprias configurações conforme explicado acima, reinicie o daemon Rsyslog para aplicar as alterações emitindo o seguinte comando:

service rsyslog restart

7. Até agora, o servidor Rsyslog deve estar configurado para atuar como um servidor de log centralizado e registrar mensagens de clientes syslog. Para verificar os soquetes de rede Rsyslog, execute o comando netstat com privilégios de root e use grep para filtrar a string do rsyslog.

netstat -tulpn | grep rsyslog 

8. Se você tiver o SELinux habilitado no CentOS/RHEL 7, emita o seguinte comando para configurar o SELinux para permitir o tráfego rsyslog dependendo do tipo de soquete de rede.

semanage -a -t syslogd_port_t -p udp 514
semanage -a -t syslogd_port_t -p tcp 514 

9. Se o firewall estiver habilitado e ativo, execute o comando abaixo para adicionar as regras necessárias para abrir portas rsyslog no Firewalld.

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd –reload

Isso é tudo! O Rsyslog agora está configurado no modo servidor e pode centralizar logs de clientes remotos. No próximo artigo, veremos como configurar o cliente Rsyslog no servidor CentOS/RHEL 7.

Usando o servidor Rsyslog como um ponto central de monitoramento para mensagens de log remotas, você pode inspecionar arquivos de log e observar o status de integridade dos clientes ou depurar problemas do cliente com mais facilidade quando os sistemas travam ou estão sob algum tipo de ataque.