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

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





Reply to: