5

У меня есть аккаунт на RackSpace, и я хочу настроить его так:

Брандмауэр / шлюз

eth0 - публичный IP (56.XXX)

eth1 - Частный IP (10.XXX)

Ubuntu 10.10. Принимает соединения из интернета и маршрутизирует порт 80 на узел 1 (10.xxx)

node1

eth0 - Отключенный публичный IP (56.XXX)

eth1 - Частный IP (10.XXX)

Ubuntu 10.10. Этот сервер является веб-сервером.

Вопрос:

Я много раз искал, как этого добиться, и я не уверен, какие шаги мне нужно предпринять. Rackspace дает мне эти IP-адреса, я не контролирую (на данный момент), каковы IP-адреса для этих узлов, но у каждого из них есть Public IP на eth0 и Private IP на eth1.

Как я могу успешно перенаправить запросы порта 80 от брандмауэра / шлюза на узел 1?

Вот мои настройки iptables

# Generated by iptables-save v1.4.4 on Fri Jun 17 18:09:39 2011
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [1:452]
:POSTROUTING ACCEPT [1:452]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.182.33.191:80 
COMMIT
# Completed on Fri Jun 17 18:09:39 2011
# Generated by iptables-save v1.4.4 on Fri Jun 17 18:09:39 2011
*filter
:INPUT ACCEPT [154:11452]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [81:9672]
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 
COMMIT
# Completed on Fri Jun 17 18:09:39 2011

1 ответ1

2

Вы, кажется, пропускаете маскарад в таблице POSTROUTING маршрутизаторов!

Это очень упрощенная версия моих собственных правил пересылки на моем ASUS EEEPC, действующем в качестве маршрутизатора для моих проводных и беспроводных сетей. Я не буду гарантировать, что это будет работать, потому что я отредактировал это здесь, но я надеюсь, что это поможет. Идеальный набор правил - очень сложная и индивидуальная вещь! Мой iptables содержит около 25000 переменных правил, главным образом для предотвращения спама на порту 25 из нежелательных стран в пиковые периоды.

Есть еще множество правил, которые вы должны добавить, чтобы уменьшить трафик только до того, что необходимо. Также блокируйте исходящий трафик, такой как широковещательные рассылки, dhcp, mDNS и т.д. MDNS через порт 5353 является серьезным нарушителем. Запуск tcpdump во внутренней сети интернет-провайдера заставляет задуматься, как на любом реальном трафике есть место для перемещения!

Я добавил правило, чтобы остановить раздражающие атаки ssh brute тоже ... :-)

Добавьте правило для своего домашнего IP-адреса, чтобы переопределить все остальные в случае, если вы провалили ветку, на которой сидите, но при внесении изменений лучше попробовать временный тест и вернуться к рабочему конфигу через 5 секунд, например:

# ./testfirewall.sh; sleep 10;./firewall.sh

О роутере

#!/bin/sh
IPT=/usr/sbin/iptables;
EXTIF=eth0;
INTIF=eth1;
EXTADDR=56.X.X.X;
NODEADDR=10.182.33.191;
HI_PORTS=1024:65535

$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT  DROP
$IPT -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD DROP

# useful limit ssh attempts
$IPT -N SSH_Brute_Force
$IPT -A SSH_Brute_Force -m recent ! --rcheck --seconds 60 --hitcount 2 --rttl --name SSH -j RETURN
$IPT -A SSH_Brute_Force -j LOG --log-prefix "SSH Scan Reject: "
$IPT -A SSH_Brute_Force -j DROP


# dnat
$IPT -t nat    -A PREROUTING -i $EXTIF -p tcp -d $EXTADDR --sport $HI_PORTS --dport 80 -j DNAT --to-destination $NODEADDR:80

# forward only established connections
$IPT -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# antispoof
$IPT -t filter -A FORWARD -i $EXTIF -s $EXTADDR -j DROP
$IPT -t filter -A FORWARD -i $EXTIF -s 127.0.0.1 -j DROP
# forward new connections to node1 on port 80
$IPT -t filter -A FORWARD -i $EXTIF -o $INTIF -p tcp -d $NODEADDR -m state --state NEW --sport $HI_PORTS --dport 80 -j ACCEPT

# forward all outgoing connections from node1 (need more rules to prevent broadcasts/leakage/bogons/igmp/some icmps etc in and out)
$IPT -t filter -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT

# this appeared to be missing
$IPT -t nat    -A POSTROUTING -o $EXTIF -s $NODEADDR -d 0/0 -j MASQUERADE

$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A INPUT  -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --dport 22 -m recent --set --name SSH -j SSH_Brute_Force
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --sport $HI_PORTS --dport 22 -j ACCEPT
#need to add this if you are sending mail
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m tcp --dport 113 -j REJECT --reject-with tcp-reset

На узле входы уже должны быть чистыми:

#!/bin/sh
IPT=/usr/sbin/iptables;
EXTIF=eth0;
INTIF=eth1;
EXTADDR=56.X.X.X;
NODEADDR=10.182.33.191;
HI_PORTS=1024:65535

$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT  DROP
$IPT -P OUTPUT ACCEPT
$IPT -t filter -P FORWARD DROP

# useful limit ssh attempts
$IPT -N SSH_Brute_Force
$IPT -A SSH_Brute_Force -m recent ! --rcheck --seconds 60 --hitcount 2 --rttl --name SSH -j RETURN
$IPT -A SSH_Brute_Force -j LOG --log-prefix "SSH Scan Reject: "
$IPT -A SSH_Brute_Force -j DROP

$IPT -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t filter -A INPUT -i lo -j ACCEPT
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --sport $HI_PORTS --dport 80 -j ACCEPT
$IPT -t filter -A INPUT  -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --dport 22 -m recent --set --name SSH -j SSH_Brute_Force
$IPT -t filter -A INPUT -i $EXTIF -p tcp -m state --state NEW -m tcp -d $NODEADDR --sport $HI_PORTS --dport 22 -j ACCEPT

конец

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .