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/nologine 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.
- Descobrir o que esta em escuta (
ss -tulnp) - Parar e desabilitar servicos desnecessarios (
systemctl) - Restringir origens de conexao para os servicos mantidos (TCP Wrappers / firewall)
- 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).
- Pesquisar
/etc/hosts.allowde cima para baixo. Se corresponder, conceder acesso e parar. - Se nao corresponder, pesquisar
/etc/hosts.deny. Se corresponder, negar acesso e parar. - 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
maskpara 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
- Administracao de Seguranca: SUID/SGID e Permissoes de Arquivos
- Criptografia de Dados: SSH e GPG
- systemd e o Processo de Boot