IPFW (правила не работают)

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

Аватара пользователя
K2el
Сообщения: 341
ОС: Linux & BSD

IPFW

Сообщение K2el »

Помогите...собрал новое ядро с опциями:

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

options         IPFIREWAL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=5
options         IPFIREWALL_FORWARD
options         IPDIVERT
options         DUMMYNET
options         IPFIREWALL_DEFAULT_TO_ACCEPT

в rc.conf написал

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

firewall_type="/etc/rc.firewall"

затем в /etc/rc.firewall написал:

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

FwCMD="/sbin/ipfw"
LanOut="sis0"
IpOut="192.168.1.15"
NetMask="255.255.255.0"
${FwCMD} -f flush
${FwCMD} add check-state
${FwCMD} add allow ip from any to any via lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any


${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
${FwCMD} add deny icmp from any to any frag
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}

${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOut}

${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut}

${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut}

${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${LanOut}


${FwCMD} add allow tcp from any to any established
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}

${FwCMD} add allow udp from any 53 to any via ${LanOut}
${FwCMD} add allow udp from any to any 53 via ${LanOut}
${FwCMD} add allow udp from any to any 123 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}
${FwCMD} add allow icmp from any to any icmptypes 0,8,11
${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut}
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}

${FwCMD} add deny ip from any to any


Затем перезагружаюсь и пишу ipfw list - он выдает 65535 allow ip from any to any
В чем дело?
@ - @чью жизнь!
Спасибо сказали:
Аватара пользователя
avk
Сообщения: 62
ОС: ArchLinux, Debian, FreeBSD

Re: IPFW

Сообщение avk »

Может в rc.conf добавиь еще и firewall_enable="YES"
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: IPFW

Сообщение Maestro »

K2el писал(а):
04.01.2007 14:26
options DUMMYNET
options IPFIREWALL_DEFAULT_TO_ACCEPT
Затем перезагружаюсь и пишу ipfw list - он выдает 65535 allow ip from any to any
В чем дело?


Бугага, с новым годом! Почитай уже маны плиз, по IPFW. А так скажу седующее, options DUMMYNET в шестой ветке уже не за надобностью.
Но вот с этим ты отжег конечно options IPFIREWALL_DEFAULT_TO_ACCEPT
Эта опция, включенная в ядро, подгружает файрволл по умолчанию с правилом allow all from any to any.
Теперь сам ответь на свой вопрос. :D
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: IPFW

Сообщение Maestro »

Ну и так, почитай вот это и этому подобное (в поисковике пишешь IPFW):
http://ipfw.ism.kiev.ua/ipfw.html
и обязательно вот этот ман + англо-русский словарь (там незнакомых те слов будет наверное 3-4)
http://www.freebsd.org/doc/en_US.ISO8859-1...walls-ipfw.html

Ну и конечно поисковик. В инете есть почти все по ipfw. Главное не лениться читать и экспериментировать.
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: IPFW

Сообщение Maestro »

rc.conf написал
firewall_type="/etc/rc.firewall"


Здесь тоже несколько неверно, или верней совсем неверно.
firewall_type выбирает тип правил файрвола, которые настроены (прописаны) по умолчаню в файло /etc/rc.firewall - следовательно, если мы посмотрим это файло мы увидим несколько наборов правил (типов файрвола): open, close, client, simple, unknown - соответственно в rc.conf мы пишем пошагово:
firewall_enable="YES" #активируем файрвол при старте системы (по умолчанию, если не указан другой файл, загружается файл со стандартным набором правил /etc/rc.firewall)
firewall_type="OPEN" #подгружаем из /etc/rc.firewall тип правил, в данном случае OPEN, но можно и эти CLOSE,CLIENT,SIMPLE,UNKNOWN (внимательно вникаем в файло /etc/rc.firewall, копируем его в домашнюю папку (в резерв, чтобы не напортачить по началу), и лишь потом приступаем к правке самого /etc/rc.firewall если это необходимо)
firewall_script="/etc/ipfw.rules" # Подгружаем собственное файло с правилами для IPFW (при этом опция firewall_type нам будет не нужна, если ваше собственное файло не будет содержать несколько наборов правил (типов правил) для IPFW.

На этом пока все
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
K2el
Сообщения: 341
ОС: Linux & BSD

Re: IPFW

Сообщение K2el »

Настройки делал вот по этой статье http://www.lissyara.su/?id=1127 (обрати внимание на коментарии к ней).Попробую почитать те статьи которые написали...
@ - @чью жизнь!
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: IPFW

Сообщение Maestro »

K2el писал(а):
04.01.2007 16:48
Настройки делал вот по этой статье http://www.lissyara.su/?id=1127 (обрати внимание на коментарии к ней).Попробую почитать те статьи которые написали...

Читать надо бы повнимательней!

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

options         IPFIREWALL               # собственно файрволл
options         IPFIREWALL_VERBOSE       # логгинг пакетов, если в правиле
                                         # написано `log`
options         IPFIREWALL_VERBOSE_LIMIT=5 # ограничение логов (повторяющихся) - на
                                           # случай атак типа флудинга
                                           # (я, правда, 100 ставлю)
options         IPFIREWALL_FORWARD       # перенаправление (форвардинг) пакетов
                                         # например, для прозрачного прокси
options         IPDIVERT                 # если нужен NAT (трансляция адресов)
options         DUMMYNET                 # если понадобится ограничивать скорость
                                         # инета пользователям (обычно - да :))
[b]options         IPFIREWALL_DEFAULT_TO_ACCEPT  # дефолтовое правило (последнее)[/b]
                                           [b]# будет разрешающим (во всех других)[/b]
                                          [b] # случаях - запрещающее[/b]


K2el писал(а):
04.01.2007 16:48
Настройки делал вот по этой статье http://www.lissyara.su/?id=1127 (обрати внимание на коментарии к ней).Попробую почитать те статьи которые написали...


Вот еще!

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

У меня ядро как есть, за пускаю фаервол через rc.conf как написано,
firewall_enable="YES" - если файрволл грузится модулем
firewall_script="/etc/rc.firewall" - файл с правилами
firewall_logging="YES"


Читай внимательней! Не спеши!
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
K2el
Сообщения: 341
ОС: Linux & BSD

Re: IPFW

Сообщение K2el »

Читал внимательней...заглянул в /etc/rc.firewall - там написано (и в хендбуке тоже:)) :
firewall_type="open"

Available values for this setting are:

open -- pass all traffic.

client -- will protect only this machine.

simple -- protect the whole network.

closed -- entirely disables IP traffic except for the loopback interface.

UNKNOWN -- disables the loading of firewall rules.

filename -- absolute path of file containing firewall rules.

так что по поводу этого:
rc.conf написал
firewall_type="/etc/rc.firewall"


Здесь тоже несколько неверно, или верней совсем неверно.

Все было верно:)
А по поводу того, чтоб написать в rc.conf строчки:

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

firewall_enable="YES"

Этого я тоже думаю делать не стоит, так как это нужно когда файрвол модулем грузишь(а я загружаю в ядре)
И на счет этого:
Бугага, с новым годом! Почитай уже маны плиз, по IPFW. А так скажу седующее, options DUMMYNET в шестой ветке уже не за надобностью.
Но вот с этим ты отжег конечно options IPFIREWALL_DEFAULT_TO_ACCEPT
Эта опция, включенная в ядро, подгружает файрволл по умолчанию с правилом allow all from any to any.
Теперь сам ответь на свой вопрос.


Вот ответ в хендбуке:
options IPFIREWALL_DEFAULT_TO_ACCEPT

This option will allow everything to pass through the firewall by default, which is a good idea when you are first setting up your firewall

Так что вроде бы я опять правильно все сделал
Но проблема пока остается...правила не применяются:( Буду разбираться
@ - @чью жизнь!
Спасибо сказали:
Grass_snake
Сообщения: 21

Re: IPFW

Сообщение Grass_snake »

K2el писал(а):
05.01.2007 11:19
Читал внимательней...заглянул в /etc/rc.firewall - там написано (и в хендбуке тоже:)) :
firewall_type="open"

Available values for this setting are:

open -- pass all traffic.

client -- will protect only this machine.

simple -- protect the whole network.

closed -- entirely disables IP traffic except for the loopback interface.

UNKNOWN -- disables the loading of firewall rules.

filename -- absolute path of file containing firewall rules.

так что по поводу этого:
rc.conf написал
firewall_type="/etc/rc.firewall"


Здесь тоже несколько неверно, или верней совсем неверно.

Все было верно:)
А по поводу того, чтоб написать в rc.conf строчки:

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

firewall_enable="YES"

Этого я тоже думаю делать не стоит, так как это нужно когда файрвол модулем грузишь(а я загружаю в ядре)


Загружать то ты firewall загружаешь. А вот правила свои для него как указать системе? Поэтому и получается что при твоём подходе в списке правил есть только одно, разрешающее всё по-умолчанию.

Для проверки загрузки твоих правил вообще сделай вот что:

# sh /etc/rc.firewall

И посмотри что получится.

У меня, кстати, в rc.conf вписаны 2 строчки:
firewall_enable="YES"
firewall_type="open"
А сам файл rc.firewall переписан уже по своему вкусу.
Спасибо сказали:
Аватара пользователя
K2el
Сообщения: 341
ОС: Linux & BSD

Re: IPFW

Сообщение K2el »

Все это понятно ... но в чем проблема? Почему он не понимает файл конфигурации? Сейчас буду пробовать загрузить модулем...но все же хотелось с этой проблемой разобраться....Впринципе все же правильно делаю.....
@ - @чью жизнь!
Спасибо сказали:
Аватара пользователя
Maestro
Сообщения: 227
Статус: ипэшник
ОС: FreeBSD-6.2 STABLE

Re: IPFW

Сообщение Maestro »

K2el писал(а):
05.01.2007 12:25
Все это понятно ... но в чем проблема? Почему он не понимает файл конфигурации? Сейчас буду пробовать загрузить модулем...но все же хотелось с этой проблемой разобраться....Впринципе все же правильно делаю.....

Короче - товарисч.
Чтобы ipfw работал с твоими правилами, убери нафик из ядра options IPFIREWALL_DEFAULT_TO_ACCEPT
ЗЫ По моему мы с тобой на разных языках разговариваем.

В ядре
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPDIVERT

все, для тебя пока хватит. Больше лишнего в ядре не пиши.
Далее пересобираешь ядро, перегружаешь машину

в rc.conf
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="xl0 (или как там у тя внешний интерфейс"
natd_flags="-f /etc/natd.conf"

Далее в командной строке
/etc/netstart
Далее там же
ipfw list

и Боже!!! Ты видишь

allow ip from any to any via lo0
deny ip from 127.0.0.0/8 to any
deny ip from any to 127.0.0.0/8
divert 8668 ip from any to any in via xl0
allow ip from any to any

ВСЁ!!!!!!!!
дайте денег на обновление портов :)
Спасибо сказали:
Аватара пользователя
K2el
Сообщения: 341
ОС: Linux & BSD

Re: IPFW

Сообщение K2el »

Из ядра убрал все опции, связанные с firewall и добавил в rc.conf

firewall_enable="YES"
firewall_type="open"

Nat мне ваще не нужен...Посему в ядре ничего нет:
You do not need to compile IPFW into the FreeBSD kernel unless you want NAT function enabled


Все правила заработали:). Теперь хочу получить совет на счет этих правил:

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

#!/bin/sh

# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил

FwCMD="/sbin/ipfw"      # собственно где лежит бинарник ipfw
LanOut="sis0"           # внешний интерфейс
IpOut="192.168.1.15"    # внешний IP адрес машины
NetMask="255.255.255.0" # маска сети (если она разная для внешней
                        # и внутренней сети - придётся вводить ещё
                        # одну переменную, но самое забавное, что
                        # можно и забить - оставить 24 - всё будет
                        # работать, по крайней мере я пробовал -
                        # работаало на 4-х машинах, в разных сетях,
                        # с разными масками - настоящими разными! но -
                        # это неправильно.)
            # Сбрасываем все правила:
${FwCMD} -f flush
            # Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add check-state
            # Разрешаем весь траффик по внутреннему интерфейсу (петле)
            # Вообще я во многих местах читал что без него может ничё не заработать вообще
            # и прочие страшилки. Работает - почта, апач, .... А вот squid - не работает :)
            # так что без него и правда - никуда.
${FwCMD} add allow ip from any to any via lo0
            # рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 (вот честно - ни
            # одного пакета по этим правилам не зарубилось за всё время... Может в этом
            # моё счастье? :))
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any
            # Вводим запреты:
            # режем частные сети на внешнем интерфейсе - по легенде он у нас
            # смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
            # рубим частные сeти
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
            #${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
            # рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
            # рубаем мультикастовые рассылки
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
            # рубим фрагментированные icmp
${FwCMD} add deny icmp from any to any frag
            # рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut}


            # а тут собственно файрволл и начался:
            # рубим траффик к частным сетям через внешний интерфейс
            # заметтьте - эти правила отличаются от тех что были выше!
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
            #${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOut}
            # рубим автоконфигуреную частную сеть
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut}
            # рубаем мультикастовые рассылки
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut}
            # рубаем мультикастовые рассылки
${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${LanOut}
            # разрешаем все установленные соединения (если они установились -
            # значит по каким-то правилам они проходили.)
${FwCMD} add allow tcp from any to any established
            # разрешаем весь исходящий траффик
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}
            # разрешаем DNS снаружи
${FwCMD} add allow udp from any 53 to any via ${LanOut}
            # разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}
            # разрешаем ftp снаружи (оба правила - для пасивного режима)
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut}

${FwCMD} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}
                                           # открываем снаружи 80 порт
${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}
            # открываем снаружи 25 порт (SMTP) если на машине крутится почта
            #${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut}
            # открываем снаружи 22 порт - если надо будет ходить на машину по ssh
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut}
            # открываем снаружи 110 порт(если надо смотреть почту снаружи по POP)
            #${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut}
${FwCMD} add deny ip from any to any

Все ли сдесь нормально, может еще чего-нибудь приписать? (нужен только ftp,www,ssh +через некоторое время почта)
@ - @чью жизнь!
Спасибо сказали:
GeoF
Сообщения: 181
Статус: BSD guy
ОС: FreeBSD 6 Stable

Re: IPFW

Сообщение GeoF »

1) Правило
${FwCMD} add check-state
у Вас лишнее, т.к. не используете state-full firewall.

2) ${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}

Что было однообразнее и потом сами не запутались пишите уж везде "via".

3) Следующие правила не перечисленны в необходимых Вам сервисах. Они действительно нужны?
# разрешаем DNS снаружи
${FwCMD} add allow udp from any 53 to any via ${LanOut}
# разрешаем UDP (для синхронизации времени - 123 порт)
${FwCMD} add allow udp from any to any 123 via ${LanOut}


4) Ну и, как результат, неплохо бы разрешить исходящие ДНС запросы.

${FwCMD} add pass udp from me to any 53 out via ${LanOut}
${FwCMD} add pass udp from any 53 to me in via ${LanOut}

По крайней мере второе правило нужно, поскольку первое попадет под разрешение всех исходящих соединений.
Спасибо сказали:
Аватара пользователя
K2el
Сообщения: 341
ОС: Linux & BSD

Re: IPFW

Сообщение K2el »

1) Правило
${FwCMD} add check-state
у Вас лишнее, т.к. не используете state-full firewall.

Хорошо уберу, а на счет ДНС подумал....впринципе это мне ваще не кчему, так что тоже уберу:)
@ - @чью жизнь!
Спасибо сказали:
Аватара пользователя
K2el
Сообщения: 341
ОС: Linux & BSD

Re: IPFW

Сообщение K2el »

Сделал еще следующее:
В /etc/sysctl.con написал следующие строчки:
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=100
Вот теперь вроде бы все, осталось еще PortSentry поставить для пущей безопасности:)
@ - @чью жизнь!
Спасибо сказали: