Назад | Перейти на главную страницу

Linux IPTables / проблема маршрутизации

РЕДАКТИРОВАТЬ 1/3/10 22:00 GMT - некоторые из них были переписаны после дальнейшего расследования

Прошло некоторое время с тех пор, как я посмотрел на IPtables, и мне кажется, что мне стало хуже, чем раньше, так как я не могу подключить свой веб-сервер. Ниже приведены мои правила брандмауэра на сервере шлюза, на котором запущен сервер DHCP, имеющий доступ к сети. Веб-сервер находится внутри моей сети со статическим IP-адресом (192.168.0.98, порт по умолчанию).

Когда я использую Nmap или GRC.com, я вижу, что порт 80 открыт на сервере шлюза, но когда я перехожу к нему (через общедоступный URL. http://www.houseofhawkins.com) всегда происходит сбой с ошибкой подключения (Nmap также не может подключиться и выяснить, что это за веб-сервер).

Я могу настроить веб-сервер и перейти к нему через тот же IP-адрес в моей сети. Я считаю, что мои правила IPTable не пропускают его.

Внутренне я могу маршрутизировать все свои запросы. Каждая машина может просматривать веб-сайт, и трафик работает нормально. Я могу использовать MSTSC / ssh для всех внутренних веб-серверов, и они, в свою очередь, могут подключаться к Интернету.

IPTABLE:

** РЕДАКТИРОВАТЬ - добавлены новые правила брандмауэра 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

информация о маршруте:

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)

РЕДАКТИРОВАТЬ

Хорошо, так что по запросу я попытаюсь расширить свою инфраструктуру:

Раньше я настраивал его с помощью широкополосного модемного маршрутизатора Sky, который выполнял DHCP, и я использовал его веб-интерфейс для перенаправления Интернета на веб-сервер. Сеть выглядела примерно так:

Я заменил модем Sky на модем dlink, который дает IP-адрес серверу шлюза, который теперь выполняет DHCP. Это выглядит как:

Интернет-соединение представляет собой стандартное широкополосное соединение с динамическим IP-адресом (используйте zoneedit.com, чтобы обновлять его).

Я пробовал его на каждом из веб-серверов (один сервер Ubuntu Apache и один WS2008 IIS7).

Я думаю, что также должна быть проблема с моими правилами IPTable, поскольку он может маршрутизироваться в мой ящик win7, который имеет страницу IIS7 по умолчанию, и это не будет отображаться, когда я перенаправил на него весь порт 80.

Я был бы очень благодарен за любую помощь в этом.

Спасибо

Джон

Пожалуйста, подробно опишите, как все ваши серверы физически связаны, включая прокладку кабеля Ethernet и любую конфигурацию коммутатора.

У вас могут возникнуть проблемы с использованием трансляции сетевых адресов через шлюз, так как он подключен к маршрутизатору гирляндой. Какой роутер? Что за подключение к Интернету? Можете ли вы подключить свой шлюз напрямую к Интернету? Это должен быть основной маршрутизатор.

В любом случае, мы сможем выявить причину проблемы связи с вашим шлюзом и веб-сервером.

Есть ли на вашем веб-сервере какие-либо правила брандмауэра? Пожалуйста, проверьте и будьте уверены.

Как выглядит таблица маршрутизации и список интерфейсов на вашем веб-сервере?

Включите ведение журнала для упрощения отладки:

$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: "


Редактировать 1

Спасибо за обновление и диаграммы. Хорошая вещь. Я не уверен, что понимаю разницу в производительности между IIS и сервером Apache. Можно ли связаться с обоими через шлюз на 80-м порту?

Вы добавили записи в журнал? Это поможет.

Я еще раз рассмотрю все подробно сегодня вечером.

Редактировать 2

О, похоже, что DNAT не работает. Раньше это читалось так, как будто у вас были проблемы с внутренним обменом данными между вашим шлюзом и вашими веб-серверами.

Попробуйте заменить:

$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

С участием:

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

Редактировать 3

Напишите это. Например:

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`

Любая дополнительная логика может быть добавлена ​​в зависимости от желаемой производительности.