И еще, с последними версиями iptables я, вместо -m state --state, использую -m conntrack --ctstate. Иначе вылазили какие-то недовольные сообщения.
прошу помощи со скриптом iptables для шлюза
а по-моему, это обводной контур, чтобы миновать насос, хотя тут больше смеситель подойдет..по-моему, FORWARD это внутренность насоса
И еще, с последними версиями iptables я, вместо -m state --state, использую -m conntrack --ctstate. Иначе вылазили какие-то недовольные сообщения.
Да всё меняетса. Мир не стои на месте.
не видел таких.И еще, с последними версиями iptables я, вместо -m state --state, использую -m conntrack --ctstate. Иначе вылазили какие-то недовольные сообщения.
root@gw5:~# iptables --version
iptables v1.4.8Тем не менее у меня они были, и в openSUSE
# iptables --version
iptables v1.4.16.3и в Sabayon'е. У Вас, в Debian'е, возможно, это все впереди :)
Всем спасибо, думаю тему можно закрывать!)))
FORWARD от INPUT не зависит
в моем понимании - форвард это транзитные пакеты, но ведь когда пакет возвращается он же не может миновать цепочку INPUT, иначе он никогда не попадет в хост..?FORWARD от INPUT не зависит
В цепочку INPUT попадают пакты _адресованные_ хосту, а в FORWARD -- _адресованные_ кому-либо другому, они цепочку INPUT не проходят.
bormant, ок, просто я не понимаю как в таком случае это все работает, например пинг. Вот мой хост называется GW5, у него есть 2 сети (внутр. и внешняя) Если я выполню команду ping ya.ru подключенным клиентом к внутренней сети, то как эхо-реплай ко мне вернется, ведь он будет предназначен для моего хоста GW5?
bormant, ок, просто я не понимаю как в таком случае это все работает, например пинг. Вот мой хост называется GW5, у него есть 2 сети (внутр. и внешняя) Если я выполню команду ping ya.ru подключенным клиентом к внутренней сети, то как эхо-реплай ко мне вернется, ведь он будет предназначен для моего хоста GW5?
Вкратце так. Ну если я сам верно понимаю.
Например есть ваш шлюз gw5. В нём всё настроено и он раздаёт тырнет в локалку с помощью NAT. Представим какомуто хосту из локалки нужно пингануть хост в интернете ukr.net. Что он делает? Он сначала выесняет что такого компа в пределах локалки нету. *DONT_KNOW* . Что же дальше делать, всё засада, такого компа нету. *SCRATCH* . Но тут, ЭВРИКА *YAHOO* , он додумываетса просмотреть свою таблицу маршрутизацыи и виесняет что у гланым шлюзом в сети есть GW5, значит нужно его спросить что это за комп и какой его айпи. Тоисть происходит DNS запрос и название преобразуетса в айпи. Ура комп выяснил какой айпи в нужного компа *DANCE* . Потом он пробует приконектитса к нужному компу по айпишке что он только что получил. И опять он спрашывает шлюза по умолчанию, что тыры-пыры мне мол нужен вот такой комп с таким айпи. Шлюз принимая соединение от вашего компа, смотрит в заголовок пакета и выясняет айпы адрес хоста назначения. Пошарив по своим таблицам аршрутизацыи шлюз находит путь к этому хосту. А теперь давайте уважаеые читатели разберёмся как этот первый пакет соединения проходит шлюз gw5 чтобы уйти к хосту назначения ukr.net. По ману iptables это есть транзитный пакет и он движетса так:
mangle PREROUTING > nat PREROUTING > mangle FORWARD > Filter FORWARD > mangle POSTROUTING > nat POSTROUTING. Тоисть в цепочку INPUT&OUTPUT таблицы Filter он не попадает. Ну так как у нас NAT то в nat POSTROUTING в заголовке пакета айпи адрес компа который прислал этой пакет из локалки подменяетса на реальную (белую) айпишку шлюза и уже этот пакет уходит в интернет к адресату ukr.net. Потом когда приходит ответ на шлюз, он смотрит что этот пакет не для него а для компа с локалки и пакет движетса тем самым путём тока в обратную сторону. Перед этим nat POSTROUTING пакету возращаетса айпишка того компа что инициализировал соединение.
Так вот проходят транзитные пакеты через шлюз.
Тут подробнее написано.
Не знаю прав ли я на 100 процентов, но как то всё так.
А теперь дропните все INPUT и OUTPUT. И что получится? :)но как то всё так
Все правильно. Но только, когда адрес локалки подменяется на белый адрес(вернее будет сказать, что не просто подменяется, а к заголовку добавляется белый адрес, в качестве основного, для глобальной сети, а локальный остается в заголовке, как дополнительный для обратной маршрутизации), он уже вываливается по правилам OUTPUT для белого адреса к ukr.net, когда ukr.net отвечает, то пакет приходит по нашему белому адресу и попадает сначала на правила INPUT, а уже после перенаправляется в nat и FORWARD, для обратного преобразования адреса в локальный и проброса, а затем уже после преобразования снова должен попасть в OUTPUT, но уже для локального адреса. По-моему, так.А теперь давайте уважаеые читатели разберёмся как этот первый пакет соединения проходит шлюз gw5 чтобы уйти к хосту назначения ukr.net. По ману iptables это есть транзитный пакет и он движетса так:
mangle PREROUTING > nat PREROUTING > mangle FORWARD > Filter FORWARD > mangle POSTROUTING > nat POSTROUTING. Тоисть в цепочку INPUT&OUTPUT таблицы Filter он не попадает. Ну так как у нас NAT то в nat POSTROUTING в заголовке пакета айпи адрес компа который прислал этой пакет из локалки подменяетса на реальную (белую) айпишку шлюза и уже этот пакет уходит в интернет к адресату ukr.net.
Может и так.
Это то что я понял из мана. Могу и неправильно понять.
вываливается по правилам OUTPUT
попадает сначала на правила INPUT
Отлично. Отлично от задокументированного поведения iptables.
Обратите внимание на http://www.opennet.ru/docs/RUS/iptables/#TRAVERSINGOFTABLES , ссылку вам выше уже давали.
На машину пакет приходит не сразу в INPUT, и уходит не напрямую через OUTPUT.
На машину из локальной сети пакет приходит адресованным другой машине => FORWARD, в INPUT не попадает, в OUTPUT не попадает (не этой машиной порождён), в POSTROUTING mangle/nat адрес источника меняется на адрес машины.
Решение о том, адресован ли входящий пакет машине принимается после прохождения PREPROUTING mangle/nat, на момент принятия решения после правила DNAT пакет адресован уже другой машине в локальной сети => FORWARD, и в INPUT не попадает.
Локальная машина не сможет инициировать исходящие соединения и принимать входящие (например, на ней не сможет работать прокси). Транзитный трафик при наличии DNAT/SNAT/маскарадинга и разрешённом ip_forward будет ходить.А теперь дропните все INPUT и OUTPUT. И что получится?
Не ходит. Почему?Транзитный трафик при наличии DNAT/SNAT/маскарадинга будет ходить.
Потому что не транзитный?Не ходит. Почему?
Потому что не транзитный?[/quote]"PC"<-"lnet"->"Gate"<->"inet". На "Gate" включен nat, а INPUT & OUTPUT в DROP. С "PC" в "inet" ничего не идет.[quote="urfin⇓"]Не ходит. Почему?
При OUTPUT & INPUT в ACCESS все ходит.
urfin,
можно увидеть на Gate:
cat /proc/sys/net/ipv4/ip_forward
iptables-save
route
NAT включен как-то так:
$IPT -t nat -A POSTROUTING -o $WAN_IF \
-j SNAT --to-source $WAN_IP
echo "1" > /proc/sys/net/ipv4/ip_forward
?
Пожалуйста смотрите, вот так все ходит (некоторые DROP правила я убрал, как несущественные для обсуждения)
# cat /proc/sys/net/ipv4/ip_forward
1
#iptables-save
*filter
:INPUT ACCEPT [32:3971]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [14:560]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.200.0/24 -o dsl0 -m conntrack --ctstate NEW -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Apr 4 16:34:15 2013
# Generated by iptables-save v1.4.16.3 on Thu Apr 4 16:34:15 2013
*nat
:PREROUTING ACCEPT [22:3497]
:INPUT ACCEPT [22:3497]
:OUTPUT ACCEPT [6593:442541]
:POSTROUTING ACCEPT [6593:442541]
-A POSTROUTING -s 192.168.200.0/24 -o dsl0 -j MASQUERADE
COMMIT
# Completed on Thu Apr 4 16:34:15 2013
route
Destination Gateway Genmask Flags Metric Ref Use Iface
default * 0.0.0.0 U 0 0 0 dsl0
10.85.255.126 * 255.255.255.255 UH 0 0 0 dsl0
loopback * 255.0.0.0 U 0 0 0 lo
192.168.200.0 * 255.255.255.0 U 0 0 0 lan0
Только мне помощь не нужна по правилам, УМВР, меня уже просто заинтересовало некоторое расхождение теории с практикой.
а мне бы не помешала..)Только мне помощь не нужна
Давайте проследим логику простой настройки файрвола на шлюзе для администратора с параноидальными синдромами:
1. Почистить таблицы.
2. Закрыть все цепочки.
3. Разрешить лупбэк трафик.
4. Разрешить на всех цепочка соединения, УЖЕ инициированные изнутри. (чтобы ИЦМП вернулся).
5. Разрешить во всех цепочках инициировать НОВЫЕ соединения по протоколу ИЦМП.
6. разрешить транзит ИЦМП-пакетов между внутр. и внешней сетью.
# 3.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT # 4.
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # 5.
$IPT -A INPUT -p icmp -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -p icmp -m state --state NEW -j ACCEPT
$IPT -A FORWARD -p icmp -m state --state NEW -j ACCEPT # 6.
# Masquerade.
$IPT -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE # Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
Показать
#!/bin/bash
#
# ------------------ FLASHING RULES IN ALL DEFAULT TABLES ---------------------
# 1.
$IPT -t mangle -F && $IPT -t filter -F && $IPT -t nat -F && $IPT -F && $IPT -X
# -----------------------------------------------------------------------------
#
# 2.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP