Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Выручайте IPTABLES  (Прочитано 985 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн S-VL

  • Автор темы
  • Участник
  • *
  • Сообщений: 166
  • All OS
    • Просмотр профиля
Выручайте IPTABLES
« : 23 Февраля 2013, 04:20:42 »
Добрый день, скажу сраз в iptables полный ноль, вот пытаюсь сообразить кое что.

Есть шлюз на котором висит 3-и сетевых интерфейса. eth1 смотрит в интернет eth0 и eth2 объеденные в мост br0 (смотрит в локалку)

вобщем вот правила

(Нажмите, чтобы показать/скрыть)

Вобщем хочу чтобы клиент с адресом 172.16.16.82 свободно ходил через интернет, на адресе 10.10.10.10:3128 находится squid прозрачный прокси настроен и работает нормально.

Вобщем клиент 172.16.16.82 - добро пожаловать интернет
остальные набирают в раузере любой сайт и попадают на страницу http://172.16.16.1:81 в которой реализован интерфейс для регистрации в сети предприятия.

в данный момент все и включая клиента 172.16.16.82 смотрят на фигу по адресу первого правила в моем iptables (

Помогите правильно составить правила.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28486
    • Просмотр профиля
Re: Выручайте IPTABLES
« Ответ #1 : 23 Февраля 2013, 05:42:38 »
Про адресацию в локальной сети мы должны догадываться?

И вообще ваши правила какие-то неправильные. Только что сказали, что у вас два интерфейса под мостом, и тут же они у вас фигурируют в правилах фильтрации.
« Последнее редактирование: 23 Февраля 2013, 05:49:35 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн S-VL

  • Автор темы
  • Участник
  • *
  • Сообщений: 166
  • All OS
    • Просмотр профиля
Re: Выручайте IPTABLES
« Ответ #2 : 23 Февраля 2013, 10:03:26 »
Вообщем вопрос Я решил неким иным способом.

eth0 + eth2 = br0 (LOCAL)
eth1 = GATEWAY

первое правило было неправильным поэтому написал на PHP скрипт который лезет в dnsmasq и смотрит какие ip он уже раздал пользователям, подключается к MySQL и делает соответственно записи в таблицу block_address. Перед этим сохраняет правила. Те правила которые разрешены (ip адрес) т/е пользователи которые зарегистрировались в сети их пропускаем ( для них правила уже созданы и записаны в таблицу registered ). Скрипт запускается в кроне раз в минуту этого достаточно т/к даже с изменениями он выполняется быстрее секунды.

Вобщем штатный iptables выглядит так

(Нажмите, чтобы показать/скрыть)

Далее пользователь подключется по локальной сети либо по wifi, dnsmasq назначает ему ip адрес, php скрипт из крона смотрит что появился новый ip адрес с новым mac-адресом и заносит его в sql таблицу block а также присваевает правило (например новый клиент 172.16.16.140):

-A PREROUTING -s 172.16.16.140/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.16.1:81

Далее клиент переходит на любой сайт где его встречает моя состряпанная веб-морда на php http://172.16.16.1:81/, логины и пароли клиентов хранятся в той же SQL базе, после успешной авторизации клиент через веб-морду регистрирует свой ПК всети, т/е нажимает кнопку зарегистрироваться, также ему указаны ПК которые он до этого регистрировал ( максимум для 1 человека сделал 5 регистраций максимально).

После нажатой кнопки делается копия текущих правил iptables, PHP циклом из копии правил удаляется строка блокировки далее делается iptables-restore и добаляются правила:
-A POSTROUTING -s 172.16.16.140/32 -o eth1 -j MASQUERADE
-A FORWARD -s 172.16.16.140/32 -o eth1 -j ACCEPT

также удаляются записи о блоке из SQL и заносятся в таблицу registered там указан id клиента ip адрес и mac адрес. В конце выполнения делается опять-же резервная копия iptables.

ну и внес /etc/network/interfaces на подъем bash скрипт pre-up /opt/startup в котором врубается iptables правила.


ЗНАЮ ЧТО ЖУТКО ГЛУПЫЕ ПРАВИЛА ПОЛУЧАЮТСЯ В IPTABLES НО! На удивление тестировал с час, все работает как часы ))))
в IPTables вообще почти не рублю, так то я программист только.

Немного недопонимаю работу правил iptables как то они линейны не могу понять неужели нет никаких условий как в программирование ну мол если такой то ip есть выполняем такое то правило нет то пропускаем идем дальше, встретили пакет возвращаемся к тому правилу и пропускаем. Всю ночь читал различные учебники одолеть iptables сложнее чем v8 node.js))
« Последнее редактирование: 23 Февраля 2013, 10:22:22 от S-VL »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28486
    • Просмотр профиля
Re: Выручайте IPTABLES
« Ответ #3 : 23 Февраля 2013, 18:46:53 »
Это не язык программирования, это пакетный фильтр. Условия есть - каждое правило это условие.
Посмотрите в соседних темах примеры правил, в частности была тема полностью аналогичная вашей задаче.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн botsman

  • Активист
  • *
  • Сообщений: 296
    • Просмотр профиля
Re: Выручайте IPTABLES
« Ответ #4 : 23 Февраля 2013, 23:11:19 »
Немного недопонимаю работу правил iptables как то они линейны не могу понять неужели нет никаких условий как в программирование ну мол если такой то ip есть выполняем такое то правило нет то пропускаем идем дальше, встретили пакет возвращаемся к тому правилу и пропускаем. Всю ночь читал различные учебники одолеть iptables сложнее чем v8 node.js))

Для понимания, возможно поможет мое разъяснение:
1. Все параметры правила - есть условие с логическим "И".
2. Все правила в цепочке проверяются по порядку.
3. При срабатывании правила выполняется действие, указанное в правиле, и все последующие правила в этой цепочке игнорируются.
4. Если ни одно правило в цепочке не сработало - "применяется действие по-умолчанию".
Исходя из этого и стройте свои правила по принципу от мелкого к крупному.
Например правила для определенных IP должны располагаться выше правил для подсети...
-A PREROUTING -s 172.16.16.0/24 -o eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 10.10.10.10:3128
-A PREROUTING -s 172.16.16.82/32 -o eth1 -j MASQUERADE
в данном случае второе правило никогда не сработает, потому как пакет подпадает под первое правило. Вот если их поменять местами:
-A PREROUTING -s 172.16.16.82/32 -o eth1 -j MASQUERADE
-A PREROUTING -s 172.16.16.0/24 -o eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 10.10.10.10:3128
тогда и получится то что вы и задумали....

« Последнее редактирование: 24 Февраля 2013, 15:20:37 от botsman »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28486
    • Просмотр профиля
Re: Выручайте IPTABLES
« Ответ #5 : 23 Февраля 2013, 23:37:11 »
3. При срабатывании правила выполняется действие, указанное в правиле, и все последующие правила в этой цепочке игнорируются.
Только если правило является терминирующим. При условии, что правило там вообще есть.

Пользователь решил продолжить мысль 23 Февраля 2013, 23:40:25:
Исходя из этого и стройте свои правила по принципу от мелкого к крупному.
Нормальные администраторы поступают наоборот. Сначала отсекая основной трафик первыми несколькими правилами, чтобы сэкономить процессор, а потом уже добивая прорвавшиеся пакеты прицельными выстрелами.

Цитировать
Например правила для определенных IP должны располагаться выше правил для подсети...
-A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.16.1:81
-A PREROUTING -s 172.16.16.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 10.10.10.10:3128
-A POSTROUTING -s 172.16.16.82/32 -o eth1 -j MASQUERADE
в данном случае третье правило никогда не сработает, потому как пакет подпадает под второе правило.
Третье правило сработает ВСЕГДА, поскольку располагается в другой цепочке.

Цитировать
Вот если их поменять местами:
То ничего не изменится. От суммы мест слагаемых...
« Последнее редактирование: 23 Февраля 2013, 23:40:25 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн botsman

  • Активист
  • *
  • Сообщений: 296
    • Просмотр профиля
Re: Выручайте IPTABLES
« Ответ #6 : 24 Февраля 2013, 15:16:52 »
Цитировать
Например правила для определенных IP должны располагаться выше правил для подсети...
-A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.16.16.1:81
-A PREROUTING -s 172.16.16.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 10.10.10.10:3128
-A POSTROUTING -s 172.16.16.82/32 -o eth1 -j MASQUERADE
в данном случае третье правило никогда не сработает, потому как пакет подпадает под второе правило.
Третье правило сработает ВСЕГДА, поскольку располагается в другой цепочке.

Цитировать
Вот если их поменять местами:
То ничего не изменится. От суммы мест слагаемых...
Приношу извинения за невнимательный копи-пастинг примеров использования. Подправил примеры.

Пользователь решил продолжить мысль 24 Февраля 2013, 15:23:45:
Нормальные администраторы поступают наоборот. Сначала отсекая основной трафик первыми несколькими правилами, чтобы сэкономить процессор, а потом уже добивая прорвавшиеся пакеты прицельными выстрелами.

Позвольте с Вами не согласится в некоторых моментах...
Если требуется пропустить один узел куда-то а всю остальную подсеть перенаправить - то все-таки выше будет расположено правило для узла, а не подсети...
« Последнее редактирование: 24 Февраля 2013, 15:23:45 от botsman »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28486
    • Просмотр профиля
Re: Выручайте IPTABLES
« Ответ #7 : 24 Февраля 2013, 16:39:36 »
Выше будет располагаться фильтрация ВСЕХ пакетов.
Обратите внимание на счётчики пакетов.
(Нажмите, чтобы показать/скрыть)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

 

Страница сгенерирована за 0.114 секунд. Запросов: 25.