iptables и два правила

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

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

Аватара пользователя
xoomer
Сообщения: 201

iptables и два правила

Сообщение xoomer »

Добрый день.
Объясните, пожалуйста, почему последнее правило не работает?

1-е: iptables -A INPUT -t filter -j DROP
2-е: iptables -A INPUT -t filter -m mac --mac-source {mac} -j ACCEPT

Как я проверяю. Две работающие виртуальные машины: с одной пингую вторую, после применения первого правила эхо пропадает, а после второго не появляется.

Вообще, я хочу разобраться с iptables. А в этом случае ещё хочу ещё разобраться как сделать, чтобы пакеты приходили лишь с одной сетевой карты.
И ещё вопрос: у пакетов, которые идут форвардом, mac-адрес источника не меняется на mac-адрес машины, где происходил форвардинг?
Far behind the skies...
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: iptables и два правила

Сообщение neol »

Пакет проходит по всем правилам цепочки до тех пор, пока не будет решено, какое действие к нему применить. В данном случае к любому пакету будет применено первое правило и дальше проверка не пойдет.
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: iptables и два правила

Сообщение liaonau »

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

Вам надо вместо 1го правила политика:

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

iptables -P INPUT DROP

-t filter используется по умолчанию, можно не указывать.
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: iptables и два правила

Сообщение patrius »

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 и два правила

Сообщение xoomer »

Собственно, я эту документацию и читаю, только для версии 1.1.14. Это уже устаревшая версия и уже сейчас используется немного другой синтаксис?
Far behind the skies...
Спасибо сказали:
patrius
Сообщения: 337
ОС: Debian (4 & 5) -> Gentoo

Re: iptables и два правила

Сообщение patrius »

xoomer писал(а): ↑
21.02.2011 10:57
Собственно, я эту документацию и читаю, только для версии 1.1.14. Это уже устаревшая версия и уже сейчас используется немного другой синтаксис?

за 1,1,14 не скажу. но по ману 1,1,19 я настроен мой iptables 1.4.10.
Для просмотра результатов я обычно использую

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

iptables -t filter -L -vn
или nat || mangle

Если я прав и правило

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

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 и два правила

Сообщение xoomer »

Спасибо за ответы. Я признателен!

patrius, скажите, пожалуйста: :)
patrius писал(а): ↑
21.02.2011 16:24
iptables -t filter -A INPUT -s 0/0 -j DROP

А зачем ставить -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 и два правила

Сообщение danger08 »

xoomer писал(а): ↑
21.02.2011 23:00
patrius писал(а): ↑
21.02.2011 16:24
iptables -t filter -A INPUT -s 0/0 -j DROP

А зачем ставить -s 0/0 ? Как я понимаю, "дроп" и так будет для всех пакетов цепочки INPUT (для указанной таблицы (или по-умолчанию, если не указанной)), если не указывать их источник?

Если явно не указан источник, предполагается, что под критерий попадает любой адрес. Т.е. 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 и два правила

Сообщение patrius »

xoomer писал(а): ↑
21.02.2011 23:00
Спасибо за ответы. Я признателен!

patrius, скажите, пожалуйста: :)
patrius писал(а): ↑
21.02.2011 16:24
iptables -t filter -A INPUT -s 0/0 -j DROP

А зачем ставить -s 0/0 ? Как я понимаю, "дроп" и так будет для всех пакетов цепочки INPUT (для указанной таблицы (или по-умолчанию, если не указанной)), если не указывать их источник?

подобной записью я добиваюсь читабельности скриптов, формирующих наборы правил.
А записи вида "-s 0/0" & "-d 0/0" как раз к таким и относятся, т.е. я для себя подчеркиваю, что проавило работает для все источников и назначений.

Ставить политику в DROP

Я использую DROP, т.к. это меньше нагружает сервер, кроме того это профилактика многих проблем.

Спасибо сказали: