Подробное руководство по ipfw nat

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
DeVir
проходил мимо

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение DeVir » 2010-02-28 10:21:53

Люди может кто не будь может написать пример для открытия порта скажем 80 для 1го примера ?

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

Заранее спасибо.

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-02-28 12:06:16

напишите это правило как вы пишите, а потом пришлите вывод

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

ipfw show
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение xelplogoog » 2010-02-28 12:58:55

2terminus
подскажи нубу, пжлста
опция ipfirewall_verbose_limit=x
записала в лог Х строк для сработавшего правила.
она вообще больше никогда не запишет по нему ничего в лог? или запишет, скажем, с другой датой, или с другим ипом? че та не пойму...
спс заранее
/usr/ports/x11/yakuake-kde4 user

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-02-28 13:15:37

http://www.freebsd.org/cgi/man.cgi?quer ... ormat=html

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

     log [logamount number]
	     When a packet matches a rule with the log keyword, a message will
	     be logged to syslogd(8) with a LOG_SECURITY facility.  The log-
	     ging only occurs if the sysctl variable net.inet.ip.fw.verbose is
	     set to 1 (which is the default when the kernel is compiled with
	     IPFIREWALL_VERBOSE) and the number of packets logged so far for
	     that particular rule does not exceed the logamount parameter.  If
	     no logamount is specified, the limit is taken from the sysctl
	     variable net.inet.ip.fw.verbose_limit.  In both cases, a value of
	     0 removes the logging limit.

	     Once the limit is reached, logging can be re-enabled by clearing
	     the logging counter or the packet counter for that entry, see the
	     resetlog command.

	     Note: logging is done after all other packet matching conditions
	     have been successfully verified, and before performing the final
	     action (accept, deny, etc.) on the packet.
глобально пока не будет очишено через resetlog.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

sprite
рядовой
Сообщения: 27
Зарегистрирован: 2010-02-10 10:12:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение sprite » 2010-03-01 16:15:22

Добрый день.
Статья замечательная, но вот вопрос относительно тюнинга слабо охвачен.

Например у меня
ipfw nat show показывает

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

nat 1: icmp=537, udp=12714, tcp=36528, pptp=0, proto=7, frag_id=26 frag_ptr=0 / tot=49812
что это за значения такие? Они у меня постояно растут, правда иногда немного уменьшаются, но со временем все равно происходит стабильный рост. Как я понимаю это кол-во пакетов в очереди (или я не прав), как их уменьшить, что можно подстроить в ядре?

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение xelplogoog » 2010-03-01 17:49:33

а у меня ipfw nat show
показывает ipfw: getsockopt(IP_FW_GET_LOG): Invalid argument

хотя нат поднят
/usr/ports/x11/yakuake-kde4 user

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-03-01 18:29:12

ipfw nat show показывает
это статистика по количеству активных сессий разного типа в таблице.
как их уменьшить, что можно подстроить в ядре?
если это мешает то:

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

ipfw nat delete 1
ipfw nat 1 config ...
---
а у меня ipfw nat show
показывает ipfw: getsockopt(IP_FW_GET_LOG): Invalid argument

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

ipfw nat 1 show
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение xelplogoog » 2010-03-01 19:07:50

все равно та же ошибка, nat show config тоже :x
/usr/ports/x11/yakuake-kde4 user

sprite
рядовой
Сообщения: 27
Зарегистрирован: 2010-02-10 10:12:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение sprite » 2010-03-01 19:17:57

terminus писал(а): если это мешает то:

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

ipfw nat delete 1
ipfw nat 1 config ...
Ну насчет мешает я сам не знаю, может и нет :) Вопрос к тому, ведь до бесконечности они увеличиватся не могут. А какие цифирки будут оптимальны для моего сервера, как я могу узнать, когда эти цифирки увеличатся до критических величин и мой сервер откажется натить новые соединения. А про ipfw nat delete я в курсе :) только это совершено неконструктивно и выход на крайний случай :(.
а у меня ipfw nat show
показывает ipfw: getsockopt(IP_FW_GET_LOG): Invalid argument
Значит ядро без поддержки ната. У меня тоже самое было пока не пересобрал ядро.

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

ipfw nat 1 show
можно и без цифирки, тогда все покажет.

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение xelplogoog » 2010-03-01 19:38:31

нат в ядре это IPDIVERT ведь? он есть у меня
/usr/ports/x11/yakuake-kde4 user

sprite
рядовой
Сообщения: 27
Зарегистрирован: 2010-02-10 10:12:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение sprite » 2010-03-01 20:32:46

нет этого не достаточно, нужно еще

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

options         IPFIREWALL_NAT          #ipfw kernel nat support

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение xelplogoog » 2010-03-01 21:17:45

понятно, у меня не ядерный нат работает , а natd
/usr/ports/x11/yakuake-kde4 user

kulakov_mv
проходил мимо
Сообщения: 3
Зарегистрирован: 2010-03-02 17:00:30

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение kulakov_mv » 2010-03-02 19:28:27

В статье в одном из примеров (точнее во втором) встретил такое правило:

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

add 10130 skipto 10190 ip from 192.168.1.36 to any out xmit em0 
На сколько оно верное? У меня не получается фильтровать на основе критерия "out xmit"
Например вот такое правило:

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

add allow ip from any to any out xmit le1
следуя той же логие должна пропускать все пакеты исходящие из интерфейса le1.
На практике же такого не происходит:

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

ipfw -a list
00100   0   0   allow ip from any to any out xmit le1
(после попытки пинга машины из одного сегмента машины)
Клиенты настроены верно, так как если даю правило:

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

add allow ip from any to any
пинг проходит.
Дальше интересней, ставлю:

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

add allow ip from any to any in recv le0
пингую...

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

ipfw -a list
00100   1   60   allow ip from any to any in recv le0
65535   1   60   deny ip from any to any 
вроде есть совпадение, НО - из Free пакет не выходит (видно в анализаторе трафика что на внешнем интерфейсе тишина, даже arp нету). Да и увеличенный на единицу счетчик дефолтного правила говорит что пакет был им прибит.

Если первое я могу попробовать объяснить тем что когда пакет попадает на ipfw в самом начале, до процедуры маршрутизации, система не знает куда его будут передавать и по этому критерий "out xmit" не может быть проверен - пакет проходит мимо правила и попадает на дефолтное блокирующее, то в последнем случае мне не понятно, критерий "in recv", все известно и видно совпадение. Не ужели системе этого не достаточно? Получается ipfw проверяет пакет и до маршрутизации и после, и для прохождения пакета необходимо разрешающее правило на обоих этапах?

Тогда вопрос по статье... как работали правила указанные в ней? А именно правила с критериями по "out xmit" (при чем там видно, что это не правила описанные для исходящего трафика от самой free).

Система FreeBSD 8.0 Release, ядро собрано с поддержкой ipfw. естественно маршрутизация включена.

UPD: Вопрос снят )
В статье в начале блока правил стоит строчка:

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

add 1040 allow ip from any to any via fxp0
Фактически разрешающая прохождение пакетов из сети подключенной к fxp0 на процедуру маршрутизации, а дальше после маршрутизации, когда исходящий интерфейс уже известен - срабатывает правило с "out xmit".[/color]

Аватара пользователя
xelplogoog
мл. сержант
Сообщения: 134
Зарегистрирован: 2010-01-02 12:14:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение xelplogoog » 2010-03-02 22:37:06

выдержка из bsda

В старых реализациях IPFW, если вы использовали сочетание ключевых слов in via xl0 в выводе команды ipfw list они заменялись на recv xl0, а out via xl0 на xmit xl0, сейчас это не так:
# ipfw add 100 allow all from any to any out via rl0
00100 allow ip from any to any out via rl0
# ipfw list
00100 allow ip from any to any out via rl0
65535 deny ip from any to any


Однако вы можете использовать ключевые слова recv и xmit в правилах. Причём даже одновременно. Например, следующее правило ищет исходящие пакеты, которые пришли через интерфейс ed0, а уйти собираются через интерфейс ed1:
ipfw add allow ip from any to any out recv ed0 xmit ed1
/usr/ports/x11/yakuake-kde4 user

kulakov_mv
проходил мимо
Сообщения: 3
Зарегистрирован: 2010-03-02 17:00:30

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение kulakov_mv » 2010-03-03 10:24:18

xelplogoog писал(а):выдержка из bsda
Однако вы можете использовать ключевые слова recv и xmit в правилах. Причём даже одновременно. Например, следующее правило ищет исходящие пакеты, которые пришли через интерфейс ed0, а уйти собираются через интерфейс ed1:
ipfw add allow ip from any to any out recv ed0 xmit ed1
Если вы поставите только это правило то ни кто ни куда не пойдет... можете попробовать, во всяком случае на Free 8.0 именно так.
Это правило применимо если пакет уже прошел маршрутизацию, т.е. будет до него разрешающее правило которое впустит его на маршрутизацию. Например:

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

ipfw add allow ip from any to any recv ed0
или
ipfw add allow ip from any to any via ed0
А без этого по вашему правилу и правилу описанному в man трафик непройдет через ipfw.
Можете попробовать...

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение newbye » 2010-03-21 16:16:50

Доброго времени суток, камрады

Возникла следующая ситуация:

имеется FreeBSD 7.1 на мелкомягком Hyper-V (за неимением дополнительного железа) в тестовых целях. Сетевые интерфейсы там, как известно deX DEC/Intel DC21x4x. Про глюк с DHCP известно, лечится с помощью

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

ifconfig_de0=”DHCP media 100baseTX mediaopt full-duplex”
в /etc/rc.conf, суть не в нём. Ядро откомпилилось, ipfw + natd запускаются, файрвол открытого типа, никаких ограничений, rc.conf следующего содержания

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

gateway_enable="YES"
infconfig_de0="inet 192.168.1.210 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
infconfig_de1="inet 192.168.2.2 netmask 255.255.255.0"
natd_enable="YES"
natd_interface="de0"
natd_flags=""
firewall_enable="YES"
firewall_type="open"
Проблема в следующем - после перезагрузки проверяю инет на тестовой машине (192.168.2.4) - не пинается даже шлюз. Стоит только послать пинг с шлюза на клиентсую машину - все работает. В чем может быть проблема и откуда начать копать? То же самое происходит и на BSD 8.0, конфиги один в один (только адреса разные).

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение rhtyltkm » 2010-03-22 10:10:41

а когда пинаешь шлюз до пинга со шлюза, в тспдампе ченить есть на выходе ?

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение newbye » 2010-03-22 21:14:53

rhtyltkm писал(а):а когда пинаешь шлюз до пинга со шлюза, в тспдампе ченить есть на выходе ?

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

/root/>/usr/bin/tcpdump
verbose output suppressed, use -v or -vv for full protocol decode listening on de0, link type EN10MB (Ethernet), capture size 96 bytes


0 packets capture
0 packets received by filter
0 packets dropped by kernel

Jungo
рядовой
Сообщения: 13
Зарегистрирован: 2008-08-24 18:01:24

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Jungo » 2010-03-24 22:26:02

Может кто подскажет пожалуйста примерно куда копать

[em0:90.90.90.90 - em1:91.91.91.91] машина с натом
в итоге хочу добится чтобы пакеты идущие на 90.90.90.90 попадали на 92.92.92.92

прямой путь пакета от источника к цели

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

[src x.x.x.x - dst 90.90.90.90] -> [em0 -> em1] -> [src 91.91.91.91 - dst 92.92.92.92] - обработка и ответ
обратный путь пакета от цели к источнику

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

[src 92.92.92.92 - dst 91.91.91.91] -> [em1 -> em0] -> [src 90.90.90.90 - dst x.x.x.x] - ответ получен источником
вижу решения только для замены src в нате, а как заменить и dst тоже?

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-03-25 10:21:48

был же пример:
http://www.lissyara.su/articles/freebsd ... #example_3

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

nat 1 config log if em1 reset same_ports deny_in redirect_addr 92.92.92.92 0.0.0.0
nat 2 config log if em0 same_ports reset deny_in

add 1040 nat 2 ip from any to any via em0

add 1050 deny ip from any to 192.168.0.0/16 in recv em1
add 1060 deny ip from 192.168.0.0/16 to any in recv em1
add 1070 deny ip from any to 172.16.0.0/12 in recv em1
add 1080 deny ip from 172.16.0.0/12 to any in recv em1
add 1090 deny ip from any to 10.0.0.0/8 in recv em1
add 10100 deny ip from 10.0.0.0/8 to any in recv em1
add 10110 deny ip from any to 169.254.0.0/16 in recv em1
add 10120 deny ip from 169.254.0.0/16 to any in recv em1

add 10130 nat 1 ip from any to any via em1

add 65534 deny all from any to any
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

sprite
рядовой
Сообщения: 27
Зарегистрирован: 2010-02-10 10:12:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение sprite » 2010-03-29 11:53:09

Добрый день.
Хотелось опять поднять проблему настройки ядра ОС при использовании ipfw nat.
Покрутилось у меня это дело почти месяц. Было замечено, при моем кол-ве подключений 1000-1200 человек
  • 1. Нагрузка на процессор возросла. Если с использованием natd в запасе оставались еще 10-15%, то теперь idle близка 0% при >900 подключениях и при этом появляются тормоза на mpd при создание новых подключений.
    load averages больше 4-ки стало, а с natd было 1-2.
    2. Качество соединения по сравнению с natd получше стало. Потери на пингах практически свелись к минимуму.
В общем впечатление положительное, но с нагрузкой надо что-то делать. Кто, что посоветует в этом деле? Что подкрутить можно с помощью sysctl?
Файрвол самый простой, причем с net.inet.ip.fw.one_pass=1

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

ipfw nat 1 config ip ххх.ххх.ххх.ххх log deny_in same_ports reset
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
00800 allow tcp from 10.0.0.0/8 to me dst-port 22
00810 deny tcp from any to me dst-port 22
00820 allow ip from 10.0.0.0/8 to me
00860 allow ip from 10.10.1.2 to 224.0.0.5
00870 allow ip from 10.10.1.2 to 224.0.0.6
00900 allow ip from me to any keep-state
01000 nat 1 ip from any to any via em1
03000 allow ip from table(1) to any
03010 allow ip from any to table(1)
65000 deny ip from any to any
65535 allow ip from any to any

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-03-29 12:28:19

убрать keep-state. такие правила CPU много жрут.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

sprite
рядовой
Сообщения: 27
Зарегистрирован: 2010-02-10 10:12:56

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение sprite » 2010-03-30 9:40:24

Спасибо убрал, стало чуть полегче, окончательное мнение будет через недельку, другую в нагрузке.
А вообще есть ли какие рекомендации (формулы) по настройке mpd , ipfw + nat и прочего хозяйства из расчета на 500 подключений, 1000 и т.д.

Была замеченная следующая странность, при выключении кеширующего named нагрузка на на проц system уменьшилась и idle соот-но увеличилась. Причем сам named в top особо не фигурировал, но иногда поднимался до уровня mpd. Заменил named на dnsmasq.

dyatlovm
рядовой
Сообщения: 34
Зарегистрирован: 2008-09-07 10:35:03
Откуда: г. Москва

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение dyatlovm » 2010-04-12 15:27:11

Добрый день. Имеется FreeBSD 8.0-STABLE. Настроен NAT по статье http://www.lissyara.su/articles/freebsd ... /ipfw_nat/.
Проблема в следующем. Необходимо установить параметр

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

net.inet.ip.fw.one_pass=0
В sysctl.conf прописал соответственно

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

net.inet.ip.fw.one_pass=0
.
Но при перезагрузке машины параметр one_pass опять выставляется в 1. На форуме находил подобные проблемы, но решений не видел.
Поясните где я туплю :st:

sergling
проходил мимо
Сообщения: 8
Зарегистрирован: 2010-05-14 11:12:21

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение sergling » 2010-05-14 11:19:56

Спасибо за интересную статью, следовал первому пункту и столкнулся с проблемой. Проброс портов не работает, т.е. нельзя сказать что совсем не работает, предполагаю что первая часть трафика идет, остальное стопорится. Т.е. элементарно не могу через внешний интерфейс подключиться по ssh. Как только убираю правило включения Nat - доступ работает. Пробовал ставить разрешительно правило перед натом, не работает, захожу обычным телнетом на 22 порт - вижу только строку приветствия ssh сервера.

ipfw show
00100 54 5668 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
01040 14882 7403623 allow log logamount 100 ip from any to any via em1
10120 5 264 allow tcp from any to me dst-port 22
10120 0 0 allow tcp from any to me dst-port 80
10130 14766 7402367 nat 1 ip from any to any via em0
65535 1 229 deny ip from any to any

т.е. все же порт открыт, но как-то криво.
Перед использование ядерного ната использовал natd, но в нем был глюк - через внеший интерфейс очень все тормознуто работало, как только вырубал Natd - все отлично. Посоветовали перейти на ядерный, перешел, но опять не все славобогу. Понимаю что оба метода используют одни библиотеки и видимо ноги у проблемы растут оттуда. Проблему с natd нагуглил еще у одного человека, но решение не нашел. Может подскажите в каком навправлении хотя бы работать. Стоит 7.2, настраивал в точности по первому примеру (почти).