2. Ipchains
Com este tutorial, eu consegui fazer com que três pessoas que não entendem NADA de linux, criassem regras simples de ipchains, SEM OLHAR NOS MANUAIS!!! Não só isso, mas em tempo recorde, 30 min!

E você também, se ainda não entende nada sobre ipchains, em 30min eu garanto que você vai conseguir pegar as manhas.

Meu ponto de vista é o seguinte, não adiantaria nada se eu colocasse aqui linhas e mais linhas de configurações de ipchains com suas regras e explicações, a única coisa que você conseguiria fazer seria copiar, mas não conseguiria APRENDER o por quê daquilo e este seria apenas mais um documento sobre ipchains. <

Se você já tentou aprender o ipchains e não conseguiu, leia com atenção as linhas abaixo.

2.1 Início

Por quê, eu não consegui aprender o ipchains, mesmo lendo muitos documentos sobre o assunto?

Simples, porque você não tinha uma referência sobre o assunto, tudo que você viu hoje de receitas sobre ipchains ou dicas, eles davam tudo mastigado para você, mesmo explicando TUDO eles esqueceram de um pequeno detalhe, eles ensinavam o por quê, mas não o como.

Um outro ponto que eu acho fundamental é o canal de transmissão e recepção.

Veja, se uma pessoa fala chinês e o outro alemão ninguém entende se ninguém certo? Acontece o mesmo com a maioria dos documentos sobre linux que encontramos por ai, onde quem ensina não fala a mesma língua de quem quer aprender. Então, antes de mais nada, você precisa saber em que canal você esta sintonizado. Todo o ser humano possui trêscanais, Visual, Auditivo e Sinestésico.

A pessoa Visual "precisa VER para APRENDER", o Auditivo "precisa ESCUTAR para APRENDER" e o Sinestésico "precisa FAZER para APRENDER".

Então, neste documento, eu pretendo ser o mais claro possível, usando dois canais, o Visual e o Sinestésico.

Primeiramene tenha em mãos o ipchains-HOWTO pois ele tem as definições completas dos comandos do ipchains, pegue ele traduzido para o português aqui.

Como eu estava falando, você precisa ter a referência.

Antes de criar suas regras de ipchains você precisa fazer um mapa daquilo que você quer liberar ou fechar.

O rascunho nada mais é do que uma cópia do log do ipchains ( ipchains -L ) quando você cria uma regra, então guarde estas funções básicas:

-A cria nova rede de chains
-D apaga chains
-s source,de onde vem,cliente --> servidor
-d destino,servidor --> cliente
-j função,entre elas DENY,MASQ,REJECT etc
-p protocolo,tcp,udp ou icmp
input tudo que vai entrar
output tudo que vai sair

Estas são algumas funções que iremos trabalhar aqui, pois, você compreendendo este básico, o resto fica mais fácil depois.

Sempre que você for criar uma regra de ipchains ela sempre vai começar com:

ipchains -A (ou -D) input ( output ou forward )

O ipchains -A vai criar uma nova regra, se você usar a mesma regra com -D você apaga, o input é tudo que vai entrar no nosso sistema. Por exemplo, quando alguém de fora quer usar o ftp da sua rede, ele precisa ENTRAR ( IN ) primeiro certo? O output é o contrário, é tudo que vai SAIR ( OUT ) do seu servidor para o cliente. Por exemplo, quando um cliente requisita uma informação do seu servidor e você não quer que ele tenha tal informação. Pode ser usado com serviços também, como www, ftp, mail (pop) etc, eu vou explicar como, mais adiante.

Até aqui não foi difícil foi? Agora vamos continuar com as outras funções, seguido do exemplo acima:

ipchains -A input -p tcp ( udp ou icmp ) -s ip_da_onde_vem_o_pedido -d ip_de_destino -j DENY

Agora, -p tcp é o protocolo, este pode ser udp ou icmp. É importante que você saiba o que seja protocolos tcp, udp e icmp, você pode ter um exemplo dando uma olhada no /etc/services para ver que serviço que usa qual protocolo, mas eu recomendo uma leitura em livros como "Guia do Administrador de Redes", na página 429 e seguintes.

Ok, continuando, -s é o IP da onde vem a conexão, pode ser um IP da sua rede interna como também pode ser um IP da internet, o -d seria o destino, no caso o seu servidor, como pode ser um site de internet, -j é função DENY ( negar ).

Vamos a um exemplo mais específico: eu quero negar ( DENY ) o acesso ao meu servidor de ftp vindo de uma máquina de rede interna. Vamos as definições:

Servidor de ftp = 192.168.1.3
Cliente que vamos negar o acesso = 192.168.0.2

Então vamos criar uma regra de input, por quê input?
Porque, para usar os serviços de ftp do nosso servidor, nós precisamos entrar primeiro ( IN ). Funciona mais ou menos assim quando você vai usar o ftp:

Cliente: - entra e fala,Quero usar o ftp.
Servidor: - Seu nome ( login )?
Cliente: - Fulano
Servidor: -Senha?
Cliente:Ciclano

Entendeu? Muita gente ainda confunde input com output, misturando com as funções -s e -d.

Eu não quero que 192.168.0.2 acesse o servidor 192.168.1.3, então a regra ficaria assim:

ipchains -A input -p tcp -s 192.168.0.2 -d 192.168.1.3 ftp -j DENY

Veja que estamos negando ( DENY ) somente o IP 192.168.0.2, mesmo que ele tente se conectar o acesso vai estar barrado e assim vai ficar até dar o time out. Nós também podemos barrar toda a rede 192.168.0.* expecificando desta maneira:

ipchains -A input -p tcp -s 192.168.0.0/24 -d 192.168.1.3 ftp -j DENY

Então todos os IPs da Classe C que vai de 192.168.0.1 até 192.168.0.254 vão estar barrados. Você também pode trocar o 24 por 255.255.255.0 que significa a mesma coisa.

Uma coisa que não podemos esquecer é, sempre que possível, expecificar o -p ( protocolo ) e depois do -d ( destino ) o IP + a porta, no caso, o que eu escolhi foi o ftp, mas este também pode ser definido como número, ou seja, a porta 21.

E se eu quiser barrar TODOS de acessarem o meu servidor de ftp? Simples, você precisaria utilizar o 0.0.0.0/0 ou 0/0, se você vai barrar TODOS, como eu não sei qual IP que vai entrar para usar o ftp, então utilizando 0.0.0.0/0 fica universal ou qualquer IP.

Qual a diferença entre DENY e REJECT?

O DENY vai negar os pacotes conforme a especificação que você der, então quando o cliente tentar se conectar e o seu ipchains estiver configurado para negar ( DENY ), o cliente vai tentar,tentar até que acabe o tempo ( TIME_OUT ), ou seja, quem tentar se conectar vai saber que o serviço existe mas que ele não tem acesso.

O REJECT vai rejeitar os pacotes que forem enviados para determinada porta, depende da definição que você escolheu de que porta o ipchains vai rejeitar, então você não tem o TIME_OUT como no DENY, todo cliente que tentar se conectar vai receber uma mensagem de que o serviço não existe fechando a conexão logo em seguida.

2.2. Criando Regras

Como você pode ver, não tem muito segredo em trabalhar com ipchains, veja que, como eu disse, esta não é uma receita de "faça isso, faça aquilo"/, mas uma receita em que você vai aprender a fazer. Eu só dei um exemplo para que você tenha a noção e pegue a referência, depois que você pegou esta referência fica mais fácil de utilizar todas as funções do ipchains.

Então, para que possamos criar nossa primeira regra de ipchains sem olhar nos manuais, é muito importante que você planeje o que você quer que saia, entre etc. Isso mesmo planejar. Você precisa criar um mapa daquilo que você quer fazer, para implementá-lo depois, o mapa que eu utilizo é o próprio log do ipchains ( ipchains -L ). Veja um exemplo de uma regra que eu criei no arquivo ipchains-regras.txt que estava incluso no arquivo compactado que vcê puxou. De início vocês não vão entender nada, mas com as linhas seguintes você vai ver que tudo faz sentido. Seguindo o nosso mapinha, nós temos:

Chain input (policy REJECT)
Chain output (policy REJECT)
Chain forward (policy REJECT)


Que nós definimos com o comando:

ipchains -P input REJECT
ipchains -P output REJECT
ipchains -P forward REJECT

Esta lógica é baseada no tcpwraper ( /etc/hosts.allow /etc/hosts.deny lembra? )
Ou seja, nós fechamos TUDO e depois abrimos um a um. Tudo bem até aqui?

Entre cada chave ( Chain input, Chain output e Chain forward ), nós temos um conjunto de regras para o funcionamendo do nosso ipchains, então, seguindo o meu exemplo ( se você não viu ainda, veja agora o arquivo ipchains-regras.txt ), ele esta organizado desta maneira ( da esquerda para direita ):

target Função que sera usada
prot Protocolo
opt Opção
source De onde vem a conexão
destination Para onde vai a conexão
ports Porta de conexão


Já sabemos o que significa cada uma delas certo?

Agora quando eu vou criar algumas regras de ipchains, eu sempre me baseio nesta tabela de log do ipchains. Por exemplo, na regra que eu citei acima do ftp, eu a criei usando a tabela, veja:

target DENY
prot tcp
opt
source 192.168.0.2
destination 192.168.1.3
ports ftp ou 21


Nós fizemos nossa definição, agora nós a transformamos em comando:

ipchains -A input -p tcp -s 192.168.0.2 -d 192.168.1.3 -j DENY

Pegaram?? Lembra que que lá em cima eu falei que toda a regra começa com ipchains -A input ( output ou forward ) e depois as definições?

Viram, não tem segredo.

Se você olhar no meu mapa, verá que existem algumas funções com prot=all e ports=n/a, o log do ipchains apresenta estes dados quando você não especifica o -p e a porta ao lado do IP do destino ( -d ).

Ex em Chain input (policy REJECT) primeira linha:

ipchains -A input -s 192.168.0.2 -d 192.168.1.3 -j ACCEPT

Os nomes que estão lá foram resolvidos pelo ipchains,mas onde lista:

ws-111202.wtulinux.co.jp é o IP 192.168.0.2
server.wtulinux.co.jp é o IP 192.168.1.3

Fácil não? Masvocê acha que ainda não consegue?? Humm.

Eu mostrei uma regra, agora é a sua vez! Por favor preste MUITA atenção, se você esta querendo APRENDER mesmo como trabalhar com o ipchains siga as regras abaixo, e OBEDEÇA!!! Isso é muito importante, no /etc/sysconfig/network apague os dados do GATEWAY e GATEWAYDEV para que você não tenha problemas com o ipchains -L e faça
/etc/rc.d/init.d/network restart, vamos lá:

1) Faça de conta que só exista o protocolo tcp.
2) Vamos imaginar que só exista o serviço de telnet ( porta 23 )
3) O IP do nosso cliente é ( coloque o ip do seu )
4) O IP do servidor é ( coloque o ip do seu )
5) Pegue um PEDAÇO DE PAPEL e um LÁPIS ( editor de TEXTO do Windows ou Linux NÃO SERVE ) e faça uma tabela parecida com a tabela do log do ipchains e preencha com os dados de 1 a 4.
6) Crie um regra de input ( NO PAPEL )
7) Transforme a tabela em comando ( NO PAPEL ).
8) Passe os comandos criados para o linux.
9) Faça ipchains -L e verifique as regras que você acabou de criar.
10) Troque o serviço por www ( porta 80 ) na opção 2 e faça a mesma coisa ( NO PAPEL depois passe para o linux )

Não foi tão difícil assim foi?? Ou será que foi muito fácil??

Veja que é importante que você não olhe nos exemplos, explicados aqui ou em qualquer outro lugar, crie a sua regra, usando somente o seu mapa. Creio que você poderá criar suas regras de ipchains depois que você pegou esta referência.

Espero que vocês tenham gostado desta receita e que vocês tenham aprendido como pelo menos criar suas próprias regras de ipchains, o que você precisa agora é voltar para o ipchains-howto e aperfeiçoar suas técnicas e conhecimentos, saber quais serviços utilizam quais portas e protocolos.

Não se esqueça de SEMPRE utilizar o mapa, pelo seguinte motivo, se você fizer as coisas organizadamente, sempre vai ficar mais fácil de localizar possiveis problemas, quem já não tentou utilizar configurações de ipchains de terceiros e se deparou com vários problemas do tipo, serviço x não funciona ou não consigo utilizar y depois que eu ativei o ipchains.

Entre vários outros, para estes e outros problemas eu recomendo que você dê uma olhada em outra receita, um pouco mais avançada, para resolver certos problemas que encontramos no ipchains.

Comentários são bem vindos!!!!

Hosted by www.Geocities.ws

1