Uma introdução a TCP Wrappers

Para proteger nosso servidor temos como opções um Firewall e SELinux, há muitas maneiras de tornar nossos servidores mais seguros contra ataques, para isso podemos também utilizar TCP Wrapper. Este recurso é ativado automaticamente.


Pode ser utilizado para permitir ou bloquear acesso a diversos serviços utilizando regras simples em 2 arquivos, /etc/hosts.allow e /etc/hosts.deny.

No arquivo /etc/hosts.allow temos as regras de liberação do cliente ao serviço especificado, e no /etc/hosts.deny as regras de bloqueio do cliente ao serviço. As regras contidas em /etc/hosts.allow tem precedência sobre /etc/hosts.deny.

Caso o cliente tente acesso a algum serviço que não esteja listado nesses arquivos, o mesmo terá acesso garantido.

Formato:

lista_serviços : lista_clientes [ : comandos_shell ]

lista_serviços – Quais os serviços, ou coringas, serão afetados pela regra. Os serviços podem ser separados por vírgulas. Pode ser utilizado o coringa ALL para todos os serviços.

lista_clientes – Uma lista de um ou mais hostnames, endereços, padrões ou coringas para casar com a regra. A lista pode ser separada por espaço ou vírgula. Com excesão dos netgroups NIS (YP), todas as checagens de controle de acesso  não diferenciam maiúsculas e minúsculas.

CORINGAS

ALL – Todos

LOCAL – Coincide com qualquer host cujo nome não contém um caractere de ponto.

UNKNOWN – Corresponde a qualquer usuário cujo nome é desconhecido, e combina com qualquer host cujo nome ou endereço é desconhecido. Esse padrão deve ser usado com cautela, pois os servidores de nomes podem apresentar falha temporária.

KNOWN – Corresponde a qualquer usuário cujo nome é conhecido, e combina com qualquer host cujo nome e endereço são conhecidos. Esse padrão deve ser usado com cautela pois os servidores de nomes podem estar indiponíveis temporariamente.

PARANOID – Coincide com qualquer host cujo nome não corresponde ao seu endereço. Normalmente tcpd é compilado com -D PARANOID (esse é o padrão), nesse modo a conexão cai antes mesmo de ser analisada qualquer tabela de controle de acesso.

OPERADOR

EXCEPT – Permite a utilização de exceção, tanto em lista_serviços quanto em lista_clientes. Esta técnica permite a utilização de apenas um dos arquivos para liberação ao serviços especificados.

COMANDOS DO SHELL

Se a regra casar com padrão especificado e houver um comando após a lista_clientes, alguns dados da conexão serão repassados para as macros precedidas por %, a listagem a seguir lista algumas das macros utilizadas:

%a (%A) – O endereço do cliente (servidor).

%c – Informações do cliente, tais como: usuá[email protected], usuá[email protected]

%d – O nome do daemon.

%h (%H) – O nome ou endereço do cliente (servidor).

%n (%N) – O hostname do cliente (servidor). Exibe “unknown” se o mesmo não estiver disponível e “paranoid” se o endereço e o host não correspondem.

%p – O PID do precesso do serviço (daemon).

%s – Informações do servidor: [email protected], [email protected]

%u – O nome do usuário, ou exibe “unknown” se não puder obter o nome.

OBS.: A entrada (stdin), saída padrão (stdout) e de erro (stderr) são conectadas a /dev/null. Especifique um ‘&’ no final do comando, se você não quiser esperar até que tenha terminado.

ARMADILHA

O exemplo a seguir permite que solicitações TFTP de hosts no domínio local (note o ponto inicial). Os pedidos de outros hosts são negados. Em vez de o arquivo solicitado, um finger é enviado para o host agressor. O resultado é enviado para o superusuário.

/etc/hosts.allow
in.tftpd: LOCAL, .meu.dominio
/etc/hosts.deny
in.tftpd: ALL: (/usr/sbin/safe_finger -l @%h | \
/usr/bin/mail -s %d-%h root) &

Caso você utilize um servidor finger, o comando safe_finger vem com tcpd wrapper e deve ser instalado em local adequado. Isso limita os danos possíveis a partir dos dados enviados pelo servidor finger padrão.

Outros Exemplos:

/etc/hosts.allow

ALL : .exemplo.com.br
telnetd : 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.79

Na primeira linha o domínio exemplo.com.br tem acesso a todos os serviços. Na próxima linha o serviço telnet só pode ser acessado pelo rede 192.168.0.0/24 exceto pelo endereço 192.168.0.79

/etc/hosts.deny

ALL EXCEPT in.tftpd : .exemplo.com.br
telnetd : ALL EXCEPT 192.168.1.10

Na primeira linha todos os serviços exceto o ftp estão liberados para o domínio exemplo.com.br. Na segunda o serviço telnet está negado a todos os hosts exceto para o endereço 192.168.1.10

Fonte: manpage

Espero que tenham gostado do post e aproveitem para assinar a nossa newsletter.