Segurança do Host: Desabilitando Serviços e TCP Wrappers

Segurança do Host: Desabilitando Serviços e TCP Wrappers

O Que Você Vai Conquistar

  • Enumerar serviços em escuta com ss -tulnp
  • Explicar com precisão a diferença entre systemctl stop / disable / mask
  • Entender a ordem de avaliação do TCP Wrappers /etc/hosts.allow -> /etc/hosts.deny
  • Compreender o papel dos super-servidores (inetd / xinetd)
  • Aplicar defesas complementares como /etc/nologin e shadow passwords (pwconv)

Este é o núcleo do objetivo 110.2 do LPIC-1 "Configuração de segurança do host". Ele se apoia em dois pilares: reduzir a superfície de ataque desabilitando serviços desnecessários, e restringir de onde as conexões podem vir.

Qual é a Política Básica de Segurança do Host?

O princípio é simples: um serviço que não está rodando não pode ser atacado. Primeiro pare o que não precisa, depois restrinja a origem do que permanece. Não inverta essa prioridade.

O hardening de um host segue esta ordem sem pular etapas.

  1. Descobrir o que está em escuta (ss -tulnp)
  2. Parar e desabilitar serviços desnecessários (systemctl)
  3. Restringir origens de conexão para os serviços mantidos (TCP Wrappers / firewall)
  4. Fortalecer login e autenticação (/etc/nologin, shadow passwords)

O TCP Wrappers (libwrap) está sendo descontinuado em distribuições mais recentes, e Debian / Ubuntu estão removendo o suporte ao libwrap. Ele ainda faz parte dos objetivos do LPIC-1 110.2, por isso este artigo explica como funciona.

Como Verificar Quais Serviços Estão em Escuta?

Primeiro, torne visível o que está aguardando conexões externas. ss -tulnp é o comando padrão atual.

ss -tulnp
Netid State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp   UNCONN 0      0            0.0.0.0:68        0.0.0.0:*     users:(("dhclient",pid=712,fd=6))
tcp   LISTEN 0      128          0.0.0.0:22        0.0.0.0:*     users:(("sshd",pid=901,fd=3))
tcp   LISTEN 0      100        127.0.0.1:25        0.0.0.0:*     users:(("master",pid=980,fd=13))

As opções do ss significam o seguinte. -p mostra o nome do processo apenas com privilégios root.

Opção Significado
-t Sockets TCP
-u Sockets UDP
-l Apenas sockets em escuta
-n Mostrar portas numericamente (sem resolver)
-p Mostrar o processo usando o socket

ss faz parte do pacote iproute2 e é o sucessor do legado netstat -tulnp (net-tools). A saída é lida com praticamente o mesmo significado.

Aqui 0.0.0.0:Port significa escutando em todas as interfaces (acessível externamente), enquanto 127.0.0.1:Port significa apenas loopback (não acessível de fora). No exemplo acima, SSH (22) está exposto externamente enquanto SMTP (25) é apenas local.

Qual é a Diferença Entre stop, disable e mask?

Em resumo: stop significa "parar agora", disable significa "não iniciar no próximo boot", e mask significa "tornar impossível iniciar". Seus papéis são diferentes, e você os combina.

Passos para parar e desabilitar um serviço desnecessário

systemctl stop avahi-daemon
systemctl disable avahi-daemon
Removed "/etc/systemd/system/multi-user.target.wants/avahi-daemon.service".

stop sozinho permite que o serviço retorne após um reboot. Para pará-lo permanentemente você precisa de disable. Faça ambos em uma linha com --now.

systemctl disable --now avahi-daemon

disable --now realiza uma parada imediata (como stop) e desabilita o início automático (disable) ao mesmo tempo. Esta é a forma mais usada na prática.

Bloquear um serviço com mask

systemctl mask avahi-daemon
systemctl start avahi-daemon
Created symlink /etc/systemd/system/avahi-daemon.service → /dev/null.
Failed to start avahi-daemon.service: Unit avahi-daemon.service is masked.

mask cria um symlink do arquivo de unit para /dev/null e recusa tanto um start manual quanto qualquer início acionado por dependências. É mais forte que disable. Reverta com unmask.

Comando Para agora Início auto Início manual Uso
stop Sim Inalterado Permitido Parar temporariamente
disable Não Desligado Permitido Evitar início auto na próxima vez
disable --now Sim Desligado Permitido Forma padrão na prática
mask Não Desligado Bloqueado Quando nunca deve iniciar

Verifique o estado com systemctl is-enabled svc (início automático) e systemctl is-active svc (rodando ou não).

Um serviço mascarado também pode causar falha na inicialização de outros serviços que dependem dele. Use apenas para coisas que você realmente não precisa, e na dúvida use disable.

O Que São Super-Servidores (inetd / xinetd)?

Um super-servidor escuta em nome de vários serviços pequenos e lança o daemon alvo apenas quando uma conexão chega. Isso reduz o número de processos residentes.

Historicamente existia o inetd, com o xinetd como sua versão estendida. A estrutura de configuração é a seguinte.

Arquivo / Diretório Função
/etc/inetd.conf Configuração do inetd (uma linha por serviço)
/etc/xinetd.conf Configuração principal do xinetd e padrões
/etc/xinetd.d/ Diretório com arquivos de configuração por serviço do xinetd

Para parar um serviço sob o xinetd, defina disable = yes em sua definição e recarregue o xinetd.

cat /etc/xinetd.d/telnet
service telnet
{
    socket_type = stream
    protocol    = tcp
    wait        = no
    user        = root
    server      = /usr/sbin/in.telnetd
    disable     = yes
}

disable = yes desativa esse serviço. O bloco defaults em /etc/xinetd.conf contém configurações comuns a todos os serviços (formato de log, limites de conexão, etc.).

Distribuições atuais têm a ativação por socket do systemd (units .socket) assumindo o papel do xinetd. O exame pergunta sobre o conceito do inetd / xinetd e a localização dos arquivos de configuração.

Como o TCP Wrappers Controla o Acesso?

O TCP Wrappers controla conexões a serviços vinculados ao libwrap por host. Dois arquivos governam isso: /etc/hosts.allow e /etc/hosts.deny.

Ordem de avaliação (mais importante)

De acordo com o manual hosts_access(5), a decisão é tomada na seguinte ordem, e a primeira regra correspondente vence (first match wins).

  1. Pesquisar /etc/hosts.allow de cima para baixo. Se corresponder, conceder acesso e parar.
  2. Se não corresponder, pesquisar /etc/hosts.deny. Se corresponder, negar acesso e parar.
  3. Se nenhum arquivo corresponder, conceder acesso (permissão padrão).

Portanto, allow sempre tem precedência sobre deny. Para uma política fechada, o padrão é "negar tudo, depois abrir brechas com allow".

cat /etc/hosts.deny
ALL: ALL
cat /etc/hosts.allow
sshd: 192.168.1.0/24
sshd: 10.0.0.5
ALL: LOCAL

Neste exemplo, hosts.deny primeiro nega todos os serviços e todos os hosts (ALL: ALL). Depois hosts.allow permite apenas 192.168.1.0/24 e 10.0.0.5 acessarem o sshd, além de conexões locais para todos os serviços. Como allow é avaliado primeiro, as conexões permitidas passam e todo o resto cai no deny.

Formato e curingas

Uma regra tem o formato daemon_list : client_list.

Elemento Significado
daemon_list Nomes dos processos de serviço (sshd, vsftpd, etc.). ALL para todos
client_list Host / IP / rede de origem. ALL para todos
ALL Curinga que sempre corresponde
EXCEPT "A EXCEPT B" = corresponde A mas exclui B
LOCAL Nomes de host sem ponto (o host local)

Aqui está um exemplo com EXCEPT.

cat /etc/hosts.allow
sshd: ALL EXCEPT 192.168.1.100

Isso significa "permitir conexões sshd de todos os hosts exceto 192.168.1.100". Clientes também podem ser especificados como .example.com (correspondência por sufixo de domínio) ou 192.168.1. (correspondência por prefixo de rede).

O TCP Wrappers afeta apenas serviços compilados com libwrap (como sshd, embora dependa da configuração de compilação) e serviços sob o xinetd. Ele não bloqueia todo o tráfego, portanto combine com um firewall como iptables / nftables para bloquear a rede como um todo.

Defesas de Login e Autenticação

Após reduzir os serviços, fortalecer login e autenticação também. /etc/nologin e shadow passwords são as medidas representativas.

Bloquear logins regulares com /etc/nologin

Quando o arquivo /etc/nologin existe, o login é recusado para usuários regulares (root está isento). O conteúdo do arquivo se torna a mensagem exibida quando o login é recusado.

echo "System under maintenance. Please try again later." > /etc/nologin

Use para bloquear temporariamente logins durante manutenção. Delete o arquivo quando o trabalho terminar e o login for restaurado.

Visão geral do shadow passwords

Shadow passwords separam a senha criptografada do /etc/passwd legível por todos para o /etc/shadow, que somente root pode ler. Isso é habilitado por padrão nos sistemas atuais.

Comando Ação
pwconv Criar /etc/shadow fazendo shadow do /etc/passwd
pwunconv Mover /etc/shadow de volta para /etc/passwd e remover shadow
grpconv Criar /etc/gshadow a partir de /etc/group
grpunconv Mover /etc/gshadow de volta para /etc/group e remover gshadow

pwconv retira as senhas do /etc/passwd e substitui esse campo por x. pwunconv faz o inverso, retornando ao layout sem shadow.

O legado /etc/inittab definia o runlevel padrão e os processos iniciados em cada nível na era SysVinit. Ele não é usado sob o systemd, onde você gerencia o target (o equivalente ao runlevel) com systemctl get-default / set-default. O exame pede que você posicione o inittab como legado.

Erros Comuns e Correções

Erro 1: sentir-se seguro após apenas stop

systemctl stop apenas para o processo atual. Após um reboot, um serviço enabled retorna. Parada permanente precisa de disable (ou disable --now).

Erro 2: confundir mask com disable

disable ainda permite um start manual, mas mask recusa até isso. Se você queria apenas uma parada temporária mas usou mask, depois ficará preso com Unit is masked ao tentar iniciá-lo.

Erro 3: inverter a ordem de hosts.allow e hosts.deny

Allow primeiro, deny depois. Mesmo com ALL: ALL em hosts.deny, conexões permitidas por hosts.allow ainda passam. Não entre em pânico quando "fechei tudo no deny mas uma conexão entrou". A ordem está correta, e o comportamento esperado.

Erro 4: assumir "fechado" sem nenhuma regra escrita

Se ambos os arquivos estão vazios ou nenhuma regra corresponde, o padrão é permitir. A menos que você escreva uma regra de negação explícita, o TCP Wrappers não bloqueia nada.

Erro 5: pensar que o TCP Wrappers afeta todos os serviços

Eles afetam apenas serviços que usam libwrap e aqueles sob o xinetd. Serviços que não usam libwrap, como um servidor web, ignoram hosts.deny. Use um firewall para bloqueio geral.

Solução de Problemas

Sintoma: um serviço desabilitado ainda está rodando após um reboot

Causa: disable apenas desliga o início automático e não para o processo em execução. Ele também pode ser iniciado via uma unit de socket ou por dependência de outro serviço.

Verificação:

systemctl is-enabled svc
systemctl status svc

Correção: Use systemctl disable --now svc para parar e desabilitar de uma vez. Se for ativado por socket, pare e desabilite também o svc.socket correspondente.

Sintoma: uma conexão é negada mesmo estando no hosts.allow

Causa: O serviço alvo não usa libwrap, ou o nome do daemon está com erro de digitação.

Verificação:

ldd $(which sshd) | grep libwrap

Correção: Se libwrap não está vinculado, o TCP Wrappers não tem efeito; controle pelo firewall. Corresponda o nome do daemon exatamente ao nome do processo (como sshd).

Sintoma: outro serviço que depende de um serviço mascarado falha ao iniciar

Causa: mask recusa todos os inicios incluindo resolução de dependências, então o serviço dependente falha em cadeia.

Verificação:

systemctl list-dependencies --reverse svc

Correção: Reconsidere se é realmente desnecessário; se houver dependência, faça unmask e mude para disable.

Checklist de Conclusão

  • [ ] Enumerou serviços em escuta com ss -tulnp
  • [ ] Parou e desabilitou serviços desnecessários com disable --now
  • [ ] Usou mask para alvos que nunca devem iniciar
  • [ ] Entendeu a ordem /etc/hosts.allow -> /etc/hosts.deny
  • [ ] Combinou um firewall quando necessário

Resumo

Objetivo Comando / Arquivo Ponto chave
Verificar escuta ss -tulnp 0.0.0.0 significa exposto externamente
Parar agora systemctl stop Retorna após reboot
Desabilitar de vez systemctl disable --now O padrão na prática
Bloquear início systemctl mask Não inicia até unmask
Controle de acesso /etc/hosts.allow / .deny allow depois deny, first match wins
Bloquear login /etc/nologin Recusa todos exceto root

A segurança do host se apoia em dois pilares: reduzir a superfície de ataque e restringir origens de conexão. Após cobrir a área de segurança 110 do LPIC-1, combine com criptografia e gerenciamento de permissões para completar seu conhecimento operacional.

Próximas Leituras

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 -- Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos LPIC-1 Relacionados

Prática