Помогите разобраться с цепочкой FORWARD в IPTABLES.

Помогите разобраться с цепочкой FORWARD в IPTABLES.

После прочтения множества документов, включая IPTABLES_HOW-TO, я разобрался с написанием правил для одиночной машины(1 NIC), подключенной к LAN or WAN. Но никак не смог понять пока, каким образом фильтровать трафик для роутера, имеющего две сетевые карточки. Как я вижу порядок движения пакетов:

Internet | eth0 Входящий пакет(поступает в цепочку INPUT) | Транзитный пакет(поступает в цепочку FORWARD) | eth1 Входящий пакет(поступает снова в цепочку INPUT) | LAN(пакет приходит локальному приложению)

Как это будет выгдядеть в рулах: (пусть в ЛВС разрешено все)

$iptables -P INPUT DROP $iptables -P OUTPUT DROP $iptables -P FORWARD DROP

#Разрешаю входящие подключения, инициированные ранее из уже установившегося $iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешаю выходить всем пакетам по всем протоколам из ЛВС в Интернет $iptables -A OUTPUT -o eth1 -j ACCEPT

#SNAT iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 222.222.222.222

Но если трафик, проходящий между интерфейсами являеюся транзитным, то, => попадает в цепочку FORWARD и уничтожается, благодаря ранее установленной политике для этой цепочки. Какое правило необходимо написать, чтобы транзитный трафик проходил только между этими интерфейсами? $iptables -A FORWARD -j ACCEPT ? Если так, то насколь безопасна такая запись, при том условии, что на роутере будет крутиться веб&майл-серверы? Правильно ли я понимаю смысл цепочки FORWARD(т.е. это транзитный трафик между eth1&eth0)? Или другой смысл несет в себе сия цепочка?

    Для комментирования войдите или зарегистрируйтесь
$iptables -A FORWARD -i eth0

$iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT $iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Такое правило позволяет проходить пакетам из eth1 к eth0 и обратно.

  • Для комментирования войдите или зарегистрируйтесь

Я бы нарисовал две схемы. Первая - для пакетов, приходящих из Интернета и адресованных локальным процессам роутера:

Internet | eth0 Входящий пакет(поступает в цепочку INPUT) | (пакет приходит локальному приложению) | eth0 Исходящий пакет(поступает цепочку OUTPUT) | Internet

Вторая - для транзитного трафика из Интернета в LAN:

Internet | eth0 | Транзитный пакет(поступает в цепочку FORWARD) | eth1 | LAN

И пример правил:

$iptables -P INPUT DROP $iptables -P OUTPUT ACCEPT $iptables -P FORWARD DROP

#Разрешаю входящие соединения из LAN к процессам роутера $iptables -A INPUT -i eth1 -j ACCEPT

#Разрешаю транзитные пакеты из LAN в Internet $iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

#И ответы на них $iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешаю входящие, уже установленные соединения из Инета к локальным процессам роутера: $iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Если доступ к веб или почте нужно открыть для инета, то: $iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT

#Нат для юзеров из LAN $iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j SNAT --to-source 222.222.222.222

И не забудь включить форвардинг: /etc/sysctl.conf net.ipv4.ip_forward = 1

  • Для комментирования войдите или зарегистрируйтесь
имхо для ната

имхо для ната надо указывать не -i, а -s (просто потому что не сожрет). и еще не забудь добавить правила для интерфейса lo, а могут разные эффекты быть неприятные. _________________ Gentoo x86_64 2.6.17-r8 на Athlon 64 3000+

  • Для комментирования войдите или зарегистрируйтесь

По поводу первой схемы: Взять к примеру, работу команды ping r0.ru: [eth0-WAN, eth1-LAN] 1. Пакет уходит с ПК(192.168.0.10, который в ЛВС) на роутер-eth1 $iptables -A INPUT -p icmp -i eth1 -s 192.168.0.10/24 -j ACCEPT

2. Пакет уходит с eth1(т.е. OUTPUT) $iptables -A OUTPUT -p icmp -o eth1 -s 192.168.0.10/24 -j ACCEPT

3. Пакет становиться транзитным, т.к. передается с одного интерфейса на другой(eth1 на eth0) $iptables -A FORWARD -i eth1 -o eth0 -s 192.168.0.10/24 -j ACCEPT

4. Пакет приходит на eth0(т.е. INPUT) $iptables -A INPUT -p icmp -i eth0 -s 192.168.0.10/24 -j ACCEPT

5. Пакет уходит с eth0(т.е. OUTPUT) $iptables -A OUTPUT -p icmp -o eth0 -s 192.168.0.10/24 -j ACCEPT

Схема движения пакета такова? Если неправильно, можете меня поправить? Я не могу понять логику движения пакетов в данном случае.

  • Для комментирования войдите или зарегистрируйтесь
Нет, транзитный

Нет, транзитный трафик не проходит по цепочкам INPUT и OUTPUT, только по FORWARD. А вообще, это всё прекрасно разжёвано тут: http://www.opennet.ru/docs/RUS/iptables/#TRAVERSINGGENERAL Даже с картинкой )

  • Для комментирования войдите или зарегистрируйтесь
Я знаю, что он

Я знаю, что он не проходит по цепочкам INPUT&OUTPUT :-). Сообщением выше я описал свое представление о движении пакета через роутер(eth0-WAN, eth1-LAN). Там как раз и есть цепочка FORWARD. Как я понимаю, транзитный трафик - это трафик, который проходит между сетевыми интерфейсами (в данном случае - между eth0 & eth1). Вышепреведенной схемой движения пакета я хотел выяснить у знатоков iptables, правильность моих выводов о движении пакета.

В случае одного интерфеса я понимаю, что: 1. пакет может приходить на интерфейс к локальному приложению(к примеру, ответ на запрос веб-браузера) 2. пакет может выходить с интерфейса к какому-либо серверу в Интернете(к примеру, запрос веб-браузера на получение данных с веб-страницы) Транзитный трафик в данном случае отсутствует.

Еще раз повторюсь: мне не понятен принцип составления правил для цепочки FORWARD, а также принцип движения пакетов между двумя интерфейсами.

  • Для комментирования войдите или зарегистрируйтесь
Ну если на то

Ну если на то пошло, то транзитный трафик может присутствовать и при наличии только одного физического интерфейса: 1 при наличии нескольких виртуальных интерфейсов, напр. eth0.1, eth0.2 и пр., когда пересылка идёт между ними. 2 при использовании "двойного ната", когда меняется адрес и источника и назначения пакета, например: iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 222.222.222.222 iptables -t nat -A POSTROUTING -d 222.222.222.222 -j SNAT --to-source 111.111.111.111 Здесь все запросы к машине 111.111.111.111 на 80 порт отправляются на адрес 222.222.222.222, и ответы тоже пойдут в обратную сторону, от 222.222.222.222 к 111.111.111.111 и далее к отправителю запроса. Это будет транзитный трафик.

  • Для комментирования войдите или зарегистрируйтесь
Подводя итог

Подводя итог вышесказанного, необходимо всегда писать правила для транзитного трафика либо разрешать его в любом случае(iptables -P FORWARD ACCEPT). Теперь ясно. Значит и на внешний интерфейс необходимо писать правило, разрешающее транзитный трафик?

📎📎📎📎📎📎📎📎📎📎