Система FreeBSD 5.4-RELEASE-p8
Столкнулся с проблемой. В лог валит сообщение типа
divert_packet: no divert tag
До этого менял правила ipfw
что касается ната
В IPFW
$cmd divert natd all from me to any via $oif
$cmd divert natd all from Х.Х.Х.Х/28 to any via $oif
$cmd divert natd all from any to any in via $oif
Natd запущен как
/sbin/natd -a $oifВ rc.conf
firewall_enable="YES" # Set to YES to enable firewall functionality
firewall_type="OPEN" # Firewall type (see /etc/rc.firewall)
firewall_quiet="NO" # Set to YES to suppress rule display
firewall_logging="YES" # Set to YES to enable events loggingПомогите определить в чем беда, если кто то знает возможные причины возникновения.
>Система FreeBSD 5.4-RELEASE-p8
>Столкнулся с проблемой. В лог валит сообщение типа
>divert_packet: no divert tag
>До этого менял правила ipfw
>что касается ната
>В IPFW
> $cmd divert natd all
>from me to any via $oif
> $cmd divert natd all
>from Х.Х.Х.Х/28 to any via $oif
> $cmd divert natd all
>from any to any in via $oif
>Natd запущен как
> /sbin/natd -a $oif
>
>В rc.conf
>
>firewall_enable="YES" #
>Set to YES to enable firewall functionality
>firewall_type="OPEN"
># Firewall type (see /etc/rc.firewall)
>firewall_quiet="NO"
> # Set to YES to suppress rule display
>firewall_logging="YES" # Set
>to YES to enable events logging
>
>Помогите определить в чем беда, если кто то знает возможные причины возникновения.
>
Да, еще ядро скомпилено какoptions IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_FORWARD #enable transparent proxy support
options IPFIREWALL_VERBOSE_LIMIT=100 #limit verbosity
options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by defaultoptions IPDIVERT #divert sockets
>>Система FreeBSD 5.4-RELEASE-p8
>>Столкнулся с проблемой. В лог валит сообщение типа
>>divert_packet: no divert tag
>>До этого менял правила ipfw
>>что касается ната
>>В IPFW
>> $cmd divert natd all
>>from me to any via $oif
>> $cmd divert natd all
>>from Х.Х.Х.Х/28 to any via $oif
>> $cmd divert natd all
>>from any to any in via $oif
>>Natd запущен как
>> /sbin/natd -a $oif
>>
>>В rc.conf
>>
>>firewall_enable="YES" #
>>Set to YES to enable firewall functionality
>>firewall_type="OPEN"
>># Firewall type (see /etc/rc.firewall)
>>firewall_quiet="NO"
>> # Set to YES to suppress rule display
>>firewall_logging="YES" # Set
>>to YES to enable events logging
>>
>>Помогите определить в чем беда, если кто то знает возможные причины возникновения.
>>
>Да, еще ядро скомпилено как
>
>options IPFIREWALL
>
>#firewall
>options IPFIREWALL_VERBOSE
> #enable logging to syslogd(8)
>options IPFIREWALL_FORWARD
> #enable transparent proxy support
>options IPFIREWALL_VERBOSE_LIMIT=100
> #limit verbosity
>options IPFIREWALL_DEFAULT_TO_ACCEPT
> #allow everything by default
>
>options IPDIVERT
>
> #divert sockets
Ау НАРОД неужели никто не знает ? 2-ю неделю бьюсь с этой проблемой ....
>
>Помогите определить в чем беда, если кто то знает возможные причины возникновения.Когда/после чего у вас это началось?
Что-нибудь специфическое используется на этой машине?
Какие-нибудь сторонние патчи, netgraph ноды?
Покажите вывод следующих комманд:
# ipfw show | egrep "divert|tee|netgraph"
# cat /etc/sysctl.conf
# cat /boot/loader.conf
>>
>>Помогите определить в чем беда, если кто то знает возможные причины возникновения.
>
>Когда/после чего у вас это началось?
>Что-нибудь специфическое используется на этой машине?
>Какие-нибудь сторонние патчи, netgraph ноды?
>Покажите вывод следующих комманд:
># ipfw show | egrep "divert|tee|netgraph"
># cat /etc/sysctl.conf
># cat /boot/loader.conf02200 159731 11804946 divert 8668 ip from me to any via vlan102
02300 0 0 divert 8668 ip from x.x.x.x/28 to any via vlan102
02400 0 0 divert 8668 ip from x.x.x.x to any via vlan102
02500 14432 1102139 divert 8668 ip from any to any in via vlan102По двум остальным командам не вывело ничего ....
Началось все после того как я изменил правила ipfw ...
>По двум остальным командам не вывело ничего ....
>Началось все после того как я изменил правила ipfw ...Есть один PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/86427
Там проблема другая, но на сколько я вижу, общее у вас одно - divert + vlan..
rwason@ предложил там патч, если есть желание - можете попробовать, вдруг поможет..
>>По двум остальным командам не вывело ничего ....
>>Началось все после того как я изменил правила ipfw ...
>
>Есть один PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/86427
>Там проблема другая, но на сколько я вижу, общее у вас одно
>- divert + vlan..
>rwason@ предложил там патч, если есть желание - можете попробовать, вдруг поможет..
>
Есть идея, что проблема в конструкции
$cmd divert natd all from me to any via $oif
$cmd divert natd all from Х.Х.Х.Х/28 to any via $oif
$cmd divert natd all from any to any in via $oif
Что пакет проходит от дайверта к дайверту но уже с no divert tag.
Такое может быть ?
Если да, расскажите как грамотнее частично натить сеть (не все облако, а определенный диапазон)
>>>По двум остальным командам не вывело ничего ....
>>>Началось все после того как я изменил правила ipfw ...
>>
>>Есть один PR: http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/86427
>>Там проблема другая, но на сколько я вижу, общее у вас одно
>>- divert + vlan..
>>rwason@ предложил там патч, если есть желание - можете попробовать, вдруг поможет..
>>
>Есть идея, что проблема в конструкции
>$cmd divert natd all from me to any via $oif
>$cmd divert natd all from Х.Х.Х.Х/28 to any via $oif
>$cmd divert natd all from any to any in via $oif
>Что пакет проходит от дайверта к дайверту но уже с no divert
>tag.
>Такое может быть ?
>Если да, расскажите как грамотнее частично натить сеть (не все облако, а
>определенный диапазон)Эх отправить бы тебя читать маны как ты любишь делать, но в отличае от тебя я тебе всё же подскажу одну вещ..
1. Проверь в /etc/rc.conf на наличае строчек на всякий случай (ведь у тебя один интерфейс для ната, а бережённого Бог бережёт)
natd_enable="YES"
natd_interface="vlan0"2. У тебя явный бордак с правилами, я бы сделал так
$cmd add divert natd all from Х.Х.Х.Х/28 to any via $oif
$cmd add divert natd all from Х1.Х1.Х1.Х1/24 to any via $oif
$cmd add divert natd all from any to me via $oifГде Х1.Х1.Х1.Х1/24 некая другая сеть или какой-то один адрес, котрую тоже нужно натить.
3. Я тут уже писал об этом но опять же никто не обратил внимание. ipfw работает по принцыпу сработало хоть одно правило на пакете - дальше никакие правила не рассматриваются, пакет кидается прямо на таблицу маршрутизации по которой уже определяется что с ним делать дальше!
А это означает что тебе нужно все запрещающие правила ставить перед правилами ната, а все разрешающие после правил ната например так:$cmd add deny log ip from 192.168.0.0/16 to any in via $oif
$cmd add deny log ip from 176.16.0.0/12 to any in via $oif
$cmd add deny log ip from 10.0.0.0/8 to any in via $oif$cmd add divert natd all from Х.Х.Х.Х/28 to any via $oif
$cmd add divert natd all from Х1.Х1.Х1.Х1/24 to any via $oif
$cmd add divert natd all from any to me via $oif$cmd add allow any from any
А вообще ты можешь например задать посеть для ната а потом правилами выше правил ната выбить из неё определённые адреса или даже групу адресов, просто запретив им соединяться на внутренний интерфейс.
Кстати я бы ещё проверил ещё раз маску твоей подсети, маска 28 - это вообще говоря 16 адресов, убедись что у тебя туда попадают все кто нужен.
>Кстати я бы ещё проверил ещё раз маску твоей подсети, маска 28
>- это вообще говоря 16 адресов, убедись что у тебя туда
>попадают все кто нужен.По поводу rc.conf ответ утвердительный :),
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="vlanX"маска /28, это не бага, это скорее фича :), так и нужно что бы определенная подсеть могла ходить без прокси, причем всеми портами наружу...
По поводу
$cmd add divert natd all from Х.Х.Х.Х/28 to any via $oif
$cmd add divert natd all from Х1.Х1.Х1.Х1/24 to any via $oif
$cmd add divert natd all from any to me via $oif
Мне кажется не хватает возврата пакетов назад ...
Типа
$cmd divert natd all from any to any IN via $oif
По поводу разрешающих и запрещающих правил ....
По подробнее если можна ... то есть если я до ната сделаю
deny log logamount 100 ip from any to any
то пакеты все равно будут попадать на natd ???
$cmd add allow any from any
у меня и так по умолчанию, поскольку
firewall_type="OPEN"
>>Кстати я бы ещё проверил ещё раз маску твоей подсети, маска 28
>>- это вообще говоря 16 адресов, убедись что у тебя туда
>>попадают все кто нужен.
>
>По поводу rc.conf ответ утвердительный :),
>natd_program="/sbin/natd"
>natd_enable="YES"
>natd_interface="vlanX"
>
>маска /28, это не бага, это скорее фича :), так и нужно
>что бы определенная подсеть могла ходить без прокси, причем всеми портами
>наружу...
>По поводу
>$cmd add divert natd all from Х.Х.Х.Х/28 to any via $oif
>$cmd add divert natd all from Х1.Х1.Х1.Х1/24 to any via $oif
>$cmd add divert natd all from any to me via $oif
>Мне кажется не хватает возврата пакетов назад ...
>Типа
>$cmd divert natd all from any to any IN via $oif
За такое правило можно поплатиться тем что кто-то снаружи за твой счёт начнёт инетом пользоваться, да и вообще о каких обратных пакетах идёт речь?
Ввот весь путь пакета :
1. Попал на внутренний интерфейс прошёл проверку по ipfw сработал на правиле
$cmd add divert natd all from Х.Х.Х.Х/28 to any via $oif был направлен в программу natd
2. Программа natd изменила его обратный адрес на внешний адрес твоей машины и отдала таблице маршрутизации по этой таблице данный пакет необходимо кинуть на твой шлюз, поэтому система кидает его на шлюз, но перед этим опять кидает на ipfw так как такой пакет система ещё не обрабатывала (ведь пакет был изменён, адрес же у него сменился)
3. Сработало правило ipfw
$cmd add pass all from me to any via $oif
4. Пакет отправлен на твой шлюзПолучение этого же паета:
1. Получен пакет на внешний интерфейс с адресом назначения твой внешний адрес, пакет пропускается через ipfw и срабатывает на правиле $cmd add divert natd all from any to me via $oif перенаправлен в программу natd
2. Программа natd разначивает пакет и видит что он тунельный и просто вытаскивает внутренний адрес назначения пакета , меняет адрес назначения со своего внешнего на локальный адрес отправителя, затем кидает на таблицу маршрутизации
3. Система смотрит по таблице маршрутизации что такие пакеты нужно направлять в локалку по МАК но перед этим опять кидает его на ipfw, так как это уже новый пакет ведь его сгенерила natd то его нужно сново проверить.
4. Проверяется по правилам ipfw и срабатывает на правиле
$cmd add pass all from any to any via $iif
где $iif - внутренний интерфейсВот и всё, и никакого $cmd add divert natd all from any to me via $oif здесь и близко не нужно! Даже наоборот, опасно такое делать!
Более подробно написал здесь
http://www.opennet.me/openforum/vsluhforumID1/70184.html#4>По поводу разрешающих и запрещающих правил ....
>По подробнее если можна ... то есть если я до ната сделаю
>
>deny log logamount 100 ip from any to any
>то пакеты все равно будут попадать на natd ???
>$cmd add allow any from any
>у меня и так по умолчанию, поскольку
>firewall_type="OPEN"
Если ты напишешь правило после диверта
deny log logamount 10000 ip from any to any
то у тебя сначало сработает диверт и часть пакетов будет обработана natd, а потом только сработает твой запрет. Что это означает? А означает что твою систему можно бомбить заставляя проц грузиться, а если в natd есть какая-то уязвимость по поводу переполнения то можно ею и пользоваться, вот что это означает. И толку от такого правила написанного в конце всех правил очень мало :).
Если же ты такое правило напишешь в самом начале, то оно всё запретит вообще, даже нат, вообще ничего никуда ходить не будет, все пакеты будут убиваться сразу же без каких-то задержек и нагрузка на проц будет меньше, да и эффективность защиты выше.
Поэтому все правила запрета лучше писать до того как они могут сработать на natd. Это касается запретов в первую очередь для своих же пользователей, елси ты например хочешь кому-то отрезать сеть, то написав правило типа
deny log logamount 1000 ip from кто-то to any
после ната, ты ему ничего не закроешь, а если напишешь это же правило до ната то будешь убивать всё что от него придёт ещё до того как это будет перенаправлено на natd. Чувствуешь разницу?А вообще вот тебе мой список правил котрые я использую между прочем тоже на FreeBSD 5.4
#Разрешаем лупбек (хотя это правило можно писать где угодно, главное до денаев)
${ipfw} add 30 pass all from any to any via lo0#Закрываем доступ всех локальных адресов поступающих на внешний интерфейс
${ipfw} add 200 deny log ip from 192.168.0.0/16 to any in via ${ifout}
${ipfw} add 210 deny log ip from 176.16.0.0/12 to any in via ${ifout}
${ipfw} add 220 deny log ip from 10.0.0.0/8 to any in via ${ifout}#Запрещаем интеренет тем кто не заплатил
${ipfw} add 301 deny log ip from 192.168.12.12 to any in via ${ifuser}
${ipfw} add 302 deny log ip from 192.168.12.15 to any in via ${ifuser}
${ipfw} add 303 deny log ip from 192.168.12.35 to any in via ${ifuser}
${ipfw} add 304 deny log ip from 192.168.12.102 to any in via ${ifuser}#Два правила ната, один от локалки во внешний мир второй от внешнего мира к локалке
${ipfw} add 510 divert natd all from ${ournet} to any via ${ifout}
${ipfw} add 520 divert natd all from any to ${IPout} via ${ifout}#Разрешаем прохождение пакетов участвующих в соединение tcp
${ipfw} add 600 pass tcp from any to any established#Разрешаем себе всё на выход через внешней интерфейс
${ipfw} add 620 pass ip from me to any out xmit ${ifout}#разрешаем пакеты идущие к локалке
${ipfw} add 710 pass all from any to ${ournet}#разрешаем всё что ходит по внутреннему интерфейсу
${ipfw} add 1000 pass all from any to any via ${ifuser}
#разрешаем доступ по ssh
${ipfw} add 3000 pass ip from any to me 22 via ${ifout} in#Запрещаем всё что не попало ни под одно из правил с записью в лог
${ipfw} add 10000 deny log ip from any to anyВот что я имел ввиду когда говорил почему надо писать правила запрета до ната и вообще первыми. Чтоб по ошибке ненужные пакеты не попадали в систему.
Кстати я так и не понял, у тебя попрежнему система пишет в логах divert_packet: no divert tag ? Вообще-то должно означать что не указан интерфейс natd . Может ты всё же ошибся при задании интерфейса? Проверь ещё раз что пишет ifconfig? убедись что там есть тот интерфейс котрый ты подсовываешь нату. А лучше всего в rc.conf проверить что указан именно внешний интерфейс как интерфейс для ната.
>>>Кстати я бы ещё проверил ещё раз маску твоей подсети, маска 28
>>>- это вообще говоря 16 адресов, убедись что у тебя туда
>>>попадают все кто нужен.
>>
>>По поводу rc.conf ответ утвердительный :),
>>natd_program="/sbin/natd"
>>natd_enable="YES"
>>natd_interface="vlanX"
>>
>>маска /28, это не бага, это скорее фича :), так и нужно
>>что бы определенная подсеть могла ходить без прокси, причем всеми портами
>>наружу...
>>По поводу
>>$cmd add divert natd all from Х.Х.Х.Х/28 to any via $oif
>>$cmd add divert natd all from Х1.Х1.Х1.Х1/24 to any via $oif
>>$cmd add divert natd all from any to me via $oif
>>Мне кажется не хватает возврата пакетов назад ...
>>Типа
>>$cmd divert natd all from any to any IN via $oif
>За такое правило можно поплатиться тем что кто-то снаружи за твой счёт
>начнёт инетом пользоваться, да и вообще о каких обратных пакетах идёт
>речь?
>Ввот весь путь пакета :
>1. Попал на внутренний интерфейс прошёл проверку по ipfw сработал на правиле
>
>$cmd add divert natd all from Х.Х.Х.Х/28 to any via $oif был
>направлен в программу natd
>2. Программа natd изменила его обратный адрес на внешний адрес твоей машины
>и отдала таблице маршрутизации по этой таблице данный пакет необходимо кинуть
>на твой шлюз, поэтому система кидает его на шлюз, но
>перед этим опять кидает на ipfw так как такой пакет система
>ещё не обрабатывала (ведь пакет был изменён, адрес же у него
>сменился)
>3. Сработало правило ipfw
>$cmd add pass all from me to any via $oif
>4. Пакет отправлен на твой шлюз
>
>Получение этого же паета:
>1. Получен пакет на внешний интерфейс с адресом назначения твой внешний адрес,
>пакет пропускается через ipfw и срабатывает на правиле $cmd add divert
>natd all from any to me via $oif перенаправлен в
>программу natd
>2. Программа natd разначивает пакет и видит что он тунельный и просто
>вытаскивает внутренний адрес назначения пакета , меняет адрес назначения со своего
>внешнего на локальный адрес отправителя, затем кидает на таблицу маршрутизации
>3. Система смотрит по таблице маршрутизации что такие пакеты нужно направлять в
>локалку по МАК но перед этим опять кидает его на ipfw,
>так как это уже новый пакет ведь его сгенерила natd то
>его нужно сново проверить.
>4. Проверяется по правилам ipfw и срабатывает на правиле
>$cmd add pass all from any to any via $iif
>где $iif - внутренний интерфейс
>
>Вот и всё, и никакого $cmd add divert natd all from any
>to me via $oif здесь и близко не нужно! Даже наоборот,
>опасно такое делать!
>
>Более подробно написал здесь
>http://www.opennet.me/openforum/vsluhforumID1/70184.html#4
>
>>По поводу разрешающих и запрещающих правил ....
>>По подробнее если можна ... то есть если я до ната сделаю
>>
>>deny log logamount 100 ip from any to any
>>то пакеты все равно будут попадать на natd ???
>>$cmd add allow any from any
>>у меня и так по умолчанию, поскольку
>>firewall_type="OPEN"
>
>
>Если ты напишешь правило после диверта
>deny log logamount 10000 ip from any to any
>то у тебя сначало сработает диверт и часть пакетов будет обработана natd,
>а потом только сработает твой запрет. Что это означает? А означает
>что твою систему можно бомбить заставляя проц грузиться, а если в
>natd есть какая-то уязвимость по поводу переполнения то можно ею и
>пользоваться, вот что это означает. И толку от такого правила написанного
>в конце всех правил очень мало :).
>Если же ты такое правило напишешь в самом начале, то оно всё
>запретит вообще, даже нат, вообще ничего никуда ходить не будет, все
>пакеты будут убиваться сразу же без каких-то задержек и нагрузка на
>проц будет меньше, да и эффективность защиты выше.
>Поэтому все правила запрета лучше писать до того как они могут сработать
>на natd. Это касается запретов в первую очередь для своих же
>пользователей, елси ты например хочешь кому-то отрезать сеть, то написав правило
>типа
>deny log logamount 1000 ip from кто-то to any
>после ната, ты ему ничего не закроешь, а если напишешь это же
>правило до ната то будешь убивать всё что от него придёт
>ещё до того как это будет перенаправлено на natd. Чувствуешь разницу?
>
>
>А вообще вот тебе мой список правил котрые я использую между прочем
>тоже на FreeBSD 5.4
>
>#Разрешаем лупбек (хотя это правило можно писать где угодно, главное до денаев)
>
>${ipfw} add 30 pass all from any to any via lo0
>
>#Закрываем доступ всех локальных адресов поступающих на внешний интерфейс
>${ipfw} add 200 deny log ip from 192.168.0.0/16 to any in via
>${ifout}
>${ipfw} add 210 deny log ip from 176.16.0.0/12 to any in via
>${ifout}
>${ipfw} add 220 deny log ip from 10.0.0.0/8 to any in via
>${ifout}
>
>#Запрещаем интеренет тем кто не заплатил
>${ipfw} add 301 deny log ip from 192.168.12.12 to any in via
>${ifuser}
>${ipfw} add 302 deny log ip from 192.168.12.15 to any in via
>${ifuser}
>${ipfw} add 303 deny log ip from 192.168.12.35 to any in via
>${ifuser}
>${ipfw} add 304 deny log ip from 192.168.12.102 to any in via
>${ifuser}
>
>#Два правила ната, один от локалки во внешний мир второй от внешнего
>мира к локалке
>${ipfw} add 510 divert natd all from ${ournet} to any via ${ifout}
>
>${ipfw} add 520 divert natd all from any to ${IPout} via ${ifout}
>
>
>#Разрешаем прохождение пакетов участвующих в соединение tcp
>${ipfw} add 600 pass tcp from any to any established
>
>#Разрешаем себе всё на выход через внешней интерфейс
>${ipfw} add 620 pass ip from me to any out xmit
>${ifout}
>
>#разрешаем пакеты идущие к локалке
>${ipfw} add 710 pass all from any to ${ournet}
>
>#разрешаем всё что ходит по внутреннему интерфейсу
>${ipfw} add 1000 pass all from any to any via ${ifuser}
>
>
>#разрешаем доступ по ssh
>${ipfw} add 3000 pass ip from any to me 22 via ${ifout}
>in
>
>#Запрещаем всё что не попало ни под одно из правил с записью
>в лог
>${ipfw} add 10000 deny log ip from any to any
>
>Вот что я имел ввиду когда говорил почему надо писать правила запрета
>до ната и вообще первыми. Чтоб по ошибке ненужные пакеты не
>попадали в систему.
>
>Кстати я так и не понял, у тебя попрежнему система пишет в
>логах divert_packet: no divert tag ? Вообще-то должно означать что не
>указан интерфейс natd . Может ты всё же ошибся при задании
>интерфейса? Проверь ещё раз что пишет ifconfig? убедись что там есть
>тот интерфейс котрый ты подсовываешь нату. А лучше всего в rc.conf
>проверить что указан именно внешний интерфейс как интерфейс для ната.Класс ... ответ просто супер. Большой респект за ответ.
По поводу интерфейса для natd в rc.conf то там все в порядке. Я прочему то начинаю склонятся к мысли, что divert не понимает какие то особенности 2-го уровня модели ОСИ.
У меня на одной сетевухе два вилана --- два интерфейса, на которых крутится вся кухня с маршрутизацией.
Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому на НАТД
я грешить бы не стал ... А вот с правилами ipfw надо кардинально переделать ...
Все таки думаю что divert ругается из-за того что интерфейсы - vlan.
>Класс ... ответ просто супер. Большой респект за ответ.
>По поводу интерфейса для natd в rc.conf то там все в порядке.
>Я прочему то начинаю склонятся к мысли, что divert не понимает
>какие то особенности 2-го уровня модели ОСИ.
>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>крутится вся кухня с маршрутизацией.
>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>на НАТД
>я грешить бы не стал ... А вот с правилами ipfw надо
>кардинально переделать ...
>Все таки думаю что divert ругается из-за того что интерфейсы -
>vlan.
У меня вообще диверт делается на виртуальный интерфейс который создаётся при подключении впн. Собственно сам по себе диверт он просто перенаправляет пакет в программу, а не в сетевой интерфейс. Так что может у тебя прсто не находится natd или пути к нему, а может просто у тебя такой дикий поток пакетов что natd не успевает их обработать и тупо перестаёт их принимать, ну а диверт начинает ругаться что программа natd возвращает код ошибки. Это вполне реально, если ты на магистрале какой-нибудь находишься, и пытаешься роутить толстым каналом на старом PC (какой-нибудь пентиюм 100). Можно просто понаблюдать как часто срабатывает правило по natd и вообще постараться чтоб до natd доходили лишь нужные пакеты.
>Класс ... ответ просто супер. Большой респект за ответ.
>По поводу интерфейса для natd в rc.conf то там все в порядке.
>Я прочему то начинаю склонятся к мысли, что divert не понимает
>какие то особенности 2-го уровня модели ОСИ.
>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>крутится вся кухня с маршрутизацией.
>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>на НАТД
>я грешить бы не стал ... А вот с правилами ipfw надо
>кардинально переделать ...
>Все таки думаю что divert ругается из-за того что интерфейсы -
>vlan.
Блин! Я торможу, у тебя же правило стоит
$cmd add divert natd all from any to any
Оно же у тебя срабатывает кучу раз на одних и тех же пакетах!!!! Ведь у тебя оно стоит до правил с разрешением и запрещением, получается что пакеты после natd снова попадают на natd и так по кругу, вместо того чтоб быть убитыми или пропущенными они у тебя постоянно попадают на natd !
Короче вся загвоздка в этом правиле, убери его и всё будет нормально!!!
>
>>Класс ... ответ просто супер. Большой респект за ответ.
>>По поводу интерфейса для natd в rc.conf то там все в порядке.
>>Я прочему то начинаю склонятся к мысли, что divert не понимает
>>какие то особенности 2-го уровня модели ОСИ.
>>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>>крутится вся кухня с маршрутизацией.
>>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>>на НАТД
>>я грешить бы не стал ... А вот с правилами ipfw надо
>>кардинально переделать ...
>>Все таки думаю что divert ругается из-за того что интерфейсы -
>>vlan.
>
>
>Блин! Я торможу, у тебя же правило стоит
>$cmd add divert natd all from any to any
>Оно же у тебя срабатывает кучу раз на одних и тех же
>пакетах!!!! Ведь у тебя оно стоит до правил с разрешением и
>запрещением, получается что пакеты после natd снова попадают на natd и
>так по кругу, вместо того чтоб быть убитыми или пропущенными они
>у тебя постоянно попадают на natd !
>Короче вся загвоздка в этом правиле, убери его и всё будет нормально!!!
>
Да нету у меня там такого правила ....
Показываю полностью весь конфиг при котором я получаю что нету дайверт тага ....
#!/bin/sh
#Quietly flush out rules
/sbin/ipfw -q -f flush#Set command prefix (add "-q" option after development to turn on quiet mode)
cmd="/sbin/ipfw add"
# set outside and inside network interfacesoif="vlan102"
iif="vlan101"# set private IP of this server and the netmask of the whole LAN side
server="X.X.X.X"
inside="X.X.X.0/24"######Localhost stuff
#
#allow the computer to talk to itself
$cmd allow ip from any to any via lo0#don't let anything from the "outside" talk to localhost
$cmd deny ip from any to 127.0.0.0/8
#don't let the computer talk other computers as localhost
$cmd deny log ip from 127.0.0.0/8 to any
#
#######
####### DHCP stuff
#
# you need this to be able to renew your DHCP lease from your ISP
# $cmd 00083 allow udp from any 67 to any 68 in recv rl0
#
#####
######### deny-and-log bogus packets by tcpflags
#
# XMAS tree
$cmd deny log tcp from any to any in tcpflags fin,psh,urg recv $oif# NULL scan (no flag set at all)
$cmd deny log tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
# SYN flood (SYN,FIN)
$cmd deny log tcp from any to any in tcpflags syn,fin recv $oif
# Stealth FIN scan (FIN,RST)
$cmd deny log tcp from any to any in tcpflags fin,rst recv $oif
# forced packet routing
$cmd deny log ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
$cmd add pass all from me to any via $oif
#
#######
######### Things served via this machine directly
######### Any services on this machine should be placed here,
######### before the NAT Divert rule
#
#HTTP
$cmd allow tcp from any to any 80 in via $oif
#SSH
$cmd allow tcp from any to any 22 in via $oif
#FTP
$cmd allow ip from any to any 20 in via $oif
$cmd allow ip from any to any 21 in via $oif
$cmd allow tcp from any 21 to any out via $oif
#OPENVPN
$cmd allow udp from any to any 1194 in via $oif
#POP3
$cmd allow tcp from any to any 110 in via $oif setup
#SMTP
$cmd allow tcp from any to any 25 in via $oif
#
#########NATD stuff
#natd Divert rule
# $cmd divert natd all from any to any via $oif
$cmd divert natd all from me to any via $oif
$cmd divert natd all from X.X.X.0/28 to any via $oif
$cmd divert natd all from X.X.X.1 to any via $oif
$cmd divert natd all from X.X.X.2 to any via $oif
$cmd divert natd all from X.X.X.3 to any via $oif
$cmd divert natd all from X.X.X.4 to any via $oif
$cmd divert natd all from any to any in via $oif
######
####All connections originating from my network are allowed
# check to see if a dynamic rule has been created that matches this packet
$cmd check-state
# let everything on your internal network talk to the firewall
$cmd allow all from any to any via $iif keep-state
# setup a dynamic rule for any connections being started from inside
$cmd allow all from any to any out via $oif keep-state
# deny ACK packets that did not match the dynamic rule table - do not log, too many false positives
$cmd deny tcp from any to any established in via $oif
#deny fragments as bogus packets
$cmd deny log all from any to any frag in via $oif
#####
####### ICMP stuff
#allow path-mtu in both directions
$cmd allow icmp from any to any icmptypes 3
#allow source quench in and out
$cmd allow icmp from any to any icmptypes 4
#allow outbound traceroutes
$cmd allow icmp from any to any icmptypes 11 in
#allow outbound pings and incoming ping responses
$cmd allow icmp from any to any icmptypes 8
$cmd allow icmp from any to any icmptypes 0 in
########
##### This section is for exposing services to the internet from the LAN
##### It is placed AFTER the NATD Divert rule, so these services can be
##### diverted in /etc/natd.conf
# Remote desktop - allow it, but log connection attempts (though DON'T log traffic for established sessions)
$cmd allow log tcp from any to any 3389,58585,58586 in setup
$cmd allow tcp from any to any 3389,58585,58586 in
$cmd allow ip from any to $inside 58586 in via $oif####
######## SOME THINGS ARE TOO NOISY TO LIVE
######## In this section we deny things that would be denied anyway, but that we just
######## don't want logged. Be careful with this - in general, you probably want to
######## avoid putting anything in here that doesn't specify a known source address that
######## is relatively trustworthy. You also want to be very careful about who knows
######## what this section of your firewall configs looks like, because they can then
######## use the info to craft probes and attacks they know you won't see or log.# Don't bother logging IGMP crap from the ISP
$cmd deny igmp from M.M.M.M to any in via $oif
# Don't bother logging DNS garbage inbound from the ISP's DNS boxes
$cmd deny udp from M.M.M.M 53 to any dst-port 50000-65535 in via $oif#####
######## Stealth scans of closed ports
######## this section is to deny and log stealth scans that we can't really deny
######## on open ports because doing so would disrupt legitimate services.
# ACK scan (ACK,RST)
$cmd deny log tcp from any to any in tcpflags ack,rst recv $oif#####
#############
############# DEFAULT RULE - deny it, and log it, 'cause we're secure like that.
#############
#
$cmd 65000 deny log all from any to any
>>
>>>Класс ... ответ просто супер. Большой респект за ответ.
>>>По поводу интерфейса для natd в rc.conf то там все в порядке.
>>>Я прочему то начинаю склонятся к мысли, что divert не понимает
>>>какие то особенности 2-го уровня модели ОСИ.
>>>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>>>крутится вся кухня с маршрутизацией.
>>>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>>>на НАТД
>>>я грешить бы не стал ... А вот с правилами ipfw надо
>>>кардинально переделать ...
>>>Все таки думаю что divert ругается из-за того что интерфейсы -
>>>vlan.
>>
>>
>>Блин! Я торможу, у тебя же правило стоит
>>$cmd add divert natd all from any to any
>>Оно же у тебя срабатывает кучу раз на одних и тех же
>>пакетах!!!! Ведь у тебя оно стоит до правил с разрешением и
>>запрещением, получается что пакеты после natd снова попадают на natd и
>>так по кругу, вместо того чтоб быть убитыми или пропущенными они
>>у тебя постоянно попадают на natd !
>>Короче вся загвоздка в этом правиле, убери его и всё будет нормально!!!
>>
>Да нету у меня там такого правила ....
>Показываю полностью весь конфиг при котором я получаю что нету дайверт тага
> ....
>#!/bin/sh
>#Quietly flush out rules
>/sbin/ipfw -q -f flush
>
>#Set command prefix (add "-q" option after development to turn on quiet
>mode)
> cmd="/sbin/ipfw add"
># set outside and inside network interfaces
>
> oif="vlan102"
> iif="vlan101"
>
># set private IP of this server and the netmask of the
>whole LAN side
>
> server="X.X.X.X"
> inside="X.X.X.0/24"
>
>######Localhost stuff
>#
>#allow the computer to talk to itself
>
> $cmd allow ip from any to any via lo0
>
>#don't let anything from the "outside" talk to localhost
>
> $cmd deny ip from any to 127.0.0.0/8
>
>#don't let the computer talk other computers as localhost
>
> $cmd deny log ip from 127.0.0.0/8 to any
>
>#
>#######
>####### DHCP stuff
>#
># you need this to be able to renew your DHCP lease
>from your ISP
># $cmd 00083 allow udp from any 67 to any 68 in
>recv rl0
>#
>#####
>######### deny-and-log bogus packets by tcpflags
>#
># XMAS tree
>
> $cmd deny log tcp from any to any in tcpflags fin,psh,urg
>recv $oif
>
># NULL scan (no flag set at all)
> $cmd deny log
>tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
># SYN flood (SYN,FIN)
> $cmd deny
>log tcp from any to any in tcpflags syn,fin recv $oif
>
># Stealth FIN scan (FIN,RST)
> $cmd deny log
>tcp from any to any in tcpflags fin,rst recv $oif
># forced packet routing
> $cmd deny log
>ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
> $cmd add pass all from me to any via $oif
>
>#
>#######
>######### Things served via this machine directly
>######### Any services on this machine should be placed here,
>######### before the NAT Divert rule
>#
>#HTTP
> $cmd allow tcp
>from any to any 80 in via $oif
>#SSH
> $cmd allow tcp
>from any to any 22 in via $oif
>#FTP
> $cmd allow ip
>from any to any 20 in via $oif
> $cmd allow ip
>from any to any 21 in via $oif
> $cmd allow tcp
>from any 21 to any out via $oif
>#OPENVPN
> $cmd allow udp from any to any 1194 in via
>$oif
>#POP3
> $cmd allow tcp from any to any 110 in via
>$oif setup
>#SMTP
> $cmd allow tcp from any to any 25 in via
>$oif
>#
>####
>
>#####NATD stuff
>#natd Divert rule
>
># $cmd divert natd all from any to any via $oif
> $cmd divert natd all
>from me to any via $oif
> $cmd divert natd all
>from X.X.X.0/28 to any via $oif
> $cmd divert natd all from X.X.X.1 to any via $oif
> $cmd divert natd all from X.X.X.2 to any via $oif
> $cmd divert natd all from X.X.X.3 to any via $oif
> $cmd divert natd all from X.X.X.4 to any via $oif
> $cmd divert natd all from any to any in via $oif
>
>######
>####All connections originating from my network are allowed
># check to see if a dynamic rule has been created that
>matches this packet
>
> $cmd check-state
># let everything on your internal network talk to the firewall
> $cmd allow all
>from any to any via $iif keep-state
># setup a dynamic rule for any connections being started from inside
>
> $cmd allow all
>from any to any out via $oif keep-state
># deny ACK packets that did not match the dynamic rule table
>- do not log, too many false positives
> $cmd deny tcp
>from any to any established in via $oif
>#deny fragments as bogus packets
> $cmd deny log
>all from any to any frag in via $oif
>#####
>
>
>####### ICMP stuff
>
>#allow path-mtu in both directions
> $cmd allow icmp from any to any icmptypes 3
>
>#allow source quench in and out
> $cmd allow icmp from any to any icmptypes 4
>
>#allow outbound traceroutes
> $cmd allow icmp from any to any icmptypes 11 in
>
>#allow outbound pings and incoming ping responses
> $cmd allow icmp from any to any icmptypes 8
> $cmd allow icmp from any to any icmptypes 0 in
>
>########
>
>##### This section is for exposing services to the internet from the
>LAN
>##### It is placed AFTER the NATD Divert rule, so these
>services can be
>##### diverted in /etc/natd.conf
>
># Remote desktop - allow it, but log connection attempts (though DON'T
>log traffic for established sessions)
> $cmd allow log
>tcp from any to any 3389,58585,58586 in setup
> $cmd allow tcp
>from any to any 3389,58585,58586 in
> $cmd allow ip
>from any to $inside 58586 in via $oif
>
>####
>
>######## SOME THINGS ARE TOO NOISY TO LIVE
>######## In this section we deny things that would be denied anyway,
>but that we just
>######## don't want logged. Be careful with this - in general,
>you probably want to
>######## avoid putting anything in here that doesn't specify a known source
>address that
>######## is relatively trustworthy. You also want to be very careful
>about who knows
>######## what this section of your firewall configs looks like, because they
>can then
>######## use the info to craft probes and attacks they know you
>won't see or log.
>
># Don't bother logging IGMP crap from the ISP
> $cmd deny igmp from M.M.M.M to any in via $oif
>
># Don't bother logging DNS garbage inbound from the ISP's DNS boxes
>
> $cmd deny udp from M.M.M.M 53 to any dst-port 50000-65535 in
>via $oif
>
>#####
>
>######## Stealth scans of closed ports
>######## this section is to deny and log stealth scans that
>we can't really deny
>######## on open ports because doing so would disrupt legitimate services.
>
>
># ACK scan (ACK,RST)
> $cmd deny log
>tcp from any to any in tcpflags ack,rst recv $oif
>
>#####
>
>#############
>############# DEFAULT RULE - deny it, and log it, 'cause we're secure
>like that.
>#############
>#
> $cmd 65000 deny log all from any to anyБлин, я ошибся не то написал, я хотел про другое написать вот такое правило у тебя лишнее
$cmd divert natd all from me to any via $oif
Это ты пытаешься натить пакеты у котрых обратный адрес реальный!Смотри, ситуация, отправляем от X.X.X.1 пакет на 194.87.0.8
Пакет пришёл на внутрениий интерфейс прошёл сквозь правило
$cmd divert natd all from X.X.X.1 to any via $oif
т.е. попал в natd прошл процедуру ната и теперь нат генерит пакет наружу у которого обратный адрес me, а адрес назначения 194.87.0.8, такой пакет заново проходит проверку и срабатывает уже на правиле
$cmd divert natd all from me to any via $oif
и вот тут natd должен сказать что знаете что, мне некуда девать этот пакет, его некуда натить, ибо он уже наченный у него уже реальный обратный адрес выставлен, и в лучшем случае этот пакет выйдет на маршрутизацию, а в худшем после ната система может решить что это новый пакет и занвоо пустить его на ipfw, где опять оно споткнётся на том же самом правиле и опять получишь такую ругань от natd.А правило которое я написал
$cmd divert natd all from any to any in via $oif
всё же, вдруг адрес назначения пакета не ты, а что-то другое, зачем его натить к тебе в локалку? Поэтому я бы от него избавился, заменив его хотя бы таким
$cmd divert natd all from any to me in via $oif
ну вот, вроде я не проглючил в очередной раз...
>>>
>>>>Класс ... ответ просто супер. Большой респект за ответ.
>>>>По поводу интерфейса для natd в rc.conf то там все в порядке.
>>>>Я прочему то начинаю склонятся к мысли, что divert не понимает
>>>>какие то особенности 2-го уровня модели ОСИ.
>>>>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>>>>крутится вся кухня с маршрутизацией.
>>>>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>>>>на НАТД
>>>>я грешить бы не стал ... А вот с правилами ipfw надо
>>>>кардинально переделать ...
>>>>Все таки думаю что divert ругается из-за того что интерфейсы -
>>>>vlan.
>>>
>>>
>>>Блин! Я торможу, у тебя же правило стоит
>>>$cmd add divert natd all from any to any
>>>Оно же у тебя срабатывает кучу раз на одних и тех же
>>>пакетах!!!! Ведь у тебя оно стоит до правил с разрешением и
>>>запрещением, получается что пакеты после natd снова попадают на natd и
>>>так по кругу, вместо того чтоб быть убитыми или пропущенными они
>>>у тебя постоянно попадают на natd !
>>>Короче вся загвоздка в этом правиле, убери его и всё будет нормально!!!
>>>
>>Да нету у меня там такого правила ....
>>Показываю полностью весь конфиг при котором я получаю что нету дайверт тага
>> ....
>>#!/bin/sh
>>#Quietly flush out rules
>>/sbin/ipfw -q -f flush
>>
>>#Set command prefix (add "-q" option after development to turn on quiet
>>mode)
>> cmd="/sbin/ipfw add"
>># set outside and inside network interfaces
>>
>> oif="vlan102"
>> iif="vlan101"
>>
>># set private IP of this server and the netmask of the
>>whole LAN side
>>
>> server="X.X.X.X"
>> inside="X.X.X.0/24"
>>
>>######Localhost stuff
>>#
>>#allow the computer to talk to itself
>>
>> $cmd allow ip from any to any via lo0
>>
>>#don't let anything from the "outside" talk to localhost
>>
>> $cmd deny ip from any to 127.0.0.0/8
>>
>>#don't let the computer talk other computers as localhost
>>
>> $cmd deny log ip from 127.0.0.0/8 to any
>>
>>#
>>#######
>>####### DHCP stuff
>>#
>># you need this to be able to renew your DHCP lease
>>from your ISP
>># $cmd 00083 allow udp from any 67 to any 68 in
>>recv rl0
>>#
>>#####
>>######### deny-and-log bogus packets by tcpflags
>>#
>># XMAS tree
>>
>> $cmd deny log tcp from any to any in tcpflags fin,psh,urg
>>recv $oif
>>
>># NULL scan (no flag set at all)
>> $cmd deny log
>>tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
>># SYN flood (SYN,FIN)
>> $cmd deny
>>log tcp from any to any in tcpflags syn,fin recv $oif
>>
>># Stealth FIN scan (FIN,RST)
>> $cmd deny log
>>tcp from any to any in tcpflags fin,rst recv $oif
>># forced packet routing
>> $cmd deny log
>>ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
>> $cmd add pass all from me to any via $oif
>>
>>#
>>#######
>>######### Things served via this machine directly
>>######### Any services on this machine should be placed here,
>>######### before the NAT Divert rule
>>#
>>#HTTP
>> $cmd allow tcp
>>from any to any 80 in via $oif
>>#SSH
>> $cmd allow tcp
>>from any to any 22 in via $oif
>>#FTP
>> $cmd allow ip
>>from any to any 20 in via $oif
>> $cmd allow ip
>>from any to any 21 in via $oif
>> $cmd allow tcp
>>from any 21 to any out via $oif
>>#OPENVPN
>> $cmd allow udp from any to any 1194 in via
>>$oif
>>#POP3
>> $cmd allow tcp from any to any 110 in via
>>$oif setup
>>#SMTP
>> $cmd allow tcp from any to any 25 in via
>>$oif
>>#
>>####
>>
>>#####NATD stuff
>>#natd Divert rule
>>
>># $cmd divert natd all from any to any via $oif
>> $cmd divert natd all
>>from me to any via $oif
>> $cmd divert natd all
>>from X.X.X.0/28 to any via $oif
>> $cmd divert natd all from X.X.X.1 to any via $oif
>> $cmd divert natd all from X.X.X.2 to any via $oif
>> $cmd divert natd all from X.X.X.3 to any via $oif
>> $cmd divert natd all from X.X.X.4 to any via $oif
>> $cmd divert natd all from any to any in via $oif
>>
>>######
>>####All connections originating from my network are allowed
>># check to see if a dynamic rule has been created that
>>matches this packet
>>
>> $cmd check-state
>># let everything on your internal network talk to the firewall
>> $cmd allow all
>>from any to any via $iif keep-state
>># setup a dynamic rule for any connections being started from inside
>>
>> $cmd allow all
>>from any to any out via $oif keep-state
>># deny ACK packets that did not match the dynamic rule table
>>- do not log, too many false positives
>> $cmd deny tcp
>>from any to any established in via $oif
>>#deny fragments as bogus packets
>> $cmd deny log
>>all from any to any frag in via $oif
>>#####
>>
>>
>>####### ICMP stuff
>>
>>#allow path-mtu in both directions
>> $cmd allow icmp from any to any icmptypes 3
>>
>>#allow source quench in and out
>> $cmd allow icmp from any to any icmptypes 4
>>
>>#allow outbound traceroutes
>> $cmd allow icmp from any to any icmptypes 11 in
>>
>>#allow outbound pings and incoming ping responses
>> $cmd allow icmp from any to any icmptypes 8
>> $cmd allow icmp from any to any icmptypes 0 in
>>
>>########
>>
>>##### This section is for exposing services to the internet from the
>>LAN
>>##### It is placed AFTER the NATD Divert rule, so these
>>services can be
>>##### diverted in /etc/natd.conf
>>
>># Remote desktop - allow it, but log connection attempts (though DON'T
>>log traffic for established sessions)
>> $cmd allow log
>>tcp from any to any 3389,58585,58586 in setup
>> $cmd allow tcp
>>from any to any 3389,58585,58586 in
>> $cmd allow ip
>>from any to $inside 58586 in via $oif
>>
>>####
>>
>>######## SOME THINGS ARE TOO NOISY TO LIVE
>>######## In this section we deny things that would be denied anyway,
>>but that we just
>>######## don't want logged. Be careful with this - in general,
>>you probably want to
>>######## avoid putting anything in here that doesn't specify a known source
>>address that
>>######## is relatively trustworthy. You also want to be very careful
>>about who knows
>>######## what this section of your firewall configs looks like, because they
>>can then
>>######## use the info to craft probes and attacks they know you
>>won't see or log.
>>
>># Don't bother logging IGMP crap from the ISP
>> $cmd deny igmp from M.M.M.M to any in via $oif
>>
>># Don't bother logging DNS garbage inbound from the ISP's DNS boxes
>>
>> $cmd deny udp from M.M.M.M 53 to any dst-port 50000-65535 in
>>via $oif
>>
>>#####
>>
>>######## Stealth scans of closed ports
>>######## this section is to deny and log stealth scans that
>>we can't really deny
>>######## on open ports because doing so would disrupt legitimate services.
>>
>>
>># ACK scan (ACK,RST)
>> $cmd deny log
>>tcp from any to any in tcpflags ack,rst recv $oif
>>
>>#####
>>
>>#############
>>############# DEFAULT RULE - deny it, and log it, 'cause we're secure
>>like that.
>>#############
>>#
>> $cmd 65000 deny log all from any to any
>
>Блин, я ошибся не то написал, я хотел про другое написать вот
>такое правило у тебя лишнее
>$cmd divert natd all from me to any via $oif
>Это ты пытаешься натить пакеты у котрых обратный адрес реальный!
>
>Смотри, ситуация, отправляем от X.X.X.1 пакет на 194.87.0.8
>Пакет пришёл на внутрениий интерфейс прошёл сквозь правило
>$cmd divert natd all from X.X.X.1 to any via $oif
>т.е. попал в natd прошл процедуру ната и теперь нат генерит пакет
>наружу у которого обратный адрес me, а адрес назначения 194.87.0.8, такой
>пакет заново проходит проверку и срабатывает уже на правиле
>$cmd divert natd all from me to any via $oif
>и вот тут natd должен сказать что знаете что, мне некуда девать
>этот пакет, его некуда натить, ибо он уже наченный у него
>уже реальный обратный адрес выставлен, и в лучшем случае этот пакет
>выйдет на маршрутизацию, а в худшем после ната система может решить
>что это новый пакет и занвоо пустить его на ipfw, где
>опять оно споткнётся на том же самом правиле и опять получишь
>такую ругань от natd.
>
>А правило которое я написал
>$cmd divert natd all from any to any in via $oif
>всё же, вдруг адрес назначения пакета не ты, а что-то другое, зачем
>его натить к тебе в локалку? Поэтому я бы от него
>избавился, заменив его хотя бы таким
>$cmd divert natd all from any to me in via $oif
>
>
>ну вот, вроде я не проглючил в очередной раз...Супер ... наконец то начинает проясняться ситуация с ipfw ... Огромное тебе спасибо за ответ, сейчас сконфигурю все корректно и отпишу если поможет :)))). Думаю этот блог многим поможет разобраться :))))
>>>>
>>>>>Класс ... ответ просто супер. Большой респект за ответ.
>>>>>По поводу интерфейса для natd в rc.conf то там все в порядке.
>>>>>Я прочему то начинаю склонятся к мысли, что divert не понимает
>>>>>какие то особенности 2-го уровня модели ОСИ.
>>>>>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>>>>>крутится вся кухня с маршрутизацией.
>>>>>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>>>>>на НАТД
>>>>>я грешить бы не стал ... А вот с правилами ipfw надо
>>>>>кардинально переделать ...
>>>>>Все таки думаю что divert ругается из-за того что интерфейсы -
>>>>>vlan.
>>>>
>>>>
>>>>Блин! Я торможу, у тебя же правило стоит
>>>>$cmd add divert natd all from any to any
>>>>Оно же у тебя срабатывает кучу раз на одних и тех же
>>>>пакетах!!!! Ведь у тебя оно стоит до правил с разрешением и
>>>>запрещением, получается что пакеты после natd снова попадают на natd и
>>>>так по кругу, вместо того чтоб быть убитыми или пропущенными они
>>>>у тебя постоянно попадают на natd !
>>>>Короче вся загвоздка в этом правиле, убери его и всё будет нормально!!!
>>>>
>>>Да нету у меня там такого правила ....
>>>Показываю полностью весь конфиг при котором я получаю что нету дайверт тага
>>> ....
>>>#!/bin/sh
>>>#Quietly flush out rules
>>>/sbin/ipfw -q -f flush
>>>
>>>#Set command prefix (add "-q" option after development to turn on quiet
>>>mode)
>>> cmd="/sbin/ipfw add"
>>># set outside and inside network interfaces
>>>
>>> oif="vlan102"
>>> iif="vlan101"
>>>
>>># set private IP of this server and the netmask of the
>>>whole LAN side
>>>
>>> server="X.X.X.X"
>>> inside="X.X.X.0/24"
>>>
>>>######Localhost stuff
>>>#
>>>#allow the computer to talk to itself
>>>
>>> $cmd allow ip from any to any via lo0
>>>
>>>#don't let anything from the "outside" talk to localhost
>>>
>>> $cmd deny ip from any to 127.0.0.0/8
>>>
>>>#don't let the computer talk other computers as localhost
>>>
>>> $cmd deny log ip from 127.0.0.0/8 to any
>>>
>>>#
>>>#######
>>>####### DHCP stuff
>>>#
>>># you need this to be able to renew your DHCP lease
>>>from your ISP
>>># $cmd 00083 allow udp from any 67 to any 68 in
>>>recv rl0
>>>#
>>>#####
>>>######### deny-and-log bogus packets by tcpflags
>>>#
>>># XMAS tree
>>>
>>> $cmd deny log tcp from any to any in tcpflags fin,psh,urg
>>>recv $oif
>>>
>>># NULL scan (no flag set at all)
>>> $cmd deny log
>>>tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
>>># SYN flood (SYN,FIN)
>>> $cmd deny
>>>log tcp from any to any in tcpflags syn,fin recv $oif
>>>
>>># Stealth FIN scan (FIN,RST)
>>> $cmd deny log
>>>tcp from any to any in tcpflags fin,rst recv $oif
>>># forced packet routing
>>> $cmd deny log
>>>ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
>>> $cmd add pass all from me to any via $oif
>>>
>>>#
>>>#######
>>>######### Things served via this machine directly
>>>######### Any services on this machine should be placed here,
>>>######### before the NAT Divert rule
>>>#
>>>#HTTP
>>> $cmd allow tcp
>>>from any to any 80 in via $oif
>>>#SSH
>>> $cmd allow tcp
>>>from any to any 22 in via $oif
>>>#FTP
>>> $cmd allow ip
>>>from any to any 20 in via $oif
>>> $cmd allow ip
>>>from any to any 21 in via $oif
>>> $cmd allow tcp
>>>from any 21 to any out via $oif
>>>#OPENVPN
>>> $cmd allow udp from any to any 1194 in via
>>>$oif
>>>#POP3
>>> $cmd allow tcp from any to any 110 in via
>>>$oif setup
>>>#SMTP
>>> $cmd allow tcp from any to any 25 in via
>>>$oif
>>>#
>>>####
>>>
>>>#####NATD stuff
>>>#natd Divert rule
>>>
>>># $cmd divert natd all from any to any via $oif
>>> $cmd divert natd all
>>>from me to any via $oif
>>> $cmd divert natd all
>>>from X.X.X.0/28 to any via $oif
>>> $cmd divert natd all from X.X.X.1 to any via $oif
>>> $cmd divert natd all from X.X.X.2 to any via $oif
>>> $cmd divert natd all from X.X.X.3 to any via $oif
>>> $cmd divert natd all from X.X.X.4 to any via $oif
>>> $cmd divert natd all from any to any in via $oif
>>>
>>>######
>>>####All connections originating from my network are allowed
>>># check to see if a dynamic rule has been created that
>>>matches this packet
>>>
>>> $cmd check-state
>>># let everything on your internal network talk to the firewall
>>> $cmd allow all
>>>from any to any via $iif keep-state
>>># setup a dynamic rule for any connections being started from inside
>>>
>>> $cmd allow all
>>>from any to any out via $oif keep-state
>>># deny ACK packets that did not match the dynamic rule table
>>>- do not log, too many false positives
>>> $cmd deny tcp
>>>from any to any established in via $oif
>>>#deny fragments as bogus packets
>>> $cmd deny log
>>>all from any to any frag in via $oif
>>>#####
>>>
>>>
>>>####### ICMP stuff
>>>
>>>#allow path-mtu in both directions
>>> $cmd allow icmp from any to any icmptypes 3
>>>
>>>#allow source quench in and out
>>> $cmd allow icmp from any to any icmptypes 4
>>>
>>>#allow outbound traceroutes
>>> $cmd allow icmp from any to any icmptypes 11 in
>>>
>>>#allow outbound pings and incoming ping responses
>>> $cmd allow icmp from any to any icmptypes 8
>>> $cmd allow icmp from any to any icmptypes 0 in
>>>
>>>########
>>>
>>>##### This section is for exposing services to the internet from the
>>>LAN
>>>##### It is placed AFTER the NATD Divert rule, so these
>>>services can be
>>>##### diverted in /etc/natd.conf
>>>
>>># Remote desktop - allow it, but log connection attempts (though DON'T
>>>log traffic for established sessions)
>>> $cmd allow log
>>>tcp from any to any 3389,58585,58586 in setup
>>> $cmd allow tcp
>>>from any to any 3389,58585,58586 in
>>> $cmd allow ip
>>>from any to $inside 58586 in via $oif
>>>
>>>####
>>>
>>>######## SOME THINGS ARE TOO NOISY TO LIVE
>>>######## In this section we deny things that would be denied anyway,
>>>but that we just
>>>######## don't want logged. Be careful with this - in general,
>>>you probably want to
>>>######## avoid putting anything in here that doesn't specify a known source
>>>address that
>>>######## is relatively trustworthy. You also want to be very careful
>>>about who knows
>>>######## what this section of your firewall configs looks like, because they
>>>can then
>>>######## use the info to craft probes and attacks they know you
>>>won't see or log.
>>>
>>># Don't bother logging IGMP crap from the ISP
>>> $cmd deny igmp from M.M.M.M to any in via $oif
>>>
>>># Don't bother logging DNS garbage inbound from the ISP's DNS boxes
>>>
>>> $cmd deny udp from M.M.M.M 53 to any dst-port 50000-65535 in
>>>via $oif
>>>
>>>#####
>>>
>>>######## Stealth scans of closed ports
>>>######## this section is to deny and log stealth scans that
>>>we can't really deny
>>>######## on open ports because doing so would disrupt legitimate services.
>>>
>>>
>>># ACK scan (ACK,RST)
>>> $cmd deny log
>>>tcp from any to any in tcpflags ack,rst recv $oif
>>>
>>>#####
>>>
>>>#############
>>>############# DEFAULT RULE - deny it, and log it, 'cause we're secure
>>>like that.
>>>#############
>>>#
>>> $cmd 65000 deny log all from any to any
>>
>>Блин, я ошибся не то написал, я хотел про другое написать вот
>>такое правило у тебя лишнее
>>$cmd divert natd all from me to any via $oif
>>Это ты пытаешься натить пакеты у котрых обратный адрес реальный!
>>
>>Смотри, ситуация, отправляем от X.X.X.1 пакет на 194.87.0.8
>>Пакет пришёл на внутрениий интерфейс прошёл сквозь правило
>>$cmd divert natd all from X.X.X.1 to any via $oif
>>т.е. попал в natd прошл процедуру ната и теперь нат генерит пакет
>>наружу у которого обратный адрес me, а адрес назначения 194.87.0.8, такой
>>пакет заново проходит проверку и срабатывает уже на правиле
>>$cmd divert natd all from me to any via $oif
>>и вот тут natd должен сказать что знаете что, мне некуда девать
>>этот пакет, его некуда натить, ибо он уже наченный у него
>>уже реальный обратный адрес выставлен, и в лучшем случае этот пакет
>>выйдет на маршрутизацию, а в худшем после ната система может решить
>>что это новый пакет и занвоо пустить его на ipfw, где
>>опять оно споткнётся на том же самом правиле и опять получишь
>>такую ругань от natd.
>>
>>А правило которое я написал
>>$cmd divert natd all from any to any in via $oif
>>всё же, вдруг адрес назначения пакета не ты, а что-то другое, зачем
>>его натить к тебе в локалку? Поэтому я бы от него
>>избавился, заменив его хотя бы таким
>>$cmd divert natd all from any to me in via $oif
>>
>>
>>ну вот, вроде я не проглючил в очередной раз...
>
>Супер ... наконец то начинает проясняться ситуация с ipfw ... Огромное тебе
>спасибо за ответ, сейчас сконфигурю все корректно и отпишу если поможет
>:)))). Думаю этот блог многим поможет разобраться :))))Вообщем не помогло ... Исправил правила на
$cmd divert natd all from Х.Х.Х.1 to any via $oif -- мой внутренний интерфейс
$cmd divert natd all from Х.Х.Х.М/28 to any via $oif
$cmd divert natd all from Х.Х.Х.М1 to any via $oif
$cmd divert natd all from Х.Х.Х.М6 to any via $oif
$cmd divert natd all from Х.Х.Х.М3 to any via $oif
$cmd divert natd all from 1Х.Х.Х.М5 to any via $oif
$cmd divert natd all from any to me in via $oifВсе пашет отлично. Но в логи все равно валит
Nov 15 20:30:40 kernel: divert_packet: no divert tag
Nov 15 20:31:22 kernel: divert_packet: no divert tag
Неужели ни у кого нет рутеров с интерфейсами организованных на виланах ????
Что за беда такая ...
>>>>>
>>>>>>Класс ... ответ просто супер. Большой респект за ответ.
>>>>>>По поводу интерфейса для natd в rc.conf то там все в порядке.
>>>>>>Я прочему то начинаю склонятся к мысли, что divert не понимает
>>>>>>какие то особенности 2-го уровня модели ОСИ.
>>>>>>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>>>>>>крутится вся кухня с маршрутизацией.
>>>>>>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>>>>>>на НАТД
>>>>>>я грешить бы не стал ... А вот с правилами ipfw надо
>>>>>>кардинально переделать ...
>>>>>>Все таки думаю что divert ругается из-за того что интерфейсы -
>>>>>>vlan.
>>>>>
>>>>>
>>>>>Блин! Я торможу, у тебя же правило стоит
>>>>>$cmd add divert natd all from any to any
>>>>>Оно же у тебя срабатывает кучу раз на одних и тех же
>>>>>пакетах!!!! Ведь у тебя оно стоит до правил с разрешением и
>>>>>запрещением, получается что пакеты после natd снова попадают на natd и
>>>>>так по кругу, вместо того чтоб быть убитыми или пропущенными они
>>>>>у тебя постоянно попадают на natd !
>>>>>Короче вся загвоздка в этом правиле, убери его и всё будет нормально!!!
>>>>>
>>>>Да нету у меня там такого правила ....
>>>>Показываю полностью весь конфиг при котором я получаю что нету дайверт тага
>>>> ....
>>>>#!/bin/sh
>>>>#Quietly flush out rules
>>>>/sbin/ipfw -q -f flush
>>>>
>>>>#Set command prefix (add "-q" option after development to turn on quiet
>>>>mode)
>>>> cmd="/sbin/ipfw add"
>>>># set outside and inside network interfaces
>>>>
>>>> oif="vlan102"
>>>> iif="vlan101"
>>>>
>>>># set private IP of this server and the netmask of the
>>>>whole LAN side
>>>>
>>>> server="X.X.X.X"
>>>> inside="X.X.X.0/24"
>>>>
>>>>######Localhost stuff
>>>>#
>>>>#allow the computer to talk to itself
>>>>
>>>> $cmd allow ip from any to any via lo0
>>>>
>>>>#don't let anything from the "outside" talk to localhost
>>>>
>>>> $cmd deny ip from any to 127.0.0.0/8
>>>>
>>>>#don't let the computer talk other computers as localhost
>>>>
>>>> $cmd deny log ip from 127.0.0.0/8 to any
>>>>
>>>>#
>>>>#######
>>>>####### DHCP stuff
>>>>#
>>>># you need this to be able to renew your DHCP lease
>>>>from your ISP
>>>># $cmd 00083 allow udp from any 67 to any 68 in
>>>>recv rl0
>>>>#
>>>>#####
>>>>######### deny-and-log bogus packets by tcpflags
>>>>#
>>>># XMAS tree
>>>>
>>>> $cmd deny log tcp from any to any in tcpflags fin,psh,urg
>>>>recv $oif
>>>>
>>>># NULL scan (no flag set at all)
>>>> $cmd deny log
>>>>tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
>>>># SYN flood (SYN,FIN)
>>>> $cmd deny
>>>>log tcp from any to any in tcpflags syn,fin recv $oif
>>>>
>>>># Stealth FIN scan (FIN,RST)
>>>> $cmd deny log
>>>>tcp from any to any in tcpflags fin,rst recv $oif
>>>># forced packet routing
>>>> $cmd deny log
>>>>ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
>>>> $cmd add pass all from me to any via $oif
>>>>
>>>>#
>>>>#######
>>>>######### Things served via this machine directly
>>>>######### Any services on this machine should be placed here,
>>>>######### before the NAT Divert rule
>>>>#
>>>>#HTTP
>>>> $cmd allow tcp
>>>>from any to any 80 in via $oif
>>>>#SSH
>>>> $cmd allow tcp
>>>>from any to any 22 in via $oif
>>>>#FTP
>>>> $cmd allow ip
>>>>from any to any 20 in via $oif
>>>> $cmd allow ip
>>>>from any to any 21 in via $oif
>>>> $cmd allow tcp
>>>>from any 21 to any out via $oif
>>>>#OPENVPN
>>>> $cmd allow udp from any to any 1194 in via
>>>>$oif
>>>>#POP3
>>>> $cmd allow tcp from any to any 110 in via
>>>>$oif setup
>>>>#SMTP
>>>> $cmd allow tcp from any to any 25 in via
>>>>$oif
>>>>#
>>>>####
>>>>
>>>>#####NATD stuff
>>>>#natd Divert rule
>>>>
>>>># $cmd divert natd all from any to any via $oif
>>>> $cmd divert natd all
>>>>from me to any via $oif
>>>> $cmd divert natd all
>>>>from X.X.X.0/28 to any via $oif
>>>> $cmd divert natd all from X.X.X.1 to any via $oif
>>>> $cmd divert natd all from X.X.X.2 to any via $oif
>>>> $cmd divert natd all from X.X.X.3 to any via $oif
>>>> $cmd divert natd all from X.X.X.4 to any via $oif
>>>> $cmd divert natd all from any to any in via $oif
>>>>
>>>>######
>>>>####All connections originating from my network are allowed
>>>># check to see if a dynamic rule has been created that
>>>>matches this packet
>>>>
>>>> $cmd check-state
>>>># let everything on your internal network talk to the firewall
>>>> $cmd allow all
>>>>from any to any via $iif keep-state
>>>># setup a dynamic rule for any connections being started from inside
>>>>
>>>> $cmd allow all
>>>>from any to any out via $oif keep-state
>>>># deny ACK packets that did not match the dynamic rule table
>>>>- do not log, too many false positives
>>>> $cmd deny tcp
>>>>from any to any established in via $oif
>>>>#deny fragments as bogus packets
>>>> $cmd deny log
>>>>all from any to any frag in via $oif
>>>>#####
>>>>
>>>>
>>>>####### ICMP stuff
>>>>
>>>>#allow path-mtu in both directions
>>>> $cmd allow icmp from any to any icmptypes 3
>>>>
>>>>#allow source quench in and out
>>>> $cmd allow icmp from any to any icmptypes 4
>>>>
>>>>#allow outbound traceroutes
>>>> $cmd allow icmp from any to any icmptypes 11 in
>>>>
>>>>#allow outbound pings and incoming ping responses
>>>> $cmd allow icmp from any to any icmptypes 8
>>>> $cmd allow icmp from any to any icmptypes 0 in
>>>>
>>>>########
>>>>
>>>>##### This section is for exposing services to the internet from the
>>>>LAN
>>>>##### It is placed AFTER the NATD Divert rule, so these
>>>>services can be
>>>>##### diverted in /etc/natd.conf
>>>>
>>>># Remote desktop - allow it, but log connection attempts (though DON'T
>>>>log traffic for established sessions)
>>>> $cmd allow log
>>>>tcp from any to any 3389,58585,58586 in setup
>>>> $cmd allow tcp
>>>>from any to any 3389,58585,58586 in
>>>> $cmd allow ip
>>>>from any to $inside 58586 in via $oif
>>>>
>>>>####
>>>>
>>>>######## SOME THINGS ARE TOO NOISY TO LIVE
>>>>######## In this section we deny things that would be denied anyway,
>>>>but that we just
>>>>######## don't want logged. Be careful with this - in general,
>>>>you probably want to
>>>>######## avoid putting anything in here that doesn't specify a known source
>>>>address that
>>>>######## is relatively trustworthy. You also want to be very careful
>>>>about who knows
>>>>######## what this section of your firewall configs looks like, because they
>>>>can then
>>>>######## use the info to craft probes and attacks they know you
>>>>won't see or log.
>>>>
>>>># Don't bother logging IGMP crap from the ISP
>>>> $cmd deny igmp from M.M.M.M to any in via $oif
>>>>
>>>># Don't bother logging DNS garbage inbound from the ISP's DNS boxes
>>>>
>>>> $cmd deny udp from M.M.M.M 53 to any dst-port 50000-65535 in
>>>>via $oif
>>>>
>>>>#####
>>>>
>>>>######## Stealth scans of closed ports
>>>>######## this section is to deny and log stealth scans that
>>>>we can't really deny
>>>>######## on open ports because doing so would disrupt legitimate services.
>>>>
>>>>
>>>># ACK scan (ACK,RST)
>>>> $cmd deny log
>>>>tcp from any to any in tcpflags ack,rst recv $oif
>>>>
>>>>#####
>>>>
>>>>#############
>>>>############# DEFAULT RULE - deny it, and log it, 'cause we're secure
>>>>like that.
>>>>#############
>>>>#
>>>> $cmd 65000 deny log all from any to any
>>>
>>>Блин, я ошибся не то написал, я хотел про другое написать вот
>>>такое правило у тебя лишнее
>>>$cmd divert natd all from me to any via $oif
>>>Это ты пытаешься натить пакеты у котрых обратный адрес реальный!
>>>
>>>Смотри, ситуация, отправляем от X.X.X.1 пакет на 194.87.0.8
>>>Пакет пришёл на внутрениий интерфейс прошёл сквозь правило
>>>$cmd divert natd all from X.X.X.1 to any via $oif
>>>т.е. попал в natd прошл процедуру ната и теперь нат генерит пакет
>>>наружу у которого обратный адрес me, а адрес назначения 194.87.0.8, такой
>>>пакет заново проходит проверку и срабатывает уже на правиле
>>>$cmd divert natd all from me to any via $oif
>>>и вот тут natd должен сказать что знаете что, мне некуда девать
>>>этот пакет, его некуда натить, ибо он уже наченный у него
>>>уже реальный обратный адрес выставлен, и в лучшем случае этот пакет
>>>выйдет на маршрутизацию, а в худшем после ната система может решить
>>>что это новый пакет и занвоо пустить его на ipfw, где
>>>опять оно споткнётся на том же самом правиле и опять получишь
>>>такую ругань от natd.
>>>
>>>А правило которое я написал
>>>$cmd divert natd all from any to any in via $oif
>>>всё же, вдруг адрес назначения пакета не ты, а что-то другое, зачем
>>>его натить к тебе в локалку? Поэтому я бы от него
>>>избавился, заменив его хотя бы таким
>>>$cmd divert natd all from any to me in via $oif
>>>
>>>
>>>ну вот, вроде я не проглючил в очередной раз...
>>
>>Супер ... наконец то начинает проясняться ситуация с ipfw ... Огромное тебе
>>спасибо за ответ, сейчас сконфигурю все корректно и отпишу если поможет
>>:)))). Думаю этот блог многим поможет разобраться :))))
>
>Вообщем не помогло ... Исправил правила на
> $cmd divert natd all
>from Х.Х.Х.1 to any via $oif -- мой внутренний интерфейс
> $cmd divert natd all
>from Х.Х.Х.М/28 to any via $oif
> $cmd divert natd all
>from Х.Х.Х.М1 to any via $oif
> $cmd divert natd all
>from Х.Х.Х.М6 to any via $oif
> $cmd divert natd all
>from Х.Х.Х.М3 to any via $oif
> $cmd divert natd all
>from 1Х.Х.Х.М5 to any via $oif
> $cmd divert natd all
>from any to me in via $oif
>
>Все пашет отлично. Но в логи все равно валит
>Nov 15 20:30:40 kernel: divert_packet: no divert tag
>Nov 15 20:31:22 kernel: divert_packet: no divert tag
>Неужели ни у кого нет рутеров с интерфейсами организованных на виланах ????
>
>Что за беда такая ...
не понял, как это $oif - внутренний? Он же внешний должен быть!
Во всех доках написано что он должен смотреть наружу в интернет!
>>>>>>
>>>>>>>Класс ... ответ просто супер. Большой респект за ответ.
>>>>>>>По поводу интерфейса для natd в rc.conf то там все в порядке.
>>>>>>>Я прочему то начинаю склонятся к мысли, что divert не понимает
>>>>>>>какие то особенности 2-го уровня модели ОСИ.
>>>>>>>У меня на одной сетевухе два вилана --- два интерфейса, на которых
>>>>>>>крутится вся кухня с маршрутизацией.
>>>>>>>Все работает, а эти сообщения валятся иногда, но с завидным постоянством. Поэтому
>>>>>>>на НАТД
>>>>>>>я грешить бы не стал ... А вот с правилами ipfw надо
>>>>>>>кардинально переделать ...
>>>>>>>Все таки думаю что divert ругается из-за того что интерфейсы -
>>>>>>>vlan.
>>>>>>
>>>>>>
>>>>>>Блин! Я торможу, у тебя же правило стоит
>>>>>>$cmd add divert natd all from any to any
>>>>>>Оно же у тебя срабатывает кучу раз на одних и тех же
>>>>>>пакетах!!!! Ведь у тебя оно стоит до правил с разрешением и
>>>>>>запрещением, получается что пакеты после natd снова попадают на natd и
>>>>>>так по кругу, вместо того чтоб быть убитыми или пропущенными они
>>>>>>у тебя постоянно попадают на natd !
>>>>>>Короче вся загвоздка в этом правиле, убери его и всё будет нормально!!!
>>>>>>
>>>>>Да нету у меня там такого правила ....
>>>>>Показываю полностью весь конфиг при котором я получаю что нету дайверт тага
>>>>> ....
>>>>>#!/bin/sh
>>>>>#Quietly flush out rules
>>>>>/sbin/ipfw -q -f flush
>>>>>
>>>>>#Set command prefix (add "-q" option after development to turn on quiet
>>>>>mode)
>>>>> cmd="/sbin/ipfw add"
>>>>># set outside and inside network interfaces
>>>>>
>>>>> oif="vlan102"
>>>>> iif="vlan101"
>>>>>
>>>>># set private IP of this server and the netmask of the
>>>>>whole LAN side
>>>>>
>>>>> server="X.X.X.X"
>>>>> inside="X.X.X.0/24"
>>>>>
>>>>>######Localhost stuff
>>>>>#
>>>>>#allow the computer to talk to itself
>>>>>
>>>>> $cmd allow ip from any to any via lo0
>>>>>
>>>>>#don't let anything from the "outside" talk to localhost
>>>>>
>>>>> $cmd deny ip from any to 127.0.0.0/8
>>>>>
>>>>>#don't let the computer talk other computers as localhost
>>>>>
>>>>> $cmd deny log ip from 127.0.0.0/8 to any
>>>>>
>>>>>#
>>>>>#######
>>>>>####### DHCP stuff
>>>>>#
>>>>># you need this to be able to renew your DHCP lease
>>>>>from your ISP
>>>>># $cmd 00083 allow udp from any 67 to any 68 in
>>>>>recv rl0
>>>>>#
>>>>>#####
>>>>>######### deny-and-log bogus packets by tcpflags
>>>>>#
>>>>># XMAS tree
>>>>>
>>>>> $cmd deny log tcp from any to any in tcpflags fin,psh,urg
>>>>>recv $oif
>>>>>
>>>>># NULL scan (no flag set at all)
>>>>> $cmd deny log
>>>>>tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
>>>>># SYN flood (SYN,FIN)
>>>>> $cmd deny
>>>>>log tcp from any to any in tcpflags syn,fin recv $oif
>>>>>
>>>>># Stealth FIN scan (FIN,RST)
>>>>> $cmd deny log
>>>>>tcp from any to any in tcpflags fin,rst recv $oif
>>>>># forced packet routing
>>>>> $cmd deny log
>>>>>ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
>>>>> $cmd add pass all from me to any via $oif
>>>>>
>>>>>#
>>>>>#######
>>>>>######### Things served via this machine directly
>>>>>######### Any services on this machine should be placed here,
>>>>>######### before the NAT Divert rule
>>>>>#
>>>>>#HTTP
>>>>> $cmd allow tcp
>>>>>from any to any 80 in via $oif
>>>>>#SSH
>>>>> $cmd allow tcp
>>>>>from any to any 22 in via $oif
>>>>>#FTP
>>>>> $cmd allow ip
>>>>>from any to any 20 in via $oif
>>>>> $cmd allow ip
>>>>>from any to any 21 in via $oif
>>>>> $cmd allow tcp
>>>>>from any 21 to any out via $oif
>>>>>#OPENVPN
>>>>> $cmd allow udp from any to any 1194 in via
>>>>>$oif
>>>>>#POP3
>>>>> $cmd allow tcp from any to any 110 in via
>>>>>$oif setup
>>>>>#SMTP
>>>>> $cmd allow tcp from any to any 25 in via
>>>>>$oif
>>>>>#
>>>>>####
>>>>>
>>>>>#####NATD stuff
>>>>>#natd Divert rule
>>>>>
>>>>># $cmd divert natd all from any to any via $oif
>>>>> $cmd divert natd all
>>>>>from me to any via $oif
>>>>> $cmd divert natd all
>>>>>from X.X.X.0/28 to any via $oif
>>>>> $cmd divert natd all from X.X.X.1 to any via $oif
>>>>> $cmd divert natd all from X.X.X.2 to any via $oif
>>>>> $cmd divert natd all from X.X.X.3 to any via $oif
>>>>> $cmd divert natd all from X.X.X.4 to any via $oif
>>>>> $cmd divert natd all from any to any in via $oif
>>>>>
>>>>>######
>>>>>####All connections originating from my network are allowed
>>>>># check to see if a dynamic rule has been created that
>>>>>matches this packet
>>>>>
>>>>> $cmd check-state
>>>>># let everything on your internal network talk to the firewall
>>>>> $cmd allow all
>>>>>from any to any via $iif keep-state
>>>>># setup a dynamic rule for any connections being started from inside
>>>>>
>>>>> $cmd allow all
>>>>>from any to any out via $oif keep-state
>>>>># deny ACK packets that did not match the dynamic rule table
>>>>>- do not log, too many false positives
>>>>> $cmd deny tcp
>>>>>from any to any established in via $oif
>>>>>#deny fragments as bogus packets
>>>>> $cmd deny log
>>>>>all from any to any frag in via $oif
>>>>>#####
>>>>>
>>>>>
>>>>>####### ICMP stuff
>>>>>
>>>>>#allow path-mtu in both directions
>>>>> $cmd allow icmp from any to any icmptypes 3
>>>>>
>>>>>#allow source quench in and out
>>>>> $cmd allow icmp from any to any icmptypes 4
>>>>>
>>>>>#allow outbound traceroutes
>>>>> $cmd allow icmp from any to any icmptypes 11 in
>>>>>
>>>>>#allow outbound pings and incoming ping responses
>>>>> $cmd allow icmp from any to any icmptypes 8
>>>>> $cmd allow icmp from any to any icmptypes 0 in
>>>>>
>>>>>########
>>>>>
>>>>>##### This section is for exposing services to the internet from the
>>>>>LAN
>>>>>##### It is placed AFTER the NATD Divert rule, so these
>>>>>services can be
>>>>>##### diverted in /etc/natd.conf
>>>>>
>>>>># Remote desktop - allow it, but log connection attempts (though DON'T
>>>>>log traffic for established sessions)
>>>>> $cmd allow log
>>>>>tcp from any to any 3389,58585,58586 in setup
>>>>> $cmd allow tcp
>>>>>from any to any 3389,58585,58586 in
>>>>> $cmd allow ip
>>>>>from any to $inside 58586 in via $oif
>>>>>
>>>>>####
>>>>>
>>>>>######## SOME THINGS ARE TOO NOISY TO LIVE
>>>>>######## In this section we deny things that would be denied anyway,
>>>>>but that we just
>>>>>######## don't want logged. Be careful with this - in general,
>>>>>you probably want to
>>>>>######## avoid putting anything in here that doesn't specify a known source
>>>>>address that
>>>>>######## is relatively trustworthy. You also want to be very careful
>>>>>about who knows
>>>>>######## what this section of your firewall configs looks like, because they
>>>>>can then
>>>>>######## use the info to craft probes and attacks they know you
>>>>>won't see or log.
>>>>>
>>>>># Don't bother logging IGMP crap from the ISP
>>>>> $cmd deny igmp from M.M.M.M to any in via $oif
>>>>>
>>>>># Don't bother logging DNS garbage inbound from the ISP's DNS boxes
>>>>>
>>>>> $cmd deny udp from M.M.M.M 53 to any dst-port 50000-65535 in
>>>>>via $oif
>>>>>
>>>>>#####
>>>>>
>>>>>######## Stealth scans of closed ports
>>>>>######## this section is to deny and log stealth scans that
>>>>>we can't really deny
>>>>>######## on open ports because doing so would disrupt legitimate services.
>>>>>
>>>>>
>>>>># ACK scan (ACK,RST)
>>>>> $cmd deny log
>>>>>tcp from any to any in tcpflags ack,rst recv $oif
>>>>>
>>>>>#####
>>>>>
>>>>>#############
>>>>>############# DEFAULT RULE - deny it, and log it, 'cause we're secure
>>>>>like that.
>>>>>#############
>>>>>#
>>>>> $cmd 65000 deny log all from any to any
>>>>
>>>>Блин, я ошибся не то написал, я хотел про другое написать вот
>>>>такое правило у тебя лишнее
>>>>$cmd divert natd all from me to any via $oif
>>>>Это ты пытаешься натить пакеты у котрых обратный адрес реальный!
>>>>
>>>>Смотри, ситуация, отправляем от X.X.X.1 пакет на 194.87.0.8
>>>>Пакет пришёл на внутрениий интерфейс прошёл сквозь правило
>>>>$cmd divert natd all from X.X.X.1 to any via $oif
>>>>т.е. попал в natd прошл процедуру ната и теперь нат генерит пакет
>>>>наружу у которого обратный адрес me, а адрес назначения 194.87.0.8, такой
>>>>пакет заново проходит проверку и срабатывает уже на правиле
>>>>$cmd divert natd all from me to any via $oif
>>>>и вот тут natd должен сказать что знаете что, мне некуда девать
>>>>этот пакет, его некуда натить, ибо он уже наченный у него
>>>>уже реальный обратный адрес выставлен, и в лучшем случае этот пакет
>>>>выйдет на маршрутизацию, а в худшем после ната система может решить
>>>>что это новый пакет и занвоо пустить его на ipfw, где
>>>>опять оно споткнётся на том же самом правиле и опять получишь
>>>>такую ругань от natd.
>>>>
>>>>А правило которое я написал
>>>>$cmd divert natd all from any to any in via $oif
>>>>всё же, вдруг адрес назначения пакета не ты, а что-то другое, зачем
>>>>его натить к тебе в локалку? Поэтому я бы от него
>>>>избавился, заменив его хотя бы таким
>>>>$cmd divert natd all from any to me in via $oif
>>>>
>>>>
>>>>ну вот, вроде я не проглючил в очередной раз...
>>>
>>>Супер ... наконец то начинает проясняться ситуация с ipfw ... Огромное тебе
>>>спасибо за ответ, сейчас сконфигурю все корректно и отпишу если поможет
>>>:)))). Думаю этот блог многим поможет разобраться :))))
>>
>>Вообщем не помогло ... Исправил правила на
>> $cmd divert natd all
>>from Х.Х.Х.1 to any via $oif -- мой внутренний интерфейс
>> $cmd divert natd all
>>from Х.Х.Х.М/28 to any via $oif
>> $cmd divert natd all
>>from Х.Х.Х.М1 to any via $oif
>> $cmd divert natd all
>>from Х.Х.Х.М6 to any via $oif
>> $cmd divert natd all
>>from Х.Х.Х.М3 to any via $oif
>> $cmd divert natd all
>>from 1Х.Х.Х.М5 to any via $oif
>> $cmd divert natd all
>>from any to me in via $oif
>>
>>Все пашет отлично. Но в логи все равно валит
>>Nov 15 20:30:40 kernel: divert_packet: no divert tag
>>Nov 15 20:31:22 kernel: divert_packet: no divert tag
>>Неужели ни у кого нет рутеров с интерфейсами организованных на виланах ????
>>
>>Что за беда такая ...
>
>
>не понял, как это $oif - внутренний? Он же внешний должен быть!
>
>Во всех доках написано что он должен смотреть наружу в интернет!
Да я имею ввиду Х.Х.Х.1 - внутренний. на нем прокся висит, для нее это правило ...
>Да я имею ввиду Х.Х.Х.1 - внутренний. на нем прокся висит, для
>нее это правило ...А у меня такого правила нету и у меня тоже прокси на внутреннем интерфейсе, даже прозрачный прокси, и всё работает. Так что попробуй убрать и это правило на всякий случай.
>
>>Да я имею ввиду Х.Х.Х.1 - внутренний. на нем прокся висит, для
>>нее это правило ...
>
>А у меня такого правила нету и у меня тоже прокси на
>внутреннем интерфейсе, даже прозрачный прокси, и всё работает. Так что попробуй
>убрать и это правило на всякий случай.Убрал, посмотрим поможет ли ... только бы помогло :))))
>>
>>>Да я имею ввиду Х.Х.Х.1 - внутренний. на нем прокся висит, для
>>>нее это правило ...
>>
>>А у меня такого правила нету и у меня тоже прокси на
>>внутреннем интерфейсе, даже прозрачный прокси, и всё работает. Так что попробуй
>>убрать и это правило на всякий случай.
>
>Убрал, посмотрим поможет ли ... только бы помогло :))))
Не помогло .... все равно валится
divert_packet: no divert tag
>Не помогло .... все равно валится
>divert_packet: no divert tagНу чтож пора опять взглянуть на твои правила ...
Покажи ещё раз что у тебя теперь в правилах
>
>>Не помогло .... все равно валится
>>divert_packet: no divert tag
>
>Ну чтож пора опять взглянуть на твои правила ...
>Покажи ещё раз что у тебя теперь в правилах
Еще раз :)))#!/bin/sh
#Quietly flush out rules
/sbin/ipfw -q -f flush#Set command prefix (add "-q" option after development to turn on quiet mode)
cmd="/sbin/ipfw add"
# set outside and inside network interfacesoif="vlanХ"
iif="vlanY"# set private IP of this server and the netmask of the whole LAN side
$cmd allow ip from any to any via lo0
$cmd deny ip from any to 127.0.0.0/8
$cmd deny log ip from 127.0.0.0/8 to any
$cmd deny log tcp from any to any in tcpflags fin,psh,urg recv $oif# NULL scan (no flag set at all)
$cmd deny log tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
# SYN flood (SYN,FIN)
$cmd deny log tcp from any to any in tcpflags syn,fin recv $oif# Stealth FIN scan (FIN,RST)
$cmd deny log tcp from any to any in tcpflags fin,rst recv $oif# forced packet routing
$cmd deny log ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
$cmd add pass all from me to any via $oif#HTTP
$cmd allow tcp from any to any 80 in via $oif
#SSH
$cmd allow tcp from any to any 22 in via $oif
#FTP
$cmd allow ip from any to any 20 in via $oif
$cmd allow ip from any to any 21 in via $oif
$cmd allow tcp from any 21 to any out via $oif
#OPENVPN
$cmd allow udp from any to any 1194 in via $oif
#POP3
$cmd allow tcp from any to any 110 in via $oif setup
#SMTP
$cmd allow tcp from any to any 25 in via $oif$cmd divert natd all from 192.168.1.96/28 to any via $oif
$cmd divert natd all from 192.168.1.33 to any via $oif
$cmd divert natd all from 192.168.1.56 to any via $oif
$cmd divert natd all from 192.168.1.41 to any via $oif
$cmd divert natd all from 192.168.1.13 to any via $oif
$cmd divert natd all from any to me in via $oif
$cmd check-state
$cmd allow all from any to any via $iif keep-state
$cmd allow all from any to any out via $oif keep-state
$cmd allow icmp from any to any icmptypes 3
$cmd allow icmp from any to any icmptypes 4
$cmd allow icmp from any to any icmptypes 11 in
$cmd allow icmp from any to any icmptypes 8
$cmd allow icmp from any to any icmptypes 0 in
$cmd allow log tcp from any to any 3389,58585,58586 in setup
$cmd allow tcp from any to any 3389,58585,58586 in
$cmd allow ip from any to $inside 58586 in via $oif
$cmd 65000 deny log all from any to any
>>
>>>Не помогло .... все равно валится
>>>divert_packet: no divert tag
>>
>>Ну чтож пора опять взглянуть на твои правила ...
>>Покажи ещё раз что у тебя теперь в правилах
>Еще раз :)))
>
>#!/bin/sh
>#Quietly flush out rules
>/sbin/ipfw -q -f flush
>
>#Set command prefix (add "-q" option after development to turn on quiet
>mode)
> cmd="/sbin/ipfw add"
># set outside and inside network interfaces
>
> oif="vlanХ"
> iif="vlanY"
>
># set private IP of this server and the netmask of the
>whole LAN side
>
> $cmd allow ip from any to any via lo0
>
> $cmd deny ip from any to 127.0.0.0/8
>
> $cmd deny log ip from 127.0.0.0/8 to any
>
> $cmd deny log tcp from any to any in tcpflags fin,psh,urg
>recv $oif
>
># NULL scan (no flag set at all)
> $cmd deny log
>tcp from any to any in tcpflags !fin,!syn,!rst,!psh,!ack,!urg recv $oif
># SYN flood (SYN,FIN)
> $cmd deny
>log tcp from any to any in tcpflags syn,fin recv $oif
>
>
># Stealth FIN scan (FIN,RST)
> $cmd deny log
>tcp from any to any in tcpflags fin,rst recv $oif
>
># forced packet routing
> $cmd deny log
>ip from any to any in ipoptions ssrr,lsrr,rr,ts recv $oif
> $cmd add pass all from me to any via $oif
>
>
>#HTTP
> $cmd allow tcp
>from any to any 80 in via $oif
>#SSH
> $cmd allow tcp
>from any to any 22 in via $oif
>#FTP
> $cmd allow ip
>from any to any 20 in via $oif
> $cmd allow ip
>from any to any 21 in via $oif
> $cmd allow tcp
>from any 21 to any out via $oif
>#OPENVPN
> $cmd allow udp from any to any 1194 in via
>$oif
>#POP3
> $cmd allow tcp from any to any 110 in via
>$oif setup
>#SMTP
> $cmd allow tcp from any to any 25 in via $oif
>
>
> $cmd divert natd all
>from 192.168.1.96/28 to any via $oif
> $cmd divert natd all from 192.168.1.33 to any via $oif
> $cmd divert natd all from 192.168.1.56 to any via $oif
> $cmd divert natd all from 192.168.1.41 to any via $oif
> $cmd divert natd all from 192.168.1.13 to any via $oif
> $cmd divert natd all from any to me in via $oif
>
> $cmd check-state
> $cmd allow all from
>any to any via $iif keep-state
> $cmd allow all from
>any to any out via $oif keep-state
>$cmd allow icmp from any to any icmptypes 3
>$cmd allow icmp from any to any icmptypes 4
>$cmd allow icmp from any to any icmptypes 11 in
>$cmd allow icmp from any to any icmptypes 8
>$cmd allow icmp from any to any icmptypes 0 in
>$cmd allow log tcp from any to any 3389,58585,58586 in setup
>$cmd allow tcp from any to any 3389,58585,58586 in
>$cmd allow ip from any to $inside 58586 in via $oif
>$cmd 65000 deny log all from any to any
Ну с виду всё вроде нормально,
Есть такая идея, можно закоментить все divert потом потихоньку их разоментировывать и вычислить на какой из них оно ругается. если оно ругается на любой то проблема в vlan, надо разбираться почему оно с ним не дружит... Если же оно так ругается на какой-то конкретный диверт то это уже другой разговор надо понять что особенного в нём...
>[оверквотинг удален]
>>>>Не помогло .... все равно валится
>>>>divert_packet: no divert tag
>>>
>Ну с виду всё вроде нормально,
>Есть такая идея, можно закоментить все divert потом потихоньку их разоментировывать и
>вычислить на какой из них оно ругается. если оно ругается на
>любой то проблема в vlan, надо разбираться почему оно с ним
>не дружит... Если же оно так ругается на какой-то конкретный диверт
>то это уже другой разговор надо понять что особенного в нём...
>Так для справки, я тоже не сильно шарю.
у меня тоже такая ругань идет, но никаких VLAN нет. Зато есть в процессах поднятый второй НАТ, и нет для него правила в ipfw. Может быть от этого ругается.