Доброго времени суток.
Вот уже неделю не могу разобраться с Iptables.
Прочитал вот этот мануал http://www.opennet.me/docs/RUS/iptables/ и после него была каша в голове.
Начал писать правила в /etc/sysconf/iptables и понял что я не знаю что в каких таблицах можно писать, а что запрещено. Так например:
#Здесь вроде бы всегда всё разрешают.
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT#А вот тут уже начинается веселье
*nat
#Указываем политики по умолчанию
:PREROUTING ACCEPT [0:0]
:OUTPUT DROP [0:0]
:POSTROUTING ACCEPT [0:0]
#И дальше начинаем воять не зная какие ключи можно использовать в данной таблице а какие
#нельзя. В руководстве явно указано что здесь можно использовать DNAT, SNAT,
#MASQUERADE,на счёт остального умалчивается, только изредка проскакивают ключи -i,-o,-s,-d
#Здесь тоже интересный вариант. На счёт DDos атак. По правилам "тройного рукопожатия"
#Только после отосланной пары SYN,ASK и в ответ отосланного ASK соединение считается
#установленным, но в примере из статьи даётся пример в котором запрещается новое
#соединение с флагами SYN,ASK и в ответ отсылается RST закрывая соединение. По логике все
#соединения будут блокироваться. И тем более таким способом не избавиться от забивания
#SYN пакетами.
-A PREROUTING -p tcp -m tcp -m state -i eth0 --tcp-flags SYN,ACK SYN ! --state NEW -j DROP
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
-A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 3128
COMMIT
*filter
#На счёт FORWARD. Если я правильно понял то эта цепочка используется только для пересылки
#пакетов через возможный маскарадинг и в обход локальных приложений шлюза. Но там так же
#написано что пакеты идут в оба направления, что в свою очередь немного путает. Куда
#попадают пакеты пришедшие в обратном направлении?
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT DROP [0:0]
:INET_PORTS DROP [0:0]
:INET_NET [0:0] [0:0]
:LAN_PORTS DROP [0:0]
:LAN_NET [0:0] [0:0]
На счёт формата самого файла. Как здесь правильно указывать значения приведённые в примере, такие как "LAN_IP="192.168.0.2" и можно ли указать таким образом диапазон портов к примеру "LAN_PORTS="21,22,25,80,110"?-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -j LAN_NET
-A INPUT -j LAN_PORTS
-A OUTPUT -j INET_NET
-A OUTPUT -j INET_PORTS
-A LAN_PORTS -p tcp -m tcp -m multiport --ports 20,21,22,25,53,80,110,139,445,3128,10000 -j ACCEPT
Так же сказано что пользовательские цепочки работают в пределах одной таблицы. Из чего следует вопрос, можно ли каким либо образом использовать уже использованные в других таблицах переменные? И возможно ли объявлять так называемые глобальные переменные?
>[оверквотинг удален]
> -A INPUT -j LAN_NET
> -A INPUT -j LAN_PORTS
> -A OUTPUT -j INET_NET
> -A OUTPUT -j INET_PORTS
> -A LAN_PORTS -p tcp -m tcp -m multiport --ports 20,21,22,25,53,80,110,139,445,3128,10000
> -j ACCEPT
> Так же сказано что пользовательские цепочки работают в пределах одной таблицы. Из
> чего следует вопрос, можно ли каким либо образом использовать уже использованные
> в других таблицах переменные? И возможно ли объявлять так называемые глобальные
> переменные?1. знаю точно, что в таблице nat фильтровать не стоит, для этих целей существует таблица filter
поэтому предлагаю сделать так
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT[0:0]
:POSTROUTING ACCEPT [0:0]
2. проходящие пакеты попадают в таблицу filter цепочка FORWARD, при этом просто меняются
входящий и исходящий интерфейсы, например
-A FORWARD -i eth0 -o eth1 (из инета в локалку)
-A FORWARD -i eth1 -o eth0 (из локалки в инет)3. про переменные: тут iptables ни причем смотрите в сторону например bash
> 1. знаю точно, что в таблице nat фильтровать не стоит, для этих
> целей существует таблица filter
> поэтому предлагаю сделать так
> *nat
> :PREROUTING ACCEPT [0:0]
> :OUTPUT ACCEPT[0:0]
> :POSTROUTING ACCEPT [0:0]Что то я не понял. Что конкретно вы предложили кроме объявления политик по умолчанию?
> 2. проходящие пакеты попадают в таблицу filter цепочка FORWARD, при этом просто
> меняются
> входящий и исходящий интерфейсы, например
> -A FORWARD -i eth0 -o eth1 (из инета в локалку)
> -A FORWARD -i eth1 -o eth0 (из локалки в инет)В этом случае меня запутала фраза "через эту цепочку проходит трафик в обоих направлениях". У меня в голове не укладывалось что трафик может пойти в обратную сторону и выйти из PREROUTING.
> 3. про переменные: тут iptables ни причем смотрите в сторону например bashТ.e. если это по правилам определения переменных в Linux(например на С) то Iptables всё поймёт?
> Начал писать правила в /etc/sysconf/iptables и понял что я не знаю что
> в каких таблицах можно писать, а что запрещено. Так например:Правила нужно писать не напрямую в файл, а через команду 'iptables'. И в конце просто сохранить их через команду iptables-save.
> Правила нужно писать не напрямую в файл, а через команду 'iptables'. И
> в конце просто сохранить их через команду iptables-save.Ну не всегда. Даже в самой статье приводят вариант написания правил файл с последующей загрузкой.(это конечно отличается от моего варианта, но всё же)
input входящий трафик адресованный самому хосту
output исходящий трафик сгенерённый приложениями хоста
forward транзитный (то что приходит с другого компьютера и перенаправляется дальше) трафик ( два напрвления )
фильтруют в этих цепочкахprerouting и postrouting для nat. Обычно в prerouting DNAT, в postrouting SNAT или MASQUERADE.
Для начала этого достаточно.
> input входящий трафик адресованный самому хосту
> output исходящий трафик сгенерённый приложениями хоста
> forward транзитный (то что приходит с другого компьютера и перенаправляется дальше) трафик
> ( два напрвления )
> фильтруют в этих цепочках
> prerouting и postrouting для nat. Обычно в prerouting DNAT, в postrouting SNAT
> или MASQUERADE.
> Для начала этого достаточно.Вы наверное не поняли что меня интересует(прочитайте первый пост). То что вы написали описано в руководстве(которое я прочитал 2 раза) и это всё давно понятно.
>[оверквотинг удален]
> #установленным, но в примере из статьи даётся пример в котором запрещается новое
> #соединение с флагами SYN,ASK и в ответ отсылается RST закрывая соединение. По
> логике все
> #соединения будут блокироваться. И тем более таким способом не избавиться от забивания
> #SYN пакетами.
> -A PREROUTING -p tcp -m tcp -m state -i eth0 --tcp-flags SYN,ACK
> SYN ! --state NEW -j DROP
> -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
> -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 3128
> COMMITМожно прорускать уже установленные соединения
iptables -A INPUT -m state --state REALTED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state REALTED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state REALTED,ESTABLISHED -j ACCEPTА для новых писать разрешающие правила например:
iptables -A OUTPUT -p tcp --dport http -m state --state NEW ACCEPT разрешит локальному браузеру смотреть странички.Остальное запрещать политиками по умолчанию
Зачем себе забивать голову синами и асками?
> Можно прорускать уже установленные соединения
> iptables -A INPUT -m state --state REALTED,ESTABLISHED -j ACCEPT
> iptables -A OUTPUT -m state --state REALTED,ESTABLISHED -j ACCEPT
> iptables -A OUTPUT -m state --state REALTED,ESTABLISHED -j ACCEPTДве одинаковых строчки.
> А для новых писать разрешающие правила например:
> iptables -A OUTPUT -p tcp --dport http -m state --state NEW ACCEPT
> разрешит локальному браузеру смотреть странички.
> Остальное запрещать политиками по умолчанию
> Зачем себе забивать голову синами и асками?Не все новые соединения одинаково полезны )) . В статье написано как открывая огромное количество новых соединений(не закрывая их) ложат шлюзы. Так что я не напрасно задумался о флагах.
>> Можно прорускать уже установленные соединения
>> iptables -A INPUT -m state --state REALTED,ESTABLISHED -j ACCEPT
>> iptables -A OUTPUT -m state --state REALTED,ESTABLISHED -j ACCEPT
>> iptables -A OUTPUT -m state --state REALTED,ESTABLISHED -j ACCEPT
> Две одинаковых строчки.FORWARD в третией строке
>> А для новых писать разрешающие правила например:
>> iptables -A OUTPUT -p tcp --dport http -m state --state NEW ACCEPT
>> разрешит локальному браузеру смотреть странички.
>> Остальное запрещать политиками по умолчанию
>> Зачем себе забивать голову синами и асками?
> Не все новые соединения одинаково полезны )) . В статье написано как
> открывая огромное количество новых соединений(не закрывая их) ложат шлюзы.ну используйте -m connlimit
> Так что
> я не напрасно задумался о флагах.
>>-A PREROUTING -p tcp -m tcp -m state -i eth0 --tcp-flags SYN,ACK SYN ! --state NEW -j DROPНу идёт первый SYN пакет, но state ещё не NEW и дропается. Эти соединение вообще никогда не установятся. Чего Вы добиваетесь этим правилом?
>>>-A PREROUTING -p tcp -m tcp -m state -i eth0 --tcp-flags SYN,ACK SYN ! --state NEW -j DROP
> Ну идёт первый SYN пакет, но state ещё не NEW и дропается.
> Эти соединение вообще никогда не установятся. Чего Вы добиваетесь этим правилом?Извиняюсь. Здесь я пытался сам составить правило и немного напортачил.
В оригинале было следующее:
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROPНе там знак отрицания поставил и цепочку видимо не ту взял так как в PREROUTING данные манипуляции над пакетами будут считаться фильтрацией что уже не допустимо.
Примерно так должно было быть:
-A INPUT -p tcp -m tcp -m state -i eth0 ! --tcp-flags SYN,ACK SYN --state NEW -j DROP>ну используйте -m connlimit
Буду благодарен если кинете ссылкой с параметрами этого ключа и примерами его использования. C --limit тоже как то всё туманно...
iptables -A INPUT -p icmp --icmp-type echo-reply -m limit --limit \
3/minute --limit-burst 5 -j DROP
Вот это объяснение меня в конец запутало "А теперь представим себе правило --limit 3/minute --limit-burst 5, тогда после поступления 5 пакетов (за очень короткий промежуток времени), емкость "наполнится" и каждый последующий пакет будет вызывать "переполнение" емкости, т.е. "срабатывание" критерия. Через 20 секунд "уровень" в емкости будет понижен (в соответствии с величиной --limit), таким образом она готова будет принять еще один пакет, не вызывая "переполнения" емкости, т.е. срабатывания критерия."
Где указываются эти 20 секунд? И значит ли это что лимитом пропускания станет 1 пакет в 20 секунд если будет постоянная нагрузка на канал?
>>ну используйте -m connlimit
> Буду благодарен если кинете ссылкой с параметрами этого ключа и примерами его
> использования. C --limit тоже как то всё туманно...man iptables:
# limit the number of parallel HTTP requests to 16 per class C sized network (24 bit netmask)
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above
16 --connlimit-mask 24 -j REJECT
Ограничивает число запросов с сети /24, если будет /32 или без --conlimit-mask то с каждого хоста. Как больше 16 соединений, то режется. Если не указывается -s -d --connlimit-mask то видимо считается количество каждой пары хост-хост.Видимо в примере учитываются и не полностью установленные соединения, что помогает защищаться от сканирования SYN пакетами. Как раз я так понял Ваша задачка.
> Ограничивает число запросов с сети /24, если будет /32 или без --conlimit-mask
> то с каждого хоста. Как больше 16 соединений, то режется. Если
> не указывается -s -d --connlimit-mask то видимо считается количество каждой пары
> хост-хост.Видимо в примере учитываются и не полностью установленные соединения, что помогает
> защищаться от сканирования SYN пакетами. Как раз я так понял Ваша
> задачка.Спасибо! Буду пробовать.
А в природе есть подробное описание этих команд на русском?
http://tresnet.ru/wp-content/uploads/2010/04/4001.png
http://www.altlinux.org/images/7/7d/Tables_traverse.jpgМожешь попробовать мой скрипт использовать для простой настройки iptables
http://code.google.com/p/netscr/
он правда местами сырой.
> http://tresnet.ru/wp-content/uploads/2010/04/4001.png
> http://www.altlinux.org/images/7/7d/Tables_traverse.jpgС картинок я начинал когда читал первые главы Iptatables. Даже набросал свою схему для лучшего понимания(здесь без указания таблиц):
http://saveimg.ru/show-image.php?id=c7bac676c74a666db6e68b0f...> Можешь попробовать мой скрипт использовать для простой настройки iptables
> http://code.google.com/p/netscr/
> он правда местами сырой.НЕ. Я предпочитаю ручками всё писать для лучшего понимания.
Меня сейчас интересует следующее. Какие ключи ещё можно использовать в таблице nat?
Например я знаю что эти ключи можно использовать:
DNAT, SNAT,MASQUERADE, -i,-o,-s,-dЧто ещё можно использовать? Например dport, sport, mac, state, -f,syn,icmp-type, limit, MARK, LOG, REJECT. Что из них нельзя использовать для таблицы nat?
Что и как, вроде написано в руководстве
http://www.opennet.me/docs/RUS/iptables/
остальное методом тыка, что нельзя, получишь ошибку, если правило с консоли добавлять.И потом, мне не понятно, зачем разбираться в ключах, не проще ли поставить и чётко для себя сформулировать задачу, а потом её решать?
Я например сейчас даже толком не скажу как и что в скрипте делается, но когда ставлю очередную задачу, то листая документацию нахожу решение.
> Что и как, вроде написано в руководстве
> http://www.opennet.me/docs/RUS/iptables/
> остальное методом тыка, что нельзя, получишь ошибку, если правило с консоли добавлять.Дак в том то и дело что что это не то что бы нельзя, а считается не желательным. Так как может привести к тем или иным последствиям. Как раз в этом руководстве так и написано.
> И потом, мне не понятно, зачем разбираться в ключах, не проще ли
> поставить и чётко для себя сформулировать задачу, а потом её решать?Хорошо сформулировал я задачи, дальше стоит цель распределения правил по цепочкам. В статье написано что желательно часть правил раскидать по разным цепочкам. Отсюда и появляется вопрос, в какой цепочке можно использовать те или иные команды а в какой нет. Например если по входящим интерфейсам,(-s) можно ли ещё в цепочке PREROUTING отклонить неразрешённых хостов? А уже в цепочке INPUT уже отсеять доступ по портам?
> Хорошо сформулировал я задачи, дальше стоит цель распределения правил по цепочкам. В
> статье написано что желательно часть правил раскидать по разным цепочкам. Отсюда
> и появляется вопрос, в какой цепочке можно использовать те или иные
> команды а в какой нет.Имеются в виду пользовательские цепочки. Например если есть много сетей - ставят начальные правила-диспетчеры которые выкидывают пакеты в свои цепочки для каждой подсети, маршрут анализа пакета (количество правил по которым анализтруется пакет) может сильно сокращаться, а это бывает хорошая экономия производительности.
> Например я знаю что эти ключи можно использовать:
> DNAT, SNAT,MASQUERADE, -i,-o,-s,-d
> Что ещё можно использовать? Например dport, sport, mac, state, -f,syn,icmp-type, limit,
> MARK, LOG, REJECT. Что из них нельзя использовать для таблицы nat?Да использовать можно все критерии что iptables проглатывает, только действие в -t nat - -j какой нибудь *NAT*, только фильтровать там не надо!!!
Возможно глупый вопрос но я запутался.
Знаю что при прохождении правил вышестоящее правило является приоритетным и оно выполняется первым. Написано так же что при применении DROP,последующие правила пропускаются.
Непонятно следующее, если
1.Разрешается доступ с сети eth0
2.Разрешается доступ с определённых портов на определённые порты
3.Разрешается доступ с определённых диапазонов сетиЦитирую статью http://www.opennet.me/docs/RUS/iptables/
ACCEPT "Данная операция не имеет дополнительных ключей. Если над пакетом выполняется действие ACCEPT, то пакет прекращает движение по цепочке (и всем вызвавшим цепочкам, если текущая цепочка была вложенной) и считается ПРИНЯТЫМ (то бишь пропускается), тем не менее, пакет продолжит движение по цепочкам в других таблицах и может быть отвергнут там. Действие задается с помощью ключа -j ACCEPT."Из этого следует что при встрече первого ACCEPT, iptables пропускает все остальные правила в цепочке(к примеру INPUT) и даже не доходит до разрешения портов. Получается что мы просто разрешили доступ с eth0 на все порты.
>Получается что мы просто разрешили доступ с eth0 на все
> порты.Да, если пакет подпал под ACCEPT то он сразу принимается в этой цепочке и дальше анализируется в следующих цепочках по диаграмме следования пакетов между цепочками. Для DROP пакет отбрасывается и больше не анализируется.
> Цитирую статью http://www.opennet.me/docs/RUS/iptables/Цитируй непонятные тебе команды, чтоли. Вырванные из контекста абзацы никак не дают понять, что именно тебе не понятно. Но, тем не менее, попробую объяснить.
> ACCEPT "Данная операция не имеет дополнительных ключей.
Операция не имеет ключей _операции_. -j DNAT имеет, к примеру, ключ --to-destination.
>Если над пакетом выполняется действиеДействие над пакетом выполняется _при выполнении всех условий проверки_.
> Из этого следует что при встрече первого ACCEPT, iptables пропускает все остальные
> правила в цепочке(к примеру INPUT) и даже не доходит до разрешения
> портов. Получается что мы просто разрешили доступ с eth0 на все
> порты.Для этого надо посмотреть, что именно, какую команду вы сейчас рассматриваете.
iptables -I INPUT -i eth0 -j ACCEPT # разрешит все входящие к хосту пакеты, вошедшие через eth0.
iptables -I INPUT -i eth0 -p tcp --dport 80 -j ACCEPT #Разрешит все входящие к хосту пакеты протокола tcp и идущие на порт 80, вошедшие через eth0.
> Для этого надо посмотреть, что именно, какую команду вы сейчас рассматриваете.
> iptables -I INPUT -i eth0 -j ACCEPT # разрешит все
> входящие к хосту пакеты, вошедшие через eth0.
> iptables -I INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
> #Разрешит все входящие к хосту пакеты протокола tcp и идущие на
> порт 80, вошедшие через eth0.Да. Именно этот вариант. По логике если iptables встретил ACCEPT то он пропускает следующие правила в цепочке. Как же тогда выполняется следующее правило(--dport 80)?
>> Для этого надо посмотреть, что именно, какую команду вы сейчас рассматриваете.
>> iptables -I INPUT -i eth0 -j ACCEPT # разрешит все
>> входящие к хосту пакеты, вошедшие через eth0.
>> iptables -I INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
>> #Разрешит все входящие к хосту пакеты протокола tcp и идущие на
>> порт 80, вошедшие через eth0.
> Да. Именно этот вариант. По логике если iptables встретил ACCEPT то он
> пропускает следующие правила в цепочке. Как же тогда выполняется следующее правило(--dport
> 80)?входящие через eth0 пакеты его не достигнут, соответственно у этого правила нет шансов на исполнение, в чем можно убедиться и на практике (iptables -nvL INPUT --line).
> входящие через eth0 пакеты его не достигнут, соответственно у этого правила нет
> шансов на исполнение, в чем можно убедиться и на практике (iptables
> -nvL INPUT --line).Получается чтобы выполнить данный критерий нужно объединять два(а то и более) правило в одно примерно так:
iptables -I INPUT -i eth0 -s 192.168.0.2 -p tcp --dport 80 ! --syn -m state --state NEW -j ACCEPT
так как если мы их разобьём на два правила и разместим в одной цепочке то одно из них не выполнится так или он пропустит с интерфейса eth0 на порт 80 всё учитывая пакеты со сброшенным флагом SYN или он пропустит все новые соединения с флагом SYN но не важно с какого интерфейса.
>> входящие через eth0 пакеты его не достигнут, соответственно у этого правила нет
>> шансов на исполнение, в чем можно убедиться и на практике (iptables
>> -nvL INPUT --line).
> Получается чтобы выполнить данный критерий нужно объединять два(а то и более) правило
> в одно примерно так:
> iptables -I INPUT -i eth0 -s 192.168.0.2 -p tcp --dport 80 !
> --syn -m state --state NEW -j ACCEPT
> так как если мы их разобьём на два правилаНа какие два правила ? я не понял. Не стесняйтесь писать больше ;-)
> и разместим в одной цепочке то одно из них не выполнится так или он
> пропустит с интерфейса eth0 на порт 80 всё учитывая пакеты со
> сброшенным флагом SYN или он пропустит все новые соединения с флагом
> SYN но не важно с какого интерфейса.Зависит от того, что вам нужно.
> iptables -I INPUT -i eth0 -s 192.168.0.2 -p tcp --dport 80 !
> --syn -m state --state NEW -j ACCEPTКроме того, правила надо рассматривать комплексно,а не по отдельности.
1)должны быть правила, которые будут разрешать прохождение пакетов установленных соединений.
2) Не особо понимаю, зачем совмещать --syn и --state ? Они, ИМХО, будут друг друга дублировать. (сам не использую проверку --syn) ?
> На какие два правила ? я не понял. Не стесняйтесь писать больше
> ;-)Например это правило "iptables -I INPUT -i eth0 -s 192.168.0.2 -p tcp --dport 80 ! --syn -m state --state NEW -j ACCEPT "
разбить на два правила
iptables -I INPUT -i eth0 -s 192.168.0.2 -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp ! --syn -m state --state NEW -j ACCEPT
>> и разместим в одной цепочке то одно из них не выполнится так или он
>> пропустит с интерфейса eth0 на порт 80 всё учитывая пакеты со
>> сброшенным флагом SYN или он пропустит все новые соединения с флагом
>> SYN но не важно с какого интерфейса.
> Зависит от того, что вам нужно.Нужно написать ряд правил которые должны выполняться по очереди, т.е. одно за другим.
>> iptables -I INPUT -i eth0 -s 192.168.0.2 -p tcp --dport 80 !
>> --syn -m state --state NEW -j ACCEPT
> Кроме того, правила надо рассматривать комплексно,а не по отдельности.
> 1)должны быть правила, которые будут разрешать прохождение пакетов установленных соединений.
> 2) Не особо понимаю, зачем совмещать --syn и --state ? Они,
> ИМХО, будут друг друга дублировать. (сам не использую проверку --syn) ?--syn и --state ни каким образом не дублируют друг друга так как выполняют абсолютно разные функции.
--syn проверяет наличие флага SYN в соединении.
--state проверяет состояние самого соединения (NEW,ESTABLISHED,RELATED,INVALID)
Подробнее об этом написано здесь http://www.opennet.me/docs/RUS/iptables/#NEWNOTSYN
Вот что я хочу сделать.
В цепочке PREROUTING разрешу доступ по ip.
*nat
:PREROUTING DROP [0:0]
-A PREROUTING -i eth0 -s 192.168.1.0-192.168.1.10 -j ACCEPT #1я подсеть
-A PREROUTING -i eth1 -s 192.168.5.0-192.168.1.5 -j ACCEPT #2я подсеть
-A PREROUTING -i eth2 -s 192.168.10.0-192.168.10.3 -j ACCEPT #3я подсеть
-A PREROUTING -s 175.175.175.175 -j ACCEPT #ip которому разрешён удалённый доступА в цепочке INPUT буду разрешать доступ по портам, флагам и состояниям соединений.
Например так:
*filter
:INPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p tcp --sport 3128 --dport 3128 -j ACCEPT
...
..
.Правильной ли будет данная конструкция?
Не будут ли каким либо образом правила в PREROUTING мешать или создавать проблемы?
Так сказать не противоречит ли это критериям создания правил?
> В цепочке PREROUTING разрешу доступ по ip.вам 100 раз сказали, NAT не предназначен для фильтрации
>> В цепочке PREROUTING разрешу доступ по ip.
> вам 100 раз сказали, NAT не предназначен для фильтрацииВсе верно. В PREROUTING указываются направления.
Например - Откуда, куда, какой порт... и куда направлять.
Дальнейшие действия через таблицу INPUT.Если нужна доп. цепочка:
iptables -N mega_cepochka
iptables -A INPUT -o eth2 -d 1.1.1.1 -p tcp --dport 22 -j mega_cepochka
iptables -A mega_cepochka -m recent --name ssh --update --seconds 600 --hitcount 5 -j DROP
iptables -A mega_cepochka -m recent --name ssh --set -j ACCEPT
>>> В цепочке PREROUTING разрешу доступ по ip.
>> вам 100 раз сказали, NAT не предназначен для фильтрации
> Все верно. В PREROUTING указываются направления.
> Например - Откуда, куда, какой порт... и куда направлять.
> Дальнейшие действия через таблицу INPUT.
> Если нужна доп. цепочка:
> iptables -N mega_cepochka
> iptables -A INPUT -o eth2 -d 1.1.1.1 -p tcp --dport 22 -j
> mega_cepochkaЕсли цепочка INPUT у этого трафика есть -i и нет -o, он никуда не выходит, а потребляется локальными приложениями. Также как OUTPUT это трафик от локальных программ во вне - у него нет -i, а есть -o.
> iptables -A mega_cepochka -m recent --name ssh --update --seconds 600 --hitcount 5
> -j DROP
> iptables -A mega_cepochka -m recent --name ssh --set -j ACCEPT
>>> В цепочке PREROUTING разрешу доступ по ip.
>> вам 100 раз сказали, NAT не предназначен для фильтрации
> Все верно. В PREROUTING указываются направления.
> Например - Откуда, куда, какой порт... и куда направлять.
> Дальнейшие действия через таблицу INPUT.Не используют в PREROUTING -j ACCEPT DROP REJECT и подобное. Не надо там этого делать.
Если трафик входящий и предназначен этому хосту, то INPUT, если исходящий от этого хоста, то OUTPUT, если трафик приходит на хост чтобы передаваться дальше - FORWARD.
Ну ёшкин кот, смотрите хоть примеры в интернете и анализируйте их...
>[оверквотинг удален]
>>> вам 100 раз сказали, NAT не предназначен для фильтрации
>> Все верно. В PREROUTING указываются направления.
>> Например - Откуда, куда, какой порт... и куда направлять.
>> Дальнейшие действия через таблицу INPUT.
> Не используют в PREROUTING -j ACCEPT DROP REJECT и подобное. Не надо
> там этого делать.
> Если трафик входящий и предназначен этому хосту, то INPUT, если исходящий от
> этого хоста, то OUTPUT, если трафик приходит на хост чтобы передаваться
> дальше - FORWARD.
> Ну ёшкин кот, смотрите хоть примеры в интернете и анализируйте их...Более того, новые версии iptables это делать явно запрещают (-j DROP в -t nat).
Все настроил.
Доступ по IP адресам, по портам, по интерфейсам.
Но сейчас бьюсь над двумя проблемами:
1. Нужно перенаправить случайный порт с диапазона 1026-1500 хоста источника на порт 5000(например) хоста приёмника в интернет из локальной сети. Адресов (приёмника) несколько и они могут меняться.
2. Нужно перенаправить все запросы с диапазону сети(которым разрешён интернет) по портам 21, 53, 80, 8080 на порт прокси 3128.
3. Это скорее вопрос. Можно ли в Iptables использовать какую либо конструкцию в которой можно указать IP адреса через запятую (желательно из разных подсетей)?Вот как я пытаюсь реализовать первое и второе правило.
*nat
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 21 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 5000 -j REDIRECT --to-port 3128
:POSTROUTING ACCEPT [0:0]Знаю что такая конструкция в основном используется чтобы завернуть весь трафик с интернета на один порт прокси.(возможно по этому ничего и не работает)
Но мне нужно обратное, завернуть порты 21,53,80,8080 на прокси чтоб не прописывать на каждом компе настройки. Так как на прокси у меня по пулам есть ограничения через которые должны проходить все.
Грубо говоря прописать на локальных машинах в качестве шлюза 192.168.10.9 и всё.
Чтоб всё шло как по NAT.
Такое возможно?
>[оверквотинг удален]
> -A PREROUTING -p tcp --dport 5000 -j REDIRECT --to-port 3128
> :POSTROUTING ACCEPT [0:0]
> Знаю что такая конструкция в основном используется чтобы завернуть весь трафик с
> интернета на один порт прокси.(возможно по этому ничего и не работает)
> Но мне нужно обратное, завернуть порты 21,53,80,8080 на прокси чтоб не прописывать
> на каждом компе настройки. Так как на прокси у меня по
> пулам есть ограничения через которые должны проходить все.
> Грубо говоря прописать на локальных машинах в качестве шлюза 192.168.10.9 и всё.
> Чтоб всё шло как по NAT.
> Такое возможно?вообще то хорошо бы уточнять какой прокси, т.к. не все могут работать в прозрачном режиме. тут , я так понимаю, речь о squid.
squid - это http прокси и заворачивать на него 21 порт не нужно, 53 tcp - это для специфических нужд и его на прокси не заворачивают, может имелось в виду 53 udp, но его тоже не заворачивают, а ставят кеширующий dns и его адрес раздают клиентам.
80 tcp - пожалуйста, только прокси должен знать что он в прозрачном режиме.через запятую ip не указывают - ip, ip/mask, ip-ip
Всё правильно.
Прокси сервер - Squid 2.6.
В общем то проблема в том чтоб пробросить порт с локальной машины, через прокси(ограничения трафика) и с прокси наружу к хосту приёмнику на порт 5000.
Каким образом это можно реализовать?
Если честно прозрачное проксирование не хотелось бы использовать так как у данного метода нет поддержки ftp и https, что необходимо.
По этому суть стоит только в проброске порта.
> Всё правильно.
> Прокси сервер - Squid 2.6.
> В общем то проблема в том чтоб пробросить порт с локальной машины,
> через прокси(ограничения трафика) и с прокси наружу к хосту приёмнику на
> порт 5000.
> Каким образом это можно реализовать?
> Если честно прозрачное проксирование не хотелось бы использовать так как у данного
> метода нет поддержки ftp и https, что необходимо.
> По этому суть стоит только в проброске порта.не понял что-же нужно, если ограничивать трафик (полосу, скорость) то смотрите про шейпер, если проброс порта, то iptables
каким боком тут прокси не понял
> не понял что-же нужно, если ограничивать трафик (полосу, скорость) то смотрите про
> шейпер, если проброс порта, то iptables
> каким боком тут прокси не понялДело в том что в прокси прописано ограничение ширины канала через пулы. Но сделано это не на каждого пользователя а на группы. Для того что бы дать максимальный канал если в данный момент работает в интернете 1 пользователь из группы.
Исходя из этих соображений этот порт и нужно пропустить через правила Squid`a.
А каким образом это можно организовать в iptables?
Если вот так не работает:
*nat
-A PREROUTING -i eth0 -p tcp --dport 5000 REDIRECT --to-port 3128
>> не понял что-же нужно, если ограничивать трафик (полосу, скорость) то смотрите про
>> шейпер, если проброс порта, то iptables
>> каким боком тут прокси не понял
> Дело в том что в прокси прописано ограничение ширины канала через
> пулы. Но сделано это не на каждого пользователя а на группы.
> Для того что бы дать максимальный канал если в данный момент
> работает в интернете 1 пользователь из группы.
> Исходя из этих соображений этот порт и нужно пропустить через правила Squid`a.это и шейпер может
> А каким образом это можно организовать в iptables?
> Если вот так не работает:
> *nat
> -A PREROUTING -i eth0 -p tcp --dport 5000 REDIRECT --to-port 3128это должно работать, другой вопрос а переварит ли прокси то что вы ему завернули, возможно нет.
> это и шейпер можетКакой именно шейпер и есть ли в нём балансировка нагрузки канала?
Просто настройками сквида не особо побалуешься с ограничениями канала, может есть на примете то что бы мне подошло?
Например мне нужно чтобы была верхняя и нижняя граница ограничивающая ширины канала для каждого хоста. Верхняя указывает до какого предела может увеличиваться поток если сеть не загружена, нижняя указывает минимальный поток который будет зарезервирован для данного хоста если в данный момент канал перегружен.> это должно работать, другой вопрос а переварит ли прокси то что вы
> ему завернули, возможно нет.А как это проверить? Может можно заставить squid писать какие-то логи при этом действии?
>> это и шейпер может
> Какой именно шейпер и есть ли в нём балансировка нагрузки канала?
> Просто настройками сквида не особо побалуешься с ограничениями канала, может есть на
> примете то что бы мне подошло?
> Например мне нужно чтобы была верхняя и нижняя граница ограничивающая ширины канала
> для каждого хоста. Верхняя указывает до какого предела может увеличиваться поток
> если сеть не загружена, нижняя указывает минимальный поток который будет зарезервирован
> для данного хоста если в данный момент канал перегружен.http://www.opennet.me/docs/RUS/LARTC/index.html
http://lartc.org/>> это должно работать, другой вопрос а переварит ли прокси то что вы
>> ему завернули, возможно нет.
> А как это проверить? Может можно заставить squid писать какие-то логи при
> этом действии?можно изменить уровень логирования, но увидите ли что-то там зависит от того что вы ему передаете
А каким образом можно пробросить порт по NAT если конечный адрес не известен или динамический?
Грубо говоря пробросить просто 5000 в интернет а там клиент уже сам пусть сервера перебирает.
Ведь такая конструкция не допустима:
*nat
-A PREROUTING -i eth0 -p tcp --dport 5000 -j DNAT --to-destination 5000
Будет ругаться на отсутствие адреса.
Знаю что нужно разрешить форвардинг пакетов, и в цепочке FORWARD прописать порты, но дальше чё то я не пойму. Мне нужно в цепочке POSTROUTING что-то нужно сделать, но что конкретно?
Или может будет правильной будет конструкция где в PREROUTING используется SNAT, а в POSTROUTING используется DNAT? Если так то в SNAT подменяется адрес источника? Но на какой мне нужно его подменять?
> А каким образом можно пробросить порт по NAT если конечный адрес не
> известен или динамический?это как войти в рейсовый автобус и требовать что бы он шел не по маршруту, а куда вам нужно
> Грубо говоря пробросить просто 5000 в интернет а там клиент уже сам
> пусть сервера перебирает.
> Ведь такая конструкция не допустима:
> *nat
> -A PREROUTING -i eth0 -p tcp --dport 5000 -j DNAT --to-destination 5000если он идет на 5000 , то зачем его пробрасывать, сделайте snat только в POSTROUTING
и пусть идет
> Знаю что нужно разрешить форвардинг пакетов, и в цепочке FORWARD прописать порты,
> но дальше чё то я не пойму. Мне нужно в цепочке
> POSTROUTING что-то нужно сделать, но что конкретно?
> Или может будет правильной будет конструкция где в PREROUTING используется SNAT, а
> в POSTROUTING используется DNAT? Если так то в SNAT подменяется адрес
> источника? Но на какой мне нужно его подменять?если у ваших клиентов белый ip то snat не нужен, а если серый, как на них отвечать если в инете они не маршрутизируются
>> А каким образом можно пробросить порт по NAT если конечный адрес не
>> известен или динамический?
> это как войти в рейсовый автобус и требовать что бы он шел
> не по маршруту, а куда вам нужноТут немного другой вариант. Предположим что нам СЕГОДНЯ СКАЗАЛИ что нужно сесть в рейсовый автобус №5000 и ехать по маршруту, а выйти там где увидишь что тебя встречают твои знакомые.
Иногда они будут встречать на одной остановке, а иногда на другой.
Вот так и в моём случае. Только как это организовать на практике?
Скажем у клиента 30 адресов(остановок) по которым он может обратится но иногда он может приниматься на адресах с 3 по 7, а иногда с 21 по 29.
Что бы узнать адрес он просто перебирает их вручную(едет в автобусе и смотрит где его встречают).
Ну и как в таком случае поступить?
> в рейсовый автобус №5000 и ехать по маршруту, а выйти там
> где увидишь что тебя встречают твои знакомые.Да! Автомобильные "аналогии" жгуть. Прошу, не останавливайтесь!!
>> в рейсовый автобус №5000 и ехать по маршруту, а выйти там
>> где увидишь что тебя встречают твои знакомые.
> Да! Автомобильные "аналогии" жгуть. Прошу, не останавливайтесь!!:)
не, с ip ехать в неизвесность не получится, нужно заранее знать остановку, правда по мере движения можно созваниваться с челом и изменить место встречи, но это уже dnat , т.к. уже есть конкретный чел.
> :)
> не, с ip ехать в неизвесность не получится, нужно заранее знать остановку,
> правда по мере движения можно созваниваться с челом и изменить место
> встречи, но это уже dnat , т.к. уже есть конкретный чел.Ребят. Ну чё то он не выходит в нэт. Прологировал, проходит цепочки PREROUTING, FORWARD и затем попадает в POSTROUTING и всё, как будто после iptables что то рубит и не пускает в модем. На машине интернет есть принимает нэт с модема. Но клиент не пробивается по 5000 му порту в нэт. Что я ещё мог упустить? Какой фактор может повлиять на прохождение от iptables в интернет?
P.S. На модеме настройки в норме, порты не рубит.
>[оверквотинг удален]
>> не, с ip ехать в неизвесность не получится, нужно заранее знать остановку,
>> правда по мере движения можно созваниваться с челом и изменить место
>> встречи, но это уже dnat , т.к. уже есть конкретный чел.
> Ребят. Ну чё то он не выходит в нэт. Прологировал, проходит цепочки
> PREROUTING, FORWARD и затем попадает в POSTROUTING и всё, как будто
> после iptables что то рубит и не пускает в модем. На
> машине интернет есть принимает нэт с модема. Но клиент не пробивается
> по 5000 му порту в нэт. Что я ещё мог упустить?
> Какой фактор может повлиять на прохождение от iptables в интернет?
> P.S. На модеме настройки в норме, порты не рубит.забыли показать iptables-save
> забыли показать iptables-saveip_inet - внешний ip на который нужно приконектится к 5000му порту.
-A PREROUTING -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j DNAT --to-destination ip_inet
-A FORWARD -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j ACCEPT
-A POSTROUTING -j ACCEPT
>> забыли показать iptables-save
> ip_inet - внешний ip на который нужно приконектится к 5000му порту.
> -A PREROUTING -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j DNAT
> --to-destination ip_inet
> -A FORWARD -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j ACCEPTа ответные пакета как по вашему пройдут?
> -A POSTROUTING -j ACCEPTто есть отправляете пакет от серого ip в инет и ждете что ответ придет
>>> забыли показать iptables-save
>> ip_inet - внешний ip на который нужно приконектится к 5000му порту.
>> -A PREROUTING -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j DNAT
>> --to-destination ip_inet
>> -A FORWARD -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j ACCEPT
> а ответные пакета как по вашему пройдут?
>> -A POSTROUTING -j ACCEPT
> то есть отправляете пакет от серого ip в инет и ждете что
> ответ придетА разве того что у меня пропускаются уже установленные и дополнительные соединения не достаточно? Если честно я думал что хватит вот этого:
-A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPTПолучается нужно ещё SNAT прикрутить для входящего?
-A PREROUTING -s ip_inet -j SNAT --to-source 192.168.10.3
>[оверквотинг удален]
>>> -A PREROUTING -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j DNAT
>>> --to-destination ip_inet
>>> -A FORWARD -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j ACCEPT
>> а ответные пакета как по вашему пройдут?
>>> -A POSTROUTING -j ACCEPT
>> то есть отправляете пакет от серого ip в инет и ждете что
>> ответ придет
> А разве того что у меня пропускаются уже установленные и дополнительные соединения
> не достаточно? Если честно я думал что хватит вот этого:
> -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPTи в какой из 3 приведенных строк это было видно
> Получается нужно ещё SNAT прикрутить для входящего?
> -A PREROUTING -s ip_inet -j SNAT --to-source 192.168.10.3http://www.opennet.me/docs/RUS/iptables/#SNATTARGET
и читайте что такое серые адреса и что с ними делают
> http://www.opennet.me/docs/RUS/iptables/#SNATTARGET
> и читайте что такое серые адреса и что с ними делаютЭту статью я уже прочитал. И пересматриваю её практически каждый день. Но к сожалению сколько бы я не перечитывал я не смог подставить адрес с помощью SNAT и приконнектиться, будь то 25,110 или 5000 порт. Вообще понятно что с помощью SNAT подставляется адрес источника(в локальной сетке) на внешний(глобальный) IP адрес(шлюза к которому подключён клиент в локальной сети) и схема этой замены хранится во временной таблице, но не понятно если всё нормально подставляется то почему не происходит подключения к удалённому хосту? Ведь мы разрешаем уже установленное соединение через цепочку FORWARD и значит в обратном направлении (от хоста приёмника к нашему шлюзу) всё должно проходить с обратной подстановкой в SNAT из временной таблицы и попадать на шлюз инициализировавший соединение.
Так в чём я не прав? Может есть то что я упустил из виду?
>[оверквотинг удален]
> 5000 порт. Вообще понятно что с помощью SNAT подставляется адрес источника(в
> локальной сетке) на внешний(глобальный) IP адрес(шлюза к которому подключён клиент в
> локальной сети) и схема этой замены хранится во временной таблице, но
> не понятно если всё нормально подставляется то почему не происходит подключения
> к удалённому хосту? Ведь мы разрешаем уже установленное соединение через цепочку
> FORWARD и значит в обратном направлении (от хоста приёмника к нашему
> шлюзу) всё должно проходить с обратной подстановкой в SNAT из временной
> таблицы и попадать на шлюз инициализировавший соединение.
> Так в чём я не прав? Может есть то что я упустил
> из виду?если это все понятно то почему snat у вас в PREROUTING и --to-source 192.168.10.3
> если это все понятно то почему snat у вас в PREROUTING и
> --to-source 192.168.10.3Это по тому что я уже запутался и пробую по всякому лишь бы заработало.
изначально было так:
-A POSTROUTING -s 192.168.10.3 -p tcp --dport 5000 -j SNAT --to-source inet_ipНо всё равно не работало. Потом я начал мудрить с цепочками и с DNAT и в конце совсем запутался и теперь не знаю куда и как пускать.
>> если это все понятно то почему snat у вас в PREROUTING и
>> --to-source 192.168.10.3
> Это по тому что я уже запутался и пробую по всякому лишь
> бы заработало.
> изначально было так:
> -A POSTROUTING -s 192.168.10.3 -p tcp --dport 5000 -j SNAT --to-source inet_ip
> Но всё равно не работало. Потом я начал мудрить с цепочками и
> с DNAT и в конце совсем запутался и теперь не знаю
> куда и как пускать.ну так может все таки покажите весь вывод iptables-save , спрятав при этом белые ip, но если их там несколько , то прячьте по разному. или и дальше гадать будите, показывая отдельные кусочки.
> ну так может все таки покажите весь вывод iptables-save , спрятав при
> этом белые ip, но если их там несколько , то прячьте
> по разному. или и дальше гадать будите, показывая отдельные кусочки.*filter
:FORWARD DROP [0:0]
-A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 25 -j ACCEPT
-A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 110 -j ACCEPT
-A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 25 -j ACCEPT
-A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 110 -j ACCEPT
-A FORWARD -j LOG --log-prefix "FORWARD 5000"
-A FORWARD -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j ACCEPT
-A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
:INPUT DROP [0:0]
:in_eth0 - [0:0]
:in_eth1 - [0:0]
:in_eth2 - [0:0]
:in_eth3 - [0:0]
:OUTPUT DROP [0:0]
:out_eth0 - [0:0]
:out_eth1 - [0:0]
:out_eth2 - [0:0]
:out_eth3 - [0:0]
:icmp_in_packets - [0:0]
:icmp_out_packets - [0:0]
#Разрешаем петлевой интерфейс
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -j LOG --log-prefix "LOOOOGGGG"#Фильтруем соединения по флагам
-A INPUT -p tcp -m state --state NEW ! --syn -j LOG --log-prefix "Отброшены SYN:"
-A INPUT -p tcp -m state --state NEW ! --syn -j REJECT#Разрешаем уже установленные соединения
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT#Направляем входящие соединения с интерфейсов в пользовательские цепочки для фильтрации
-A INPUT -i eth0 -j in_eth0
-A INPUT -i eth1 -j in_eth1
-A INPUT -i eth2 -j in_eth2
-A INPUT -i eth3 -j in_eth3
#Направляем исходящие соединения с интерфейсов в пользовательские цепочки для фильтрации
-A OUTPUT -o eth0 -j out_eth0
-A OUTPUT -o eth1 -j out_eth1
-A OUTPUT -o eth2 -j out_eth2
-A OUTPUT -o eth3 -j out_eth3
#входящие пакеты icmp-A icmp_in_packets -p icmp --icmp-type 3 -j ACCEPT
-A icmp_in_packets -p icmp --icmp-type 12 -j ACCEPT
-A icmp_in_packets -p icmp -j LOG --log-prefix "Отброшены ICMP_IN:"
-A icmp_in_packets -j REJECT#исходящие пакеты icmp
-A icmp_out_packets -p icmp --icmp-type 3 -j ACCEPT
-A icmp_out_packets -p icmp --icmp-type 4 -j ACCEPT
-A icmp_out_packets -p icmp --icmp-type 11 -j ACCEPT
-A icmp_out_packets -p icmp --icmp-type 12 -j ACCEPT
-A icmp_out_packets -p icmp -j LOG --log-prefix "Отброшены ICMP_OUT:"
-A icmp_out_packets -j REJECT#фильтрация INPUT пакетов
#INTERNET
-A in_eth0 -p icmp -s 0/0 -j icmp_in_packets
-A in_eth0 -s remote_admin_ip -p tcp --dport 22 -j ACCEPT
-A in_eth0 -s 8.8.8.8 -p udp --sport 53 -j ACCEPT
-A in_eth0 -j LOG --log-prefix "Отброшены in_eth0:"
-A in_eth0 -j DROP
-A out_eth0 -p icmp -s 192.168.1.5 -j icmp_out_packets
-A out_eth0 -p tcp -m multiport --ports 21,25,53,80,110,443 -j ACCEPT
-A out_eth0 -p udp -m multiport --ports 53 -j ACCEPT
-A out_eth0 -i eth0 -j LOG --log-prefix "Отброшены out_eth0:"
-A out_eth0 -i eth0 -j DROP#VIP INPUT
#Посылаем на проверку ICMP диапазон 192.168.0.1-192.168.0.10
-A in_eth1 -p icmp -m iprange --src-range 192.168.0.1-192.168.0.10 -j icmp_in_packets
#Пропускаем 0.5 на шару
-A in_eth1 -s 192.168.0.5 -p tcp -m multiport --ports 139,445 -j ACCEPT
-A in_eth1 -s 192.168.0.5 -p udp -m multiport --ports 137,138 -j ACCEPT
-A in_eth1 -s 192.168.0.5 -j LOG --log-prefix "c in_eth0 192.168.0.5"
-A in_eth1 -s 192.168.0.5 -j DROP
#Разрешаем доступ с 192.168.0.2
-A in_eth1 -p tcp -m multiport --ports 21,22,139,445,3128,10000 -d 192.168.0.9 -s 192.168.0.2 -j ACCEPT
-A in_eth1 -p udp -m multiport --ports 137,138,10000 -d 192.168.0.9 -s 192.168.0.2 -j ACCEPT
#Разрешаем доступ на шару и к прокси диапазону 192.168.0.1-192.168.0.10
-A in_eth1 -m iprange --src-range 192.168.0.1-192.168.0.10 -p tcp -m multiport --port 139,445,3128 -j ACCEPT
-A in_eth1 -m iprange --src-range 192.168.0.1-192.168.0.10 -p udp -m multiport --port 137,138 -j ACCEPT
-A in_eth1 -i eth1 -j LOG --log-prefix "Отброшены in_eth1:"
-A in_eth1 -i eth1 -j DROP
#VIP OUTPUT
#Посылаем на проверку диапазон 192.168.0.1-192.168.0.10
-A out_eth1 -p icmp -m iprange --dst-range 192.168.0.1-192.168.0.10 -j icmp_out_packets
#-A out_eth1 -p icmp -d 192.168.0.5 -j icmp_out_packets
#Разрешаем доступ с 192.168.0.2
-A out_eth1 -p tcp -m multiport --ports 21,22,139,445,3128,10000 -m iprange --dst-range 192.168.0.2 -j ACCEPT
-A out_eth1 -p udp -m multiport --ports 137,138,10000 -m iprange --dst-range 192.168.0.2 -j ACCEPT
#Выпускаем пакеты на 0.5
-A out_eth1 -d 192.168.0.5 -p tcp -m multiport --ports 139,445 -j ACCEPT
-A out_eth1 -d 192.168.0.5 -p udp -m multiport --ports 137,138 -j ACCEPT
-A out_eth1 -d 192.168.0.5 -j LOG --log-prefix "c out_eth1: 192.168.0.5"
-A out_eth1 -d 192.168.0.5 -j DROP
#Разрешаем доступ с шары и с прокси диапазону 192.168.0.1-192.168.0.10
-A out_eth1 -m iprange --dst-range 192.168.0.1-192.168.0.10 -p tcp -m multiport --ports 139,445,3128 -j ACCEPT
-A out_eth1 -m iprange --dst-range 192.168.0.1-192.168.0.10 -p udp -m multiport --ports 137,138 -j ACCEPT
-A out_eth1 -o eth1 -j LOG --log-prefix "Отброшены out_eth1:"
-A out_eth1 -o eth1 -j DROP#eth2 INPUT
#Посылаем на проверку диапазон 192.168.10.1-192.168.10.10
-A in_eth2 -p icmp -m iprange --src-range 192.168.10.1-192.168.10.10 -j icmp_in_packets
#Разрешаем доступ с 192.168.10.1
-A in_eth2 -p tcp -m multiport --ports 21,22,139,445,3128,10000 -s 192.168.10.1 -j ACCEPT
-A in_eth2 -p udp -m multiport --ports 137,138,10000 -s 192.168.10.1 -j ACCEPT
#5000
-A in_eth2 -s 192.168.10.3 -p tcp --dport 3050 -j ACCEPT
#Разрешаем доступ на шару диапазону 192.168.10.5-192.168.10.10
-A in_eth2 -m iprange --src-range 192.168.10.5-192.168.10.10 -p tcp -m multiport --ports 139,445 -j ACCEPT
-A in_eth2 -m iprange --src-range 192.168.10.5-192.168.10.10 -p udp -m multiport --ports 137,138 -j ACCEPT
#Разрешаем доступ на шару и к прокси диапазону 192.168.10.1-192.168.10.4
-A in_eth2 -m iprange --src-range 192.168.10.1-192.168.10.4 -p tcp -m multiport --ports 139,445,3128 -j ACCEPT
-A in_eth2 -m iprange --src-range 192.168.10.1-192.168.10.4 -p udp -m multiport --ports 137,138 -j ACCEPT
-A in_eth2 -s 192.168.10.4 -p tcp -m multiport --ports 25,110 -j ACCEPT
-A in_eth2 -i eth2 -j LOG --log-prefix "Отброшены in_eth2:"
-A in_eth2 -i eth2 -j DROP
#eth2 OUTPUT
#Посылаем на проверку диапазон 192.168.10.1-192.168.10.10
-A out_eth2 -p icmp -m iprange --dst-range 192.168.10.1-192.168.10.10 -j icmp_out_packets
-A out_eth2 -p tcp -m multiport --ports 21,22,139,445,3128,10000 -s 192.168.10.10 -j ACCEPT
-A out_eth2 -p udp -m multiport --ports 137,138,10000 -s 192.168.10.10 -j ACCEPT
#Разрешаем доступ с 192.168.10.1
-A out_eth2 -p tcp -m multiport --ports 21,22,139,445,3128,10000 -d 192.168.10.1 -j ACCEPT
-A out_eth2 -p udp -m multiport --ports 137,138,10000 -d 192.168.10.1 -j ACCEPT
#5000
-A out_eth2 -s 192.168.10.3 -p tcp --dport 3050 -j ACCEPT
#Разрешаем доступ на шару диапазону 192.168.10.5-192.168.10.10
-A out_eth2 -m iprange --dst-range 192.168.10.5-192.168.10.10 -p tcp -m multiport --ports 139,445 -j ACCEPT
-A out_eth2 -m iprange --dst-range 192.168.10.5-192.168.10.10 -p udp -m multiport --ports 137,138 -j ACCEPT
#Разрешаем доступ на шару и к прокси диапазону 192.168.10.1-192.168.10.4
-A out_eth2 -m iprange --dst-range 192.168.10.1-192.168.10.4 -p tcp -m multiport --ports 139,445,3128 -j ACCEPT
-A out_eth2 -m iprange --dst-range 192.168.10.1-192.168.10.4 -p udp -m multiport --ports 137,138 -j ACCEPT
#mail_for_progs
-A out_eth2 -d 192.168.10.4 -p tcp -m multiport --ports 25,110 -j ACCEPT
-A out_eth2 -o eth2 -j LOG --log-prefix "Отброшены out_eth2:"
-A out_eth2 -o eth2 -j DROP#eth2 INPUT
#Посылаем на проверку диапазон 192.168.100.1-192.168.100.60
-A in_eth3 -p icmp -m iprange --src-range 192.168.100.1-192.168.100.60 -j icmp_in_packets
#Разрешаем доступ с 192.168.100.43
-A out_eth3 -p tcp -m multiport --ports 21,22,139,445,3128,10000 -d 192.168.100.43 -j ACCEPT
-A out_eth3 -p udp -m multiport --ports 137,138,10000 -d 192.168.100.43 -j ACCEPT
#Разрешаем доступ на шару и к прокси диапазону 192.168.100.44-192.168.100.47
-A in_eth3 -m iprange --src-range 192.168.100.44-192.168.100.47 -p tcp -m multiport --ports 139,445,3128 -j ACCEPT
-A in_eth3 -m iprange --dst-range 192.168.100.44-192.168.100.47 -p udp -m multiport --ports 137,138 -j ACCEPT
#Разрешаем доступ на шару диапазону 192.168.100.1-192.168.100.43
-A in_eth3 -m iprange --src-range 192.168.100.1-192.168.100.43 -p tcp -m multiport --ports 139,445 -j ACCEPT
-A in_eth3 -m iprange --src-range 192.168.100.1-192.168.100.43 -p udp -m multiport --ports 137,138 -j ACCEPT
-A in_eth3 -i eth3 -j LOG --log-prefix "Отброшены in_eth3:"
-A in_eth3 -i eth3 -j DROP
#eth2 OUTPUT
#Посылаем на проверку диапазон 192.168.100.1-192.168.100.60
-A out_eth3 -p icmp -m iprange --dst-range 192.168.100.1-192.168.100.60 -j icmp_out_packets
#Разрешаем доступ на шару и к прокси диапазону 192.168.100.44-192.168.100.47
-A out_eth3 -m iprange --dst-range 192.168.100.44-192.168.100.47 -p tcp -m multiport --ports 139,445,3128 -j ACCEPT
-A out_eth3 -m iprange --dst-range 192.168.100.44-192.168.100.47 -p udp -m multiport --ports 137,138 -j ACCEPT
#Разрешаем доступ на шару диапазону 192.168.100.1-192.168.100.43
-A out_eth3 -m iprange --dst-range 192.168.100.1-192.168.100.43 -p tcp -m multiport --ports 139,445 -j ACCEPT
-A out_eth3 -m iprange --dst-range 192.168.100.1-192.168.100.43 -p udp -m multiport --ports 137,138 -j ACCEPT
-A out_eth3 -o eth3 -j LOG --log-prefix "Отброшены out_eth3:"
-A out_eth3 -o eth3 -j DROP
COMMIT*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
-A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 3128
#-A PREROUTING -j LOG --log-prefix "PREROUTING 5000: "
#-A PREROUTING -p tcp -i eth2 -s 192.168.10.3 --dport 5000 -j DNAT --to-destination inet_ip
#-A PREROUTING -p tcp -s 192.168.10.4 -i eth2 --dport 25 -j DNAT --to-destination 94.100.191.204:25
#-A PREROUTING -p tcp -s 192.168.10.4 -i eth2 --dport 110 -j DNAT --to-destination 94.100.191.204:110
#-A PREROUTING -p tcp -s 192.168.0.2 -i eth1 --dport 25 -j DNAT --to-destination 94.100.191.204:25
#-A PREROUTING -p tcp -s 192.168.0.2 -i eth1 --dport 110 -j DNAT --to-destination 94.100.191.204:110
-A POSTROUTING -j LOG --log-prefix "POSTROUTING 5000: "
-A POSTROUTING -p tcp -s 192.168.10.3 --dport 5000 -j SNAT --to-source inet_ip:5000
COMMIT
# Completed
inet_ip - удалённый получатель данных(тот кому мы передаём на порт 5000)
94.100.191.204 - mail.ru
>[оверквотинг удален]
> -A out_eth3 -m iprange --dst-range 192.168.100.44-192.168.100.47 -p udp -m multiport --ports
> 137,138 -j ACCEPT
> #Разрешаем доступ на шару диапазону 192.168.100.1-192.168.100.43
> -A out_eth3 -m iprange --dst-range 192.168.100.1-192.168.100.43 -p tcp -m multiport --ports
> 139,445 -j ACCEPT
> -A out_eth3 -m iprange --dst-range 192.168.100.1-192.168.100.43 -p udp -m multiport --ports
> 137,138 -j ACCEPT
> -A out_eth3 -o eth3 -j LOG --log-prefix "Отброшены out_eth3:"
> -A out_eth3 -o eth3 -j DROP
> COMMITтеперь уберайте этот хлам и оставте только минимум
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
-A FORWARD -s 192.168.10.0/24 -m state --state NEW -j ACCEPT
-A FORWARD -s 192.168.100.0/24 -m state --state NEW -j ACCEPT-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p udp -dport 53 -j ACCEPT
-A OUTPUT -p tcp -dport 80 -m state --state NEW -j ACCEPT
-A OUTPUT -p tcp -m multiport --dports 25,110,443,8000:8090 -m state --state NEW -j ACCEPT
+ что тут нужнокогда это заработает, будите добавлять ограничения по немного и проверять, не сломали ли остальное
>[оверквотинг удален]
> #-A PREROUTING -p tcp -s 192.168.0.2 -i eth1 --dport 25 -j DNAT
> --to-destination 94.100.191.204:25
> #-A PREROUTING -p tcp -s 192.168.0.2 -i eth1 --dport 110 -j DNAT
> --to-destination 94.100.191.204:110
> -A POSTROUTING -j LOG --log-prefix "POSTROUTING 5000: "
> -A POSTROUTING -p tcp -s 192.168.10.3 --dport 5000 -j SNAT --to-source inet_ip:5000
> COMMIT
> # Completed
> inet_ip - удалённый получатель данных(тот кому мы передаём на порт 5000)
> 94.100.191.204 - mail.ruкакой удаленный получатель, там ваш внешний ip должен быть
-A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip
вся фильтрация будет потом в таблице фильтров
> теперь уберайте этот хлам и оставте только минимум
> -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
> -A FORWARD -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
> -A FORWARD -s 192.168.10.0/24 -m state --state NEW -j ACCEPT
> -A FORWARD -s 192.168.100.0/24 -m state --state NEW -j ACCEPTУ меня FORWARD дл всех запрещён кроме 2х адресов из 192.168.10.0/24 зачем мне его открывать для всех сеток? или я чего то не понимаю? Мне нужно чтоб все они ходили только через шлюз. Проходя все цепочки.
Это уже сделано:
> -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
> -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPTЭто уже сделано для интерфейса eth0 так только он имеет право пользоваться этими портами:
> -A OUTPUT -p udp -dport 53 -j ACCEPT
> -A OUTPUT -p tcp -dport 80 -m state --state NEW -j ACCEPTЭто уже сделано для соответствующих подсетей и отдельных адресов остальным доступ запрещён:
> -A OUTPUT -p tcp -m multiport --dports 25,110,443,8000:8090 -m state --state NEW
> -j ACCEPT
> + что тут нужно
> когда это заработает, будите добавлять ограничения по немного и проверять, не сломали
> ли остальноеВся остальная связка уже работает. Т.е. Прокси и шарой уже можно пользоваться.
>[оверквотинг удален]
>> --to-destination 94.100.191.204:110
>> -A POSTROUTING -j LOG --log-prefix "POSTROUTING 5000: "
>> -A POSTROUTING -p tcp -s 192.168.10.3 --dport 5000 -j SNAT --to-source inet_ip:5000
>> COMMIT
>> # Completed
>> inet_ip - удалённый получатель данных(тот кому мы передаём на порт 5000)
>> 94.100.191.204 - mail.ru
> какой удаленный получатель, там ваш внешний ip должен быть
> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip
> вся фильтрация будет потом в таблице фильтровЧё то я не понял...
Получается чтобы перенаправить порт 5000 на inet_ip его ненужно нигде прописывать???
-A POSTROUTING -o Каой здесь интерфейс? тот на котором сидит этот IP 192.168.10.3?
Если так то правильной ли будет запись
-A POSTROUTING -o eth2 -s 192.168.10.3 -j SNAT my_inet_ip
>> теперь уберайте этот хлам и оставте только минимум
>> -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
>> -A FORWARD -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
>> -A FORWARD -s 192.168.10.0/24 -m state --state NEW -j ACCEPT
>> -A FORWARD -s 192.168.100.0/24 -m state --state NEW -j ACCEPT
> У меня FORWARD дл всех запрещён кроме 2х адресов из 192.168.10.0/24 зачем
> мне его открывать для всех сеток? или я чего то не
> понимаю? Мне нужно чтоб все они ходили только через шлюз. Проходя
> все цепочки.значит сделайте 2 правила с указанием этих адресов
> Это уже сделано:
>> -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
>> -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
> Это уже сделано для интерфейса eth0 так только он имеет право пользоваться
> этими портами:
>> -A OUTPUT -p udp -dport 53 -j ACCEPT
>> -A OUTPUT -p tcp -dport 80 -m state --state NEW -j ACCEPT
> Это уже сделано для соответствующих подсетей и отдельных адресов остальным доступ запрещён:для каких еще подсетей и отдельных адресов, если это OUTPUT , то есть то что уходит со шлюза, а не из локалки
>[оверквотинг удален]
>>> -A POSTROUTING -p tcp -s 192.168.10.3 --dport 5000 -j SNAT --to-source inet_ip:5000
>>> COMMIT
>>> # Completed
>>> inet_ip - удалённый получатель данных(тот кому мы передаём на порт 5000)
>>> 94.100.191.204 - mail.ru
>> какой удаленный получатель, там ваш внешний ip должен быть
>> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip
>> вся фильтрация будет потом в таблице фильтров
> Чё то я не понял...
> Получается чтобы перенаправить порт 5000 на inet_ip его ненужно нигде прописывать???до перенаправления еще не дошли, для этого вашу 192.168.10.3 нужно в инет выпустить с помощью snat, а уж потом ...
> -A POSTROUTING -o Каой здесь интерфейс? тот на котором сидит этот IP
> 192.168.10.3?ну вроде писАл "-o внешний_интерфейс" - который на провайдера смотрит
> Если так то правильной ли будет запись
> -A POSTROUTING -o eth2 -s 192.168.10.3 -j SNAT my_inet_ipс какого ... так правильней? если eth2 смотрит на 192.168.10.3, то зачем на нем snat.
snat - нужен на внешнем интерфейсе, что бы пакеты из вашей серой сети в инет вышли с белым ip.
если укажите -s 192.168.10.3, то snat будет только для пакетов от 192.168.10.3, а нужно для всех кто идет в инет, поэтому еще раз повторяю:
-A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip, и не более
> значит сделайте 2 правила с указанием этих адресовСделал.
>> Это уже сделано:
>>> -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
>>> -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
>> Это уже сделано для интерфейса eth0 так только он имеет право пользоваться
>> этими портами:
>>> -A OUTPUT -p udp -dport 53 -j ACCEPT
>>> -A OUTPUT -p tcp -dport 80 -m state --state NEW -j ACCEPT
>> Это уже сделано для соответствующих подсетей и отдельных адресов остальным доступ запрещён:
> для каких еще подсетей и отдельных адресов, если это OUTPUT , то
> есть то что уходит со шлюза, а не из локалкиВ принципе согласен. Всё что не нужно я уже обрубил на FORWARD и INPUT.
>[оверквотинг удален]
>>>> inet_ip - удалённый получатель данных(тот кому мы передаём на порт 5000)
>>>> 94.100.191.204 - mail.ru
>>> какой удаленный получатель, там ваш внешний ip должен быть
>>> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip
>>> вся фильтрация будет потом в таблице фильтров
>> Чё то я не понял...
>> Получается чтобы перенаправить порт 5000 на inet_ip его ненужно нигде прописывать???
> ну вроде писАл "-o внешний_интерфейс" - который на провайдера смотрит
>> Если так то правильной ли будет запись
>> -A POSTROUTING -o eth2 -s 192.168.10.3 -j SNAT my_inet_ipА зачем мне натить весь интерфейс поключённый к модему если у меня весь нэт заворачивается на порты прокси? Разве мне не достаточно пропустить натом порт 5000?
> с какого ... так правильней? если eth2 смотрит на 192.168.10.3, то зачем
> на нем snat.
> snat - нужен на внешнем интерфейсе, что бы пакеты из вашей серой
> сети в инет вышли с белым ip.Для простого доступа в инет у меня прокси настроен.
> если укажите -s 192.168.10.3, то snat будет только для пакетов от 192.168.10.3,
> а нужно для всех кто идет в инет, поэтому еще раз
> повторяю:
> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip, и не болееВ том то и дело что не для всех а только для него. Нужно именно этому IP дать доступ в интернет по произвольному порту 3000-4000 на машину в интернете на порт 5000
P.S. Большое спасибо вам за ответы и ваше терпение.
>[оверквотинг удален]
>>>> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip
>>>> вся фильтрация будет потом в таблице фильтров
>>> Чё то я не понял...
>>> Получается чтобы перенаправить порт 5000 на inet_ip его ненужно нигде прописывать???
>> ну вроде писАл "-o внешний_интерфейс" - который на провайдера смотрит
>>> Если так то правильной ли будет запись
>>> -A POSTROUTING -o eth2 -s 192.168.10.3 -j SNAT my_inet_ip
> А зачем мне натить весь интерфейс поключённый к модему если у меня
> весь нэт заворачивается на порты прокси? Разве мне не достаточно пропустить
> натом порт 5000?а этих можно убивать ?
-A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 25 -j ACCEPT
-A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 110 -j ACCEPT
-A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 25 -j ACCEPT
-A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 110 -j ACCEPT
это не через прокси пойдет, а без нат в инет они не доберутся, но их пакеты появятся в сети провайдера с серыми ip, где их скорей всего и прибьют.>> с какого ... так правильней? если eth2 смотрит на 192.168.10.3, то зачем
>> на нем snat.
>> snat - нужен на внешнем интерфейсе, что бы пакеты из вашей серой
>> сети в инет вышли с белым ip.
> Для простого доступа в инет у меня прокси настроен.
>> если укажите -s 192.168.10.3, то snat будет только для пакетов от 192.168.10.3,
>> а нужно для всех кто идет в инет, поэтому еще раз
>> повторяю:
>> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip, и не более
> В том то и дело что не для всех а только дляостальным запретите в таблице фильтров.
а вот что бы к провайдеру не попадало, то что не было отфильтровано в таблице фильтров, с серыми ip, делают нат для всего что прошло.> него. Нужно именно этому IP дать доступ в интернет по произвольному
> порту 3000-4000 на машину в интернете на порт 5000это я не понял, что значит "по произвольному порту 3000-4000 на машину в интернете на порт 5000"
то есть если 192.168.10.3 обращается на порты 3000-4000 и любой ip, то перенаправить эти пакеты на определенный ip и порт 5000?
> P.S. Большое спасибо вам за ответы и ваше терпение.
> а этих можно убивать ?
> -A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 25 -j ACCEPT
> -A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 110 -j ACCEPT
> -A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 25 -j ACCEPT
> -A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 110 -j ACCEPT
> это не через прокси пойдет, а без нат в инет они не
> доберутся, но их пакеты появятся в сети провайдера с серыми ip,
> где их скорей всего и прибьют.Извеняюсь. Эти тоже я собирался потом прокинуть по нату после того как пойму как прокинуть 5000 порт. Просто уже забыл про них.
> остальным запретите в таблице фильтров.
> а вот что бы к провайдеру не попадало, то что не было
> отфильтровано в таблице фильтров, с серыми ip, делают нат для всего
> что прошло.Так к нему ничего и не попадает, кроме того что разрешено. Остальное уже запрещено.
> это я не понял, что значит "по произвольному порту 3000-4000 на машину
> в интернете на порт 5000"
> то есть если 192.168.10.3 обращается на порты 3000-4000 и любой ip, то
> перенаправить эти пакеты на определенный ip и порт 5000?Клиент как обычно открывает на своей машине порт для инициализации соединения из диапазона свободных портов. И отправляет пакет на порт 5000 во внешнюю сеть интернет на inet_ip
>> P.S. Большое спасибо вам за ответы и ваше терпение.
>> а этих можно убивать ?
>> -A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 25 -j ACCEPT
>> -A FORWARD -i eth2 -s 192.168.10.4 -p tcp --dport 110 -j ACCEPT
>> -A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 25 -j ACCEPT
>> -A FORWARD -i eth1 -s 192.168.0.2 -p tcp --dport 110 -j ACCEPT
>> это не через прокси пойдет, а без нат в инет они не
>> доберутся, но их пакеты появятся в сети провайдера с серыми ip,
>> где их скорей всего и прибьют.
> Извеняюсь. Эти тоже я собирался потом прокинуть по нату после того как
> пойму как прокинуть 5000 порт. Просто уже забыл про них.не нужно их прокидывать, не к тому месту вы этот термин применяете. в данном случае вы просто разрешаете их прохождение и делаете для них SNAT ( меняете адрес источника в пакете). прокидывают это когда меняют адрес назначения (DNAT).
>> остальным запретите в таблице фильтров.
>> а вот что бы к провайдеру не попадало, то что не было
>> отфильтровано в таблице фильтров, с серыми ip, делают нат для всего
>> что прошло.
> Так к нему ничего и не попадает, кроме того что разрешено. Остальное
> уже запрещено.если уверены что за всем уследили и хочется плодить для каждого разрешенного отдельное правило - ради бога.
>> это я не понял, что значит "по произвольному порту 3000-4000 на машину
>> в интернете на порт 5000"
>> то есть если 192.168.10.3 обращается на порты 3000-4000 и любой ip, то
>> перенаправить эти пакеты на определенный ip и порт 5000?если нужно только с этого диапазона, при других не пускать, исправте правило в таблице фильтров. только какая гарантия что у клиента будут использованы только эти порты.
что это за программа, если торрент то вы можете ошибиться.> Клиент как обычно открывает на своей машине порт для инициализации соединения из
> диапазона свободных портов. И отправляет пакет на порт 5000 во внешнюю
> сеть интернет на inet_ipтут разрешить в таблице фильтров, сделать snat как показывал, и
echo 1 > /proc/sys/net/ipv4/ip_forward
при этом у клиента толжен быть прописан шлюз и dns.
все, нет тут проброса, а вот если вы захотите перехватить этот пакет и отправить не туда куда его отправил клиент, тогда уже и будет проброс.>>> P.S. Большое спасибо вам за ответы и ваше терпение.
>> как прокинуть 5000 порт.
> не нужно их прокидывать, не к тому месту вы этот термин применяете.Что-то подсказывает мне, что вот именно такого _термина нет. Максимум жаргонизм. Такой же бессмысленный, как "видит сеть"... :(
>прокидывают это когда меняют
Не, "прокидывают" это "бросают нечто таким образом, что оно проходит через (сквозь) нечто другое, прежде чем оно (нечто#1) достигает точки назначения".
Но это всё ерунда -- главное-то, главное??! Тема "_теории_ iptables" совсем не раскрыта! Видно не дождусь :D уже.
>>> как прокинуть 5000 порт.
>> не нужно их прокидывать, не к тому месту вы этот термин применяете.
> Что-то подсказывает мне, что вот именно такого _термина нет. Максимум жаргонизм. Такой
> же бессмысленный, как "видит сеть"... :(:) понятное дело что в документации такого термина нет, но на форумах этот жаргон используется часто и имеет определенный смысл, и когда его используют не так как уже устоялось начинается недопонимание того что же с помощью него хотят сказать.
но если и это нужно будет так всем "пытающимся разобраться" объяснять, то лучше вспомню что я reader , а не writer.
>>прокидывают это когда меняют
> Не, "прокидывают" это "бросают нечто таким образом, что оно проходит через (сквозь)
> нечто другое, прежде чем оно (нечто#1) достигает точки назначения".
> Но это всё ерунда -- главное-то, главное??! Тема "_теории_ iptables" совсем не
> раскрыта! Видно не дождусь :D уже.думаю и не дождетесь, оно зреет в уме у человека, но тяжело, т.к. человек не хочет воспринимать то что ему пытаются рассказать более абстрактно.
> не нужно их прокидывать, не к тому месту вы этот термин применяете.
> в данном случае вы просто разрешаете их прохождение и делаете для
> них SNAT ( меняете адрес источника в пакете). прокидывают это когда
> меняют адрес назначения (DNAT).Понял. Исправлюсь)))
> если уверены что за всем уследили и хочется плодить для каждого разрешенного
> отдельное правило - ради бога.Для разрешённых уверен, уже раз 100 проверил и столько же проверю когда смогу разрешить доступ по SNAT.
> если нужно только с этого диапазона, при других не пускать, исправте правило
> в таблице фильтров. только какая гарантия что у клиента будут использованы
> только эти порты.
> что это за программа, если торрент то вы можете ошибиться.А разве это правило не пропустит этот диапазон портов?
-A FORWARD -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j ACCEPT
Мы ведь здесь разрешаем с определённым портом назначения оставляя свободную лазейку для исходящих портов. И как я вижу по логам порты прходят все цепочки в плоть до POSTROUTING.>> Клиент как обычно открывает на своей машине порт для инициализации соединения из
>> диапазона свободных портов. И отправляет пакет на порт 5000 во внешнюю
>> сеть интернет на inet_ip
> тут разрешить в таблице фильтров,опять же:
-A FORWARD -i eth2 -s 192.168.10.3 -p tcp --dport 5000 -j ACCEPT
-A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
> сделать snat как показывал,Если вы это имеете ввиду
> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip, и не болеето мне не нужно весь интерфейс(я так понимаю eth2) перенаправлять а только отдельные порты отдельных IP.
И если учесть этот критерий
> В том то и дело что не для всех а только для него. Нужно именно этому IP дать доступ в интернет по произвольному порту 3000-4000 на машину в интернете на порт 5000То верна ли такая запись?
-A POSTROUTING -p tcp -s 192.168.10.3 --dport 5000 -j SNAT --to-source my_inet_ipПод my_inet_ip имеется ввиду ip адрес выданный мне провайдером
и
> echo 1 > /proc/sys/net/ipv4/ip_forwardЭто включено
> при этом у клиента должен быть прописан шлюз и dns.
Шлюз прописан как 192.168.10.10, а вот dns не прописывал. Такой же прописывать как и в модеме?
> все, нет тут проброса, а вот если вы захотите перехватить этот пакет
> и отправить не туда куда его отправил клиент, тогда уже и
> будет проброс.Это если бы можно было бы его завернуть на прокси а потом из прокси вывернуть в интернет на ту самую машину на тот самый порт, то да. Но это уже по моему извращенство.
>>>> P.S. Большое спасибо вам за ответы и ваше терпение.
>[оверквотинг удален]
>> сделать snat как показывал,
> Если вы это имеете ввиду
>> -A POSTROUTING -o внешний_интерфейс -j SNAT --to-source ваш_внешний_ip, и не более
> то мне не нужно весь интерфейс(я так понимаю eth2) перенаправлять а только
> отдельные порты отдельных IP.
> И если учесть этот критерий
>> В том то и дело что не для всех а только для него. Нужно именно этому IP дать доступ в интернет по произвольному порту 3000-4000 на машину в интернете на порт 5000
> То верна ли такая запись?
> -A POSTROUTING -p tcp -s 192.168.10.3 --dport 5000 -j SNAT --to-source my_inet_ip
> Под my_inet_ip имеется ввиду ip адрес выданный мне провайдеромда, можно так сделать, но чем это хуже я уже объяснял. другие пакеты уже отфильтрованы и применять дополнительные критерии тут нет смысла, а когда вам потребуется еще что то разрешить, то придется и тут что-то менять, добавлять, а зачем?
> и
>> echo 1 > /proc/sys/net/ipv4/ip_forward
> Это включено
>> при этом у клиента должен быть прописан шлюз и dns.
> Шлюз прописан как 192.168.10.10, а вот dns не прописывал. Такой же прописывать
> как и в модеме?если своего нет, то пропишите хотя бы тот что провайдер дает.
>> все, нет тут проброса, а вот если вы захотите перехватить этот пакет
>> и отправить не туда куда его отправил клиент, тогда уже и
>> будет проброс.
> Это если бы можно было бы его завернуть на прокси а потом
> из прокси вывернуть в интернет на ту самую машину на тот
> самый порт, то да. Но это уже по моему извращенство.
>>>>> P.S. Большое спасибо вам за ответы и ваше терпение.
Всё получилось, но не так как вы описывали. По видимому из за структуры моей сети. Которую я не смог вам донести. Ну да ладно. Добрался до истины и вроде можно было бы закончить, но меня сейчас интересует следующее. Нужно ли в таблицах filter в цепочке FORWARD открывать входящий доступ для dns??? Не опасно ли это? Так как без открытия доступа на dns к примеру 8.8.8.8 нэт не пашет. Я где то читал что через днс очень много взломов происходит. И правильно ли то, что не достаточно разрешения исходящих на днс, установленных и дополнительно установленных соединений в обоих направлениях?
> Всё получилось, но не так как вы описывали. По видимому из за
> структуры моей сети. Которую я не смог вам донести. Ну да
> ладно. Добрался до истины и вроде можно было бы закончить, но
> меня сейчас интересует следующее. Нужно ли в таблицах filter в цепочке
> FORWARD открывать входящий доступ для dns??? Не опасно ли это? Так
> как без открытия доступа на dns к примеру 8.8.8.8 нэт не
> пашет. Я где то читал что через днс очень много взломов
> происходит. И правильно ли то, что не достаточно разрешения исходящих на
> днс, установленных и дополнительно установленных соединений в обоих направлениях?вообще то должно быть достаточно, но не забывайте что для них тоже нужен snat.
теперь можно начинать читать и думать про кеширующий dns на своем шлюзе.