настройка iptables

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

ColdFury
Сообщения: 6

настройка iptables

Сообщение ColdFury »

Доброго времени суток.
Тема увы не нова, но разобраться и заставить все работать так, как нужно, увы, не получилось. Поэтому прошу помощи тут.
Имеем:
есть сервер с тремя интерфейсами: eth0 eth1 eth2
соответственно
eth0 - интерфейс для ДСЛ интернета. Модем присваивает этому интерфейсу адрес вида 192.168.1.*
eth1 - для быстрых интернетов. Ип 81.200.17.91. Фиксированный.
eth2 - смотрит во внутреннюю сеть. На сервере поднят дхцп. Он раздает во внутреннюю сеть адреса вида 10.0.1.*. Адрес самого eth0 - 10.0.1.1
Теперь перейдем к тому, что хочу:
нужно сделать так чтобы пакеты, которые бегают через 80 и 3724 порты шли через eth0, а все остальные шли через eth1. Но! Вдобавок к этому, нужно сделать так, чтобы на заданный адрес(stat.su29.ru) пакеты шли через eth1.
Для обоих интерфейсов, 0 и 1, поднимаем НАТ и прописываем правила:

Код: Выделить всё

server:~# cat /etc/iptables.rules
# Generated by iptables-save v1.4.2 on Sat Oct 24 01:15:46 2009
*filter
:INPUT ACCEPT [678:71618]
:FORWARD ACCEPT [2:1152]
:OUTPUT ACCEPT [648:147344]
-A FORWARD -i eth2 -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT
-A FORWARD -i eth2 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Oct 24 01:15:46 2009
# Generated by iptables-save v1.4.2 on Sat Oct 24 01:15:46 2009
*nat
:PREROUTING ACCEPT [397:46215]
:POSTROUTING ACCEPT [14:841]
:OUTPUT ACCEPT [15:893]
-A POSTROUTING -d ! 81.200.3.40/32 -o eth0 -p tcp -m multiport --dports 80,3724 -j MASQUERADE
-A POSTROUTING -d ! 81.200.3.40/32 -o eth0 -p udp -m multiport --dports 80,3724 -j MASQUERADE
-A POSTROUTING -d 81.200.3.40/32 -o eth1 -p tcp -m multiport --dports 80,3724 -j MASQUERADE
-A POSTROUTING -d 81.200.3.40/32 -o eth1 -p udp -m multiport --dports 80,3724 -j MASQUERADE
-A POSTROUTING -o eth1 -p tcp -m multiport --dports 0:79,81:3723,3725:65535 -j MASQUERADE
-A POSTROUTING -o eth1 -p udp -m multiport --dports 0:79,81:3723,3725:65535 -j MASQUERADE
-A POSTROUTING -o eth1 -p udplite -j MASQUERADE
-A POSTROUTING -o eth1 -p icmp -j MASQUERADE
-A POSTROUTING -o eth1 -p esp -j MASQUERADE
-A POSTROUTING -o eth1 -p ah -j MASQUERADE
-A POSTROUTING -o eth1 -p sctp -j MASQUERADE
COMMIT
# Completed on Sat Oct 24 01:15:46 2009

Но оно не работает так, как бы того хотелось.
Нужно заставить пакеты, которые должны бегать через eth0, бегать через eth0. они бегают только если сделать route del default; route add refault gw <шлюз за eth0>, а это серверу не нужно - иначе пакеты самого сервера начинают бегать не по правильному интерфейсу
Прошу помощи)
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: настройка iptables

Сообщение pelmen »

Во-первых:

Код: Выделить всё

-A FORWARD -i eth2 -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT
-A FORWARD -i eth2 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
Это, извините, зачем, если у вас

Код: Выделить всё

*filter
:INPUT ACCEPT [678:71618]
:FORWARD ACCEPT [2:1152]        <------- a c c e p t
Наверное вы имели ввиду:

Код: Выделить всё

*filter
:INPUT ACCEPT [678:71618]
:FORWARD DROP [2:1152]         <--------d r o p
...
-A FORWARD -i eth2 -o eth1 -j ACCEPT
-A FORWARD -i eth2 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
это вполне логичнее.
Во-вторых, зачем на "-o eth1" делать -j masquerade, если у вас, как вы сами сказали, статический IP ? (это я еще молчу про кривизну написания masquerade-правил)
В-третьих, если на интерфейсе eth0 " ... модем присваивает ему адрес вида 192.168.1.* ...", то почему бы вручную не назначить ему 192.168.1.2 и так-же использовать SNAT вместо MASQUERADE ?
В-четвертых, iptables-ом маршрутизацию не настроишь :)
А если ближе к делу (т.е. как сделать правильно), то я уже ищу тебе ссылку...
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: настройка iptables

Сообщение pelmen »

Итак
http://opennet.ru/base/net/iproute2.txt.html
В самом конце
2. Необходимо направить весь трафик на 80 порт через сетую карту eth0.
Пометим пакеты идущие на 80 порт.
# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 80 \
-j MARK --set-mark 2
Создадим правила для помеченных пакетов.
# echo 202 www.out >> /etc/iproute2/rt_tables
# ip rule add fwmark 2 table www.out
# ip route add default via 10.0.0.2 dev eth0 table www.out
# ip route flush cache
Спасибо сказали:
Serg79
Сообщения: 153

Re: настройка iptables

Сообщение Serg79 »

ColdFury тебе pelmen правильную ссылку дал. С помощью одного iptables ты не сможешь маршрутизировать трафик между интерфейсами, тебе также нужно настраивать маршрутизацию с помощью утилит из пакета iproute2.

Здесь есть два пути решения:
1 - с помощью iptables маркировать пакеты и на основе этого строить свою политику маршрутизации.
2 - с помощью iptables выставлять в пакетах соответствующий тип обслуживания (ToS) и на основе этого уже строить свою политику маршрутизации.

Документации по этому вопросу в сети навалом, но она в подавляющем своем большинстве на английском языке и найти что то действительно толковое (не беру в счет статьи на 200 строк где просто приводятся скрипт который что то делает) на русском языке проблематично.
Спасибо сказали:
xomiak
Сообщения: 1
ОС: Windows 7

Re: настройка iptables

Сообщение xomiak »

ColdFury писал(а):
24.10.2009 02:01
eth0 - интерфейс для ДСЛ интернета. Модем присваивает этому интерфейсу адрес вида 192.168.1.*
eth1 - для быстрых интернетов. Ип 81.200.17.91. Фиксированный.
eth2 - смотрит во внутреннюю сеть. На сервере поднят дхцп. Он раздает во внутреннюю сеть адреса вида 10.0.1.*. Адрес самого eth0 - 10.0.1.1
Теперь перейдем к тому, что хочу:
нужно сделать так чтобы пакеты, которые бегают через 80 и 3724 порты шли через eth0, а все остальные шли через eth1. Но! Вдобавок к этому, нужно сделать так, чтобы на заданный адрес(stat.su29.ru) пакеты шли через eth1.
Для обоих интерфейсов, 0 и 1, поднимаем НАТ и прописываем правила:


Правила касаются только транзитного трафика или трафика сервера тоже? В первом случае реализация через iptables возможна.
Спасибо сказали:
ALexhha
Сообщения: 109

Re: настройка iptables

Сообщение ALexhha »

Но оно не работает так, как бы того хотелось.
Нужно заставить пакеты, которые должны бегать через eth0, бегать через eth0. они бегают только если сделать route del default; route add refault gw <шлюз за eth0>, а это серверу не нужно - иначе пакеты самого сервера начинают бегать не по правильному интерфейсу
Прошу помощи)

SNAT спасет отца русской демократии
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: настройка iptables

Сообщение pelmen »

ALexhha писал(а):
31.10.2009 23:52
SNAT спасет отца русской демократии
Так и представляю, как через eth1 уходят пакеты с ip-адресом отправителя, относящимуся к eth0 . . .
Спасибо сказали:
ALexhha
Сообщения: 109

Re: настройка iptables

Сообщение ALexhha »

Так и представляю, как через eth1 уходят пакеты с ip-адресом отправителя, относящимся к eth0 . . .

да не вопрос

# sysctl -w 'net.ipv4.conf.eth1.rp_filter=0'

Но это не совсем правильное решение :)


Более правильным будет SNAT + PBR (iproute2)
Спасибо сказали: