Neste artigo, iremos finalizar o tópico "ipchains".
Estou recebendo vários emails perguntando aonde
encontrar as partes anteriores do artigo. Para acessar as
partes I, II, e III desde artigo, assim como outros artigos
de segurança postados nesta coluna, você deve
acessar nossa
área de
segurança
.
Ficamos de esclarecer neste artigo, o conceito de
TARGET
que uma chain pode assumir, mostrar quais são as
TARGETs
defaults do sistema e alguns exemplos práticos.
Um
TARGET
é o destino de uma chain, ele diz para o kernel o que
fazer com o pacote. O ipchains usa o parâmetro -j
(jump-to) para a especificação de um
TARGET
. Um nome de um
TARGET
pode ter no máximo 8 letras e existe diferença
entre
"RETURN"
e
"return"
.
O caso mais simples é quando não existe
TARGET
especificada. Esse tipo de regra é usada para contagem
de um certo tipo de pacote. Por exemplo, para contar todos os
pacotes vindos de 192.168.1.1, nós podemos definir:
# ipchains -A input -s 192.168.1.1
Usando
ipchains -L -v
, pode-se ver a contagem de bytes e pacotes associados a cada
regra.
Existem 6 tipos especiais de
TARGETs
. Os 3 mais usados são triviais,
ACCEPT
,
REJECT
e
DENY
.
ACCEPT
permite que o pacote passe.
DENY
joga o pacote fora, como se ele nunca tivesse sido recebido.
REJECT
joga o pacote fora também, mas (se não for um
pacote ICMP) gera uma mensagem para quem enviou o pacote
dizendo que houve erro.
O próximo
TARGET
,
MASQ
diz ao kernel para marcarar o pacote. Para isso funcionar
você precisa compilar seu kernel com suporte para IP
Masquerading (veja como na Parte I). Esse
TARGET
somente é valido para pacotes direcionados para o chain
forward ou chains definidos pelo usuário.
Outro
TARGET
special é
REDIRECT
, diz para o kernel enviar o pacote para outro local. Ele
somente pode ser usado para regras que especifiquem o
protocolo
TCP
ou
UDP
e o kernel precisa ter sido compilado com o parâmetro
CONFIG_IP_TRANSPARENT_PROXY
definido. Esse
TARGET
somente é valido para pacotes direcionados para o chain
input ou chains definidos pelo usuário.
O último
TARGET
é o
RETURN
, indica o final de uma
TARGET
, e diz para para avançar para a próxima regra para
decidir o paradeiro do pacote.
Qualquer outro tipo de target diferentes desses 6 indica
um target definido pelo usuário.
Um exemplo simples, vamos considerar duas chains: input
(chain de sistema) e a chain Test (definida pelo
usuário);
| `input' |
`Test' |
| Rule1: -p ICMP -j REJECT |
Rule1: -s 192.168.1.1 |
| Rule2: -p TCP -j Test |
Rule2: -d 192.168.1.1 |
| Rule3: -p UDP -j DENY |
X |
Agora vamos considerar um pacote TCP, vindo do
endereço 192.168.1.1, indo para o endereco 1.2.3.4. Ele
entra na chain input, e é testado pela regra Rule1, sem
sucesso. Passa pela regra Rule2 e é testado com sucesso
o
TARGET
é Test. Então a próxima regra examinada é
o inicio de Test, ou seja, a Rule1 de Test. Rule1 em Test
é encontrada, mas não especifica nenhuma
TARGET
, vamos para Rule2 e a regra não é valida para esse
pacote, chegamos ao final dessa chain (Test), voltamos para a
chain input para a Rule3 que também não é
valida para esse pacote. Terminamos assim, as regras da chain
input.