Seguranca do Host: Desabilitando Servicos e TCP Wrappers

Seguranca do Host: Desabilitando Servicos e TCP Wrappers

O Que Voce Vai Conquistar

  • Enumerar servicos em escuta com ss -tulnp
  • Explicar com precisao a diferenca entre systemctl stop / disable / mask
  • Entender a ordem de avaliacao 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 e o nucleo do objetivo 110.2 do LPIC-1 "Configuracao de seguranca do host". Ele se apoia em dois pilares: reduzir a superficie de ataque desabilitando servicos desnecessarios, e restringir de onde as conexoes podem vir.

Qual e a Politica Basica de Seguranca do Host?

O principio e simples: um servico que nao esta rodando nao pode ser atacado. Primeiro pare o que nao precisa, depois restrinja a origem do que permanece. Nao inverta essa prioridade.

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

  1. Descobrir o que esta em escuta (ss -tulnp)
  2. Parar e desabilitar servicos desnecessarios (systemctl)
  3. Restringir origens de conexao para os servicos mantidos (TCP Wrappers / firewall)
  4. Fortalecer login e autenticacao (/etc/nologin, shadow passwords)

O TCP Wrappers (libwrap) esta sendo descontinuado em distribuicoes mais recentes, e Debian / Ubuntu estao 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 Servicos Estao em Escuta?

Primeiro, torne visivel o que esta aguardando conexoes externas. ss -tulnp e o comando padrao 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 opcoes do ss significam o seguinte. -p mostra o nome do processo apenas com privilegios root.

Opcao 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 e o sucessor do legado netstat -tulnp (net-tools). A saida e lida com praticamente o mesmo significado.

Aqui 0.0.0.0:Port significa escutando em todas as interfaces (acessivel externamente), enquanto 127.0.0.1:Port significa apenas loopback (nao acessivel de fora). No exemplo acima, SSH (22) esta exposto externamente enquanto SMTP (25) e apenas local.

Qual e a Diferenca Entre stop, disable e mask?

Em resumo: stop significa "parar agora", disable significa "nao iniciar no proximo boot", e mask significa "tornar impossivel iniciar". Seus papeis sao diferentes, e voce os combina.

Passos para parar e desabilitar um servico desnecessario

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

stop sozinho permite que o servico retorne apos um reboot. Para para-lo permanentemente voce precisa de disable. Faca ambos em uma linha com --now.

systemctl disable --now avahi-daemon

disable --now realiza uma parada imediata (como stop) e desabilita o inicio automatico (disable) ao mesmo tempo. Esta e a forma mais usada na pratica.

Bloquear um servico 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 inicio acionado por dependencias. E mais forte que disable. Reverta com unmask.

Comando Para agora Inicio auto Inicio manual Uso
stop Sim Inalterado Permitido Parar temporariamente
disable Nao Desligado Permitido Evitar inicio auto na proxima vez
disable --now Sim Desligado Permitido Forma padrao na pratica
mask Nao Desligado Bloqueado Quando nunca deve iniciar

Verifique o estado com systemctl is-enabled svc (inicio automatico) e systemctl is-active svc (rodando ou nao).

Um servico mascarado tambem pode causar falha na inicializacao de outros servicos que dependem dele. Use apenas para coisas que voce realmente nao precisa, e na duvida use disable.

O Que Sao Super-Servidores (inetd / xinetd)?

Um super-servidor escuta em nome de varios servicos pequenos e lanca o daemon alvo apenas quando uma conexao chega. Isso reduz o numero de processos residentes.

Historicamente existia o inetd, com o xinetd como sua versao estendida. A estrutura de configuracao e a seguinte.

Arquivo / Diretorio Funcao
/etc/inetd.conf Configuracao do inetd (uma linha por servico)
/etc/xinetd.conf Configuracao principal do xinetd e padroes
/etc/xinetd.d/ Diretorio com arquivos de configuracao por servico do xinetd

Para parar um servico sob o xinetd, defina disable = yes em sua definicao 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 servico. O bloco defaults em /etc/xinetd.conf contem configuracoes comuns a todos os servicos (formato de log, limites de conexao, etc.).

Distribuicoes atuais tem a ativacao por socket do systemd (units .socket) assumindo o papel do xinetd. O exame pergunta sobre o conceito do inetd / xinetd e a localizacao dos arquivos de configuracao.

Como o TCP Wrappers Controla o Acesso?

O TCP Wrappers controla conexoes a servicos vinculados ao libwrap por host. Dois arquivos governam isso: /etc/hosts.allow e /etc/hosts.deny.

Ordem de avaliacao (mais importante)

De acordo com o manual hosts_access(5), a decisao e 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 nao corresponder, pesquisar /etc/hosts.deny. Se corresponder, negar acesso e parar.
  3. Se nenhum arquivo corresponder, conceder acesso (permissao padrao).

Portanto, allow sempre tem precedencia sobre deny. Para uma politica fechada, o padrao e "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 servicos e todos os hosts (ALL: ALL). Depois hosts.allow permite apenas 192.168.1.0/24 e 10.0.0.5 acessarem o sshd, alem de conexoes locais para todos os servicos. Como allow e avaliado primeiro, as conexoes 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 servico (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 esta um exemplo com EXCEPT.

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

Isso significa "permitir conexoes sshd de todos os hosts exceto 192.168.1.100". Clientes tambem podem ser especificados como .example.com (correspondencia por sufixo de dominio) ou 192.168.1. (correspondencia por prefixo de rede).

O TCP Wrappers afeta apenas servicos compilados com libwrap (como sshd, embora dependa da configuracao de compilacao) e servicos sob o xinetd. Ele nao bloqueia todo o trafego, portanto combine com um firewall como iptables / nftables para bloquear a rede como um todo.

Defesas de Login e Autenticacao

Apos reduzir os servicos, fortalecer login e autenticacao tambem. /etc/nologin e shadow passwords sao as medidas representativas.

Bloquear logins regulares com /etc/nologin

Quando o arquivo /etc/nologin existe, o login e recusado para usuarios regulares (root esta isento). O conteudo do arquivo se torna a mensagem exibida quando o login e recusado.

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

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

Visao geral do shadow passwords

Shadow passwords separam a senha criptografada do /etc/passwd legivel por todos para o /etc/shadow, que somente root pode ler. Isso e habilitado por padrao nos sistemas atuais.

Comando Acao
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 padrao e os processos iniciados em cada nivel na era SysVinit. Ele nao e usado sob o systemd, onde voce gerencia o target (o equivalente ao runlevel) com systemctl get-default / set-default. O exame pede que voce posicione o inittab como legado.

Erros Comuns e Correcoes

Erro 1: sentir-se seguro apos apenas stop

systemctl stop apenas para o processo atual. Apos um reboot, um servico 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 ate isso. Se voce queria apenas uma parada temporaria mas usou mask, depois ficara preso com Unit is masked ao tentar inicia-lo.

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

Allow primeiro, deny depois. Mesmo com ALL: ALL em hosts.deny, conexoes permitidas por hosts.allow ainda passam. Nao entre em panico quando "fechei tudo no deny mas uma conexao entrou". A ordem esta correta, e o comportamento esperado.

Erro 4: assumir "fechado" sem nenhuma regra escrita

Se ambos os arquivos estao vazios ou nenhuma regra corresponde, o padrao e permitir. A menos que voce escreva uma regra de negacao explicita, o TCP Wrappers nao bloqueia nada.

Erro 5: pensar que o TCP Wrappers afeta todos os servicos

Eles afetam apenas servicos que usam libwrap e aqueles sob o xinetd. Servicos que nao usam libwrap, como um servidor web, ignoram hosts.deny. Use um firewall para bloqueio geral.

Solucao de Problemas

Sintoma: um servico desabilitado ainda esta rodando apos um reboot

Causa: disable apenas desliga o inicio automatico e nao para o processo em execucao. Ele tambem pode ser iniciado via uma unit de socket ou por dependencia de outro servico.

Verificacao:

systemctl is-enabled svc
systemctl status svc

Correcao: Use systemctl disable --now svc para parar e desabilitar de uma vez. Se for ativado por socket, pare e desabilite tambem o svc.socket correspondente.

Sintoma: uma conexao e negada mesmo estando no hosts.allow

Causa: O servico alvo nao usa libwrap, ou o nome do daemon esta com erro de digitacao.

Verificacao:

ldd $(which sshd) | grep libwrap

Correcao: Se libwrap nao esta vinculado, o TCP Wrappers nao tem efeito; controle pelo firewall. Corresponda o nome do daemon exatamente ao nome do processo (como sshd).

Sintoma: outro servico que depende de um servico mascarado falha ao iniciar

Causa: mask recusa todos os inicios incluindo resolucao de dependencias, entao o servico dependente falha em cadeia.

Verificacao:

systemctl list-dependencies --reverse svc

Correcao: Reconsidere se e realmente desnecessario; se houver dependencia, faca unmask e mude para disable.

Checklist de Conclusao

  • [ ] Enumerou servicos em escuta com ss -tulnp
  • [ ] Parou e desabilitou servicos desnecessarios com disable --now
  • [ ] Usou mask para alvos que nunca devem iniciar
  • [ ] Entendeu a ordem /etc/hosts.allow -> /etc/hosts.deny
  • [ ] Combinou um firewall quando necessario

Resumo

Objetivo Comando / Arquivo Ponto chave
Verificar escuta ss -tulnp 0.0.0.0 significa exposto externamente
Parar agora systemctl stop Retorna apos reboot
Desabilitar de vez systemctl disable --now O padrao na pratica
Bloquear inicio systemctl mask Nao inicia ate unmask
Controle de acesso /etc/hosts.allow / .deny allow depois deny, first match wins
Bloquear login /etc/nologin Recusa todos exceto root

A seguranca do host se apoia em dois pilares: reduzir a superficie de ataque e restringir origens de conexao. Apos cobrir a area de seguranca 110 do LPIC-1, combine com criptografia e gerenciamento de permissoes para completar seu conhecimento operacional.

Proximas 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

Pratica