Router WIFI+Firewall+Internet

Iniciado por Marcelo.Correa, 29 de Novembro de 2009, 22:56

tópico anterior - próximo tópico

Marcelo.Correa

Senhores,

Instalei o Ubuntu 9.04 em casa em uma maquina para ser o GW+Firewall+DHCP+DNS dentre outras coisas, tenho 3 interfaces conforme abaixo

ETH0 - WIFI - 192.168.1.1
ETH1 - LAN - 10.1.0.0
ETH2 - WAN - DHCP

Na ETH0 liguei a porta WAN(192.168.1.2) do router DI-624 (Testei tbem com um TrendNet) e a LAN e WIFI do Router ficou com a net 192.168.0.1.

Até tranquilo, criei regras para fazer NAT da ETH0 para ETH2 e as maquinas da rede WIFI sair para internet, porem não conseguem chegar nas maquinas ligadas na rede LAN do servidor conforme os testes abaixo:

Da rede 192.168.0.0 consigo chegar em 10.1.0.1 (ETH1) e na 192.168.1.2 (ETH0) mas não no PC 10.1.0.5.

Da rede 10.1.0.0 consigo chegar em 10.1.0.1 (ETH1) e na 192.168.1.1 (WAN Router) mas não no LAP 192.168.0.100.

Não existe registro de DROP´s nos logs do Router e do servidor.

As rotas no servidor são as seguintes:
Kernel IP routing table
Destination   Gateway           Genmask      Flags  Metric   Ref        Use  Iface
192.168.1.0   *          255.255.255.0   U       0       0         0     eth0
192.168.0.0   192.168.1.1      255.255.255.0   UG       0       0         0     eth0
10.1.0.0   *          255.255.255.0   U       0       0         0     eth1
189.29.72.0   *          255.255.248.0   U       0       0         0     eth2
Default         189-29-72-1-bp.  0.0.0.0          UG       100       0         0   eth2

Quando executo o tcpdump no servidor retorna conforme abaixo:

22:16:33.463185 IP 192.168.1.1 > 10.1.0.5: ICMP echo request, id 62324, seq 78, length 40
        0x0000:  4500 003c 289c 0000 7f01 4776 c0a8 0101  E..<(.....Gv....
        0x0010:  0a01 0005 0800 5999 f374 004e 6162 6364  ......Y..t.Nabcd
        0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
        0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi

Porem na recebo echo reply.

Não sei justificar o pq de não usar ou usar a interface WAN do router, mas queria usa-la para não ´perder´ uma porta lan do router.

Por favor, me ajude a encontrar a melhor solução para rede wifi conseguir ´falar´ com a rede LAN do servidor.

Abaixo o script do firewall

!/bin/sh
#
# Configuracao do netfilter
#
# To make Firewall start automatically at boot, make this
# file executable:  chmod 755 /etc/rc.d/rc.firewall
# Author: Marcelo Correa - (the.carcass.br@xxx.com)
# Criation: 01/08/2009
# Atualization: 02/08/2009
#
# E apoiado nos artigos de:
#
# http://www.malibyte.net/iptables/scripts/fwscripts.html
# http://www.zago.eti.br/firewall/iptables-modelos.html
# http://www.vivaolinux.com.br/script/Script-Firewall-Iptables-+-compartilhar-internet/
# http://www.linuxhelp.net/guides/iptables/
# http://www.unixtutorial.org/2008/05/variables-in-unix-shell/
# http://www.guiadohardware.net/tutoriais/linux-escrevendo-scripts-firewall3/
#
#   eth2 - interface externa (Realtek/VIA Rhine III)
#   eth1 - interface interna (3Com 3c509)
#   eth0 - interface wireless (Intel e100) - A IMPLEMENTAR


echo " "
echo " * -------------------------------------------------------------"
echo " * SERVER- script de firewall com IPTables, v1 - 2009-08"
echo " * -------------------------------------------------------------"
echo " "

# Alguns aliases e probes
# Carregando modulos (WTF)
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
#/sbin/modprobe ip_gre
IPTABLES=/sbin/iptables

################################################################
# Regras de INPUT
# - pacotes com destino para o firewall

config_input_rules()
{
   echo " *  - Configurando regras INPUT..."

   # Habilita manutencao de estados existentes e DROP nos estados invalidos
   $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
   #$IPTABLES -A INPUT -m state --state INVALID -j DROP

   # Permite trafego ilimitado na interface loopback
   $IPTABLES -A INPUT -i lo -s 127.0.0.1/8 -d 127.0.0.1/8 -j ACCEPT
   # Regra de entrada das interfaces
   $IPTABLES -A INPUT -i eth1 -s 10.1.0.0/24 -j ACCEPT
   $IPTABLES -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
   
   # Permite atualizacao do DNS pela estacoes
   $IPTABLES -A INPUT -s 10.1.0.0/24 -p tcp --dport 953 -j ACCEPT
   $IPTABLES -A INPUT -s 10.1.0.0/24 -p udp --dport 53 -j ACCEPT
   $IPTABLES -A INPUT -s 10.1.0.0/24 -p udp --dport 67 -j ACCEPT
   $IPTABLES -A INPUT -s 10.1.0.0/24 -p udp --dport 68 -j ACCEPT


   # Bloqueio de trafegos vindos de fora
   ## nenhum
   
   # Efetuar log dos pacotes que foram dropados
   $IPTABLES -A INPUT -j LOG --log-level 4 --log-prefix "DROP [INPUT]: "
   
   echo " *  ---- Regras de INPUT aplicadas."
}

################################################################
# Regras de OUTPUT
# - pacotes com origem no firewall

config_output_rules()
{   
   echo " *  - Configurando regras OUTPUT..."
   
   # Habilita manutencao de estados existentes e DROP nos estados invalidos
   $IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
   #$IPTABLES -A OUTPUT -m state --state INVALID -j DROP
   
   # Permite trafego ilimitado para a interface interna (eth1 ou o IP dela)
   $IPTABLES -A OUTPUT -o eth1 -d 10.1.0.0/24 -j ACCEPT
   $IPTABLES -A OUTPUT -o eth0 -d 192.168.1.0/24 -j ACCEPT

   # Permite trafego ilimitado para a interface loopback
   $IPTABLES -A OUTPUT -o lo -s 127.0.0.1/8 -d 127.0.0.1/8 -j ACCEPT


   # Efetuar log dos pacotes que foram dropados
   $IPTABLES -A OUTPUT -j LOG --log-level 4 --log-prefix "DROP [OUTPUT]: "

   echo " *  ---- Regras de OUTPUT aplicadas."
}

################################################################
# Regras de FORWARD
# - pacotes roteados pelo firewall (que atravessam o firewall)

config_forward_rules()
{
   echo " *  - Configurando regras FORWARD..."

   # Habilita manutencao de estados existentes e DROP nos invalidos
   $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
   #$IPTABLES -A FORWARD -m state --state INVALID -j DROP

   # Permite trafego vindo da rede interna a sair para internet
   $IPTABLES -A FORWARD -i eth1 -s 10.1.0.0/24 -o eth2 -j ACCEPT
   # Permite trafego vindo da rede WIFI para sair para internet
   $IPTABLES -A FORWARD -i eth0 -s 192.168.1.0/24 -o eth2 -j ACCEPT
   # Permite trafego entre redes WIFI/interna
   $IPTABLES -A FORWARD -s 10.1.0.0/24 -d 192.168.1.0/24 -j ACCEPT
   $IPTABLES -A FORWARD -s 192.168.1.0/24 -d 10.1.0.0/24 -j ACCEPT
   $IPTABLES -A FORWARD -s 10.1.0.0/24 -d 192.168.0.0/24 -j ACCEPT
   $IPTABLES -A FORWARD -s 192.168.0.0/24 -d 10.1.0.0/24 -j ACCEPT
   
   # Efetuar log dos pacotes que foram dropados
   $IPTABLES -A FORWARD -j LOG --log-level 4 --log-prefix "DROP [FORWARD]: "
   
   echo " *  ---- Regras de FORWARD aplicadas."
}


################################################################
# Regras de NAT
# - pacotes que sofrem traducao de endereco/porta

config_nat_tables()
{
   echo " *  - Configurando tabelas NAT..."
   $IPTABLES -t nat -A POSTROUTING -s 10.1.0.0/24 -o eth2 -j MASQUERADE
   $IPTABLES -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j MASQUERADE
   

   echo " *  ---- Tabelas NAT criadas."
}


################################################################
# Funcao para start do firewall (vide final do script)
fwstart()
{
   echo " * - Ativando protecoes diversas..."
   # Desligando forward
   echo 0 > /proc/sys/net/ipv4/ip_forward
   # Alteracao de rotas
   echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
   # "bogus responses"
   echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
   # Traceroute
   echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
   # Pacotes de spoofing
   echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
   echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter
   # Turn on dynamic IP hacking (WTF?)
   echo "1" > /proc/sys/net/ipv4/ip_dynaddr
   # Broadcast echo
   echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
   # SYN-Flood (TCP SYN Cookie Protection)
   echo "1" > /proc/sys/net/ipv4/tcp_syncookies
   # Log dos "Martian Packets"
   echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

   # Limpa tabelas de regras
   echo " * - Limpando regras..."
   $IPTABLES -F INPUT
   $IPTABLES -F OUTPUT
   $IPTABLES -F FORWARD

   # Limpa tabelas NAT
   echo " * - Limpando tabelas NAT..."
   $IPTABLES -t nat -F
   $IPTABLES -t nat -X
   $IPTABLES -t nat -Z
   $IPTABLES -t nat -F POSTROUTING
   $IPTABLES -t nat -F PREROUTING

   # Aplica politicas default
   echo " * - Aplicando politicas default (restritivas)..."
   $IPTABLES -P INPUT   DROP
   $IPTABLES -P FORWARD DROP
   $IPTABLES -P OUTPUT  DROP
   
# Aplicacao das regras
   echo " * - Aplicando regras..."
   config_input_rules
   config_output_rules
   config_forward_rules
   config_nat_tables

   # Habilita roteamento no kernel - isso EFETIVAMENTE interliga as redes interna e externa
   echo " * - Ativando forwarding no kernel..."
   echo "1" > /proc/sys/net/ipv4/ip_forward
}

################################################################
# Funcao para finalizacao do firewall
fwstop()
{
    # Interrompe o  roteamento
   echo " * - Desativando forwarding no kernel..."
   echo "0" > /proc/sys/net/ipv4/ip_forward

   # Limpa tabelas de regras
   echo " * - Limpando tabelas de regras..."
   $IPTABLES -F INPUT
   $IPTABLES -F OUTPUT
   $IPTABLES -F FORWARD

   # Limpa tabelas NAT
   echo " * - Limpando tabelas NAT..."
   $IPTABLES -t nat -F
   $IPTABLES -t nat -X
   $IPTABLES -t nat -Z
   $IPTABLES -t nat -F POSTROUTING
   $IPTABLES -t nat -F PREROUTING

   # Aplica politicas default
   echo " * - Aplicando regras default para restricao..."
   $IPTABLES -P INPUT   DROP
   $IPTABLES -P FORWARD DROP
   $IPTABLES -P OUTPUT  DROP

   # Permite trafego ilimitado na interface e rede interna
   echo " * - Aplicando regras default para servidor e rede local..."
   $IPTABLES -A INPUT -i lo -s 127.0.0.1/8 -d 127.0.0.1/8 -j ACCEPT
   $IPTABLES -A INPUT -i eth1 -s 10.1.0.0/24 -j ACCEPT
   $IPTABLES -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
   $IPTABLES -A OUTPUT -o lo -s 127.0.0.1/8 -d 127.0.0.1/8 -j ACCEPT
   $IPTABLES -A OUTPUT -o eth1 -d 10.1.0.0/24 -j ACCEPT   
   $IPTABLES -A OUTPUT -o eth0 -d 192.168.1.0/24 -j ACCEPT
   #$IPTABLES -A OUTPUT -o ppp0 -s 127.0.0.1/8 -j ACCEPT
}

case "$1" in
   start)
      echo " * Firewall - iniciando..."
      fwstart
      ;;
   stop)
      echo " * Firewall - finalizando..."
           fwstop
           ;;
   restart)
      echo " * Firewall - reiniciando..."
           fwstop
           fwstart
           ;;
   *)
           echo "Sintaxe: ./galactus.firewall.sh [start|stop|restart]"
      echo " "
           exit 1
      ;;
esac

echo " "
echo " * Concluido!"
echo " * -------------------------------------------------------------"
exit 0


Grato,
Marcelo Correa