[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Res: problemas com iptables



So tenho uma observacao a fazer, quanto as duas regras do INPUT abaixo:
> iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
> iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Se estou bem certo, como o INPUT esta  DROP, a segunda linha nao ira funcionar porque voce nao permitiu novas conexoes com o estado NEW, o RELATED e ESTABLISHED somente valem para quando a conexao partiu da maquina local, ou seja, ela inicia a conexao, no caso do ssh quem vai iniciar a conexao e uma maquina externa, entao o firewall tem que permitir novas conexoes para o ssh.
No meu caso o que fiz foi colocar regras de estado somente para servicos e portas que realmente valem a pena e individualmente, da mais trabalho mas e mais facil de identificar erros, e tambem nao ira aumentar tanto o consumo de processador.

Falou.

--------------------------------------
 -   -    Claudio Rocha de Jesus
|.|-|.| Analista de Suporte Tecnico
   -    crochadejesus@yahoo.com.br
         Linux user number 433834
--------------------------------------

----- Mensagem original ----
De: Edson Marquezani Filho <edsonmarquezani@gmail.com>
Para: Clayton Nogueira <clayton.nog@gmail.com>
Cc: debian-user-portuguese@lists.debian.org
Enviadas: Quinta-feira, 5 de Julho de 2007 17:17:19
Assunto: Re: problemas com iptables

Ok, vou tentar comentar seu script.

Mas você não nos disse se tentou alguma alteração, ou se conseguir
alguma coisa.
O que eu sugeriria era que você começasse adicionando as regras mais
essencias e depois fosse incrementando, assim você consegue saber o
que tem de errado.
Minha experiência não é lá aquelas coisas, mas vou tentar ajudar com o que sei.

Vou considerar que você tem uma máquina funcionando como gateway,
firewall com a eth0 com saída pra internet e eth1 pra tua rede
interna.

Vamos lá.

> #!/bin/bash
> ################################################
> #SRV-Firewall Novamarca500 - Interface 2007    #
> #Clayton Nogueira - clayton@interfacenet.com.br#
> ################################################
> #
> iniciar(){
> echo "Iniciando regras de Firewall"
>
> #Modulos
> modprobe ip_tables
> modprobe iptable_filter
> modprobe ip_conntrack
> modprobe ip_conntrack_ftp
> modprobe ip_nat_ftp
> modprobe ipt_LOG
> modprobe ipt_state
> modprobe ipt_MASQUERADE
> modprobe iptable_nat

Beleza, deve ter tudo que precisa de módulo aí. =)

> #Padrao
> iptables -P INPUT DROP
> iptables -P FORWARD DROP
> iptables -P OUTPUT ACCEPT

Ok também, de praxe.

> #Proxy transparente
> iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT
> --to-port 3128
> iptables -t nat -A POSTROUTING -o eth1 -p tcp --sport 3128 -j ACCEPT

Olha só. Eu sinceramente não saquei qual é a dessa regra. Você não
precisa dela pra fazer seu proxy transparente, na minha humilde
opinião. =)

> #INPUT
> iptables -A INPUT -i lo -j ACCEPT
Regra importante. Permitir comunicação com loopback.

> iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Essa regra é que dá a característica de Stetefull ao teu firewall. Com
ela você permite que os pacotes de conexões iniciados trafeguem numa
boa. Mas isso só afeta as conexões que saem diretamento do teu
firewall.
As que saem por NAT, das máquina de dentro da rede não são filtradas
nessa chain.

> iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Bom, essa regra só faz sentido se você tem algum serviço rodando na
porta 22 do firewall (ssh provavelmente) e quer permitir conexões
vindas de qualquer lugar pra essa porta.
Detalhe que rodar um ssh na porta padrão nunca é uma boa coisa. =)
Se você colocou ela por causa daquela outra máquina que você tem
dentro da rede, e que você tá fazendo DNAT pra ela, não precisa. Ranca
fora.

> iptables -A INPUT -p tcp --destination-port 3128 -j ACCEPT
Também só faz sentido se você quer permitir conexões de fora pra um
serviço nessa porta, no caso, teu proxy.
Se a intenção era permitir que o proxy acessasse a internet, tá
errado. Primeiro porque que as conexões do proxy pra internet
originam-se em outras portas altas. A porta 3128 só recebe as
requisições dos clientes que se conectam ao proxy.
Sendo assim, as conexões do proxy com o resto do mundo funcionarão por
conta daquela regrinha de StateFull lá em cima.

> iptables -A INPUT -p tcp --syn -s 10.0.0.0/8 -j ACCEPT
Hum... boa. Vai deixar todo mundo de dentro da tua rede se conectar
com seu servidor. Só faltou algo muito importante, restringir à
interface interna: -i eth0
>
> #Redirecionamento de portas
>
> #FTP, porta 21
> iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 21 -j DNAT
> --to-destination 10.0.0.14
> iptables -t nat -A POSTROUTING -s 10.0.0.14 -j SNAT --to-source 10.0.0.1

Essa regra não precisa. Você já tá fazendo MASQUERADE pra todo mundo lá embaixo.

> #SSH, porta 22
> iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 22 -j DNAT
> --to-destination 10.0.0.14
> iptables -t nat -A POSTROUTING -s 10.0.0.14 -j SNAT --to-source 10.0.0.1

Essa é a mesma coisa.

> #Forward de portas
> iptables -A FORWARD -p udp -s 10.0.0.0/8 -i eth1 -o eth0 --dport 25 -j ACCEPT
> iptables -A FORWARD -p udp -s 10.0.0.0/8 -i eth1 -o eth0 --dport 53 -j ACCEPT
> iptables -A FORWARD -p udp -s 10.0.0.0/8 -i eth1 -o eth0 --dport 110 -j ACCEPT
> iptables -A FORWARD -p tcp -s 10.0.0.0/8 -i eth1 -o eth0 --dport 5405 -j ACCEPT
> iptables -A FORWARD -p tcp -s 10.0.0.0/8 -i eth1 -o eth0 --dport 1863
> -j ACCEPT #msn

Ok, vai usar DNS externo, entre outras coisas, é isso? Tá deixando os
pacotes saírem.

> iptables -A FORWARD -p udp -i eth0 -o eth1 --sport 25 -j ACCEPT
> iptables -A FORWARD -p udp -i eth0 -o eth1 --sport 53 -j ACCEPT
> iptables -A FORWARD -p udp -i eth0 -o eth1 --sport 110 -j ACCEPT
> iptables -A FORWARD -p tcp -i eth0 -o eth1 --sport 5405 -j ACCEPT
> iptables -A FORWARD -p tcp -i eth0 -o eth1 --sport 1863 -j ACCEPT

Ok, agora tá deixando os pacotes voltarem. Só adiciona o -s 10.0.0.0/8
pra deixar bem claro que eles tão vindo de fora, pra dentro da tua
rede.

> #Mascaramento
> iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Tá, aqui você faz o MASQUERADE pra todo mundo. Essa é a regra que
"compartilha" a internet.

> #Compartilha a internet
> echo "1"> /proc/sys/net/ipv4/ip_forward

Habilitando roteamento de pacotes do kernel. Sem isso nada funciona também. =)

> echo "Regras de Firewall ATIVADAS"
> }
> parar(){
> iptables -F
> iptables -t nat -F
> iptables -t mangle -F
> echo "Regras de Firewall DESATIVADAS"
> }

Você poderia voltar as regras de policiamento para o padrão aqui
também, tudo pra ACCEPT. Mas daí, depende do teu interesse.
Dar um iptables -Z em cada tabela também pra zerar os contadores das
Chains, mas isso é detalhe.

> case "$1" in
> "start")iniciar;;
> "stop")parar;;
> "restart")parar; iniciar;;
> *)echo "Use os parametros start ou stop"
> esac
>

Bom cara. A não ser que você tenha algum erro de sintaxe aí e tal, eu
acho que conceitualmente tá certo.
Mas quem vai ter que fazer os teste é você, e ir incrementando as regras.
Dá uma estudade em iptables no guia Foca, vê todas as opções e tal e
vai tornando as regras bem específicas.

Altera, testa e vê no que dá. Se não funcionar, a gente precisa de
mais informação pra ter idéia do que pode estar acontecendo.

Possíveis bobagens, corrijam-me, por favor.
> --
> Att,
> Clayton Nogueira
> Analista de Suporte
> Linux User nro. #448808
>
>






       
____________________________________________________________________________________
Novo Yahoo! Cadê? - Experimente uma nova busca.
http://yahoo.com.br/oqueeuganhocomisso



Reply to: