O site do Virt-Manager mostra que para instalar ele é simples basta digitar:
apt-get install virt-manager
Mas você precisa digitar a senha para fazer sudo cada vez que abre ao menos que coloque seus usuários no grupo libvirt:
sudo usermod -aG libvirt aluno
sudo usermod -aG libvirt emazolini
Se quiser acessar remoto vai precisar de um netcat com opção -U:
sudo apt install netcat-openbsd
Por fim você vai ficar feliz até voltar no outro dia e perceber que sua maquina não sobe mais por um erro de rede.
Pra resolver isso ative a rede default:
$ sudo virsh net-list --all
Nome Estado Auto-iniciar Persistente
-------------------------------------------------
default inativo não sim
$ sudo virsh net-start default
Rede default iniciada
$ sudo virsh net-autostart default
A rede default foi marcada como auto-iniciada
$ sudo virsh net-list --all
Nome Estado Auto-iniciar Persistente
------------------------------------------------
default ativo sim sim
Esse blog é pra postar dicas sobre IT. Coisas que eu estou estudando. Coisas que não devo esquecer.
quinta-feira, 25 de setembro de 2025
Virt-Manager
segunda-feira, 22 de setembro de 2025
ipv6 nginx proxy manager para Docker < 27
Eu preciso encaminhar acesso ipv6 para alguns servidores.
Depois de atribuir o ip ao servidor host o encaminhamento de porta do ipv6 não funcionava.
Pode ser que vc queira extender a rede ipv6 até o seus container não é o meu caso eu preciso que o Docker faça o NAT e encaminhe a porta para o container. Mas se vc tiver ipv6 pra estender a rede só de declarar o ipv6 não ULA ele ira funcionar se vc habilitar o roteamento ipv6 no linux.
BUG o Docker não é inteligente para criar varias redes só com uma declaração de range base /48 com size /64, percebi isso quando fui criar a segunda rede. Então vc tem que criar varias entradas, espero que isso mude logo.
O parâmetro ip6tables, que faz o nat, só funciona com experimental.
Isso tudo eu estava usando versão:
# docker --version
Docker version 26.1.2, build 211e74b
# docker --version
Docker version 24.0.4, build 3713ee1
Para versão maior que v28
{
"ipv6": true,
"ip6tables": true
}
Atenção pq algumas portas como a 80 funcionam sem o ip6tables true, o que me fez perder 2 dias procurando um firewall na port 443 que não existia. Se funciona para 80 pq não funcionaria para 443? Pois é! Só sei que foi assim.
Então minha solução foi criar o arquivo /etc/docker/daemon.json para versões anteriores:
{
"ipv6": true,
"fixed-cidr-v6": "fd00:2705:0001::/64",
"experimental": true,
"ip6tables": true,
"default-address-pools": [
{
"base": "172.20.0.0/16",
"size": 24
},
{
"base": "fd00:2705:0002::/48",
"size": 64
},
{
"base": "fd00:2705:0003::/48",
"size": 64
},
{
"base": "fd00:2705:0004::/48",
"size": 64
},
{
"base": "fd00:2705:0005::/48",
"size": 64
},
{
"base": "fd00:2705:0006::/48",
"size": 64
},
{
"base": "fd00:2705:0007::/48",
"size": 64
},
{
"base": "fd00:2705:0008::/48",
"size": 64
},
{
"base": "fd00:2705:0009::/48",
"size": 64
},
{
"base": "fd00:2705:0010::/48",
"size": 64
},
{
"base": "fd00:2705:0011::/48",
"size": 64
},
{
"base": "fd00:2705:0012::/48",
"size": 64
},
{
"base": "fd00:2705:0013::/48",
"size": 64
},
{
"base": "fd00:2705:0014::/48",
"size": 64
},
{
"base": "fd00:2705:0015::/48",
"size": 64
},
{
"base": "fd00:2705:0016::/48",
"size": 64
}
]
}
segunda-feira, 8 de setembro de 2025
Broadcom Raid
Tenho 2 servidores DELL e preciso olhar como esta a saúde do RAID e dos discos.
Baixei o STORCLI_SAS3.5_P36 de https://www.broadcom.com/support/download-search?dk=storcli
wget https://docs.broadcom.com/docs-and-downloads/host-bus-adapters/host-bus-adapters-common-files/sas_sata_nvme_12g_p36/STORCLI_SAS3.5_P36.zip
descompactei e na pasta ubuntu tem um .deb
unzip STORCLI_SAS3.5_P36.zip
cd STORCLI_SAS3.5_P36/univ_viva_cli_rel/Unified_storcli_all_os/Ubuntu/
dpkg -i storcli_007.3503.0000.0000_all.deb
Foi necessário criar um link simbolico para executar o comando de forma mais comoda.
ln -s /opt/MegaRAID/storcli/storcli64 /usr/local/bin/storcli
Alguns comandos uteis:
storcli show
storcli /c0/vall show
storcli /c0/eall/sall show
storcli /c0 show all
Para saber o nome do seu servidor também tem um comando interessante:
dmidecode -s system-product-name
Para saber detalhes dos discos físicos:
smartctl -a /dev/sda -d megaraid,0
smartctl -a /dev/sda -d megaraid,1
smartctl -a /dev/sda -d megaraid,2
smartctl -a /dev/sda -d megaraid,3
terça-feira, 2 de setembro de 2025
DNS Seguro e Safe-Search - Restringindo a internet de forma simples
Controles de DNS na Ludicando
Na Ludicando alguns controles eu faço no Mikrotik usando DNS restritivo e alterando alguns domínios para não responder e outros para tratarem o conteúdo para ser seguro para crianças.
Abaixo o link para o script (com comentários citando as fontes de cada produto):
https://gist.github.com/eduardomazolini/77466da39e7940b7d652b2bb5af6ef55
Serviços de DNS confiáveis/populares
OpenDNS
IPv4
208.67.222.222
208.67.220.220
IPv6
2620:119:35::35
2620:119:53::53
DoH
https://doh.opendns.com/dns-query
OpenDNS — Family Shield
IPv4
208.67.222.123
208.67.220.123
DoH
https://doh.familyshield.opendns.com/dns-query
Cloudflare
IPv4
1.1.1.1
1.0.0.1
IPv6
2606:4700:4700::1111
2606:4700:4700::1001
DoH
https://cloudflare-dns.com/dns-query
Cloudflare — Block malware
IPv4
1.1.1.2
1.0.0.2
IPv6
2606:4700:4700::1112
2606:4700:4700::1002
DoH
https://security.cloudflare-dns.com
Cloudflare — Block malware and adult content
IPv4
1.1.1.3
1.0.0.3
IPv6
2606:4700:4700::1113
2606:4700:4700::1003
DoH
https://family.cloudflare-dns.com
https://one.one.one.one/dns-query?name=cloudflare.com
Docs
https://developers.cloudflare.com/1.1.1.1/encryption/
Google Public DNS
IPv4
8.8.8.8
8.8.4.4
IPv6
2001:4860:4860::8888
2001:4860:4860::8844
DoH
https://dns.google/dns-query (RFC 8484 - GET e POST)
https://dns.google/resolve? (API JSON - GET)
Docs
https://developers.google.com/speed/public-dns/docs/doh?hl=pt-br
AdGuard DNS — Servidores padrão
AdGuard DNS bloqueará anúncios e rastreadores.
IPv4
94.140.14.14
94.140.15.15
IPv6
2a10:50c0::ad1:ff
2a10:50c0::ad2:ff
DoH
https://dns.adguard-dns.com/dns-query
Página
https://adguard-dns.io/pt_br/public-dns.html
AdGuard DNS — Servidores sem filtragem
IPv4
94.140.14.140
94.140.14.141
IPv6
2a10:50c0::1:ff
2a10:50c0::2:ff
DoH
https://unfiltered.adguard-dns.com/dns-query
AdGuard DNS — Proteção familiar
Bloqueia anúncios, rastreadores, conteúdo adulto e ativa a Pesquisa Segura / Modo seguro quando possível.
IPv4
94.140.14.15
94.140.15.16
IPv6
2a10:50c0::bad1:ff
2a10:50c0::bad2:ff
DoH
https://family.adguard-dns.com/dns-query
Referência adicional
Admin Console Google Workspace (suporte)
https://support.google.com/a/answer/6214622
Wake on Lan - Debian
Para ativar os PCs que suspenderam por tempo e ter acesso remoto.
1) Instalar o ethtool
sudo apt update
sudo apt install ethtool
2) listar as interfaces
ip addr
No meu caso identifiquei enp2s0
3) Crie o arquivo de serviço como root
sudo nano /etc/systemd/system/wol@.service
4) coloque o conteúdo
[Unit]
Description=Wake-on-LAN para %i
After=network.target suspend.target hibernate.target
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -s %i wol g
[Install]
WantedBy=multi-user.target suspend.target hibernate.target
5) Ative o serviço e desta vez observe que o nome do serviço contém a interface
sudo systemctl enable wol@enp2s0.service
sexta-feira, 29 de agosto de 2025
Epson L1800 - CUPS Linux
Infelizmente a Epson não tem drive para ARM nem para sistema de 32bits i386. Pq eu queria usar minha OrangePi ou RapsbarryPi como servidor de impressão. Também tentei deixar um netbook Atom antigo que é 32Bits.
No fim tive que deixar um notebook Positivo de 32G de disco e 1Gb de RAM.
wget https://download3.ebz.epson.net/dsc/f/03/00/15/64/76/69bb3d019d2d4a6b1eeab2fbe4db5c081d2b6b86/epson-inkjet-printer-201312w_1.0.1-1_amd64.deb
apt install cups
apt install printer-driver-gutenprint printer-driver-foo2zjs printer-driver-ptouch ghostscript cups-filters libcupsimage2
apt install ./epson-inkjet-printer-201312w_1.0.1-1_amd64.deb
Esses pacotes acima resolvem erros como:
Filter failed
EPSON_L1800_Series: error while loading shared libraries: libcupsimage.so.2: cannot open shared object file: No such file or directory
PID 0000 (/usr/lib/cups/filter/gstoraster) exited with no errors.
Para acessar remotamente edite:
/etc/cups/cupsd.conf
Comente:
#Listen localhost:631
adicione:
Port 631
Procure os blocos <Location />, <Location /admin>, e <Location /admin/conf> e adicione as linhas abaixo dentro de cada bloco:
Allow @LOCAL
Ative o serviço:
sudo systemctl enable cups
sudo systemctl start cups
Se precisar reinicie o serviço:
sudo systemctl restart cups
Adicione seu usuário como autorizado:
sudo usermod -aG lpadmin $(whoami)
FONTE: https://download.ebz.epson.net/dsc/search/01/search/
O site da Epson em português não tem drive para Linux.
sábado, 16 de agosto de 2025
PIX com TAG NFC
Fazer um pix parece muito fácil não é?
- Destravar o celular com Biometria
- Tem que achar o app do banco
- Logar no app com senha do app
- Ir na área de pix
- Escolher pagar pix com QR-Code
- Mirar a câmera no QR-Code
- Aguardar o foco da câmera funcionar
- Fazer alguns passos de confirmação
- Digitar sua senha de pagamento
Nesse processo você digitou no meio da rua 2 senhas do seu banco.
Eu prefiro pagar com débito:
- Destravar o celular com Biometria
- Encostar o celular
Mas se der para fazer PIX por aproximação?
- Destravar o celular com Biometria
- Encostar o celular
- Digitar o valor
- Confirmar com Biometria
Não é tão fácil como débito, mas dá para pagar dando algum benefício para o vendedor.
Primeiro compre uma TAG adesiva ou um cartão NFC.
Baixe o app NFC Tool: https://play.google.com/store/apps/details?id=com.wakdev.wdnfc
Usando o app do seu banco crie um pagamento PIX com ou sem valor, com identificação se preferir. Copie o PIX "PIX Copia e Cola".
No site https://www.urlencoder.org/pt/ você pode codificar o seu PIX no formato "URL Encoder". Isso vai remover espaços e substituir por "%20" e modificar algum caráter especial se existir.
Agora, no NFC Tool, você vai gravar no cartão uma URL Personalizada. Digite:
pix://localhost?qr=
Cole seu PIX codificado, vai ficar algo assim:
pix://localhost?qr=00020126650014br.gov.bcb.pix01.....B9rp6304E416
Escolha gravar no cartão e pronto.
Proteja seu cartão com senha para nenhum engraçadinho trocar o PIX do seu cartão e direcionar seus pagamentos para ele.
FONTE: https://www.bcb.gov.br/content/estabilidadefinanceira/pix/especificacoes_pix_aproximacao_android.pdf
quarta-feira, 23 de julho de 2025
FreeRadius bypass
Imaginem se um dia der M... você perdeu seu banco de dados, mas precisa acessar seus equipamentos, precisa liberar o mínimo de acesso aos clientes.
Eu ainda não passei por isso mas a alguns dias o MKSolutions deu uma travada quando eu atualizei um Mikrotik ele registra uma conta com data de 1900 e não remove, eu uso NTP em todos os equipamentos mas algo acontece e sempe que atualizo da verão 6 pra 7 o MKSolutions trava.
Bom isso me deixou muito incomodado e fiquei alguns dias batendo cabeça pra pensar quanto tempo eu levo pra levantar um freeradius genérico.
O modo mais rápido que achei foi baixar um conainer docker
docker run --name radius -p 1812-1813:1812-1813/udp -d freeradius/freeradius-server:latest -X
Agora a primeira limitação é que vc precisa saber o secret se seu nas manda o secret.
/etc/freeradius/clients.conf
client generico {
ipaddr = 0.0.0.0/0
proto = *
secret = testing123 #ajuste esse valor ou nada vai funcionar
require_message_authenticator = no
nas_type = other
}
Para autenticar os clientes vc tem 4 protocolos configurados mas pense que são 2 formas:
- PAP onde a senha é enviada em texto claro e vc pode aceitar qualquer senha.
- CHAP/MSCHAP/MSCHAP2 onde a senha não é enviada e vc ainda precisa retornar uma confirmação que vc sabia qual era a senha. Se todos os seus clientes tiverem usuários diferentes mas a mesma senha também não é um problema.
Para acessar o Mikrotik vc pode querer usar ssh e ai fica fácil nem te pede a senha, ou pode insistir em usar o Winbox que usa CHAP. Vc precisa saber qual é a senha.
Eu criei um modulo python3 vc vai olhar e se souber o minimo vai sacar o que deve mudar nele.
O arquivo radiusd.py fica em /etc/freeradius/mods-config/python3/radiusd.py mas só usei uma constante RLM_MODULE_OK o valor dela é 2 numérico se quiser colocar direto e não usar import.
#! /usr/bin/env python3
import radiusd
def authorize(p):
reply = (
('Mikrotik-Group', 'full'), #libera acesso ao mikrotik
('Mikrotik-Address-List', 'radiusList'),
('Mikrotik-Rate-Limit', '440m/880m 0k/0k 0k/0k 0/0 8 60m/60m'),
('Huawei-Output-Average-Rate', '829440000'),
('Huawei-Input-Average-Rate', '409600000'),
('Framed-Pool', 'poolRadius'),
('Framed-IP-Address', '192.168.100.254'),
('Mikrotik-Wireless-PSK', '1234568'),
)
config = (
('Cleartext-Password', 'senha_padrao'), # necessario para mschap chap
('Auth-Type', 'authmod'),
)
return (radiusd.RLM_MODULE_OK, reply, config)
def authenticate(p):
request = dict(p)
print("*** authenticate ***")
print(request.get("User-Name", "sem nome"))
return radiusd.RLM_MODULE_OK
Você vai precisar declarar seu modulo:
/etc/freeradius/mods-enabled/python3
python3 authmod {
module = authmod
python_path = /etc/freeradius/python3
mod_authorize = authmod
func_authorize = authorize
mod_authenticate = authmod
func_authenticate = authenticate
}
E depois de declarar precisa usar então configurar o seu uso no "site".
Aqui temos uma decisão para tomar.
- Se vc tirar # do que esta no arquivo abaixo vc consegue acesso ao mikrotik por ssh sem colocar senha, mas não vai conseguir acessar por winbox nem autenticar clientes pppoe por chap, só vão logar por PAP no PPPoE.
- Sem tirar esse comentário qualquer usuário que usar a "senha_padrao" tem acesso. Ou seja não tem muita vantagem.
/etc/freeradius/sites-enabled/default
authorize {
authmod
}
authenticate {
# só tire o comentário para acessar por ssh sem senha
#Auth-Type mschap {
# authmod
#}
authmod
}
Espero que seja útil para alguém
Se vc não domina muito bem docker vou deixar alguns comandos que usei muito:
Copiar da sua maquina para o container e executar alguns comando dentro dele:
docker cp mods-available/python3 radius:/etc/freeradius/mods-available/python3 docker exec radius ln -s /etc/freeradius/mods-available/python3 /etc/freeradius/mods-enabled/python3 docker exec radius mkdir /etc/freeradius/python3 docker cp python3/authmod.py radius:/etc/freeradius/python3/authmod.py docker cp python3/__init__.py radius:/etc/freeradius/python3/__init__.py docker exec radius cp /etc/freeradius/mods-config/python3/radiusd.py /etc/freeradius/python3/ docker cp sites-available/default radius:/etc/freeradius/sites-available/default
Reiniciar o contaner e olhar o log
docker stop radius docker start radius docker logs radius
Exibir arquivos de configuração sem comentários:
docker exec radius grep -vE '^\s*$|^\s*#' /etc/freeradius/clients.conf
Entrar no shell do container:
docker exec -it radius bash
Testar o login de forma básica
radtest edu 123 localhost 0 testing123
sábado, 19 de julho de 2025
UISP/UNMS não adota M5
Problemas com Nginx Proxy Manager e rádios M5
Eu uso nginx proxy manager e estava tendo problema em conectar meus rádios M5.
Infelizmente a solução reduziu a segurança de todos os meus outros serviços deste proxy porque não achei uma solução que poderia ser aplicada a um único host.
Outro problema: não sei deixar o meu NPM configurado se recriar o container.
Solução: criar certificados na Let's Encrypt do tipo RSA
Para isso eu editei o /etc/letsencrypt.ini alterando key-type = ecdsa para key-type = rsa.
/etc/letsencrypt.ini
text = True
non-interactive = True
webroot-path = /data/letsencrypt-acme-challenge
key-type = rsa
elliptic-curve = secp384r1
preferred-chain = ISRG Root X1
Alteração no algoritmo de troca de chave DH
Para isso precisa criar o arquivo dhparam.pem com o comando:
openssl dhparam -out /etc/nginx/dhparam.pem 2048
Após criar o arquivo precisa ser indicado na configuração com ssl_dhparam, eu escolhi fazer essa configuração em /etc/nginx/conf.d/include/ssl-ciphers.conf
/etc/nginx/conf.d/include/ssl-ciphers.conf
# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'DHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-A
ES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-PO
LY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
ssl_dhparam /etc/nginx/dhparam.pem;
Por último precisa reiniciar o nginx.
Configuração no container
Como estou usando container eu copiei e editei localmente os 2 arquivos de configuração depois enviei tudo para o container com os comandos:
docker exec nginx-proxy-manager-app-1 openssl dhparam -out /etc/nginx/dhparam.pem 2048
docker cp letsencrypt.ini nginx-proxy-manager-app-1:/etc/letsencrypt.ini
docker cp ssl-ciphers.conf.bkp nginx-proxy-manager-app-1:/etc/nginx/conf.d/include/ssl-ciphers.conf
docker restart nginx-proxy-manager-app-1
Testando a configuração
Para testar usei o nmap:
nmap --script ssl-enum-ciphers -p 443 uisp.xxxxxx.com.br
sexta-feira, 4 de julho de 2025
Expadir LVM em maquina virtual
Para expandir o disco precisamos:
-
Com fdisk
- apagar a partição
- Recriar a partição com o mesmo setor de inicio
IMPORTANTE: Não apagar a "LVM2_member signature"
# fdisk /dev/vdb Command (m for help): p Disk /dev/vdb: 30 GiB, 32212254720 bytes, 62914560 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x986b9785 Device Boot Start End Sectors Size Id Type /dev/vdb1 2048 20971519 20969472 10G 8e Linux LVM Command (m for help): d 1 Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914559, default 62914559): Created a new partition 1 of type 'Linux' and of size 30 GiB. Partition #1 contains a LVM2_member signature. Do you want to remove the signature? [Y]es/[N]o: n Command (m for help): w The partition table has been altered. Syncing disks. -
Atualizar o PV:
# pvresize /dev/vdb1 Physical volume "/dev/vdb1" changed 1 physical volume(s) resized or updated / 0 physical volume(s) not resized -
Expandir a LV:
# lvextend -l +100%FREE /dev/mediaVG/media Size of logical volume mediaVG/media changed from 10.00 GiB (2560 extents) to 30.00 GiB (7680 extents). Logical volume mediaVG/media successfully resized. -
Expandir o sistema de arquivos ext3/ext4:
Para sistemas de arquivos ext3 ou ext4, você precisará usar o comando
resize2fspara expandir o sistema de arquivos para usar todo o espaço disponível no LV.# resize2fs /dev/mediaVG/media resize2fs 1.45.5 (07-Jan-2020) Filesystem at /dev/mediaVG/media is mounted on /mnt/media; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 4 The filesystem on /dev/mediaVG/media is now 7864320 (4k) blocks long.IMPORTANTE: Se o sistema de arquivos estiver montado, o resize2fs fará a expansão online. Se não estiver montado, adicione a opção
-fpara forçar a verificação do sistema de arquivos antes de expandir.Verificando o espaço disponível após a expansão:
# df -h /mnt/media Filesystem Size Used Avail Use% Mounted on /dev/mapper/mediaVG-media 30G 8G 21G 28% /mnt/media
Dica importante:
Se você estiver usando XFS como sistema de arquivos, o processo é diferente. Para XFS você deve usar:
# xfs_growfs /mnt/media
E o sistema de arquivos deve estar montado durante a operação.