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


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

Автор Тема: HOWTO: Iptables для новичков  (Прочитано 521698 раз)

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1965 : 14 Июля 2013, 00:49:11 »
Остается фильтровать в PREROUTING, далее пакет пройдет через FORWARD и с помощью правила маскарадинга в POSTROUTING пакет попадет в локальную сеть.
Я дико извиняюсь за нубство. Никогда в этот процесс не вдавался, обычно все - заданных юзверей (айпи, подсеть и тд) пускаем  или не пускаем через заданный интерфейс по заданному порту через NAT или делаем проброс и тд. Графическая оболочка, интерфейс, совсем немного теории и вуаля. Здесь же все пока туго, но ничего, исправлюсь, давно извилины не напрягал.

А почты ваши читаю, перечитываю по несколько раз, параллельно кучу FAQов смотрю и таблиц в различных интерпретациях по архитектуре IPTABLES.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1966 : 14 Июля 2013, 00:52:45 »
Фильтровать надо в filter/*. Там нет PREROUTING!
Сами сказали, что диаграмма прохождения пакетов у вас перед глазами. Ну так посмотрите на неё!
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1967 : 14 Июля 2013, 01:06:07 »
Пойду застрелюсь  >:( :idiot2:
Маркировать пакеты мне (вроде) не к чему, варианты с фильтрами исчерпаны, остается натить.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1968 : 14 Июля 2013, 01:18:32 »
Скажите что вы хотите сделать. Своими словами.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1969 : 14 Июля 2013, 01:47:45 »
Схема в офисе:
3G Роутер (192.168.0.1) <-> Сервер (eth0 192.168.0.2 / eth1 192.168.1.1) <-> сеть 192.168.1.0/24

Машинам (их около 40) и гаджетам из локальной сети, учитывая, что трафик на месяц ограничен:

- Дать доступ в интернет по HTTP/S, пользователей поделить на группы, каждой группе задать свои условия (доступ на что-то или ограничения), запретить просмотр видео, прослушку аудио и тд. Запретить какие-то сайты. С HTTP понятно - Squid как прозрачный кэширующий прокси. Доступ по HTTPS либо через костыль, либо через фаервол.
- Организовать контент-фильтр (squidguard нпр)
- Дать клиентским машинам забирать/отправлять почту с почтовых сайтов (mail.ru, yandex.ru и тд) почтовыми программами типа Outlook,Mozilla Thundenbird через POP(S)/SMTP(S)/IMAPI
- Дать некоторым машинам (бухгалтерским) доступ на удаленный 1С-сервер через VPN.
- Открыть mail.ru агент, ICQ.
- Завести БД пользователей.
- Вести статистику использования интернета пользователями
- Возможно что-то еще.
- Запретить все остальное, запретить торренты.

Политика следующая - запрещено все, кроме того, что разрешено.

До этого стоял Kerio на Win7, там все просто было - накидал нужные правила сверху, кто-куда ходит, ниже запретил остальное, настроил HTTP-Policy, создал пользователей, присвоил на каждого IP и тд.
До Kerio еще настраивал Mikrotik, там тоже с IPTABLES дело имел, но все под чистую забыл.

Минимум, который мне сегодня необходим, это организовать открытие сайтов по HTTPS, дать доступ по POP/SMTP/IMAPI и чтобы Mail.ru агент работал, ибо в настоящий момент, пока я пытаюсь познать линуксоидную ось, IPTABLES итд, у меня 3G Роутер напрямую раздает интернет в локальную сеть, сотрудники творят что хотят, трафик улетает, а я все пытаюсь что-то родить  :(
« Последнее редактирование: 14 Июля 2013, 01:51:33 от insiki »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1970 : 14 Июля 2013, 04:56:08 »
Не надо впихивать два условия в одно предложение - сами себя запутываете.

1. Раздать интернет. Сделали? Интернет в локалке есть?
2. Завернуть на прозрачный сквид - сделали.
3. Пустить HTTPS через прокси. Есть варианты. WPAD например.
4. Почта. Обязательно давать доступ именно к удалённым серверам? Впрочем, это как раз небольшая проблема. При том, что всё уже работает, всё просто должно работать.
5. Отрезать... в общем, отрезать. Вот теперь - можно резать.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1971 : 14 Июля 2013, 19:05:10 »
1. Интернет есть, всем, повсюду и везде, а надо только чтобы странички открывались по HTTP/S, почта шла по POP/SMTP/IMAP и бухгалтера могли ходить по VPN. Остальное должно быть запрещено. Уберу правило A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT и останется только HTTP.
2. Завернул, HTTP трафик идет.
3. Хочу без костылей, через NAT и уже сбор трафика осуществлять не со Squid, а с IPTABLES, но сбор трафика - это уже в очеень последнюю очередь.
4. Доступ надо дать не конкретно к серверам, а вообще по POP/SMTP/IMAPI и их защищенным вариантам, указывать конкретно каждый почтовый хост не то.
5. Резал бы, если бы в IPTABLES настроил все как хочу. Пускать всё, кроме того, что режу (а отслеживать и резать каждый раз задолбаешься) - имхо нехороший вариант, как в плане защиты, так и надежности.

Попытаюсь все реализовать, не получится - буду делать через UFW, не получится - вернусь к старой схеме на Керио или пойду на курсы :)
Чет с каждым ответным постом на мое сообщение понимание IPTABLES только уменьшается.
Нужно дать возможность ходить пакетам по конкретным портам в локальную сеть туда-сюда, делаю правило в FORWARD, оказывается неправильно и тд с остальным. Такое ощущение, как будто вообще ничего правильного, а IPTABLES это ересь, и ей никто не пользуется и тд. Ерунда какая-то.
Или вы меня отговорить пытаетесь, или еще что-то, непонятно  ???
« Последнее редактирование: 14 Июля 2013, 19:23:03 от insiki »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1972 : 14 Июля 2013, 20:12:30 »
Дело в том, что, например, SMTPS может работать на самых разных портах. Кроме того, вы забыли 587/tcp.
А немного паранойи для сисадмина - это нормально. Пока вы не выплёскиваете её на окружающих.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1973 : 14 Июля 2013, 22:55:18 »
Про порты это да, вкурсе. Смысла писать тыщу правил на каждый порт, если можно сделать и одним правилом + для тестирования указать достаточно так же один порт, поэтому перечислил несколько основных для начала.
Завтра на работу, сижу думаю:

Разрешим из 192.168.1.0/24 отправлять пакет из интерфейса eth1 на интерфейс eth0 на порты 25,110 как только установленные, заносится в таблицу nat
-A PREROUTING nat -s 192.168.1.0/24 -i eth0 -o eth1 -p tcp -m multiport --sports 25,110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Разрешим получать пакет на 192.168.1.0/24 из интерфейса eth0 на интерфейc eth1 с портов 25,110
-A PREROUTING nat -d 192.168.1.0/24 -o eth0 -i eth1 -p tcp -m multiport --dports 25,110 -m conntrack --ctstate RELATED,ESTABLISHED-j ACCEPT

Теперь нам нужно проложить этому пакету дорогу здесь, через FORWARD в POSTROUTING
Разрешам этому пакету пройти, здесь должно быть хватать одного правила, ибо в цепочке FORWARD пакет ходит вперед и обратно.
-A FORWARD -s 192.168.1.0/24 -i eth0 -o eth1 -p tcp -m multiport --dports 25,110 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Далее срабатывает маскарадинг
Делам так, чтобы пакеты из локальной сети, идущие на интерфейс eth0 прятались за адресом шлюза, т.к. он у нас смотрит в интернет.
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
« Последнее редактирование: 14 Июля 2013, 23:57:26 от insiki »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1974 : 14 Июля 2013, 23:29:28 »
Ещё раз - нет такой цепочки - filter/PREROUTING...
А в nat/PREROUTING имя исходящего интерфейса неизвестно. Потому что PRErouting - ДО роутинга пакет не маршрутизирован.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1975 : 15 Июля 2013, 00:13:12 »
Ещё раз - нет такой цепочки - filter/PREROUTING...
А в nat/PREROUTING имя исходящего интерфейса неизвестно. Потому что PRErouting - ДО роутинга пакет не маршрутизирован.
Забыл я -t убрать, изначально опять неправильно написал, пытался фильтровать в PREROUTING, взглянул на схему, освежил память, вспомнил ваш пост, а удалить -t забыл.

Могу я не трогать тогда пакеты в PREROUTING? Маркировать мне их не надо (рано пока мне это делать), в nat ничего заносить тоже не буду, пусть себе идут дальше (а будут ли идти?)Оставлю лишь правило редиректа:
-A PREROUTING ! -d 192.168.1.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128

Установлю политику запрета по умолчанию
-P INPUT DROP
-P FORWARD DROP

Все, все пакеты дальше не идут, теперь фильтруем через FORWARD то, что нам надо:
Разрешить из локальной сети устанавливать соединения на интерфейсе eth0 на порты 25,110 - так как соединение устанавливается впервые, ставим флаг NEW + для установленных соединений ESTABLISHED
-A FORWARD -s 192.168.1.0/24 -i eth1 -o eth0 -p tcp -m multiport --sports 25,110 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
Разрешить пакетам возвращаться - так как соединения установлены, флаг NEW нам не нужен.
-A FORWARD -d 192.168.1.0/24 -i eth0 -o eth1 -p tcp -m multiport --dports 25,110 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Теперь маскарадинг
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Останется добавить правило, чтобы можно было по SSH устанавливать соединения со шлюзом - цепочка INPUT (я админю с другой машины) и настроить правила для защищенных портов, порта 443 и в дальнейшем vpn.
OUTPUT мне в принципе пока трогать не надо.
Кажется таблицу начал понимать, осталось запомнить нюансы про то, где фильтрация есть, где нет и тд.
« Последнее редактирование: 15 Июля 2013, 00:21:41 от insiki »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1976 : 15 Июля 2013, 06:26:33 »
Могу я не трогать тогда пакеты в PREROUTING?
Зависит от задач.

Цитировать
Маркировать мне их не надо (рано пока мне это делать),
Маркируются в mangle а не в nat.

Цитировать
в nat ничего заносить тоже не буду, пусть себе идут дальше (а будут ли идти?)
Если фильтрацию пройдут - куда они денутся?

Цитировать
Оставлю лишь правило редиректа:
-A PREROUTING ! -d 192.168.1.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128

Установлю политику запрета по умолчанию
-P INPUT DROP
-P FORWARD DROP

Все, все пакеты дальше не идут, теперь фильтруем через FORWARD то, что нам надо:
Угу.

Цитировать
Разрешить из локальной сети устанавливать соединения на интерфейсе eth0 на порты 25,110 - так как соединение устанавливается впервые, ставим флаг NEW + для установленных соединений ESTABLISHED
-A FORWARD -s 192.168.1.0/24 -i eth1 -o eth0 -p tcp -m multiport --sports 25,110 -m conntrack --ctstate NEW, ESTABLISHED -j ACCEPT
1. Что-то ваше правило не согласуется с постановкой задачи.
2. ESTABLISHED у вас выше разрешены, зачем ещё раз то же самое мусолить?

Цитировать
Разрешить пакетам возвращаться - так как соединения установлены, флаг NEW нам не нужен.
-A FORWARD -d 192.168.1.0/24 -i eth0 -o eth1 -p tcp -m multiport --dports 25,110 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Зачем так сложно?
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Цитировать
Теперь маскарадинг
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Останется добавить правило, чтобы можно было по SSH устанавливать соединения со шлюзом - цепочка INPUT (я админю с другой машины) и настроить правила для защищенных портов, порта 443 и в дальнейшем vpn.
OUTPUT мне в принципе пока трогать не надо.
Кажется таблицу начал понимать, осталось запомнить нюансы про то, где фильтрация есть, где нет и тд.

Где напишете, там и будет. А вот где писать стоит - ...
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1977 : 15 Июля 2013, 11:19:09 »
Зависит от задач.
Пока такой задачи нет, но тут пока мозгуешь, по ходу дела все больше новых задач формируется :)
Маркируются в mangle а не в nat.
Я в целом обобщил :)
Если фильтрацию пройдут - куда они денутся?
Слава богу :)
Угу.

1. Что-то ваше правило не согласуется с постановкой задачи.
Точно! указал порт источника, а надо то порт назначения! :) --dport
2. ESTABLISHED у вас выше разрешены, зачем ещё раз то же самое мусолить? Зачем так сложно?
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
Точно! А я боялся этим правилом разрешить вообще всем пакетам бегать, но как они бегать будут, если мне для этого нужно их обозначить правилом c NEW! Вот обозначу и будут бегать :)

Где напишете, там и будет. А вот где писать стоит - ...
А всего-то надо разрешить в INPUT и OUTPUT бегать пакетам с локальной сети на шлюз и наоборот :)
Вот, что пока накидал
iptables-save
(Нажмите, чтобы показать/скрыть)
Правило -P INPUT DROP пока закомментировал, ибо разбираюсь, как правильно и какие порты мне необходимо открыть для работы прокси и DHCP.
Делаю доступным для локальной сети порт 3128 на шлюзе - не работает.
« Последнее редактирование: 15 Июля 2013, 12:12:34 от insiki »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28510
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1978 : 15 Июля 2013, 12:14:17 »
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Все пакеты, уходящие с внешнего интерфейса, надо маскарадить. Иначе они никуда не попадут, порежутся на следующем шлюзе.

Цитировать
*filter
:...
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -p tcp -m conntrack --ctstate NEW -j ACCEPT

Порядок правил имеет значение. Первыми имеет смысл указывать правила с максимальным трафиком, чтобы снизить расход CPU на фильтрацию трафика.

Если разрешите только tcp, DNS отвалится, как и прочие протоколы, типа ICMP и GRE.

В остальном, вроде, верно.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн insiki

  • Участник
  • *
  • Сообщений: 168
    • Просмотр профиля
Re: HOWTO: Iptables для новичков
« Ответ #1979 : 15 Июля 2013, 12:41:04 »
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

Все пакеты, уходящие с внешнего интерфейса, надо маскарадить. Иначе они никуда не попадут, порежутся на следующем шлюзе.
Благодарю, в очередной раз убедился - делать по чьему-то шаблону, не понимая суть происходящего не стоит.

ил имеет значение. Первыми имеет смысл указывать правила с максимальным трафиком, чтобы снизить расход CPU на фильтрацию трафика.
Об этом читал, но представление имел смутное. Теперь лучше.
Если разрешите только tcp, DNS отвалится, как и прочие протоколы, типа ICMP и GRE.
Именно с этим и столкнулся - перестал получать от шлюза IP-адрес. Начал прописывать UDP порты DHCP, и еще не представляю сколько всего пришлось бы мне прописывать, вместо того, чтобы сделать одно правило на eth1.

Премного вам благодарен! Еще многое предстоит узнать, но основы заложены, кажется :)

 

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