Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom Bar]
[Photo of the Author]
Javi Polo
Sobre o autor: Sou um sofrido estudante secundarista que leva o catal�o para setembro, tenho 18 anos e minha grande paix�o � a inform�tica, espero entrar no ano que vem na UIB para fazer I. T. Telem�tica, e ver se logo me formo em Engenheiro Superior de Inform�tica. Gosto de m�sicas hardcore e tenho um grupo de m�sica onde toco baixo chamado Niko-Chan's Kingdon. Afora a isso, tenho mais que dizer, tenho uma namorada fabulosa que se chama Xiska O:)

Escreva ao Autor

TCPD e Firewalls usando IPFWADM

[Ilustration]

Resumen: Neste artigo revisamos a grosso modo a configura��o dos servi�os oferecidos pela inetd e como usar a ferramenta IPFWADM para aumentar a seguran�a de nosso sistema.




Bom, para come�ar, temos que deixar claro o que inetd, que � b�sicamente um daemon que controla os servi�os que pode ter numa m�quina conectada a internet, mas tamb�m que n�o controla todos por padr�o, assim que, d� uma olhada no arquivo /etc/inetd.conf e olhe os servi�os que ele d� na sua m�quina (os que est�o sem coment�rios, isto �, sem a cerquilha -#- antes). O que se tem que fazer antes, l�gicamente, � n�o dar mais servi�os do que os que queremos dar, para evitar assim poss�veis brechas de seguran�a por falha no daemon que n�o usamos para nada. Uma vez visto o arquivo de ent�o, expliquemos seu funcionamento:

Por exemplo, a linha:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

Primeiro que tudo � o nome do servi�o (neste caso "ftp", que buscar� nele /etc/services a que porta corresponde.

No segundo campo � o tipo de porta que se abre, e pode ser de v�rios tipos: stream (como no exemplo), dgram, raw, rdm e seqpacket

O terceiro campo � o protocolo a utilizar, que tem de estar definido em /etc/protocols (neste caso � o protocolo TCP)

O quarto campo � para indicar wait/nowait (esperar/n�o esperar), este campo deve ser sempre nowait, exceto para os sockets do tipo dados (dgram), � nele que especificamos se o servidor de dados � multithread (ent�o indicamos nowait, j� que o servidor ao receber uma chamada, lan�a o processo em um thread -al ser multithread:) - e libera a porta para que inetd possa continuar recebendo mensagens na porta) ou se � singlethread (indicamos wait, j� que o servidor atende sempre na mesma porta e n�o pode lan�ar em outros processos). Al�m de, podermos acrescentar uma caixa postal neste campo, por exemplo: nowait.50 (quer dizer, um n�mero separado do wait/nowait por um ponto). Este n�mero representa o n�mero m�ximo de daemons que pode usar (ou de peti��es aceitas, conforme se olhe) em 1 minuto. Por default es 40.

O quinto campo indica o nome do usu�rio com o qual deve executar o daemon, neste caso ser� como root.

O sexto e os seguintes, s�o o programa a ser executado seguido dos par�metros que s�o passados ao programa. Indicamos aqu� que o daemon � executado como tcpd, e como argumentos o daemon in.ftpd com os par�metros -l -a. Agora chega a parte mais interessante deste primeiro tro�o do artigo, que � o que engloba o TCPD.

Bom o tcpd � um daemon que filtra as peti��es, e faz uma ou outra coisa dependendo do daemon a ser usado e do IP que pede o servi�o. Isto � feito mediante o /etc/hosts.allow y /etc/hosts.deny

No princ�pio, usamos /etc/hosts.deny para indicar a quem e a quem n�o � permitido o acesso, e o /etc/hosts.allow para dizer quem e a quem podemos consentir.

O formato de ambos arquivos �:
daemon: IP[: OPTION1 [: OPTION2 ]]

onde daemon puede ser el daemon a usar, como no exemplo acima, o in.ftpd, ou tamb�m pode ser ALL, referindo-se a todos os daemons.

IP puede ser tanto um IP ou uma URL, como uma faixa de IPs (ou de URLs), como qualquer um dos comodines que explico depois.

Para indicar uma faixa de IPs, por exemplo, fazemos assim: `123.32.' Isto englobaria todas as IPs 123.32.XXX.XXX E o mesmo para as URLs: `.ml.org' englobaria todos os subdominios de ml.org

Tamb�m podemos determinar uma faixa de IPs da forma tradicional IP/MASCARA De forma que por exemplo, para indicar a faixa 127.0.0.0 a 127.0.255.255 indicar�amos assim: 127.0.0.0/255.255.0.0

Os comodines s�o:
ALL indica que conincide com qualquer endere�o entrado
LOCAL indica que coincide com qualquer nome que tenha um "."
UNKNOWN que coincide com aquelas m�quinas das que n�o se conhece seu nome ou seu IP
KNOWN que coincide com as m�quinas que se conhece tanto seu nome como seu IP
PARANOID que coincide com aquelas m�quinas na qual seu nome n�o coincide com seu IP
As op��es podem ser:

accept faz com que o que se indicou nessa entrada deve ser aceito na conex�o, independente de se estar no hosts.allow ou no hosts.deny Deve ser a �ltima op��o da linha.
deny � como a anterior, mas ignorando a conex�o.
spawnexecuta u comando shell ( pode ser que se queira executar alguma coisa, toda vez que estabelecemos uma conex�o que coincida com a linha), eu por exemplo, fa�o quando recebo qualquer conex�o de fora, e xecuta um som para indicar para informar que algu�m tenta conectar com minha m�quina.
twist� como o comando spawn, mas cortando a conex�o ao ser executado o comando. Tamb�m deve ser a �ltima op��o da linha.

Para os dois �ltimos comandos, podemos usar as expans�es permitidas ao tcpd. Estas s�o:

%a endere�o da m�quina cliente
%c Informa��o do cliente (pode ser usuario@m�quina, ou o que seja, dependendo do cliente)
%d
%h nome ou IP da m�quina cliente, o que estiver dispon�vel
%n nome da m�quina cliente
%p PID do daemon
%s informa��o do servidor (daemon@m�quina ou s� daemon, depende)
%u Nome do usuario cliente
%% � um simples caracter %

Com estas expans�es e esses dois comandos podemos fazer muitas coisas, por exemplo, sei que algu�m tentava entrar por telnet, e lhe mandava autom�ticamente um teardrop ao feliz intruso :)

NOTA: Um teardrop � um DoS (Denial of Service, uma for�ada para suspender a m�quina ou provocar que se reinicie) baseado em aproveitar a falha de defragmenta��o dos diret�rios TCP que temos (tinham, j� que muitos tenha sido destruidos) de grande parte dos sistemas Operacionais. A informa��o � enviada atrav�s da InterNet pelo protocolo TCP/IP (usado tamb�m em outros tipos de redes, independente da Internet, como por exemplo intranets), o protocolo TCP se encarrega de trocar a informa��o em pacotes que logo o protocolo IP se encarrega de fazer chegar a seu destino, e uma vez l�, o protocolo TCP comprova que est�o todos os pacotes e os junta para recompor a informa��o original. Estes ataques (e muitos baseados nele), o que faz � aproveitar-se de que em muitos Sistemas Operacionais, n�o se comprova se o tamanho do pacote antes de juntos era muito pequeno, e ao ser assim a m�quina faria um novo pacote na hora de junt�-los. N�o estou completamente seguro de que seja assim, evidentemente, aceito todo tipo de contribui��o e cr�ticas, tanto positivas como negativas. Finalizando esta "pequena"explana��o, continuemos...

Ejemplos:
#hosts.allow 

ALL: 127.0.0.1 #deixa entrar todo os localhost

in.ftpd: ALL: spawn (wavplay /usr/share/sounds/intruso.wav & )
# deixa entrar qualquer um por ftp, mas enviando um
# som wav (para que me cientifique)

in.telnetd:  ALL: twist ( teardrop %h %h )
# manda um teardrop a quem tentar 
# entrar pela telnet

#fin
#hosts.deny

ALL: `.bsa.org'   # n�o deixa entrar ningu�m do dom�nio bsa.org

in.fingerd: ALL	  # o servi�o de finger � fechado para todos:)

#fin

Bem, isto � tudo o que tenho para dizer sobre o tcpd, j� os disse que meus conhecimentos n�o eram muitos. Prova-os, experimente-os e leia-os as p�ginas do manual ( tcpd, host_access(5) ) Com certeza, desta maneira aprender�s muito mais do que eu os possa ensinar.

Passemos agora ao uso da ferramenta IPFWADM

Primeiro de tudo, � ter o suporte IP Firewalling no kernel ( Networking -> Network firewalls + IP: firewalling ) Em seguida, recompila o kernel e reinicie o computador, passemos a explicar a utilidade desta ferramenta.

Esta ferramente permite entre outras coisas (ser�o as �nicas que centralizarei) gerir a entrada e a sa�da de pacotes dos protocolos TCP, UDP e ICMP. Em resumo, n�s indicamos que os pacotes devem permitir entrar, podendo especificar se vem de uma IP ou grupo de IPs concretos, a um local seguro, com um protocolo seguro, e todas as poss�veis op��es que podemos fazer, e o mesmo com os pacotes que v�o sair.

ipfwadm tem v�rios par�metros principais:

  • -A especifica as regras de accounting
  • -I especifica as regras para os pacotes que est�o entrando
  • -O especifica as regras para os pacotes que est�o saindo
  • -F especifica as regras de reenvio de pacotes
  • -M � para a administra��o do IP masquerading

Neste artigo s� falarei dos par�metros -I e -O. Para ambos s�o usados a mesma sintaxe.

Sub-par�metros dos par�metros principais s�o:

  • -a acrescenta uma ou mais regras ao final da lista
  • -i acrescenta uma ou mais regras no in�cio da lista
  • -d apaga uma ou mais regras da lista
  • -l mostra as regras da lista
  • -f apaga as regras da lista
  • -p indicam se os pacotes devem ser aceitos (a), negar (d) ou recusar (r)
  • -c comprova que tipo de regra ser� seguido por um pacote
  • -h ajuda
Os par�metros "importantes" s�o:

-P especifica o protocolo a ser aplicado na regra, pode ser TCP, UDP, ICMP ou all (para indicar qualquer protocolo)
-S especifica o endere�o de origem do pacote. O formato �: ENDERE�O[/MASCARA] [PORTA] Por exemplo, um endere�o v�lido seria 123.32.34.0/255.255.255.250 25 para indicar a faixa de IPs desde 123.32.34.0 a 123.32.34.5
-D especifica o endere�o de destino. Tem o mesmo formato que -S

B�sicamente estes s�o os par�metros fundamentais, para permitir que as informa��es cheguem a minha m�quina, acrescento a regra:

ipfwadm -I -i a -S 127.0.0.1

e para descartar os pacotes que venha desde 123.34.22.XXX indico:

ipfwadm -I -a d -S 123.34.22.0/255.255.255.0

e se quero recusar TODO acesso a porta de netbios, menos para a IP 111.222.123.221, faria assim:

ipfwadm -I -a a -P tcp -S 111.222.123.221 139
ipfwadm -I -a d -P tcp -D 0.0.0.0/0 139

Bem, creio que isto � todo meu artigo, um pouco pobre, mas meus conhecimentos n�o chegam a mais O:)


Esta website � mantida por Miguel Angel Sepulveda
© Javi Polo 1998
LinuxFocus 1998