Monitoramento de Acesso: Veja quem e quando acessaram seu servidor remotamente.

Nos dias atuais, há um aumento crescente na preocupação sobre a segurança relacionada à infraestrutura mantida na nuvem pelas organizações. Desta forma, procuram-se maneiras de manter um nível de confiabilidade e controle que permita a disponibilidade necessária aos serviços oferecidos. Hoje, iremos aprender como obter informações sobre acessos realizados ao servidor. Estaremos usando a distribuição linux ubuntu 18.04 LTS, podendo assim, algumas funcionalidades estarem indisponíveis ou ter seu acesso de maneira diferente.

Glossário de Termos.

Host ─ Qualquer computador, servidor cloud, máquina virtual em que se esteja trabalhando.

Terminal ─ Uma interface de linha de comando instalada nas distribuições unix.

$ Símbolo para indicar um terminal shell/bash. Não deve ser copiado junto aos comandos.

[identificador] ─ Valor opcional e que deve ser substituído pela sua própria informação

O comando last

Com o comando last, é possível obter ainda mais informações sobre os usuários ─ terminais usados, quando autenticaram, quando saíram, etc. ─ É utilizado o arquivo /var/log/wtmp, o qual é lido para exibir uma lista de todos os usuários que se autenticaram, desde que ele foi criado.

Para executar, basta que abra o terminal do seu host e digite: 

$ last [nome_de_usuario]

Caso se queira filtrar os registros por um usuário específico, é possível especifica-lo (sendo opcional) diminuindo assim o número de registros. Caso ainda haja dificuldade na leitura, devido a uma grande quantidade de acessos, é possível ainda paginar a consulta. Basta executar: 

$ last [nome_do_usuario] | less

A saída do comando deve ser similar a exibida a seguir:

Iremos nos preocupar apenas com algumas colunas. Na primeira coluna, podemos observar o nome de usuário que realizou o acesso, neste caso foi o usuário root.  Na quarta coluna a data de entrada e saída do sistema e por fim na quinta coluna, indicando a situação em que o terminal utilizado por aquele usuário se encontra.

 

Observando a quinta coluna, algumas situações possíveis considerando sua formatação são: Data – still logged in. Indica que o usuário acessou o host em determinada data/horário e o mesmo ainda se encontra ativo. Data – down (time). Indica que o usuário acessou o host em determinada data, e algum tempo depois, o host foi desligado ou reiniciado com o usuário ainda logado.  Data – crash (time). Indica que o usuário acessou o host em determinada data, e algum tempo depois, houve uma falha crítica, fazendo o host ser encerrado. Mostra que não foi desligado de maneira apropriada. Data – Data. Indica o horário de entrada e saída do usuário, indicando que não houve uma mudança de estado no servidor.

 

Utilizando da ferramenta grep é possível realizar alguns filtros que agilizem a busca por informações mais específicas. Por exemplo, caso queiram procurar quais foram os acessos do usuário root, no dia 19 de outubro, basta executarmos:

 

$ last root | grep -i “Oct 19”

Como pode-se observar, apenas os acessos feitos nessa data serão exibidos. O mesmo pode ser feito para algum dia da semana, como segunda ou sábado. É importante notar que, a forma em que a data está sendo exibida, vai depender do idioma do sistema operacional que está sendo executado. O padrão utilizado aqui é o americano, mas, você deve se atentar para, caso necessário realizar as devidas modificações na hora de executar os comandos.

 

O servidor também registra as ações de reinício de sistema, podendo recuperaadas utilizando o comando:

$ last -x reboot

Para casos em que o sistema foi desligado, usa-se:

$ last -x shutdown

Um último comando que é bastante útil é o lastlog. Ele mostra a última vez em que cada usuários auutenticou no sistema. assim como no last podemos fazer uma busca por um usuário em específico utilizando:

$ lastlog -u root

Entretanto, o lastlog possui uma funcionalidade que apenas o last não é capaz de fornecer com a mesma facilidade, que é obter lista de usuários que se autenticaram nos últimos x dias. Basta que executemos:

$ lastlog -t 10

E teremos a lista de usuários que entraram no sistema nos últimos 10 dias. Também é possível pedir a lista de pessoas que acessaram a mais de x dias. Basta trocar o parâmetro -t por -b:

$ lastlog -b 10

É importante preservar todos os registros de acesso, pois os mesmos dão indícios sobre possíveis culpados ou a inocência de alguém diante à algum incidente. Pois, se o mesmo não realizou nenhum acesso durante o período do problema, é improvável que o mesmo tenha alguma relação. Ainda assim, talvez queiramos limpar o histórico de registro ou em outro caso, realizar um backup. Basta que seja apagado ou copiado o arquivo  /var/log/wtmp e o procedimento estará feito. Em relação ao lastlog o procedimento é análogo, exceto pelo arquivo que se encontra na pasta /var/log/lastlog 

É digno de nota que, o arquivo que tem essas informações armazenadas, é um arquivo binário, logo, ele não é legível para humanos e não pode ser alterado diretamente, o que poderia ocasionar o corrompimento do mesmo.

Conclusão

Com ferramentas presentes na maioria dos servidores em nuvem, pudemos facilmente obter informações valiosas sobre o histórico de acesso de usuários que, em geral podem ser colaboradores de uma organização, ou prestadores de serviços externos.

 

Utilizando Nginx como proxy reverso para otimizar sua aplicação

Em sistemas escaláveis, é importante manter uma infraestrutura adequada, de maneira que a aplicação possa suportar grandes quantidades de acesso. O aumento da capacidade do hardware pode se tornar inevitável, entretanto, é interessante avaliar se não há outras alternativas, como por exemplo, a modificação da arquitetura existente. Neste post, veremos como a utilização de um proxy reverso, nos ajuda a gerenciar os recursos de um servidor, para que possam ser aproveitados de melhor maneira, aumentando assim sua performance e segurança.

Proxy Reverso

Em primeiro lugar, precisamos entender do que se trata um proxy reverso. Um proxy reverso é um servidor de rede geralmente instalado para ficar na frente de um servidor Web. Todas as conexões originadas externamente são endereçadas para um dos servidores Web através de um roteamento feito pelo servidor proxy, que pode tratar ele mesmo a requisição ou encaminhar a requisição toda ou parcialmente a um servidor Web, que tratará dela.

Um proxy reverso repassa o tráfego de rede recebido para um ou mais servidores, tornando-o a única interface para as requisições externas. Por exemplo, um proxy reverso pode ser usado para balancear a carga de um cluster de servidores Web. O que é exatamente o oposto de um proxy convencional, que age como um despachante para o tráfego de saída de uma rede, representando as requisições dos clientes internos para os servidores externos à rede a qual o servidor proxy atende.

Configurando

É importante conhecer bem a sua atual infraestrutura de servidores, pois a configuração irá variar de ambiente para ambiente. No caso aqui apresentado, será utilizado o Nginx como proxy reverso para um servidor web, apache.

Para começar, será necessário realizar a instalação o Nginx. No sistema operacional ubuntu 18.04, é possível o fazer executando os seguintes comandos:

sudo apt-get update

sudo apt-get install nginx

 

Caso você seja usuário do docker, dentro do  meu repositório, eu disponibilizei um arquivo para configuração inicial dos serviços. Ele se encontra aqui:

https://github.com/goodeath/absamPosts/tree/master/proxy-reverso.

Basta alterá-lo de maneira que se adeque ao seu ambiente, quer seja de desenvolvimento ou em produção.

Uma vez que o nginx esteja instalado, você pode checar o status do serviço utilizando o seguinte comando:

 service nginx status

O mesmo deve retornar uma mensagem:

 

Ao acessar o navegador e digitar o endereço(domínio ou ip) em que o servidor foi instalado, a tela inicial do nginx deverá estar visível:

Como o Nginx vai ser a porta de entrada para os nossos serviços, é necessário que o mesmo fique alocado na porta 80 (por padrão ele é configurado nessa porta durante a instalação) do seu servidor, que é a mesma porta padrão de acesso às páginas web. Consequentemente seu servidor web, caso esteja no mesmo endereço de ip, entrará em conflito e então precisará ter sua porta de acesso alterada. Basta escolher qualquer porta que não seja destinada a nenhum outro serviço. Você pode conferir o conjunto de portas reservadas neste link:

https://pt.wikipedia.org/wiki/Lista_de_portas_dos_protocolos_TCP_e_UDP.

É aconselhável que, mesmo que os servidores estejam em endereços de ip diferentes, seja alterada a porta, pois torna o seu servidor menos visível para acessos externos.

Vamos fazer com que nosso nginx, faça o redirecionamento para o nosso servidor apache. Abra o arquivo /etc/nginx/conf.d/default.conf e altere o location para que ele se pareça mais com este:

Onde temos http://173.20.0.2 alterar para o endereço de ip do seu servidor. e execute o comando:

service nginx reload

Caso não haja nenhum erro após executar o comando, ao acessar o mesmo endereço, verá que não aparece mais a tela inicial do Nginx mas sim a do seu servidor. Além disso,  é possível modificar as configurações de forma que o Nginx possa servir diretamente os arquivos estáticos como html, css e javascript tornando a resposta mais rápida. Todas as requisições dinâmicas tais como as realizadas para servidores php, python, nodejs, outras apis, podem ser encaminhadas para os seus respectivos servidores, devidamente processadas e retornadas.

Vantagens

  • Como existe uma camada a mais entre o cliente e a sua aplicação, ela adquire uma “camuflagem”, não sendo diretamente visível por quem acessa externamente.
  • É simples de implementar e proporcionar ao usuário segurança de ponta contra ataques a servidores web como DDoS e DoS
  • O Proxy Reverso Nginx ajuda a criar uma carga equilibrada entre vários servidores back-end e proporciona cache para um servidor back-end mais lento
  • O Nginx não exige a configuração de um novo processo para cada nova solicitação da web vinda do cliente. Ao invés disso, a configuração padrão é para incluir apenas um processo de trabalho por CPU
  • Pode agir como um servidor Proxy Reverso para vários protocolos como HTTP, HTTPS, TCP, UDP, SMTP, IMAP e POP3
  • Ele pode operar mais de 10000 conexões com uma pequena pegada de memória. O Nginx pode operar múltiplos servidores da internet através de um único endereço de IP e entregar cada solicitação para o servidor dentro de uma LAN
  • O Nginx é um dos melhores servidores da web para melhorar o desempenho de conteúdo estático. Adicionalmente, pode ser útil servir conteúdo em cache e executar criptografia SSL para diminuir a carga do servidor
  • Pode ser útil na hora de otimizar conteúdos ao comprimi-los para melhorar o tempo de carregamento
  • O Nginx pode executar experimentos aleatórios ou testes A/B sem posicionar códigos JavaScript nas páginas.

Conclusão

Como toda e qualquer outra técnica ela precisa ser aplicada de maneira correta. Dentro de uma aplicação com 100 requisições por minuto e outra com 10 mil, a visibilidade do ganho de performance, é bem diferente, apesar de continuar existindo. Ao querer expor novos serviços, ganhamos uma simplicidade no processo, pois, basta que os mesmos sejam configurados e posteriormente alterar as configurações no proxy reverso de forma que os tornem visíveis, oferecendo assim um controle centralizado e performático.

Sair da versão mobile