Linux IPTables / problema de roteamento

1

EDIT 1/3/10 22:00 GMT - reescreveu algumas delas depois de uma investigação mais aprofundada

Já passou algum tempo desde que eu olhei para o IPtables e pareço estar pior do que antes, já que não consigo colocar meu servidor online. Abaixo estão minhas regras de firewall no servidor de gateway que está executando o servidor dhcp acessando a rede. O servidor da web está dentro da minha rede em um IP estático (192.168.0.98, porta padrão).

Quando uso o Nmap ou o GRC.com, vejo que a porta 80 está aberta no servidor gateway, mas quando eu navego para ela, (via URL público. link ) ele sempre falha com um erro de conexão (o nmap não pode se conectar e descobrir o que é o servidor web).

Eu posso nmapar o servidor web e navegá-lo muito bem através do mesmo IP dentro da minha rede. Eu acredito que é o meu IPTable regras que não estão deixando passar.

Internamente, posso rotear todos os meus pedidos. Cada máquina pode navegar para o site e o tráfego funciona bem. Eu posso MSTSC / ssh para todos os servidores da web internamente e eles podem se conectar à web.

IPTABLE:

** EDIT - Adicionado novas regras de firewall 2/3/10 **

#!/bin/sh

iptables="/sbin/iptables"
modprobe="/sbin/modprobe"
depmod="/sbin/depmod"

EXTIF="eth2"
INTIF="eth1"

load () {

  $depmod -a

  $modprobe ip_tables
  $modprobe ip_conntrack
  $modprobe ip_conntrack_ftp
  $modprobe ip_conntrack_irc
  $modprobe iptable_nat
  $modprobe ip_nat_ftp

echo "enable forwarding.."
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "enable dynamic addr"
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# start firewall

  # default policies
  $iptables -P INPUT DROP
  $iptables -F INPUT
  $iptables -P OUTPUT DROP
  $iptables -F OUTPUT
  $iptables -P FORWARD DROP
  $iptables -F FORWARD
  $iptables -t nat -F

#echo "   Opening loopback interface for socket based services."
$iptables -A INPUT -i lo -j ACCEPT
$iptables -A OUTPUT -o lo -j ACCEPT

#echo "   Allow all connections OUT and only existing and related ones IN"
$iptables -A INPUT -i $INTIF -j ACCEPT
$iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A OUTPUT -o $EXTIF -j ACCEPT
$iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
$iptables -A FORWARD -j LOG  --log-level 7 --log-prefix "Dropped by firewall: "

$iptables -A INPUT -j LOG --log-level 7 --log-prefix "Dropped by firewall: "
$iptables -A OUTPUT -j LOG --log-level 7 --log-prefix "Dropped by firewall: "

#echo "   Enabling SNAT (MASQUERADE) functionality on $EXTIF"
$iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

$iptables -A INPUT -i $INTIF -j ACCEPT
$iptables -A OUTPUT -o $INTIF -j ACCEPT

#echo "   Allowing packets with ICMP data (i.e. ping)."
$iptables -A INPUT -p icmp -j ACCEPT
$iptables -A OUTPUT -p icmp -j ACCEPT

$iptables -A INPUT -p udp -i $INTIF --dport 67 -m state --state NEW -j ACCEPT

#echo "   Port 137 is for NetBIOS."
$iptables -A INPUT -i $INTIF -p udp --dport 137 -j ACCEPT
$iptables -A OUTPUT -o $INTIF -p udp --dport 137 -j ACCEPT

#echo "   Opening port 53 for DNS queries."
$iptables -A INPUT -p udp -i $EXTIF --sport 53 -j ACCEPT

#echo "   opening Apache webserver"
$iptables -A PREROUTING -t nat -i $EXTIF -p tcp --dport 80 -j DNAT --to 192.168.0.96:80
$iptables -A FORWARD -p tcp -m state --state NEW -d 192.168.0.96 --dport 80 -j ACCEPT

}

flush () {

   echo "flushing rules..." $iptables -P FORWARD ACCEPT
   $iptables -F INPUT
   $iptables -P INPUT ACCEPT
   echo "rules flushed"

}

case "$1" in

   start|restart)
     flush
     load
     ;;
   stop)
     flush
     ;;
*)
    echo "usage: start|stop|restart."
    ;;

esac
exit 0

informações de rota:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
5e0412a6.bb.sky *               255.255.255.255 UH    0      0        0 eth2
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
default         5e0412a6.bb.sky 0.0.0.0         UG    100    0        0 eth2

ifconfig:

eth1      Link encap:Ethernet  HWaddr 00:22:b0:cf:4a:1c
      inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
      inet6 addr: fe80::222:b0ff:fecf:4a1c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:79023 errors:0 dropped:0 overruns:0 frame:0
      TX packets:57786 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:11580918 (11.5 MB)  TX bytes:22872030 (22.8 MB)
      Interrupt:17 Base address:0x2b00

eth2      Link encap:Ethernet  HWaddr 00:0c:f1:7c:45:5b
      inet addr:94.4.18.166  Bcast:94.4.18.166  Mask:255.255.255.255
      inet6 addr: fe80::20c:f1ff:fe7c:455b/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:57038 errors:0 dropped:0 overruns:0 frame:0
      TX packets:34532 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:21631721 (21.6 MB)  TX bytes:7685444 (7.6 MB)

lo        Link encap:Local Loopback
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:16436  Metric:1
      RX packets:16 errors:0 dropped:0 overruns:0 frame:0
      TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:1517 (1.5 KB)  TX bytes:1517 (1.5 KB)

EDITAR

OK, conforme solicitado, tentarei expandir minha infraestrutura:

Anteriormente, eu tinha configurado com um roteador de modem de banda larga Sky que fazia o DHCP e usei sua interface da web para redirecionar a web para o servidor da web. A rede parecia algo assim:

Agora substituí o modem sky por um modem dlink que fornece o IP ao servidor de gateway que agora faz o DHCP. Parece:

A conexão com a Internet é uma conexão de banda larga padrão com um IP dinâmico, (use o zoneedit.com para mantê-lo atualizado).

Eu tentei em cada um dos servidores web (um servidor Ubuntu Apache e um WS2008 IIS7).

Acho que também deve haver um problema com minhas regras de IPTable, pois ele pode direcionar para minha caixa de entrada win7, que tem a página IIS7 padrão e que não seria exibida quando eu encaminhar toda a porta 80 para ela.

Eu ficaria muito grato por toda e qualquer ajuda com isso.

Obrigado

Jon

    
por Jon 01.03.2010 / 00:10

1 resposta

1

Por favor, descreva detalhadamente como todos os seus servidores estão fisicamente conectados, incluindo roteamento por cabo Ethernet e qualquer configuração de switch.

Você pode ter problemas ao usar a tradução de endereços de rede por meio de seu gateway, pois ele está vinculado a um roteador. Que tipo de roteador? Que tipo de conexão com a Internet? Você pode conectar seu gateway diretamente à Internet? Deve ser o roteador principal.

Independentemente disso, devemos ser capazes de isolar a causa do problema de comunicação com seu gateway e servidor Web.

Você tem alguma regra de firewall em seu servidor da Web? Por favor, verifique e tenha certeza.

Como é a tabela de roteamento e a lista de interfaces em seu servidor Web?

Ativar o registro para facilitar a depuração:

$iptables -A INPUT -j LOG --log-level 7 --log-prefix "Dropped by firewall: "
$iptables -A OUTPUT -j LOG -log-level 7 --log-prefix "Dropped by firewall: "


Editar 1

Obrigado pela atualização e diagramas. Coisa boa. Não tenho certeza se entendi a diferença de desempenho entre o IIS e o servidor Apache. Ambos podem ser contatados através do gateway na porta 80?

Você adicionou as instruções de registro? Isso ajudará.

Vou rever tudo em detalhes novamente esta noite.

Editar 2

Ah, parece que o DNAT não funciona. Anteriormente, parecia que você também estava tendo problemas para se comunicar internamente entre seu gateway e seus servidores da Web.

Tente substituir:

$iptables -A PREROUTING -t nat -i $EXTIF -p tcp --dport 80 -j DNAT --to 192.168.0.98:80 $iptables -A FORWARD -p tcp -m state --state NEW -d 192.168.0.98 --dport 80 -j ACCEPT

Com:

$iptables -A PREROUTING -t nat -p tcp -d 94.4.18.166 --dport 80 -j DNAT --to-destination 192.168.0.98:80

Editar 3

Script. Por exemplo:

EXTIP='/sbin/ifconfig $EXTINT | grep 'inet addr' |awk '{print $2}' | sed 's/addr://g''
$iptables -A PREROUTING -t nat -p tcp -d $EXTIP --dport 80 -j DNAT --to-destination 192.168.0.98:80'

Qualquer lógica adicional pode ser adicionada com base no desempenho desejado.

    
por 01.03.2010 / 01:55