РЕДАКТИРОВАТЬ 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`
Любая дополнительная логика может быть добавлена в зависимости от желаемой производительности.