Шлюз ipfw + nat на freebsd

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
siad
проходил мимо
Сообщения: 4
Зарегистрирован: 2020-05-14 9:03:27

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение siad » 2020-05-14 9:47:57

Господа, кто сталкивался ,посоветуйте
нужно ли обязательно пересобирать ядро при настройке шлюза под nat и ipfw либо можно подгрузить модули при старте системы и как это отражается работе шлюза
Заранее благодарен за ответ

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение WideAreaNetwork » 2020-05-14 10:29:44

у нас модулями и все ок

siad
проходил мимо
Сообщения: 4
Зарегистрирован: 2020-05-14 9:03:27

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение siad » 2020-05-14 11:28:08

Уважаемый WideAreaNetwork, если не слом можно чуть подробнее про модули, в инете много и по-разному
некоторые предлагают дописывать /boot/loder.conf
ipfw_load="YES"
#ipfw_nat_load="YES"
ipdivert_load="YES"
dummynet_load="YES"

Некоторые утверждают что просто отредактировал rc.conf и включили ipfw и natd и все работает

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение WideAreaNetwork » 2020-05-14 11:47:07

siad писал(а):
2020-05-14 11:28:08
Некоторые утверждают что просто отредактировал rc.conf и включили ipfw и natd и все работает
ну разве что в какой-то версии оно автоматом подгружается, иначе надо в loder.conf дабы ядро не пересобирать
для ната используем PF

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение WideAreaNetwork » 2020-05-14 11:48:44

у нас так

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

cat /boot/loader.conf
pf_load="YES"
ipfw_load="YES"
ipdivert_load="YES"
dummynet_load="YES"
if_lagg_load="YES"

autoboot_delay=3        # (default 10) seconds

siad
проходил мимо
Сообщения: 4
Зарегистрирован: 2020-05-14 9:03:27

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение siad » 2020-05-14 12:41:17

Спасибо за ответ,все конкретно и доходчиво
Кстати о "новых" версиях
https://alexnettm.com/freebsd/freebsd-n ... l-nat.html
Человек утверждает что этого достаточно, я не уверен,карантин кончится попробую на работе на vm

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение WideAreaNetwork » 2020-05-14 18:52:54

siad писал(а):
2020-05-14 12:41:17
Кстати о "новых" версиях
https://alexnettm.com/freebsd/freebsd-n ... l-nat.html
Человек утверждает что этого достаточно, я не уверен,карантин кончится попробую на работе на vm
статья 14 года, какая там может быть речь о новых версиях, и насколько я понял он включает фаер через /etc/sysctl.conf

Demis
прапорщик
Сообщения: 496
Зарегистрирован: 2015-05-25 14:36:32

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение Demis » 2020-05-14 20:09:07

WideAreaNetwork писал(а):
2020-05-14 18:52:54
насколько я понял он включает фаер через /etc/sysctl.conf
Нет - не верно.
По указанной ссылке написано:

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

"Ядро не пересобирал, на стандартном GENERIC
В /etc/rc.conf добавляем строчки:"
Т.о. все запускается именно из /etc/rc.conf .

ТС не указал версию своей системы.
Начиная с 11.1 многие вещи необходимые для работы ipfw уже вкомпилированы в систему по умолчанию.
Читаем:
https://www.freebsd.org/releases/11.1R/ ... el-modules
и
freebsd-f8/strannaya-problema-s-zfs-i-s ... ml#p385971

Поэтому достаточно внесение изменений в /etc/rc.conf и все запустится при перезагрузке.
Можно и так : kldload ipfw.ko
Посмотреть уже загруженные: kldstat
ВАЖНО! Если делаете kldload ipfw.ko, а сами не у консоли и в правилах есть ошибки, то можете себя заблокировать. И придется ножками идти к серверу.
Хотя есть метод, прописать в крон выключение ipfw через каждые, скажем, 10 минут.

Как именно и что именно вносить можно посмотреть так:

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

cat /etc/defaults/rc.conf | grep firewall
Параметры в /etc/rc.conf имеют приоритет над /etc/defaults/rc.conf.

Типы firewall_type="UNKNOWN" можно посмотреть в оригинальном ee /etc/rc.firewall.
Когда делаете себе и свое, то лучше имя скрипта задать свое собственное.

Что-то вроде :

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

ee /etc/rc.conf
firewall_enable="YES"
firewall_type="closed"
firewall_script="/etc/firewall.conf"
Где ee /etc/firewall.conf

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

#!/bin/sh

fw="/sbin/ipfw -q -N"

intif="em0"
intip="192.168.1.1"
intnet="192.168.1.0/24"
extif="em1"
extip="10.10.10.1"

# reset all rules
${fw} -f flush
${fw} -f pipe flush
${fw} -f queue flush

##################################################################  ######
# CREATE RULES
##################################################################  ######
${fw} add allow all from any to any via lo0

${fw} add divert natd all from ${intnet} to any out via ${extif}
${fw} add divert natd all from any to ${extip} in via ${extif}

#EOF
И т.д. правила по смыслу, хоть как в ссылке.

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение WideAreaNetwork » 2020-05-14 20:40:58

Demis писал(а):
2020-05-14 20:09:07
Начиная с 11.1 многие вещи необходимые для работы ipfw уже вкомпилированы в систему по умолчанию.
оно идет как open all?

Demis
прапорщик
Сообщения: 496
Зарегистрирован: 2015-05-25 14:36:32

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение Demis » 2020-05-14 21:15:53

Нет.
Теперь "оно" просто есть в ключевых моментах кода ядра.

Раньше, чтобы включить ipfw, была необходимость сборки ядра с опцией:

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

#options         IPFIREWALL
Теперь такой необходимости нет.

Достаточно указать firewall_enable="YES"
И перезагрузиться для активации.
Если перезагружаться лень или нет необходимости, то подгрузить kldload ipfw.ko
И все заработает как нужно.

А вот "open all"
Это уже набор используемых правил для конкретного поведения ipfw.

"open all" получится если сделать так:

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

ee /etc/rc.conf
firewall_enable="YES"
firewall_type="open"
Смотрим ee /etc/rc.firewall на предмет раздела "open":

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

case ${firewall_type} in
[Oo][Pp][Ee][Nn])
        ${fwcmd} add 65000 pass all from any to any
        ;;
Т.е. последнее правило разрешить все и всем.
Без firewall_enable="YES" файервол не активируется.

siad
проходил мимо
Сообщения: 4
Зарегистрирован: 2020-05-14 9:03:27

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение siad » 2020-05-14 21:52:26

Если нужен open all
посмотрите статью

https://marvins.ru/administrirovanie/sh ... eebsd.html

guest
проходил мимо

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение guest » 2020-05-14 23:06:56

Надо не статью смотреть, а включить голову:
- посмотреть скрипты
- почитать документацию

Уже давно не нужно пересобирать ядро, достаточно загружать модули.

NAT:
- есть user space реализация, используется демон natd - жутко старый конструктив
- есть ядерная реализация и этим все сказано

загрузить ipfw можно через /boot/loader.conf, но в системе это делают
через rc-скрипты расположенные в /etc/rc.d, а опции задаются в /etc/rc.conf

Есть только две ядерных переменных, которые нужно загружать через
loader.conf до загрузки самого модуля ipfw, man ipfw:

net.inet.ip.fw.default_to_accept
net.inet.ip.fw.tables_max

Чтобы понять первоначальное состояние firewall'а, необходимо
все проделать руками (предварительно закоментарьте все loader.conf/rc.conf)

Загружаем чистую систему:

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

# kldstat
Id Refs Address                Size Name
 1   12 0xffffffff80200000  2448f20 kernel
 2    1 0xffffffff82822000     2668 intpm.ko
 3    1 0xffffffff82825000      b50 smbus.ko
 4    1 0xffffffff82826000     18a0 uhid.ko
 5    1 0xffffffff82828000     1aa0 wmt.ko
# ipfw list
ipfw: retrieving config failed: Protocol not available
# kldload ipfw
# ipfw list
65535 deny ip from any to any
# sysctl net.inet.ip.fw.default_to_accept
net.inet.ip.fw.default_to_accept: 0
#
выше видно что ни в ядре, ни модулем не загружен firewall
по kldstat и ответ на `ipfw list`, далее грузим kldload ipfw
и на консоли получим:

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

ipfw2 (+ipv6) initialized, divert loadable, nat loadable, default to deny, logging disabled
что говорит о том что модуль ipfw загружен, divert и nat можгут быть подгрудены,
logging = disabled и политика by default = deny!
теперь в /boot/loader.conf пропишите

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

net.inet.ip.fw.default_to_accept=1
перезагрузитесь и выполните:
# kldload ipfw
# ipfw list
получите
65535 allow ip from any to any

Вот Вам и вся логика загрузки.

важное: очень не рекомендую использовать одновременно два firewall'а,
убьетесь отслеживать что куда и когда попадает (порядок следования пакетов)

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение WideAreaNetwork » 2020-05-15 7:46:07

WideAreaNetwork писал(а):
2020-05-14 11:48:44
у нас так
КОД: ВЫДЕЛИТЬ ВСЁ

cat /boot/loader.conf
pf_load="YES"
ipfw_load="YES"
ipdivert_load="YES"
dummynet_load="YES"
if_lagg_load="YES"

autoboot_delay=3 # (default 10) seconds
guest писал(а):
2020-05-14 23:06:56
на консоли получим:
КОД: ВЫДЕЛИТЬ ВСЁ

ipfw2 (+ipv6) initialized, divert loadable, nat loadable, default to deny, logging disabled
получается ipfw_load="YES" можно исключить

Demis
прапорщик
Сообщения: 496
Зарегистрирован: 2015-05-25 14:36:32

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение Demis » 2020-05-15 8:57:54

WideAreaNetwork писал(а):
2020-05-15 7:46:07
получается ipfw_load="YES" можно исключить
Не только.

Смотрим:

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

cat /etc/defaults/rc.conf | grep dummy
dummynet_enable="NO"            # Load the dummynet(4) module
и

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

cat /etc/defaults/rc.conf | grep pf_
pf_enable="NO"                  # Set to YES to enable packet filter (pf)
pf_rules="/etc/pf.conf"         # rules definition file for pf
pf_program="/sbin/pfctl"        # where the pfctl program lives
pf_flags=""                     # additional flags for pfctl
Также важно понимать и обязательно помнить про:
guest писал(а):
2020-05-14 23:06:56
- есть user space реализация, используется демон natd - жутко старый конструктив
- есть ядерная реализация и этим все сказано
И
guest писал(а):
2020-05-14 23:06:56
важное: очень не рекомендую использовать одновременно два firewall'а,
убьетесь отслеживать что куда и когда попадает (порядок следования пакетов)
Это не значит, что не возможно.

Это значит, что Вы должны очень четко себе представлять, "что", "как" и "зачем" Вы делаете. А также иметь представление как разруливать ту или иную проблематику по изменению правил "когда что-то за неработало или нужно сделать дополнительно".

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

man pf

DESCRIPTION
     Packet filtering takes place in the kernel.  A pseudo-device, /dev/pf,
     allows userland processes to control the behavior of the packet filter
     through an ioctl(2) interface.  There are commands to enable and disable
     the filter, load rulesets, add and remove individual rules or state table
     entries, and retrieve statistics.  The most commonly used functions are
     covered by pfctl(8).
Обратите внимание на "allows userland processes".

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

man ipfw

DESCRIPTION
     The ipfw utility is the user interface for controlling the ipfw(4)
     firewall, the dummynet(4) traffic shaper/packet scheduler, and the in-
     kernel NAT services.
Обратите внимание на "in-kernel NAT services".

Грубо говоря: ipfw правила отработают раньше (или "до") чем pf в силу архитектуры.

WideAreaNetwork
сержант
Сообщения: 239
Зарегистрирован: 2017-01-10 14:37:13

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение WideAreaNetwork » 2020-05-15 9:05:22

Demis писал(а):
2020-05-15 8:57:54
Грубо говоря: ipfw правила отработают раньше (или "до") чем pf в силу архитектуры.
PF только для ната и проброса портов, по мануалу биллинга который ставился, а вот сам биллинг уже блочит или разрешает выйти в мир юзеру через IPFW

guest
проходил мимо

Шлюз ipfw + nat на freebsd

Непрочитанное сообщение guest » 2020-05-15 9:46:54

получается ipfw_load="YES" можно исключить
там практически все можно исключить, и вставить в /etc/rc.conf.
Но тут уж решать Вам, как удобней для понимания и работы, так и делайте.