Introdução
Vimos no
artigo
anterior
como usar os comandos do ipchains e testamos alguns
parâmetros. Vamos agora especificar todas as
condições de filtragem possíveis para uma
chain. Duas especificações de filtragem mais usadas
são endereço IP de origem e destino. O
endereço IP de origem (-s) e de destino (-d) podem ser
especificados de 4 maneiras. A mais comum é usando o
nome completo do endereço, como 'localhost'ou
'www.meusite.com.br'. A segunda maneira é especificando
o endereço IP, como '127.0.0.1'.
A terceira e quarta maneiras permitem a
especificação de um grupo de endereços IP.
Você pode especificar uma classe C inteira com apenas um
comando, como '192.168.0.0/24' ou ainda
'192.168.0.0/255.255.255.0', essa parametrização
indica que o limite de IPs de 192.168.0.0 até
192.168.0.255 foi especificado. O número depois da '/',
indica o número de 1's no lado esquerdo da network mask,
é comum esse número variar de 0 até 32. '/32'
é o mesmo que 255.255.255.255 (é a opção
default), '/24' nos já vimos, '/16' é equivalente a
'255.255.0.0', temos ainda '/8' que é '255.0.0.0' e a
opção final '/0' que seria '0.0.0.0'. Quando
dizemos o número de 1's do lado esquerdo, temos que
saber que o número '255' em binário é
representado por '11111111' ( 8 números 1 ), assim se
dizemos '/24', estamos dizendo que queremos 3 grupos de 8
números 1's que seria o '255.255.255.0' ou ainda
'11111111.11111111.11111111.0'.
As flags -s e -d podem ter os seus parâmetros
invertidos para endereços não iguais aos
especificados, para isso usamos o '!' ( que, como na
lignuagem C, quer dizer NOT ). por exemplo, '-s ! localhost'
especifica qualquer pacote que não venha de
'localhost'.
O protocolo pode ser especificado com a flag '-p'.
Você pode usar o número do protocolo (se você
souber, o que não é usual) ou o nome do protocolo
como por exemplo 'TCP', 'UDP' ou 'ICMP'. Nao importa se
vôce use 'tcp' ou 'TCP'. Se você estiver fazendo um
script, é conveniente que use todos no mesmo case, se
começou usando em caixa alta, siga até o final
usando caixa alta, para manter um padrão. A flag -p
também pode ser precedida do NOT ('!'), para inverter,
por exemplo '-p ! TCP', todos protocolos que não forem
TCP.
Características especiais
Já vimos como parametrizar as flags de endereços
IP de origem e destino, vimos como especificar o protocolo do
pacote, e agora vamos ver como filtrar características
especiais de alguns protocolos, como o UDP e TCP, existem as
portas dos pacotes. Você pode especificar uma faixa de
portas usando o caracter ':', como '6000:6010', o que indica
que as portas de 6000 até 6010 inclusive, se você
não especificar o argumento de significância baixa
o default é 0, se você não especificar o de
ordem alta, o default é 65535. Então para
especificar conexões TCP para portas abaixo de 1024, a
melhor sintaxe seria '-p TCP -s 0.0.0.0/0 :1023'. Os
números das portas também podem ser especificados
pelo nome, como exemplo 'www'.
A especificação da porta pode ser precedida do
NOT '!', para inverter a regra. É importante notar a
diferença entre as duas especificações:
-p TCP -d ! 192.168.1.1 www
e
-p TCP -d 192.168.1.1 ! www
A primeira especifica qualquer conexão TCP, para a
porta WWW, exceto para 192.168.1.1. A segunda especifica
qualquer conexão TCP para qualquer porta porta em
192.168.1.1 exceto a porta WWW. Ou seja, a primeira inverte o
endereço IP e a segunda inverte apenas a porta.
Ainda temos o caso que não permite a porta WWW nem o
endereço 192.168.1.1.
-p TCP -d ! 192.168.1.1 ! www
Uma caracteristica especial ou extra do protocolo ICMP
é o tipo e o código, o protocolo ICMP não usa
portas. Você pode especificá-los pelos nomes ICMP
(use ipchains -h icmp para listá-los) depois da
opção '-s', ou pode especificar pelo número
tipo/código ICMP, aonde o tipo vem junto com a
opção '-s' e o código segue junto com a
opção '-d'.