+53
-1
@@ -75,7 +75,54 @@ executar `php artisan queue:restart` após alterações. Não executar outro sup
|
||||
para este mesmo worker. Configurar rotação de logs Laravel e monitorização de jobs
|
||||
falhados e espaço em disco; a aplicação não remove o histórico de auditoria.
|
||||
|
||||
## 5. Verificação final
|
||||
## 5. Análise antimalware de documentos
|
||||
|
||||
Instalar ClamAV pelo gestor de pacotes suportado pela distribuição (`clamav`,
|
||||
`clamav-daemon` e `clamav-freshclam`). Rever e incorporar os limites de
|
||||
`clamd.conf` e `freshclam.conf` deste directório nos ficheiros da distribuição;
|
||||
preservar as restantes opções de serviço. O `TCPSocket` deve escutar apenas em
|
||||
`127.0.0.1:3310` neste perfil co-localizado. Nunca publicar a porta 3310 no
|
||||
Nginx nem na firewall. O modelo de Docker usa uma rede privada própria e não
|
||||
tem mapeamento de porta para o host.
|
||||
|
||||
Actualizar as assinaturas e iniciar os serviços:
|
||||
|
||||
```sh
|
||||
sudo freshclam
|
||||
sudo systemctl enable --now clamav-daemon clamav-freshclam
|
||||
sudo ss -ltnp | grep ':3310'
|
||||
sudo -u www-data php artisan malware:health
|
||||
```
|
||||
|
||||
Verificar que `malware:health` mostra o motor e a data das assinaturas dentro da
|
||||
janela configurada. A aplicação devolve `inconclusive` se o serviço estiver
|
||||
indisponível ou as assinaturas estiverem antigas. A fila continua a receber o
|
||||
upload privado; não o activa nem publica. `investemoz-queue.service` processa a
|
||||
mesma fila usada pela aplicação. O timeout do job (150 s) fica abaixo do
|
||||
`retry_after` recomendado (210 s).
|
||||
|
||||
Após aplicar a migração de antimalware, listar documentos existentes sem uma
|
||||
análise registada e despachar lotes pequenos:
|
||||
|
||||
```sh
|
||||
php artisan documents:scan-pending --limit=50
|
||||
php artisan documents:scan-pending --limit=50 --apply
|
||||
```
|
||||
|
||||
O primeiro comando só conta registos. O segundo coloca até cinquenta análises
|
||||
na fila e pode ser repetido; não muda a revisão editorial nem publica conteúdo.
|
||||
Monitorizar a fila, falhas, estados no painel de Documentos e o log do serviço.
|
||||
Para recuperar uma fila falhada, corrigir primeiro ClamAV/assinaturas e então
|
||||
usar `php artisan queue:retry all` ou a acção de nova tentativa no painel.
|
||||
Ficheiros infectados e inconclusivos permanecem privados; não são apagados.
|
||||
|
||||
`malware_scan_status=clean` significa somente que ClamAV não detectou ameaça
|
||||
nos bytes cujo hash está registado. Não equivale a garantia de segurança nem
|
||||
altera a publicação. Para o ambiente Linux real, confirmar primeiro distribuição,
|
||||
pacotes e unidades systemd; este repositório não tem acesso a esse servidor e,
|
||||
por isso, não o declara configurado.
|
||||
|
||||
## 6. Verificação final
|
||||
|
||||
```sh
|
||||
cd /var/www/investemoz
|
||||
@@ -94,3 +141,8 @@ Testar restauração de backup numa instância separada antes de colocar dados r
|
||||
|
||||
Referências: [Nginx try_files](https://nginx.org/en/docs/http/ngx_http_core_module.html#try_files),
|
||||
[systemd.service](https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html).
|
||||
|
||||
Os uploads ZIP e Office Open XML também requerem a extensão PHP `ZipArchive`
|
||||
(`php8.5-zip` em pacotes Debian compatíveis). O Laravel aplica um limite separado
|
||||
de 100 MiB de expansão declarada e 1.000 entradas antes de pedir a análise ao
|
||||
ClamAV. Sem suporte ZIP, estes ficheiros ficam inconclusivos; nunca são aprovados.
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Merge these directives into the distribution's clamd.conf after review.
|
||||
# Laravel and clamd must run on the same host; the TCP listener is loopback-only.
|
||||
DatabaseDirectory /var/lib/clamav
|
||||
LocalSocket /run/clamav/clamd.ctl
|
||||
LocalSocketMode 660
|
||||
TCPSocket 3310
|
||||
TCPAddr 127.0.0.1
|
||||
User clamav
|
||||
MaxThreads 2
|
||||
MaxQueue 16
|
||||
CommandReadTimeout 5
|
||||
ReadTimeout 120
|
||||
SendBufTimeout 30
|
||||
MaxScanTime 120000
|
||||
MaxFileSize 25M
|
||||
MaxScanSize 100M
|
||||
MaxRecursion 10
|
||||
MaxFiles 1000
|
||||
StreamMaxLength 25M
|
||||
AlertEncrypted yes
|
||||
AlertExceedsMax yes
|
||||
LogTime yes
|
||||
@@ -0,0 +1,6 @@
|
||||
# Merge into the distribution's existing freshclam.conf after review.
|
||||
DatabaseDirectory /var/lib/clamav
|
||||
DatabaseMirror database.clamav.net
|
||||
Checks 12
|
||||
NotifyClamd /etc/clamav/clamd.conf
|
||||
LogTime yes
|
||||
@@ -1,14 +1,15 @@
|
||||
[Unit]
|
||||
Description=InvestMoz Laravel database queue
|
||||
After=network-online.target
|
||||
After=network-online.target clamav-daemon.service
|
||||
Wants=network-online.target
|
||||
Wants=clamav-daemon.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=www-data
|
||||
Group=www-data
|
||||
WorkingDirectory=/var/www/investemoz
|
||||
ExecStart=/usr/bin/php8.5 /var/www/investemoz/artisan queue:work database --queue=default --sleep=3 --tries=3 --timeout=30 --max-time=3600
|
||||
ExecStart=/usr/bin/php8.5 /var/www/investemoz/artisan queue:work database --queue=default --sleep=3 --tries=3 --timeout=150 --max-time=3600
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
TimeoutStopSec=60
|
||||
|
||||
@@ -20,7 +20,16 @@ SESSION_SAME_SITE=lax
|
||||
SESSION_DOMAIN=null
|
||||
CACHE_STORE=database
|
||||
QUEUE_CONNECTION=database
|
||||
DB_QUEUE_RETRY_AFTER=90
|
||||
DB_QUEUE_RETRY_AFTER=210
|
||||
MALWARE_SCANNER=clamd
|
||||
CLAMD_HOST=127.0.0.1
|
||||
CLAMD_PORT=3310
|
||||
CLAMD_TIMEOUT_SECONDS=120
|
||||
CLAMD_MAX_SIGNATURE_AGE_HOURS=48
|
||||
CLAMD_MAX_FILE_BYTES=20971520
|
||||
CLAMD_MAX_STREAM_BYTES=26214400
|
||||
CLAMD_MAX_DECOMPRESSED_BYTES=104857600
|
||||
CLAMD_MAX_ARCHIVE_ENTRIES=1000
|
||||
PORTAL_MANAGER_EMAILS=comercial@tempo.co.mz
|
||||
PORTAL_NOTIFICATIONS_ENABLED=false
|
||||
PORTAL_NOTIFICATION_RECIPIENTS=
|
||||
|
||||
Reference in New Issue
Block a user