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 - [EMAIL PROTECTED] Linux user number 433834 -------------------------------------- ----- Mensagem original ---- De: Edson Marquezani Filho <[EMAIL PROTECTED]> Para: Clayton Nogueira <[EMAIL PROTECTED]> 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 - [EMAIL PROTECTED] > ################################################ > # > 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