Instalação Crashfix

Jeison C. | Jul 24, 2024 min read

Preambulo (Pule se já tem o WSL2 instalado)

Estes passos a seguir resumem as informações do tutorial “Como instalar o Linux no Windows com o WSL”.

Montar o WSL

Inicie um PowerShell como administrador.

  • Habilitar o subsistema do Windows para Linux:
   dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  • Habilitar o recurso de Máquina Virtual:
   dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • Definir o WSL 2 como a versão padrão:
		wsl --set-default-version 2
  • Listar as distros disponíveis:
  wsl --list --online
  • Instalar a Distro Debian:
	wsl --install Debian

Reinicie o computador, abra a distro instalada e crie seu login. Em caso de dúvidas, revise o tutorial original.

Configurando Chave SSH (Opcional)

Abra o terminal Debian como root e atualize o gerenciador de pacotes com o comando:

  apt update

Rodar o comando de instalação do OpenSSH:

apt-get install openssh-client

Prosseguir com o instalação.

Sair do root com o comando

  exit

Gerar a sua chave SSH nova com o comando:

  ssh-keygen -t ed25519 -C "Seu Email"

Abrir o conteúdo da chave seguindo os comandos:

   cd ~
   cd .ssh
   cat id_ed25519.pub

Copiar o conteúdo inteiro que foi exibido no seu terminal. Ex: ssh-ed25519 AAAAAABBBBBBBBCCCCCCCCDDDDDDDD/EEEEFFFFG seuemail@hotmail.com

Colocar o conteúdo na sua conta do GitHub, em Settings -> SSH and GPG Keys -> New SSH Key Dê um titulo coerente, o tipo = autenticação e por fim cole o conteúdo copiado no espaço designado a chave, finalize.

Já deixe o Git instalado para que seja possível clonar os repositórios. Utilize o comando abaixo:

 sudo apt install git

Crashfix - O que é?

O CrashFix surgiu da necessidade de ter um sistema de telemetria de falhas. Quando ocorre um crash, o CrashRpt gera um arquivo de minidump, empacota e envia ao servidor CrashFix, permitindo identificar onde o problema ocorreu e facilitando a correção. Novos recursos incluem envio de imagens, arquivos do projeto, vídeos, hardware do computador e versão do software. Os arquivos ficam por 90 dias, mas as informações do crash permanecem indefinidamente para pesquisa.

Arquitetura e implantação

Guia para implantação seguindo a documentação oficial.

Clonando repositório do CrashFix WebApp

Crie a pasta e clone o projeto:

  cd ~
  mkdir crashfix
  cd crashfix

Clone o repositório:

  git clone https://github.com/jsonzilla/crashfix_webapp.git

Instrução de Instalação do servidor CrashFix WebApp

Entre no repositório clonado.

  cd ~
  cd crashfix/crashfix_webapp

Instalar os componentes necessários para o PHP

  sudo apt update
  sudo apt upgrade
  sudo apt install -y php
  sudo apt-get install libapache2-mod-php php-mysql php-xml

Instalar e iniciar o WebServer Apache:

  sudo apt-get install apache2
  sudo service apache2 restart
  sudo service apache2 status

Instalar o MariaDB

 sudo apt update
 sudo apt install mariadb-server

Configuração básica de segurança

 sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, you'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):

Aperte somente Enter!

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] 

Escolha n Enter!

Change the root password? [Y/n]

Esolha n Entre!

Para as perguntas restantes escolha Y!

Cheche o servidor

  sudo service mariadb restart
  sudo service mariadb status

Definindo usuário admin do banco

sudo mariadb
> GRANT ALL ON *.* TO 'admin_user'@'localhost' IDENTIFIED BY 'admin_password';
> CREATE DATABASE crashfix_db;
> CREATE USER 'crashfix_user'@'localhost' IDENTIFIED BY  'user_password';
> GRANT ALL PRIVILEGES ON crashfix_db.* TO 'crashfix_user'@'localhost';
> FLUSH PRIVILEGES;

Previnindo o erro de GROUP_BY

Editar o /etc/mysql/my.cnf e adicionar ao final

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

E reiniciar o serviço

sudo systemctl start mysql.service

Instalacão do CrashFix Service

Baixando e Compilando o CrashFix Service

Baixe o repositório do CrashFix Service:

  https://github.com/jsonzilla/crashfix_service

Veja o README para instruções de como compilar o serviço.

Enviando CrashFix para o servidor

 scp -P 22 -i .\crashfix12.pem .\crashfix-service-1.0.5-Linux-amd64.deb user@server_ip:/home/user/
 scp -P 22 -i .\crashfix12.pem .\crashfix_web.zip user@server_ip:/home/user/   

Instalando o serviço

 sudo dpkg -i crashfix-service-1.0.5-Linux-amd64.deb
 sudo update-rc.d -f crashfixd defaults
 sudo service crashfixd start
 ps aux | grep crashfixd

Altera o path da configuração do crashfix se necessario

sudo nano /etc/crashfix/crashfixd.conf
WEB_ROOT_DIR = /var/www/html/

Defina a informações de licença em /usr/share/crashfix/licenses/crashfix.lic

Configurando o PHP

post_max_size = 1024M
upload_max_filesize = 1024M
extension=curl
extension=fileinfo
extension=gd
extension=gettext
extension=intl
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
extension=openssl
extension=pdo_mysql
extension=sockets

Optional

session.cookie_lifetime = 1800

Configuração do servidor CrashFix WebApp

Edite o arquivo user_params.ini dentro de crashfix_webapp/protected/config/user_params.ini com as suas informações Copie toda a pasta para o root do servidor

  cd /var/www/hmtl
  sudo cp -r /home/<SEU_NOME_DE_USUARIO>/crashfix/crashfix_webapp .

Aplique as permissões necessárias de escrita e leitura da pasta para o Apache

  sudo chmod -R 0755 crashfix_webapp
  sudo chown -R www-data:www-data crashfix_webapp

Crie e inicialize o banco de dados (precione “y” quando solicitado)

  sudo php crashfix_webapp/protected/yiic.php migrate

Neste ponto já é possível logar como root no servidor utilizando :

  • Login: root
  • Senha: rootpwd

Será necessário criar uma nova senha para o root

Firewall

sudo apt update
sudo apt install ufw
sudo ufw allow http
sudo ufw allow https
sudo ufw allow ssh
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 8080/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

Limitar a 25 conexões por IP simultâneas

iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j REJECT --reject-with tcp-reset

Fail2Ban Install

Para instalar e configurar o fail2ban no Debian, siga os passos abaixo:

Passo 1: Instalar o fail2ban

  1. Atualize a lista de pacotes:

    sudo apt update
    
  2. Instale o fail2ban:

    sudo apt install fail2ban
    

Passo 2: Configurar o fail2ban

  1. Crie uma cópia do arquivo de configuração padrão para edição:

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  2. Edite o arquivo jail.local:

    sudo nano /etc/fail2ban/jail.local
    

    No arquivo, você pode configurar as opções gerais e específicas para cada serviço. Algumas das configurações importantes incluem:

    • Configurações Gerais (no início do arquivo):

      [DEFAULT]
      bantime  = 600
      findtime  = 600
      maxretry = 5
      backend = systemd
      
      • bantime: Tempo em segundos que o IP será banido (por exemplo, 600 segundos = 10 minutos).

      • findtime: Período em segundos durante o qual se ocorrem maxretry falhas de login, o IP será banido.

      • maxretry: Número de tentativas de login falhadas antes de banir o IP.

  3. Habilitar e configurar as jails para Apache e SSH:

    No arquivo jail.local, procure as seções [sshd] e [apache-auth] (ou outras relacionadas ao Apache, como [apache-badbots], [apache-overflows], etc.) e ajuste conforme necessário:

    [sshd]
    enabled = true
    port    = ssh
    maxretry = 5
    

    Certifique-se de que enabled está definido como true para ativar a jail.

Passo 3: Reiniciar o fail2ban

Depois de fazer as configurações, reinicie o serviço fail2ban para aplicar as mudanças:

sudo systemctl restart fail2ban

Passo 4: Verificar o Status do fail2ban

Para verificar se o fail2ban está funcionando corretamente, use:

sudo fail2ban-client status

Para verificar o status de uma jail específica (por exemplo, sshd):

sudo fail2ban-client status sshd

Isso deve instalar e configurar o fail2ban no Debian, protegendo seu servidor contra tentativas de login maliciosas no Apache e SSH.

Redirecionar porta 8080

sudo nano /etc/apache2/ports.conf

Adicione a porta 8080 as portas ouvidas e reinicie o serviço.

Auto Delete no Crontab

Instalar o crom e habilitar

sudo apt install cron
sudo systemctl enable cron
sudo systemctl start cron

Criar o script no /script/clean_crashfix_90_days.sh

find /var/www/html/protected/data/crashReports/ -type f -ctime +100 -delete

E com crontab adicionar algo assim:

0 9,21 * * 1 /scripts/clean_crashfix_120_days.sh