Quero verificar convenientemente as portas em que os processos estão escutando e gerar facilmente as portas e serviços em uso.
Olá, sou um inútil.
Ora, ora, parece que uma frase que me lembro de ter ouvido em algum lugar está sendo usada no título... Ainda hoje, às vezes penso que é um bom nome de site. Nestes dias, acabei de registrar uma pressão arterial baixa de 60-100 no meu check-up de saúde.
O valor medido na segunda vez foi definitivamente pressão baixa, então, naturalmente, o primeiro valor foi usado.
Introdução
De repente,
pensei: 'Quero gerar de forma clara quais são as portas em uso e seus serviços'.
A razão é:
- Ao operar pessoalmente, quero verificar e gerar facilmente sem precisar de um diagrama de configuração do servidor.
- Quero gerar em formato md ou arquivo de texto.
- Verificação de portas em uso
Para ser sincero, com o aumento do número de coisas que executo, comecei a esquecer quais portas estava usando.
Muitos casos assim surgem, e uma vez que eu tenha uma certa quantidade das informações que desejo, gostaria de transformá-las em um script -> e verificá-las facilmente como um arquivo .md.
A propósito, a razão pela qual sou particular com arquivos de texto é porque
facilita o manuseio de dados.
Vou escrever sobre este ponto mais tarde.
Simplesmente, basta digitar este comando:
lsof -i -P -n | grep "LISTEN" | awk '{print $1 "," $3 "," $9}' | sort | uniq
E então, o resultado é:
$ lsof -i -P -n | grep "LISTEN" | awk '{print $1 "," $3 "," $9}' | sort | uniq
pulseaudi,haturatu,*:38169
pulseaudi,haturatu,*:44409
pulseaudi,haturatu,*:4713
Ele gera a saída dessa forma.
A propósito, o resultado da saída é o mesmo mesmo sem as opções do lsof, mas como parece ser diferente na versão BSD, estou incluindo todas as opções.
Conversão para CSV
Embora muitas coisas sejam ditas sobre formatos de arquivo, eu gosto do formato CSV.
Para ser sincero, não acho que CSV seja ruim ao lidar com arquivos CSV. A única coisa óbvia é que, se você substituir vírgulas com sed, e uma vírgula for usada dentro de uma string, ela também será substituída.
TSV ainda não é geralmente familiar, então CSV é melhor. (Sinceramente, se for para substituir com sed, qual causaria menos erros, vírgula ou tabulação?)
Desculpe por me desviar do assunto, mas se você converter facilmente para CSV, pode copiar e colar diretamente no Excel, e apenas abri-lo já oferece alta legibilidade.
Você pode abri-lo facilmente como um arquivo .csv no LibreOffice ou similar, simplesmente redirecionando a saída padrão. Em seguida, adicionando informações de TCP/UDP:
$ lsof -i -P -n | grep "LISTEN" | awk '{print $1 "," $3 "," $9 "/" $8}' | sort | uniq > test.csv

Fica assim:
Dessa forma,
pode ser relativamente fácil de visualizar.
Para ser sincero, no início, eu estava gerando a saída de forma bruta com `print " "` sem usar espaços como `printf %10s`, mas como um comando destinado ao formato CSV, sinto que passar a saída para o comando `column` no final torna o próprio comando mais fácil de entender e mais legível...
Se for para o formato Markdown
No início, pensei em seguir o formato md e usar tabelas... mas não sou particularmente fã de tabelas em formato md, então pensei que seria melhor usar apenas "```" para facilitar o copiar e colar.
Se necessário, vou imprimir e gerar a saída com awk.
O objetivo de querer gerar a saída em formato md é porque, se eu executá-lo como um cron job que envia regularmente para um repositório privado no GitHub ou similar, posso verificá-lo facilmente a qualquer momento.
Considerando outras necessidades
Em seguida, para verificar a capacidade do disco, seriam comandos como df -h, vmstat, free, mas isso se tornaria mais uma questão de monitoramento de recursos de todo o sistema, então talvez seja melhor extrair informações de /proc/cpuinfo, /proc/meminfo, etc.
Seria ainda melhor se as informações da tabela do banco de dados pudessem ser visualizadas de forma relativamente fácil. Se fosse feito, seria ainda mais detalhado se você pudesse executar comandos relacionados ao banco de dados até certo ponto com `which *` e apenas gerar as informações do banco de dados especificadas para aqueles que retornam o código de status 0. No entanto, há uma certa relutância em fazer isso.
Os diagramas de configuração variam bastante de pessoa para pessoa, e entendo que documentos de design detalhados para produtos de middleware são certamente necessários, mas se a visão geral do sistema não estiver consolidada em um único lugar, é difícil verificar, então estou pensando se há uma maneira de gerenciá-lo mais facilmente pessoalmente.
É fácil criar diagramas com ferramentas como draw.io, mas eu gostaria de reduzir o custo de verificação até a criação desses diagramas.
Bônus: O Silêncio do Wireguard
A propósito, enquanto fazia isso, me perguntei por que o lsof não mostrava o Wireguard, mesmo ele estando funcionando como UDP51820. Então encontrei a resposta.
the wireguard not listening on port after started
Raspberry Pi で WireGuard + VPS
Parece que é porque ele funciona como um módulo do kernel. Pela minha própria interpretação, o Wireguard opera na Camada 3, e o `lsof` apenas 'exibe arquivos abertos por processos', então pensei se é por isso que ele não o exibe. Estou errado?
A propósito, a documentação em japonês da Red Hat é bastante fácil de entender.
第8章 WireGuard VPN の設定
Então, por hoje é tudo. Se eu pensar em algo mais interessante, posso escrever uma continuação, ou talvez não.
Até a próxima, obrigado.