Добрый день.
Объясните, пожалуйста, почему последнее правило не работает?
1-е: iptables -A INPUT -t filter -j DROP
2-е: iptables -A INPUT -t filter -m mac --mac-source {mac} -j ACCEPT
Как я проверяю. Две работающие виртуальные машины: с одной пингую вторую, после применения первого правила эхо пропадает, а после второго не появляется.
Вообще, я хочу разобраться с iptables. А в этом случае ещё хочу ещё разобраться как сделать, чтобы пакеты приходили лишь с одной сетевой карты.
И ещё вопрос: у пакетов, которые идут форвардом, mac-адрес источника не меняется на mac-адрес машины, где происходил форвардинг?
iptables и два правила
Модераторы: SLEDopit, Модераторы разделов
-
neol
- Сообщения: 600
- ОС: Debian Stable
Re: iptables и два правила
Пакет проходит по всем правилам цепочки до тех пор, пока не будет решено, какое действие к нему применить. В данном случае к любому пакету будет применено первое правило и дальше проверка не пойдет.
-
liaonau
- Сообщения: 390
- ОС: gentoo
Re: iptables и два правила
Вам надо вместо 1го правила политика:
Код: Выделить всё
iptables -P INPUT DROP-t filter используется по умолчанию, можно не указывать.
-
patrius
- Сообщения: 337
- ОС: Debian (4 & 5) -> Gentoo
Re: iptables и два правила
xoomer писал(а): ↑19.02.2011 18:12Добрый день.
Объясните, пожалуйста, почему последнее правило не работает?
1-е: iptables -A INPUT -t filter -j DROP
2-е: iptables -A INPUT -t filter -m mac --mac-source {mac} -j ACCEPT
Как я проверяю. Две работающие виртуальные машины: с одной пингую вторую, после применения первого правила эхо пропадает, а после второго не появляется.
Вообще, я хочу разобраться с iptables. А в этом случае ещё хочу ещё разобраться как сделать, чтобы пакеты приходили лишь с одной сетевой карты.
И ещё вопрос: у пакетов, которые идут форвардом, mac-адрес источника не меняется на mac-адрес машины, где происходил форвардинг?
Если вы решили разобраться в великом и могучем...
вым понадобится документация вида "Руководство по Iptables 1.1.19"
-
xoomer
- Сообщения: 201
Re: iptables и два правила
Собственно, я эту документацию и читаю, только для версии 1.1.14. Это уже устаревшая версия и уже сейчас используется немного другой синтаксис?
Far behind the skies...
-
patrius
- Сообщения: 337
- ОС: Debian (4 & 5) -> Gentoo
Re: iptables и два правила
за 1,1,14 не скажу. но по ману 1,1,19 я настроен мой iptables 1.4.10.
Для просмотра результатов я обычно использую
Код: Выделить всё
iptables -t filter -L -vnЕсли я прав и правило
Код: Выделить всё
iptables -A INPUT -t filter -j DROPдолжно закрыть весь трафик, то я б писал его
Код: Выделить всё
iptables -t filter -A INPUT -s 0/0 -j DROPили еще проще, установил политику iptables в DROP
Код: Выделить всё
iptables -t filter INPUT -P DROPКак уже звучало рание пакеты идут до встречи в решающим правилом, в вашем случае оно первое и убивает весь трафик.
Кроме того посматривайте на величины счетчиков правил. Если сотворенный вами трафик должен был осесть в 3й строчке, и не осел, то он точно осел в 1м или 2м правиле.
P.S.: От себя рекомендую
1. Ставить политику в DROP
2. добавлять правила "от общего" к "частному"
3. для первых наборов правил составить требования и схемы на "листочке".
4. не копипастить строки, смысл которых вы не понимаете полностью.
xoomer, если вышеизложенное не совсем понятно, дайте знать что именно, попробую разжевать.
//Ко мне понимание iptables пришло далеко не сразу... Сейчас стараюсь не упускать... упражняться.
-
xoomer
- Сообщения: 201
Re: iptables и два правила
Спасибо за ответы. Я признателен!
patrius, скажите, пожалуйста:
А зачем ставить -s 0/0 ? Как я понимаю, "дроп" и так будет для всех пакетов цепочки INPUT (для указанной таблицы (или по-умолчанию, если не указанной)), если не указывать их источник?
Кстати, вот здесь (п. 6.5.3) рекомендуют REJECT:
"Данное действие просто "сбрасывает" пакет и iptables "забывает" о его существовании. "Сброшенные" пакеты прекращают свое движение полностью, т.е. они не передаются в другие таблицы, как это происходит в случае с действием ACCEPT. Следует помнить, что данное действие может иметь негативные последствия, поскольку может оставлять незакрытые "мертвые" сокеты как на стороне сервера, так и на стороне клиента, наилучшим способом защиты будет использование действия REJECT особенно при защите от сканирования портов."
И теперь о таблице nat.
Соб-сно, не пойму момент насчёт SNAT. Например, за шлюзом, на котором "крутится" NAT (а именно работает SNAT), смотрящим в интернет, в сети стоит машина с IP - 192.168.0.3, а ей нужно соединиться с неким веб-сервером, пусть это будет TCP-соединение HTTP. Вобщем, исходящий пакет с 192.168.0.3 в цепочке POSTROUTING получает новый адрес своего возникновения, то есть действие SNAT заменяет 192.168.0.3 на то, которое указано ключём --to-source - это какой-то внешний адрес в интернете нашего сервера сети. Хорошо, я понимаю, пакет дошёл, веб-сервер ответил на внешний адрес сервера. Но как потом наш веб-сервер знает, что именно этот пакет нужно отправить машине 192.168.0.3? Мы же запустили только команду что-то вроде iptabels -t nat -A POSTROUTING -o eth0 -j SNAT --to-source a.b.c.d - ничего о ответе обратно здесь не говорится.
patrius, скажите, пожалуйста:
А зачем ставить -s 0/0 ? Как я понимаю, "дроп" и так будет для всех пакетов цепочки INPUT (для указанной таблицы (или по-умолчанию, если не указанной)), если не указывать их источник?
(patrius) писал(а):Ставить политику в DROP
Кстати, вот здесь (п. 6.5.3) рекомендуют REJECT:
"Данное действие просто "сбрасывает" пакет и iptables "забывает" о его существовании. "Сброшенные" пакеты прекращают свое движение полностью, т.е. они не передаются в другие таблицы, как это происходит в случае с действием ACCEPT. Следует помнить, что данное действие может иметь негативные последствия, поскольку может оставлять незакрытые "мертвые" сокеты как на стороне сервера, так и на стороне клиента, наилучшим способом защиты будет использование действия REJECT особенно при защите от сканирования портов."
И теперь о таблице nat.
Соб-сно, не пойму момент насчёт SNAT. Например, за шлюзом, на котором "крутится" NAT (а именно работает SNAT), смотрящим в интернет, в сети стоит машина с IP - 192.168.0.3, а ей нужно соединиться с неким веб-сервером, пусть это будет TCP-соединение HTTP. Вобщем, исходящий пакет с 192.168.0.3 в цепочке POSTROUTING получает новый адрес своего возникновения, то есть действие SNAT заменяет 192.168.0.3 на то, которое указано ключём --to-source - это какой-то внешний адрес в интернете нашего сервера сети. Хорошо, я понимаю, пакет дошёл, веб-сервер ответил на внешний адрес сервера. Но как потом наш веб-сервер знает, что именно этот пакет нужно отправить машине 192.168.0.3? Мы же запустили только команду что-то вроде iptabels -t nat -A POSTROUTING -o eth0 -j SNAT --to-source a.b.c.d - ничего о ответе обратно здесь не говорится.
Far behind the skies...
-
danger08
- Сообщения: 715
- ОС: Linux (CentOS, Ubuntu)
Re: iptables и два правила
Если явно не указан источник, предполагается, что под критерий попадает любой адрес. Т.е. 0/0.
xoomer писал(а): ↑21.02.2011 23:00Ставить политику в DROP
Кстати, вот здесь (п. 6.5.3) рекомендуют REJECT:
"Данное действие просто "сбрасывает" пакет и iptables "забывает" о его существовании. "Сброшенные" пакеты прекращают свое движение полностью, т.е. они не передаются в другие таблицы, как это происходит в случае с действием ACCEPT. Следует помнить, что данное действие может иметь негативные последствия, поскольку может оставлять незакрытые "мертвые" сокеты как на стороне сервера, так и на стороне клиента, наилучшим способом защиты будет использование действия REJECT особенно при защите от сканирования портов."
Здесь много нюансов, не зацикливайтесь на том, что выбор из двух вариантов DROP/REJECT поможет надёжно защититься от сканирования хостов (или чего-либо ещё). Вкратце, DROP рвёт соединение "по-тихому", отправляющий хост не уведомляется о закрытии подключения. Иногда это полезно, чтобы с наименьшими затратами отрубить какой-либо паразитный трафик или создать иллюзию недоступности сервиса. REJECT корректно закрывает соединение (причем, может принимать дополнительные параметры в --reject-with). Это более затратная операция по ресурсам, но и более корректная.
писал(а): ↑21.02.2011 23:00Соб-сно, не пойму момент насчёт SNAT. Например, за шлюзом, на котором "крутится" NAT (а именно работает SNAT), смотрящим в интернет, в сети стоит машина с IP - 192.168.0.3, а ей нужно соединиться с неким веб-сервером, пусть это будет TCP-соединение HTTP. Вобщем, исходящий пакет с 192.168.0.3 в цепочке POSTROUTING получает новый адрес своего возникновения, то есть действие SNAT заменяет 192.168.0.3 на то, которое указано ключём --to-source - это какой-то внешний адрес в интернете нашего сервера сети. Хорошо, я понимаю, пакет дошёл, веб-сервер ответил на внешний адрес сервера. Но как потом наш веб-сервер знает, что именно этот пакет нужно отправить машине 192.168.0.3? Мы же запустили только команду что-то вроде iptabels -t nat -A POSTROUTING -o eth0 -j SNAT --to-source a.b.c.d - ничего о ответе обратно здесь не говорится.
Основаясь на данных из таблицы соединений (механизм conntrack). Кратко описано здесь.
Блогосайт - http://www.fateyev.com
-
patrius
- Сообщения: 337
- ОС: Debian (4 & 5) -> Gentoo
Re: iptables и два правила
подобной записью я добиваюсь читабельности скриптов, формирующих наборы правил.
А записи вида "-s 0/0" & "-d 0/0" как раз к таким и относятся, т.е. я для себя подчеркиваю, что проавило работает для все источников и назначений.
Ставить политику в DROP
Я использую DROP, т.к. это меньше нагружает сервер, кроме того это профилактика многих проблем.